【轉載】linux入侵日誌分析

      日誌也是用戶應該注意的地方之一。不要低估日誌文件對網絡安全的重要做用,由於日誌文件可以詳細記錄系統天天發生的各類各樣的事件。用戶能夠經過日誌文件 檢查錯誤產生的緣由,或者在受到攻擊和黑客入侵時追蹤攻擊者的蹤影。日誌的兩個比較重要的做用是:審覈和監測。配置好的Linux的日誌很是強大。對於 Linux系統而言,全部的日誌文件都在/var/log下。默認狀況下,Linux的日誌文件已經足夠強大,但沒有記錄FTP的活動。用戶能夠經過修改 /etc/ftpacess讓系統記錄FTP的一切活動。

Linux日誌系統簡介: 日誌對於系統的安全來講很是重要,它記錄了系統天天發生的各類各樣的事情,用戶能夠經過它來檢查錯誤發生的緣由,或者尋找受到攻擊時攻擊者留下的痕跡。日 志主要的功能是審計和監測。它還能夠實時地監測系統狀態,監測和追蹤侵入者。Linux系統通常有3個主要的日誌子系統:鏈接時間日誌、進程統計日誌和錯誤日誌


  Linux日誌系統 

  日誌對於系統的安全來講很是重要,它記錄了系統天天發生的各類各樣的事情,用戶能夠經過它來檢查錯誤發生的緣由,或者尋找受到攻擊時攻擊者留下的痕跡。日誌主要的功能是審計和監測。它還能夠實時地監測系統狀態,監測和追蹤侵入者。 
  Linux系統通常有3個主要的日誌子系統:鏈接時間日誌、進程統計日誌和錯誤日誌。 

  鏈接時間日誌 
  鏈接時間日誌由多個程序執行,把記錄寫入到/var/log/wtmp和/var/run/utmp。login等程序更新wtmp和utmp文件,使系統管理員可以跟蹤誰在什麼時候登陸到系統。 
  進程統計日誌 
  進程統計日誌由系統內核執行。當一個進程終止時,爲每一個進程往進程統計文件(pacct或acct)中寫一個記錄。進程統計的目的是爲系統中的基本服務提供命令使用統計。 
  錯誤日誌 

  錯誤日誌由syslogd(8)執行。各類系統守護進程、用戶程序和內核經過syslog(3)向文件/var/log/messages報告值得注意的事件。另外還有許多UNIX類程序建立日誌,像HTTP和FTP這樣提供網絡服務的服務器也有詳細的日誌。 
    Redhat Linux 常見的日誌文件和經常使用命令:成功地管理任何系統的關鍵之一,是要知道系統中正在發生什麼事。Linux 中提供了異常日誌,而且日誌的細節是可配置的。Linux 日誌都以明文形式存儲,因此用戶不須要特殊的工具就能夠搜索和閱讀它們。還能夠編寫腳本,來掃描這些日誌,並基於它們的內容去自動執行某些功能。 Linux 日誌存儲在 /var/log 目錄中。這裏有幾個由系統維護的日誌文件,但其餘服務和程序也可能會把它們的日誌放在這裏。大多很多天志只有root帳戶才能夠讀,不過修改文件的訪問權限 就可讓其餘人可讀。

<ccid_nobr>成功地管理任何系統的關鍵之一,是要知道系統中正在 發生什麼事。Linux 中提供了異常日誌,而且日誌的細節是可配置的。Linux 日誌都以明文形式存儲,因此用戶不須要特殊的工具就能夠搜索和閱讀它們。還能夠編寫腳本,來掃描這些日誌,並基於它們的內容去自動執行某些功能。 Linux 日誌存儲在 /var/log 目錄中。這裏有幾個由系統維護的日誌文件,但其餘服務和程序也可能會把它們的日誌放在這裏。大多很多天志只有root帳戶才能夠讀,不過修改文件的訪問權限 就可讓其餘人可讀。

  RedHat Linux經常使用的日誌文件

  RedHat Linux常見的日誌文件詳述以下
  /var/log/boot.log
  該文件記錄了系統在引導過程當中發生的事件,就是Linux系統開機自檢過程顯示的信息。

  /var/log/cron
  該日誌文件記錄crontab守護進程crond所派生的子進程的動做,前面加上用戶、登陸時間和PID,以及派生出的進程的動做。CMD的一個動做 是cron派生出一個調度進程的常見狀況。REPLACE(替換)動做記錄用戶對它的cron文件的更新,該文件列出了要週期性執行的任務調度。 RELOAD動做在REPLACE動做後不久發生,這意味着cron注意到一個用戶的cron文件被更新而cron須要把它從新裝入內存。該文件可能會查 到一些反常的狀況。

  /var/log/maillog
  該日誌文件記錄了每個發送到系統或從系統發出的電子郵件的活動。它能夠用來查看用戶使用哪一個系統發送工具或把數據發送到哪一個系統。下面是該日誌文件的片斷:

html

