日志對于網絡安全來說無疑是非常重要的,它記錄了系統每天發生的各種各樣的事,你可以通過它來檢查錯誤發生的原因,或者受到攻擊後攻擊者留下的痕迹。日志主要的功能有審計和監測,同時它也可以實時的監測系統狀态,監測入侵者。
日志子系統分類
在Linux系統中,有三個主要的日志子系統:
連接配接時間日志——由多個程式執行,把紀錄寫入到/var/log/Wtmp和/var/run/Utmp,Login等程式更新Wtmp和Utmp檔案,使系統管理者能夠跟蹤誰在何時登入到系統。
程序統計——由系統核心執行。當一個程序終止時,為每個程序往程序統計檔案(Pacct或Acct)中寫一個紀錄。程序統計的目的是為系統中的基本服務提供指令使用統計。
錯誤日志——由Syslogd(8)執行。各種系統守護程序、使用者程式和核心通過Syslog(3)向檔案/var/log/messages報告值得注意的事件。另外有許多UNIX程式建立日志。像HTTP和FTP這樣提供網絡服務的伺服器也保持詳細的日志。
常用的日志檔案如下:
Access-log:紀錄HTTP/WEB的傳輸。
Acct/pacct:紀錄使用者指令。
Aculog:紀錄MODEM的活動。
Btmp:紀錄失敗的紀錄。
Lastlog:紀錄最近幾次成功登入的事件和最後一次不成功的登入。
Messages:從Syslog中記錄資訊(有的連結到Syslog檔案)。
Sudolog:紀錄使用Sudo發出的指令。
Sulog:紀錄“su”的使用。
Utmp:紀錄目前登入的每個使用者。
Wtmp:一個使用者每次登入進入和退出時間的永久紀錄。
Xferlog:紀錄FTP會話。
日志記錄基本過程
Utmp、Wtmp和Lastlog日志檔案是多數重用UNIX日志子系統的關鍵——保持使用者登入進入和退出的紀錄。有關目前登入使用者的資訊記錄在檔案Utmp中;登入進入和退出紀錄在檔案Wtmp中;最後一次登入檔案可以用“Lastlog”指令察看。資料交換、關機和重起也記錄在Wtmp檔案中。所有的紀錄都包含時間戳。這些檔案(Lastlog通常不大)在具有大量使用者的系統中增長十分迅速。例如Wtmp檔案可以無限增長,除非定期截取。許多系統以一天或者一周為機關把Wtmp配置成循環使用。它通常由Cron運作的腳本來修改。這些腳本重新命名并循環使用Wtmp檔案。
小知識:通常Wtmp在第一天結束後命名為Wtmp.1;第二天後Wtmp.1變為Wtmp.2,直到Wtmp.7。
每次有一個使用者登入時,Login程式在檔案Lastlog中察看使用者的UID。如果找到了,則把使用者上次登入、退出時間和主機名寫到标準輸出中,然後Login程式在Lastlog中紀錄新的登入時間。在新的Lastlog紀錄寫入後,Utmp檔案打開并插入使用者的Utmp紀錄。該紀錄一直用到使用者登入退出時删除。Utmp檔案被各種指令檔案使用,包括Who、Users和Finger。下一步,Login程式打開檔案Wtmp附加使用者的Utmp紀錄。當使用者登入退出時,具有更新時間戳的同一Utmp紀錄附加到檔案中。Wtmp檔案被程式Last和AC使用。
檢視具體日志
Wtmp和Utmp檔案都是二進制檔案,它們不能被諸如Tail指令剪貼或合并(需要使用Cat指令),使用者需要使用Who、W、Users、Last和AC來使用這兩個檔案包含的資訊。
1.Who:該指令查詢Utmp檔案并報告目前登入的每個使用者。Who的預設輸出包括使用者名、終端類型、登入日期及遠端主機。例如輸入Who回車後顯示:
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檔案建立或删改以來的每一次登入。
2.W:該指令查詢Utmp檔案并顯示目前系統中每個使用者和它所運作的程序資訊。
3.Users:Users用單獨的一行顯示出目前登入的使用者,每個顯示的使用者名對應一個登入會話。如果一個使用者有不止一個登入會話,那他的使用者名将顯示相同的次數。例如輸入Users回車後顯示:
chyang lewis lewis ylou ynguo ynguo
4.Last:Last指令往回搜尋Wtmp,顯示從檔案第一次建立以來登入過的使用者。例如:
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顯示:
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)
5.AC:AC指令根據目前的/var/log/Wtmp檔案中的登入進入和退出來報告使用者連結的時間(小時),如果不使用标志,則報告總的時間。例如:ac,顯示:
total 5177.47
ac -d(回車)顯示每天的總的連結時間:
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
ac -p(回車)顯示每個使用者的總的連接配接時間:
ynguo 193.23
yucao 3.35
rong 133.40
hdai 10.52
6.Lastlog:Lastlog檔案在每次有使用者登入時被查詢。可以使用Lastlog指令來檢查某特定使用者上次登入的時間,并格式化輸出上次登入日志/var/log/Lastlog的内容。它根據UID排序顯示登入名、端口号(tty)和上次登入時間。例如:
rong 5 202.38.64.187 Fri
Aug 18 15:57:01 +0800 2000
dbb
**Never logged in**
xinchen
pb9511
小知識:如果一個使用者從未登入過,Lastlog顯示"**Never logged**。注意這個指令需要以ROOT權限運作。
另外,可在指令後加一些參數實作其它的功能,例如“last -u 102”将報告UID為102的使用者,“last -t 7”表示限制上一周的報告。
程序審查
UNIX可以跟蹤每個使用者運作的每條指令,如果想知道昨晚别人弄亂了哪些重要的檔案,程序統計子系統可以告訴你,這一點無疑對跟蹤入侵者很有幫助。與連接配接時間日志不同,程序統計子系統預設不激活,它必須啟動。在Linux系統中啟動程序統計使用Accton指令,必須用ROOT身份來運作。先使用Touch指令來建立Pacct檔案:
touch /var/log/pact
然後運作Accton:
Accton /var/log/pact
一旦Accton被激活,就可以使用Lastcomm指令監測系統中任何時候執行的指令。若要關閉統計,可以使用不帶任何參數的Accton指令。
小知識:Lastcomm指令報告以前執行的檔案。不帶參數時,Lastcomm指令顯示目前統計檔案生命周期内紀錄的所有指令的有關資訊。包括指令名、使用者、TTY、指令耗費的CPU時間和一個時間戳。如果系統有許多使用者,輸入則可能很長。
程序統計存在的一個問題是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秒
Syslog裝置
Syslog已被許多日志函數采納,它用在許多保護措施中。Syslog可以紀錄系統事件并寫到一個檔案或裝置中,或給使用者發送一個資訊。它能紀錄本地事件或通過網絡紀錄另一個主
機上的事件。
Syslog裝置依據兩個重要的檔案:/etc/Syslogd(守護程序)和/etc/Syslog.conf配置檔案,習慣上,多數Syslog資訊被寫到/var/adm或/var/log目錄下的資訊檔案(messages.*)中。一個典型的Syslog紀錄包括生成程式的名字和一個文本資訊。它還包括一個裝置和一個優先級範圍,每個Syslog消息被賦予下面的主要裝置之一:
LOG_AUTH——認證系統:Login、SU、Getty等。
LOG_CRON——Cron守護程序。
LOG_DAEMON——其它系統守護程序,如Routed。
LOG_FTP——檔案傳輸協定:Ftpd、Tftpd。
LOG_KERN——核心産生的消息。
LOG_MAIL——電子郵件系統。
LOG_SYSLOG——由Syslogd(8)産生的内部消息。
LOG_LOCAL0~LOG_LOCAL7——本地使用保留。
Syslog為每個事件賦予幾個不同的優先級:
LOG_EMERG——緊急情況。
LOG_ALERT——應該被立即改正的問題,如系統資料庫破壞。
LOG_CRIT——重要情況,如硬碟錯誤。
LOG_ERR——錯誤。
LOG_WARNING——警告資訊。
LOG_NOTICE——不是錯誤情況,但是可能需要處理。
LOG_INFO——情報資訊。
Syslog.conf檔案指明Syslogd程式紀錄日志的行為,該程式在啟動時查詢配置檔案。該檔案由不同程式或消息分類的單個條目組成,每個占一行。對每類消息提供一個選擇域和一個動作域。這些域由Tab隔開:選擇域指明消息的類型和優先級;動作域指明Syslogd接收到一個與選擇标準相比對的消息時所執行的動作。每個選項是由裝置和優先級組成。當指明一個優先級時,Syslogd将紀錄一個擁有相同或更高優先級的消息。是以如果指明“crit”,那所有标為Crit、Alert和Emerg的消息将被紀錄。每行的行動域指明當選擇域選擇了一個給定消息後應該把他發送到哪兒。例如,如果想把所有郵件消息紀錄到一個檔案中,如下:
#Log all the mail messages in one place mail.* /var/log/maillog
其它裝置也有自己的日志,UUCP和News裝置能産生許多外部消息。它把這些消息存到自己的日志(/var/log/spooler)中并把級别限為“err”或更高。例如:
# Save mail and news errors of level err and higher in aspecial file.uucp,news.crit /var/log/spooler
當一個緊急消息到來時,可能想讓所有的使用者都得到。也可能想讓自己的日志接收并儲存:
#Everybody gets emergency messages, plus log them on anther machine *.emerg * *.emerg @linuxaid.com.cn
Alert消息應該寫到ROOT和Tiger的個人賬号中:
#ROOT and Tiger get alert and higher messages *.alert ROOT,tiger
小提示:有時Syslogd将産生大量的消息,例如核心(Kern裝置)可能很冗長,使用者可能想把核心消息紀錄到/dev/console中。下面的例子表明核心日志紀錄被注釋掉了:
#Log all kernel messages to the console
#Logging much else clutters up the screen
#kern.* /dev/console
使用者可以在一行中指明所有的裝置。下面的例子把Info或更進階别的消息送到/var/log/messages,除了Mail以外。級别“none”禁止一個裝置:
#Log anything(except mail)of level info or higher
#Don't log private authentication messages!
*.info:mail.none;authpriv.none /var/log/messages
在有些情況下可以把日志送到列印機,這樣網絡入侵者怎麼修改日志都沒有用了。
小提示:有個小指令Logger為Syslog(3)系統日志檔案提供一個Shell指令接口,使使用者能建立日志檔案中的條目。例如:logger This is a test。它将産生一個如下的Syslog紀錄:
Aug 19 22:22:34 tiger: This is a test!
是以不要完全相信日志,因為攻擊者很容易修改它的。
通過上面對Linux的日志了解,我們就可以更好的實時監測系統狀态,監測和追蹤侵入者的行蹤了!