<ccid_code>  
Sep 4 17:23:52 UNIX sendmail[1950]: g849Npp01950: from=root, size=25,
class=0, nrcpts=1,
msgid=<200209040923.g849Npp01950@redhat.pfcc.com.cn>,
relay=root@localhost
Sep 4 17:23:55 UNIX sendmail[1950]: g849Npp01950: to=lzy@fcceec.net,
ctladdr=root (0/0), delay=00:00:04, xdelay=00:00:03, mailer=esmtp, pri=30025,
relay=fcceec.net. [10.152.8.2], dsn=2.0.0, stat=Sent (Message queued)
/var/log/messages




  該日誌文件是許多進程日誌文件的彙總,從該文件能夠看出任何入侵企圖或成功的入侵。如如下幾行:

linux

<ccid_code>  
Sep 3 08:30:17 UNIX login[1275]: FAILED LOGIN 2 FROM (null) FOR suying,
Authentication failure
Sep 4 17:40:28 UNIX -- suying[2017]: LOGIN ON pts/1 BY suying FROM
fcceec.www.ec8.pfcc.com.cn
Sep 4 17:40:39 UNIX su(pam_unix)[2048]: session opened for user root by suying(uid=999)

    該文件的格式是每一行包含日期、主機名、程序名,後面是包含PID或內核標識的方括號、一個冒號和一個空格,最後是消息。該文件有一個不足,就是被記 錄的入侵企圖和成功的入侵事件,被淹沒在大量的正常進程的記錄中。但該文件能夠由/etc/syslog文件進行定製。由 /etc/syslog.conf配置文件決定系統如何寫入/var/messages。有關如何配置/etc/syslog.conf文件決定系統日誌 記錄的行爲,將在後面詳細敘述。

  /var/log/syslog
  默認RedHat Linux不生成該日誌文件,但能夠配置/etc/syslog.conf讓系統生成該日誌文件。它和/etc/log/messages日誌文件不一樣, 它只記錄警告信息,經常是系統出問題的信息,因此更應該關注該文件。要讓系統生成該日誌文件,在/etc/syslog.conf文件中加上: *.warning /var/log/syslog   該日誌文件能記錄當用戶登陸時login記錄下的錯誤口令、Sendmail的問題、su命令執行失敗等信息。下面是一條記錄:

shell

<ccid_code>  
Sep 6 16:47:52 UNIX login(pam_unix)[2384]: check pass; user unknown
/var/log/secure
該日誌文件記錄與安全相關的信息。該日誌文件的部份內容以下:
Sep 4 16:05:09 UNIX xinetd[711]: START: ftp pid=1815 from=127.0.0.1
Sep 4 16:05:09 UNIX xinetd[1815]: USERID: ftp OTHER :root
Sep 4 16:07:24 UNIX xinetd[711]: EXIT: ftp pid=1815 duration=135(sec)
Sep 4 16:10:05 UNIX xinetd[711]: START: ftp pid=1846 from=127.0.0.1
Sep 4 16:10:05 UNIX xinetd[1846]: USERID: ftp OTHER :root
Sep 4 16:16:26 UNIX xinetd[711]: EXIT: ftp pid=1846 duration=381(sec)
Sep 4 17:40:20 UNIX xinetd[711]: START: telnet pid=2016 from=10.152.8.2
/var/log/lastlog



  該日誌文件記錄最近成功登陸的事件和最後一次不成功的登陸事件,由login生成。在每次用戶登陸時被查詢,該文件是二進制文件,需 要使用lastlog命令查看,根據UID排序顯示登陸名、端口號和上次登陸時間。若是某用戶歷來沒有登陸過,就顯示爲"**Never logged in**"。該命令只能以root權限執行。簡單地輸入lastlog命令後就會看到相似以下的信息: 

數據庫

<ccid_code>

Username Port From Latest
root tty2 Tue Sep 3 08:32:27 +0800 2002
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
mail **Never logged in**
news **Never logged in**
uucp **Never logged in**
operator **Never logged in**
games **Never logged in**
gopher **Never logged in**
ftp ftp UNIX Tue Sep 3 14:49:04 +0800 2002
nobody **Never logged in**
nscd **Never logged in**
mailnull **Never logged in**
ident **Never logged in**
rpc **Never logged in**
rpcuser **Never logged in**
xfs **Never logged in**
gdm **Never logged in**
postgres **Never logged in**
apache **Never logged in**
lzy tty2 Mon Jul 15 08:50:37 +0800 2002
suying tty2 Tue Sep 3 08:31:17 +0800 2002



  系統帳戶諸如bin、daemon、adm、uucp、mail等決不該該登陸,若是發現這些帳戶已經登陸,就說明系統可能已經被入侵了。若發現記錄的時間不是用戶上次登陸的時間,則說明該用戶的帳戶已經泄密了。 

  /var/log/wtmp 

  該日誌文件永久記錄每一個用戶登陸、註銷及系統的啓動、停機的事件。所以隨着系統正常運行時間的增長,該文件的大小也會愈來愈大,增長 的速度取決於系統用戶登陸的次數。該日誌文件能夠用來查看用戶的登陸記錄,last命令就經過訪問這個文件得到這些信息,並以反序從後向前顯示用戶的登陸 記錄,last也能根據用戶、終端 tty或時間顯示相應的記錄。 

  命令last有兩個可選參數: 
  last -u 用戶名 顯示用戶上次登陸的狀況。 
  last -t 天數 顯示指定天數以前的用戶登陸狀況。 

  /var/run/utmp 
  該日誌文件記錄有關當前登陸的每一個用戶的信息。所以這個文件會隨着用戶登陸和註銷系統而不斷變化,它只保留當時聯機的用戶記錄,不會 爲用戶保留永久的記錄。系統中須要查詢當前用戶狀態的程序,如 who、w、users、finger等就須要訪問這個文件。該日誌文件並不能包括全部精確的信息,由於某些突發錯誤會終止用戶登陸會話,而系統沒有及時 更新 utmp記錄,所以該日誌文件的記錄不是百分之百值得信賴的。 

  以上說起的3個文件(/var/log/wtmp、/var/run/utmp、/var/log/lastlog)是日誌子系統 的關鍵文件,都記錄了用戶登陸的狀況。這些文件的全部記錄都包含了時間戳。這些文件是按二進制保存的,故不能用less、cat之類的命令直接查看這些文 件,而是須要使用相關命令經過這些文件而查看。其中,utmp和wtmp文件的數據結構是同樣的,而lastlog文件則使用另外的數據結構,關於它們的 具體的數據結構可使用man命令查詢。 

  每次有一個用戶登陸時,login程序在文件lastlog中查看用戶的UID。若是存在,則把用戶上次登陸、註銷時間和主機名寫 到標準輸出中,而後login程序在lastlog中記錄新的登陸時間,打開utmp文件並插入用戶的utmp記錄。該記錄一直用到用戶登陸退出時刪除。 utmp文件被各類命令使用,包括who、w、users和finger。 

  下一步,login程序打開文件wtmp附加用戶的utmp記錄。當用戶登陸退出時,具備更新時間戳的同一utmp記錄附加到文件中。wtmp文件被程序last使用。 
  /var/log/xferlog 

  該日誌文件記錄FTP會話,能夠顯示出用戶向FTP服務器或從服務器拷貝了什麼文件。該文件會顯示用戶拷貝到服務器上的用來入侵服務器的惡意程序,以及該用戶拷貝了哪些文件供他使用。 
  該文件的格式爲:第一個域是日期和時間,第二個域是下載文件所花費的秒數、遠程系統名稱、文件大小、本地路徑名、傳輸類型(a: ASCII,b:二進制)、與壓縮相關的標誌或tar,或"_"(若是沒有壓縮的話)、傳輸方向(相對於服務器而言:i表明進,o表明出)、訪問模式 (a:匿名,g:輸入口令,r:真實用戶)、用戶名、服務名(一般是ftp)、認證方法(l:RFC931,或0),認證用戶的ID或"*"。下面是該文 件的一條記錄: 

apache

<ccid_code> 
Wed Sep 4 08:14:03 2002 1 UNIX 275531
/var/ftp/lib/libnss_files-2.2.2.so b _ o a -root@UNIX ftp 0 * c
/var/log/kernlog

   RedHat Linux默認沒有記錄該日誌文件。要啓用該日誌文件,必須在/etc/syslog.conf文件中添加一行:kern.* /var/log/kernlog 。這樣就啓用了向/var/log/kernlog文件中記錄全部內核消息的功能。該文件記錄了系統啓動時加載設備或使用設備的狀況。通常是正常的操做, 但若是記錄了沒有受權的用戶進行的這些操做,就要注意,由於有可能這就是惡意用戶的行爲。下面是該文件的部份內容: 

小程序

<ccid_code>  
Sep 5 09:38:42 UNIX kernel: NET4: Linux TCP/IP 1.0 for NET4.0
Sep 5 09:38:42 UNIX kernel: IP Protocols: ICMP, UDP, TCP, IGMP
Sep 5 09:38:42 UNIX kernel: IP: routing cache hash table of 512 buckets, 4Kbytes
Sep 5 09:38:43 UNIX kernel: TCP: Hash tables configured (established 4096 bind 4096)
Sep 5 09:38:43 UNIX kernel: Linux IP multicast router 0.06 plus PIM-SM
Sep 5 09:38:43 UNIX kernel: NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
Sep 5 09:38:44 UNIX kernel: EXT2-fs warning: checktime reached, running e2fsck is recommended
Sep 5 09:38:44 UNIX kernel: VFS: Mounted root (ext2 filesystem).
Sep 5 09:38:44 UNIX kernel: SCSI subsystem driver Revision: 1.00
/var/log/Xfree86.x.log


  該日誌文件記錄了X-Window啓動的狀況。另外,除了/var/log/外,惡意用戶也可能在別的地方留下痕跡,應該注意如下幾 個地方:root和其餘帳戶的shell歷史文件;用戶的各類郵箱,如.sent、mbox,以及存放在/var/spool/mail/ 和 /var/spool/mqueue中的郵箱;臨時文件/tmp、/usr/tmp、/var/tmp;隱藏的目錄;其餘惡意用戶建立的文件,一般是以 "."開頭的具備隱藏屬性的文件等。 

  具體命令 

  wtmp和utmp文件都是二進制文件,它們不能被諸如tail之類的命令剪貼或合併(使用cat命令)。用戶須要使用who、w、users、last和ac等命令來使用這兩個文件包含的信息。 

  who命令 

  who命令查詢utmp文件並報告當前登陸的每一個用戶。who的默認輸出包括用戶名、終端類型、登陸日期及遠程主機。例如,鍵入who命令,而後按回車鍵,將顯示以下內容: 


安全

<ccid_code>
chyang pts/0 Aug 18 15:06
ynguo pts/2 Aug 18 15:32
ynguo pts/3 Aug 18 13:55
lewis pts/4 Aug 18 13:35
ynguo pts/7 Aug 18 14:12
ylou pts/8 Aug 18 14:15


  若是指明瞭wtmp文件名,則who命令查詢全部之前的記錄。命令who /var/log/wtmp將報告自從wtmp文件建立或刪改以來的每一次登陸。
  w命令 
  w命令查詢utmp文件並顯示當前系統中每一個用戶和它所運行的進程信息。例如,鍵入w命令,而後按回車鍵,將顯示以下內容:




bash

<ccid_code>  
3:36pm up 1 day, 22:34, 6 users, load average: 0.23, 0.29, 0.27
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
chyang pts/0 202.38.68.242 3:06pm 2:04 0.08s 0.04s -bash
ynguo pts/2 202.38.79.47 3:32pm 0.00s 0.14s 0.05 w
lewis pts/3 202.38.64.233 1:55pm 30:39 0.27s 0.22s -bash
lewis pts/4 202.38.64.233 1:35pm 6.00s 4.03s 0.01s sh /home/users/
ynguo pts/7 simba.nic.ustc.e 2:12pm 0.00s 0.47s 0.24s telnet mail
ylou pts/8 202.38.64.235 2:15pm 1:09m 0.10s 0.04s -bash


  users命令 

  users命令用單獨的一行打印出當前登陸的用戶,每一個顯示的用戶名對應一個登陸會話。若是一個用戶有不止一個登陸會話,那他的用戶名將顯示相同的次數。例如,鍵入users命令,而後按回車鍵,將顯示以下內容: 
  chyang lewis lewis ylou ynguo ynguo 
  last命令 
  last命令往回搜索wtmp來顯示自從文件第一次建立以來登陸過的用戶。例如: 

服務器

<ccid_code>  
chyang pts/9 202.38.68.242 Tue Aug 1 08:34 - 11:23 (02:49)
cfan pts/6 202.38.64.224 Tue Aug 1 08:33 - 08:48 (00:14)
chyang pts/4 202.38.68.242 Tue Aug 1 08:32 - 12:13 (03:40)
lewis pts/3 202.38.64.233 Tue Aug 1 08:06 - 11:09 (03:03)
lewis pts/2 202.38.64.233 Tue Aug 1 07:56 - 11:09 (03:12)


  若是指明瞭用戶,那麼last只報告該用戶的近期活動,例如,鍵入last ynguo命令,而後按回車鍵,將顯示以下內容: 

網絡

<ccid_code>  
ynguo pts/4 simba.nic.ustc.e Fri Aug 4 16:50 - 08:20 (15:30)
ynguo pts/4 simba.nic.ustc.e Thu Aug 3 23:55 - 04:40 (04:44)
ynguo pts/11 simba.nic.ustc.e Thu Aug 3 20:45 - 22:02 (01:16)
ynguo pts/0 simba.nic.ustc.e Thu Aug 3 03:17 - 05:42 (02:25)
ynguo pts/0 simba.nic.ustc.e Wed Aug 2 01:04 - 03:16 1+02:12)
ynguo pts/0 simba.nic.ustc.e Wed Aug 2 00:43 - 00:54 (00:11)
ynguo pts/9 simba.nic.ustc.e Thu Aug 1 20:30 - 21:26 (00:55)




  ac命令 

  ac命令根據當前的/var/log/wtmp文件中的登陸進入和退出來報告用戶鏈接的時間(小時),若是不使用標誌,則報告總的時間。例如,鍵入ac命令,而後按回車鍵,將顯示以下內容: 

  total 5177.47 

鍵入ac -d命令,而後按回車鍵,將顯示天天的總的鏈接時間: 

<ccid_nobr>

<ccid_code>  
Aug 12 total 261.87
Aug 13 total 351.39
Aug 14 total 396.09
Aug 15 total 462.63
Aug 16 total 270.45
Aug 17 total 104.29
Today total 179.02




  鍵入ac -p命令,而後按回車鍵,將顯示每一個用戶的總的鏈接時間: 

<ccid_nobr>

<ccid_code>  
ynguo 193.23
yucao 3.35
rong 133.40
hdai 10.52
zjzhu 52.87
zqzhou 13.14
liangliu 24.34
total 5178.24




  lastlog命令 

  lastlog文件在每次有用戶登陸時被查詢。可使用lastlog命令檢查某特定用戶上次登陸的時間,並格式化輸出上次登陸日誌 /var/log/lastlog的內容。它根據UID排序顯示登陸名、端口號(tty)和上次登陸時間。若是一個用戶從未登陸過,lastlog顯示 **Never logged**。注意須要以root身份運行該命令,例如: 

<ccid_nobr>

<ccid_code>  
rong 5 202.38.64.187 Fri Aug 18 15:57:01 +0800 2000
dbb **Never logged in**
xinchen **Never logged in**
pb9511 **Never logged in**
xchen 0 202.38.64.190 Sun Aug 13 10:01:22 +0800 2000




另外,可加一些參數,例如,"last -u 102"命令將報告UID爲102的用戶;"last -t 7"命令表示限制爲上一週的報告。 

  進程統計 

  UNIX能夠跟蹤每一個用戶運行的每條命令,若是想知道昨晚弄亂了哪些重要的文件,進程統計子系統能夠告訴你。它還對跟蹤一個侵入者有 幫助。與鏈接時間日誌不一樣,進程統計子系統默認不激活,它必須啓動。在Linux系統中啓動進程統計使用accton命令,必須用root身份來運行。 accton命令的形式爲:accton file,file必須事先存在。先使用touch命令建立pacct文件:touch /var/log/pacct,而後運行accton:accton /var/log/pacct。一旦accton被激活,就可使用lastcomm命令監測系統中任什麼時候候執行的命令。若要關閉統計,可使用不帶任何 參數的accton命令。 

  lastcomm命令報告之前執行的文件。不帶參數時,lastcomm命令顯示當前統計文件生命週期內記錄的全部命令的有關信息。包括命令名、用戶、tty、命令花費的CPU時間和一個時間戳。若是系統有許多用戶,輸入則可能很長。看下面的例子: 



<ccid_nobr>

<ccid_code>  
crond F root ?? 0.00 secs Sun Aug 20 00:16
promisc_check.s S root ?? 0.04 secs Sun Aug 20 00:16
promisc_check root ?? 0.01 secs Sun Aug 20 00:16
grep root ?? 0.02 secs Sun Aug 20 00:16
tail root ?? 0.01 secs Sun Aug 20 00:16
sh root ?? 0.01 secs Sun Aug 20 00:15
ping S root ?? 0.01 secs Sun Aug 20 00:15
ping6.pl F root ?? 0.01 secs Sun Aug 20 00:15
sh root ?? 0.01 secs Sun Aug 20 00:15
ping S root ?? 0.02 secs Sun Aug 20 00:15
ping6.pl F root ?? 0.02 secs Sun Aug 20 00:15
sh root ?? 0.02 secs Sun Aug 20 00:15
ping S root ?? 0.00 secs Sun Aug 20 00:15
ping6.pl F root ?? 0.01 secs Sun Aug 20 00:15
sh root ?? 0.01 secs Sun Aug 20 00:15
ping S root ?? 0.01 secs Sun Aug 20 00:15
sh root ?? 0.02 secs Sun Aug 20 00:15
ping S root ?? 1.34 secs Sun Aug 20 00:15
locate root ttyp0 1.34 secs Sun Aug 20 00:15
accton S root ttyp0 0.00 secs Sun Aug 20 00:15




  進程統計的一個問題是pacct文件可能增加得十分迅速。這時須要交互式地或通過cron機制運行sa命令來保證日誌數據在系統控制 內。sa命令報告、清理並維護進程統計文件。它能把/var/log/pacct中的信息壓縮到摘要文件/var/log/savacct和 /var/log/usracct中。這些摘要包含按命令名和用戶名分類的系通通計數據。在默認狀況下sa先讀它們,而後讀pacct文件,使報告能包含 全部的可用信息。sa的輸出有下面一些標記項。


avio:每次執行的平均I/O操做次數。 

cp:用戶和系統時間總和,以分鐘計。 

cpu:和cp同樣。 

k:內核使用的平均CPU時間,以1k爲單位。 

k*sec:CPU存儲完整性,以1k-core秒爲單位。 

re:實時時間,以分鐘計。 

s:系統時間,以分鐘計。 

tio:I/O操做的總數。 

u:用戶時間,以分鐘計。 

例如:


<ccid_nobr>

<ccid_code>  
842 173.26re 4.30cp 0avio 358k
2 10.98re 4.06cp 0avio 299k find
9 24.80re 0.05cp 0avio 291k ***other
105 30.44re 0.03cp 0avio 302k ping
104 30.55re 0.03cp 0avio 394k sh
162 0.11re 0.03cp 0avio 413k security.sh*
154 0.03re 0.02cp 0avio 273k ls
56 31.61re 0.02cp 0avio 823k ping6.pl*
2 3.23re 0.02cp 0avio 822k ping6.pl
35 0.02re 0.01cp 0avio 257k md5sum
97 0.02re 0.01cp 0avio 263k initlog
12 0.19re 0.01cp 0avio 399k promisc_check.s
15 0.09re 0.00cp 0avio 288k grep
11 0.08re 0.00cp 0avio 332k awk




用戶還能夠根據用戶而不是命令來提供一個摘要報告。例如,鍵入命令"sa -m",將顯示以下內容: 

<ccid_nobr>

<ccid_code>  
885 173.28re 4.31cp 0avk
root 879 173.23re 4.31cp 0avk
alias 3 0.05re 0.00cp 0avk
qmailp 3 0.01re 0.00cp 0avk








  syslog設備 

  syslog已被許多日誌函數採納,它用在許多保護措施中。任何程序均可以經過syslog 記錄事件。syslog能夠記錄系統事件,能夠寫到一個文件或設備中,或給用戶發送一個信息。它能記錄本地事件或經過網絡記錄另外一個主機上的事件。 

  syslog設備依據兩個重要的文件:/etc/syslogd(守護進程)和/etc/syslog.conf配置文件。習慣上, 多數syslog信息被寫到/var/adm或/var/log目錄下的信息文件中(messages.*)。一個典型的syslog記錄包括生成程序的 名字和一個文本信息。它還包括一個設備和一個優先級範圍(但不在日誌中出現)。 

每一個syslog消息被賦予下面的主要設備之一: 

<ccid_nobr>

<ccid_code>  
LOG_AUTH:認證系統login、su、getty等。
LOG_AUTHPRIV:同LOG_AUTH,但只登陸到所選擇的單個用戶可讀的文件中。
LOG_CRON:cron守護進程。
LOG_DAEMON:其餘系統守護進程,如routed。
LOG_FTP:文件傳輸協議ftpd、tftpd。
LOG_KERN:內核產生的消息。
LOG_LPR:系統打印機緩衝池lpr、lpd。
LOG_MAIL:電子郵件系統。
LOG_NEWS:網絡新聞系統。
LOG_SYSLOG:由syslogd(8)產生的內部消息。
LOG_USER:隨機用戶進程產生的消息。
LOG_UUCP:UUCP子系統。
LOG_LOCAL0~LOG_LOCAL7:爲本地使用保留。
syslog爲每一個事件賦予幾個不一樣的優先級:
LOG_EMERG:緊急狀況。
LOG_ALERT:應該被當即改正的問題,如系統數據庫被破壞。
LOG_CRIT:重要狀況,如硬盤錯誤。
LOG_ERR:錯誤。
LOG_WARNING:警告信息。
LOG_NOTICE:不是錯誤狀況,可是可能須要處理。
LOG_INFO:情報信息。
LOG_DEBUG:包含情報的信息,一般只在調試一個程序時使用。




  syslog.conf文件指明syslogd程序記錄日誌的行爲,該程序在啓動時查詢配置文件。該文件由不一樣程序或消息分類的單個 條目組成,每一個佔一行。對每類消息提供一個選擇域和一個動做域。這些域由tab符隔開:選擇域指明消息的類型和優先級;動做域指明syslogd接收到一 個與選擇標準相匹配的消息時所執行的動做。每一個選項是由設備和優先級組成的。當指明一個優先級時,syslogd將記錄一個擁有相同或更高優先級的消息。 因此若是指明"crit",那全部標爲crit、alert和emerg的消息將被記錄。每行的行動域指明當選擇域選擇了一個給定消息後應該把它發送到哪 兒。例如,若是想把全部郵件消息記錄到一個文件中,以下所示: 



<ccid_nobr>

<ccid_code> 
#Log all the mail messages in one place

mail.* /var/log/maillog






  其餘設備也有本身的日誌。UUCP和news設備能產生許多外部消息。它把這些消息存到本身的日誌(/var/log/spooler)中並把級別限爲"err"或更高。例如: 


<ccid_nobr>

<ccid_code> 
# Save mail and news errors of level err and higher in aspecial file.
uucp,news.crit /var/log/spooler




  當一個緊急消息到來時,可能想讓全部的用戶都獲得,也可能想讓本身的日誌接收並保存:




<ccid_nobr>

<ccid_code> 
#Everybody gets emergency messages, plus log them on anther machine
*.emerg *
*.emerg @linuxaid.com.cn






  alert消息應該寫到root和tiger的我的帳號中: 

<ccid_nobr>

<ccid_code> 
#Root and Tiger get alert and higher messages
*.alert root,tiger




  有時syslogd將產生大量的消息。例如,內核("kernel"設備)可能很冗長。用戶可能想把內核消息記錄到/dev/console中。下面的例子代表內核日誌記錄被註釋掉了: 

<ccid_nobr>

<ccid_code> 
#Log all kernel messages to the console
#Logging much else clutters up the screen
#kern.* /dev/console




  用戶能夠在一行中指明全部的設備。下面的例子把info或更高級別的消息送到/var/log/messages,除了mail之外。級別"none"禁止一個設備: 

<ccid_nobr>

<ccid_code> 
#Log anything(except mail)of level info or higher
#Don't log private authentication messages!
*.info:mail.none;authpriv.none /var/log/messages




  在有些狀況下,能夠把日誌送到打印機,這樣網絡入侵者怎麼修改日誌就都沒有用了。一般要普遍記錄日誌。syslog設備是一個攻擊者的顯著目標。一個爲其餘主機維護日誌的系統對於防範服務器攻擊特別脆弱,所以要特別注意。 

有個小命令logger爲syslog(3)系統日誌文件提供一個shell命令接口,使用戶能建立日誌文件中的條目。


  用法:logger  

  例如:logger This is a test! 

  它將產生一個以下的syslog記錄:Aug 19 22:22:34 tiger: This is a test! 

  注意,不要徹底相信日誌,由於攻擊者很容易修改它的。 

  程序日誌與其餘 

  許多程序經過維護日誌來反映系統的安全狀態。su命令容許用戶得到另外一個用戶的權限,因此它的安全很重要,它的日誌文件爲 sulog。一樣的還有sudolog。另外,像Apache有兩個日誌:access_log和error_log。還有一些經常使用到的其餘日誌工具,我 們就不一一闡述了,有興趣的讀者能夠參考下邊網址的內容。 

Chklastlog: 

ftp://coast.cs.purdue.edu/pub/tools/unix/chklastlog/ 

chkwtmp: 

ftp://coast.cs.purdue.edu/pub/tools/unix/chkwtmp/ 

dump_lastlog: 

ftp://coast.cs.purdue.edu/pub/tools/unix/dump_lastlog.Z 

spar: 

ftp://coast.cs.purdue.edu/pub/tools/unix/TAMU/ 

Swatch: 

http://www.lomar.org/komar/alek/pres/swatch/cover.html 

Zap: 

ftp://caost.cs.purdue.edu/pub/tools/unix/zap.tar.gz 

日誌分類方法: 

http://csrc.nist.gov/nissc/1998/proceedings/paperD1.pdf

<ccid_nobr>


配置Linux日誌文件<ccid_nobr>: 日誌也應該是用戶注意的地方。不要低估日誌文件對網絡安全的重要做用,由於日誌文件可以詳細記錄系統天天發生的各類各樣的事件,用戶能夠經過日誌文件檢查 錯誤產生的緣由,或者在受到攻擊、被入侵時追蹤攻擊者的蹤影。日誌的兩個比較重要的做用是審覈和監測。配置好的Linux的日誌很是強大。對於Linux 系統而言,全部的日誌文件在/var/log下。默認狀況下,Linux的日誌文件已經足夠強大,但沒有記錄FTP的活動。用戶能夠經過修改 /etc/ftpacess讓系統記錄FTP的一切活動。

/etc/syslog.conf的格式 

  Linux系統的日誌文件是能夠配置的,在前面的章節中已經介紹瞭如何定製Apache、wu-ftpd、Sendmail的日誌文 件。Linux系統的日誌文件是由/etc/syslog.conf決定的,用戶有必要花時間仔細配置一下/etc/syslog.conf。下面是 /etc/syslog.conf的範例: 

<ccid_nobr>

<ccid_code># Log all kernel messages to the kernlog.
# Logging much else clutters up the screen.
kern.* /var/log/kernlog

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;news.none;authpriv.none;cron.none
/var/log/messages
*.warning /var/log/syslog
# The authpriv file has restricted access.
authpriv.* /var/log/secure

# Log all the mail messages in one place.
mail.* /var/log/maillog

# Log cron stuff
cron.* /var/log/cron

# Everybody gets emergency messages, plus log them on another
# machine.
*.emerg
# Save mail and news errors of level err and higher in a
# special file.
uucp,news.crit /var/log/spooler

# Save boot messages also to boot.log
local7.* /var/log/boot.log

# INN
news.=crit /var/log/news/news.crit
news.=err /var/log/news/news.err
news.notice /var/log/news/news.notice



  能夠看出,該配置文件的每一行的第一個字段列出要被記錄的信息種類,第二個字段則列出被記錄的位置。第一個字段使用下面的格式:facility.level[;facility.level…] 

  此處的faciity是產生信息的系統應用程序或工具,level則是這個信息的重要程度。level的重要程度由低到高依次是: debug(調試消息)、info(通常消息)、notice(值得注意的消息)、warning(警告)、err(通常性錯誤)、crit(嚴重錯 誤)、alert(或emerg,緊急狀況)。facility包含有:auth(認證系統,如login或su,即詢問用戶名和口令)、cron(系統 執行定時任務時發出的信息)、daemon(某些系統的守護程序的syslog,如由in.ftpd產生的log)、kern(內核的信息)、lpr(打 印機的信息)、mail(處理郵件的守護進程發出的信息)、mark(定時發送消息的時標程序)、news(新聞組的守護進程的信息)、user(本地用 戶的應用程序的信息)、uucp(uucp子系統的信息)和「*」(表示全部可能的facility)。 

  將日誌文件記錄到遠程主機 

  若是有另外一個Linux或UNIX系統,那麼能夠配置日誌文件,讓其把消息發到另一個系統並記錄下來。這也是爲何上面的全部日誌 文件都記錄了主機名的緣由。要實現這個功能,在該配置文件中,指定一個記錄動做,後面接一個由「@」開頭的遠程系統的主機名,以下例:*.warn; authpriv.notice;auth.notice @bright.hacker.com.cn 

  同時,還要將接受消息的目的系統設置爲容許這種操做。此例主機bright.hacker.com.cn的syslogd守護進程 要用-r參數啓動。若是不使用-r參數,則目標主機的syslogd將丟棄這個消息以免DoS攻擊使硬盤塞滿虛假消息。而且確保目標主機的 /etc/service文件必須設置syslog服務所使用的UDP端口514(這也是RedHat Linux默認的設置)。若是syslogd守護進程用了-r和-h參數,那麼,參數-h將容許轉發消息。也就是說,若是系統B的syslogd用了-h 參數,這樣,當系統A把消息轉發到系統B後,系統B就把來自系統A和它本身的消息轉發到系統C。 

  將警告信息發送到控制檯 

  syslogd能夠將任何從內核發出的重要程度爲emerg或alert的信息發送到控制檯。控制檯是指虛擬控制檯或啓動時加-C參 數的xterm。要實現這一功能,在/etc/syslog.conf文件中加上下面一行:kern.emerg /dev/console 

  這樣,當系統內核發生錯誤而發出消息時,用戶可以立刻知道而且進行處理。若是用了「*」,就是一旦內核發生錯誤,就將消息發送給所 有在線用戶,但只有這個用戶正在登陸的時候才能看到。修改了/etc/syslog.conf文件後,必須從新啓動syslogd守護進程以使配置更改生 效,請執行下面的命令:#/etc/rc.d/init.d/syslog restart

<ccid_nobr>


管理Linux日誌文件工具:logrotate簡介<ccid_nobr>: 若是服務器有大量的用戶的話,這些日誌文件的大小會很快地增長,在服務器硬盤不是很是充足的狀況下,必須採起措施防止日誌文件將硬盤撐爆。現代的 Linux版本都有一個小程序,名爲logrotate,用來幫助用戶管理日誌文件,它以本身的守護進程工做。logrotate週期性地旋轉日誌文件, 能夠週期性地把每一個日誌文件重命名成一個備份名字,而後讓它的守護進程開始使用一個日誌文件的新的拷貝。這就是爲何在/var/log/下看到許多諸如 maillog、maillog.一、maillog.二、boot.log.一、boot.log.2之類的文件名。它由一個配置文件驅動,該文件是 /etc/logroatate.conf

下面是它的一個範例: 

<ccid_nobr>

<ccid_code># see "man logrotate" for details
# rotate log files weekly
weekly
#以7天爲一個週期
# keep 4 weeks worth of backlogs
rotate 4
#每隔4周備份日誌文件
# send errors to root
errors root
#發生錯誤向root報告
# create new (empty) log files after rotating old ones
create
#轉完舊的日誌文件就建立新的日誌文件
# uncomment this if you want your log files compressed
#compress
#指定是否壓縮日誌文件
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own lastlog or wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}

# system-specific logs may be configured here


<ccid_nobr>

Linux下經常使用日誌分析工具:Logcheck簡介<ccid_nobr>: 對於擁有大量帳戶、系統繁忙的Linux系統而言,其日誌文件是極其龐大的,不少沒有用的信息會將值得注意的信息淹沒,給用戶分析日誌帶來了很大的不便。 如今有一些專門用於分析日誌的工具,如Logcheck和Friends。Logcheck用來分析龐大的日誌文件,過濾出有潛在安全風險或其餘不正常情 況的日誌項目,而後以電子郵件的形式通知指定的用戶。它是由Psionic開發的(T113)

能夠到http://www.psionic.com/tools/logcheck-1.1.1.tar.gz下載。或者去http://www.psionic.com/abacus /logcheck/看看是否有新的版本。 

  該程序的安裝至關方便。解壓後運行make文件,按照它的提示選擇操做系統的類型之後就能編譯完成了。配置文件和運行腳本默認安裝在/usr/local/etc/下。 

  logcheck.sh 

  這是Logcheck的shell腳本,用於分析本次的日誌文件並彙報結果。 

  logcheck.hacking 

  這個文件設置在日誌文件中過濾的關鍵字,該關鍵字提示了潛在安全風險的信息。用戶能夠定製本身的日誌文件,在logcheck.hacking文件中增長或刪除關鍵字。 

  logcheck.violations 

  這個文件設置在日誌文件分析過濾系統運行時出現異常狀況的關鍵字。 

  logcheck.violations.ignore 

  若是系統出現異常狀況,但含有此文件中的關鍵字,則視爲正常,不寫入Logcheck的分析報告文件中。 

  logcheck.ignore 

  若是系統日誌文件記錄了可能遭遇攻擊的消息,但含有logcheck.ignore文件中的關鍵字,則Logcheck視爲正常,在分析報告文件中不包含這些消息。 

  安裝完Logcheck後,還要修改logcheck.sh文件中的參數以符合用戶的要求。有兩點值得注意。下列命令: 

<ccid_nobr>

<ccid_code># Person to send log activity to.
SYSADMIN=root



  Logcheck默認將報告發給root。若是要發給指定的電子郵箱,改動這裏就能夠了。若是但願將報告發給多個用戶,能夠定義mail的別名。要檢查的日誌文件的設置: 

<ccid_nobr>

<ccid_code># Linux
$LOGTAIL /var/log/syslog > $TMPDIR/check.$$
$LOGTAIL /var/log/messages >> $TMPDIR/check.$$

用戶能夠根據須要加上要檢查的日誌文件,例如:
$LOGTAIL /var/log/auth.log >> $TMPDIR/check.$$
$LOGTAIL /var/log/deamon.log >> $TMPDIR/check.$$
$LOGTAIL /var/log/mail.log >> $TMPDIR/check.$$

  最後用cron安排服務器自動定時重複執行logcheck.sh腳本文件。

相關文章
相關標籤/搜索