UNIX入侵檢測
1.概述 入侵檢測(Intrusion Detection),顧名思義,便是對入侵行為的發覺。它通過 對計算機網絡或計算機系統中的若干關鍵點收集信息并對其進行分析,從中發現網絡或 系統中是否有違反安全策略的行為和被攻擊的跡象。進行入侵檢測的軟件與硬件的組合 便是入侵檢測系統(Intrusion Detection System,簡稱IDS)。與其他安全產品不同的 是,入侵檢測系統需要更多的智能,它必須可以將得到的數據進行分析,并得出有用的 結果。一個合格的入侵檢測系統能大大的簡化管理員的工作,保證網絡安全的運行。
日志是使系統順利運行的重要保障。它會告訴我們系統發生了什么和什么沒有發 生。然而,由于日志記錄增加得太快了,鋪天蓋地的日志使系統管理員茫然無措,最終 使日志成為浪費大量磁盤空間的垃圾。日志具有無可替代的價值,但不幸的是它們經常 被忽略,因為系統管理員在并不充裕的時間里難以查看大量的信息。標準的日志功能不 能自動過濾和檢查日志記錄,并提供系統管理員所需要的信息。
對于入侵者來說,要做的第一件事就是清除入侵的痕跡。這需要入侵者獲得root權 限,而一旦系統日志被修改,就無法追查到攻擊的情況。因此,好的系統管理員應該建 立日志文件檢測。有很多工具可以實現日志檢測的功能,其中就有Logcheck和Swatch。 本文將對Logcheck和Swatch逐一進行介紹。
2.日志文件系統
審計和日志功能對于系統來說是非常重要的,可以把感興趣的操作都記錄下來,供 分析和檢查。Unix采用了syslog工具來實現此功能,如果配置正確的話,所有在主機上 發生的事情都會被記錄下來,不管是好的還是壞的。
Syslog已被許多日志系統采納,它用在許多保護措施中--任何程序都可以通過 syslog記錄事件。Syslog可以記錄系統事件,可以寫到一個文件或設備中,或給用戶發 送一個信息。它能記錄本地事件或通過網絡紀錄另一個主機上的事件。
Syslog依據兩個重要的文件:/sbin/syslogd(守護進程)和/etc/syslog.conf配 置文件,習慣上,多數syslog信息被寫到/var/adm或/var/log目錄下的信息文件中 (messages.*)。一個典型的syslog紀錄包括生成程序的名字和一個文本信息。它還包 括一個設備和一個行為級別(但不在日志中出現)。
/etc/syslog.conf的一般格式如下:
設備.行為級別 [;設備.行為級別]記錄行為 設備 描述 auth 認證系統:login、su、getty等,即詢問用戶名和口令 authpriv同LOG_AUTH,但只登錄到所選擇的單個用戶可讀的文件中 cron cron守護進程 daemon其他系統守護進程,如routed kern內核產生的消息 lpr 打印機系統:lpr、lpd mail電子郵件系統 news網絡新聞系統 syslog由syslogd產生的內部消息 user隨機用戶進程產生的消息 uucpUUCP子系統 local0~local7 為本地使用保留 行為級別描述 debug 包含調試的信息,通常旨在調試一個程序時使用 info情報信息 notice 不是錯誤情況,但是可能需要處理 warn(warning) 警告信息 err(error) 錯誤信息 crit重要情況,如硬盤錯誤 alert 應該被立即改正的問題,如系統數據庫破壞 emerg(panic) 緊急情況 記錄行為(舉例)描述 /dev/console發送消息到控制臺 /var/adm/messages把消息寫到文件/var/adm/messages @loGhost把消息發到其它的日志記錄服務器 fred,user1傳送消息給用戶 *傳送消息給所有的在線用戶
有個小命令logger為syslog系統日志文件提供一個shell命令接口,使用戶能創建 日志文件中的條目。用法:logger 例如:logger This is a test!
它將產生一個如下的syslog紀錄:Apr 26 11:22:34 only_you: This is a test!
更詳細的幫助信息請man syslogd,man syslog.conf
3.Logcheck
3.1 logcheck介紹
Logcheck是一軟件包,用來實現自動檢查日志文件,以發現安全入侵和不正常的活 動。Logcheck用logtail程序來記錄讀到的日志文件的位置,下一次運行的時候從記錄 下的位置開始處理新的信息。所有的源代碼都是公開的,實現方法也非常簡單。
Logcheck SHELL腳本和logtail.c程序用關鍵字查找的方法進行日志檢測。在這兒 提到的關鍵字就是指在日志文件中出現的關鍵字,會觸發向系統管理員發的報警信息。 Logcheck的配置文件自帶了缺省的關鍵字,適用于大多數的*inx系統。但是最好還是自 己檢查一下配置文件,看看自帶的關鍵字是否符合自己的需要。
Logcheck腳本是簡單的SHELL程序,logtail.c程序只調用了標準的ANSI C函數。 Logcheck要在cron守護進程中配置,至少要每小時運行一次。腳本用簡單的grep命令來 從日志文件檢查不正常的活動,如果發現了就發MAIL給管理員。如果沒有發現異?;? 動,就不會收到MAIL。
3.2 安裝和配置logcheck
3.2.1 下載Logcheck
下載網址 下載后放在/backup目錄。
3.2.2 安裝
以root用戶身份登錄,
[root@only_you /root]# tar zxvf /backup/logcheck-1.1.1.tar.gz [root@only_you /root]# cd logcheck-1.1.1 [root@only_you logcheck-1.1.1] make Linux //在Linux平臺下使用 make install SYSTYPE=linux //缺省安裝目錄是/usr/local/etc make[1]: Entering Directory `/root/logcheck-1.1.1' Making linux cc -O -o ./src/logtail ./src/logtail.c Creating temp directory /usr/local/etc/tmp //在/usr/local/etc下創建目錄 tmp Setting temp directory permissions chmod 700 /usr/local/etc/tmp Copying files cp ./systems/linux/logcheck.hacking /usr/local/etc //拷貝文件到 /usr/local/etc目錄 cp ./systems/linux/logcheck.violations /usr/local/etc cp ./systems/linux/logcheck.violations.ignore /usr/local/etc cp ./systems/linux/logcheck.ignore /usr/local/etc cp ./systems/linux/logcheck.sh /usr/local/etc cp ./src/logtail /usr/local/bin //把logtail程序拷貝到/usr/local/bin目錄 Setting permissions chmod 700 /usr/local/etc/logcheck.sh //logcheck的腳本 chmod 700 /usr/local/bin/logtail //修改文件訪問權限,確認只有root用戶才 能操作 chmod 600 /usr/local/etc/logcheck.violations.ignore //不同的配置文件 chmod 600 /usr/local/etc/logcheck.violations chmod 600 /usr/local/etc/logcheck.hacking
3.2.3 程序文件介紹
logcheck.sh 主腳本文件。控制所有的處理過程,用grep命令檢查日志文件,發現 問題報告系統管理員。由cron定時啟動。
logtail 記錄日志文件上次處理到的位置。被logcheck程序調用,避免重復處理已 處理過的日志文件。所有的日志文件都由此程序處理,在同一目錄下會產生文件 ######.offset,其中######是檢查的日志文件名。文件中記錄了logtail開始處理的偏 移量,如果刪除掉,則從文件開始處進行處理。Logcheck跟蹤日志文件的inode號和文 件大小,如果inode號發生變化,或者是文件大小比上次運行時的小, logtail會重置 偏移量,處理整個文件。
Logcheck.hacking 文件中包含了系統受到攻擊時的關鍵字。這個文件的關鍵字比 較稀少,除非能知道某種特定的攻擊方式的特征。缺省的關鍵字是ISS(Internet Security Scanner)攻擊產生的,或者是sendmail中的地址欄里的非法語法。在日志文 件中找到了關鍵字就會給管理員發信。
logcheck.violations 文件中包含了產生否定或拒絕信息的系統事件。如denIEd, refused等。
logcheck.violations.ignore 文件中包含了要對logcheck.violations進行反向 查找的關鍵字。
3.2.4 配置
為了使logcheck運行正常,先要對syslog.conf進行配置,你應該根據自己的需要 進行配置,下面給出的只是一個例子。
把下面的內容加到/etc/syslog.conf中
#記錄mail,news以外的消息 *.*;mail.none;news.none -/var/log/messages #記錄認證請求 auth.*;authpriv.* /var/log/authlog #記錄所有的內核消息 kern.* /var/log/kernlog #記錄警告和錯誤消息 *.warn;*.err /var/log/syslog
這四個文件/var/log/messages,/var/log/authlog,/var/log/kernlog, /var/log/syslog也就是logcheck要檢查的日志文件。
重起syslog,[root@only_you]#/etc/rc.d/init.d/syslog restart
用編輯器(vi等)打開文件/usr/local/etc/logcheck.sh,在其中會找到下面的內 容
# Linux Red Hat Version 3.x, 4.x $LOGTAIL /var/log/messages > $TMPDIR/check.$$ $LOGTAIL /var/log/secure >> $TMPDIR/check.$$ $LOGTAIL /var/log/maillog >> $TMPDIR/check.$$
這是logcheck自帶的內容,也就是logcheck要檢查的日志文件,把它該為下面的內 容,使之于syslog.conf的內容相一致:(應該根據你配置的syslog.conf進行修改)
$LOGTAIL /var/log/messages > $TMPDIR/check.$$ $LOGTAIL /var/log/authlog >> $TMPDIR/check.$$ $LOGTAIL /var/log/kernlog >> $TMPDIR/check.$$ $LOGTAIL /var/log/syslog >> $TMPDIR/check.$$
還可以找到一行為 SYSADMIN=root,指的是發郵件時的收信人,缺省為 root@localhost,本機的root用戶,如果機器與Internet相連,也可以指定真實的帳 號,我就把它改為了only_you@linuxaid.com.cn,這樣就可以隨時收到郵件了,不須用 root帳號登錄到linux機器上去。
在/etc/crontab中增加一項,讓cron定時啟動logcheck。關于cron的用法請參考相 應文檔。
00,10,20,30,40,50 * * * * root /usr/local/etc/logcheck.sh
每10分鐘運行一次。
3.2.5 測試
都配置好了,試試效果如何吧。登錄一下,故意輸錯口令,看看有什么事情發生。 10分鐘以后,我的only_you@linuxaid.com.cn信箱真的收到了一封信,信的內容大致 如下:
Apr 26 13:51:13 only_you -- wap[1068]: LOGIN ON pts/1 BY wap FROM *.*.*.* Apr 26 13:51:24 only_you PAM_unix[1092]: authentication failure; wap(uid=500) -> root for system-auth service
剛裝好不長時間,logcheck就報告有人試圖登錄到我的機器上來,不知道這位IP為 211.69.197.1的朋友想干什么。
Security Violations =-=-=-=-=-=-=-=-=-= Apr 26 15:30:53 only_you xinetd[528]: refused connect from 211.69.197.1 Apr 26 15:30:53 only_you xinetd[528]: refused connect from 211.69.197.1 Unusual System Events =-=-=-=-=-=-=-=-=-=-= Apr 26 15:30:53 only_you xinetd[528]: refused connect from 211.69.197.1 Apr 26 15:30:53 only_you xinetd[528]: refused connect from 211.69.197.1 Apr 26 15:30:53 only_you xinetd[528]: FAIL: ftp libwrap from=211.69.197.1 Apr 26 15:40:00 only_you CROND[1388]: (root) CMD (/usr/local/etc/logcheck.sh) Apr 26 15:40:00 only_you CROND[1388]: (root) CMD (/usr/local/etc/logcheck.sh) Apr 26 15:40:00 only_you CROND[1390]: (root) CMD ( /sbin/rmmod -as) Apr 26 15:40:00 only_you CROND[1390]: (root) CMD ( /sbin/rmmod -as) Apr 26 15:30:53 only_you xinetd[528]: FAIL: ftp libwrap from=211.69.197.1
4.swatch
SWATCH (The Simple WATCHer and filer) 是Todd Atkins開發的用于實時監視日 志的PERL程序。Swatch利用指定的觸發器監視日志記錄,當日志記錄符合觸發器條件 時,swatch會按預先定義好的方式通知系統管理員。
Swatch非常容易安裝。它是一個PERL程序,無需編譯。Swatch有一個很有用的安裝 腳本,將所有的庫文件、手冊頁和PERL文件復制到相應目錄下。安裝完成后,只要創建 一個配置文件,就可以運行程序了。Swatch的下載網址,最新的版本為3.0.1 。下載后 也放到了/backup目錄。
4.1 安裝
以root用戶身份登錄,
[root@only_you /root]# tar zxvf /backup/swatch-3.0.1.tar.gz [root@only_you /root]# cd swatch-3.0.1
現在的版本需要perl 5和Time::HiRes, Date::Calc,Date::format, file::Tail. 模塊,系統自帶的perl可能不包括,沒關系,它的安裝程序會自己到網上去找。
[root@only_you swatch-3.0.1]# perl Makefile.PL
系統提示HiRes 1.12模塊沒有安裝,詢問是否安裝,回答y,
接著系統提示Are you ready for manual configuration? [yes]
敲n就會自動配置,然后它自己到網上去裝東西,具體在干什么我也不清楚了。裝 完這個又說缺別的東西,還是讓它自己去裝。試著執行一下./swatch,如果沒有錯誤信 息就說明安裝成功了。
4.2 配置swatchrc
swathrc文件的格式如下
# Bad login attempts watchfor /INVALID|REPEATED|INCOMPLETE/ echo bell 3 mail=only_you@linuxaid.com.cn # Machine room temperature watchfor /WizMON/ echo inverse bell
watchfor后跟/pattern/, 其中的'pattern'代表一個swatch將要進行搜索匹配的 正則表達式,也就是我們的觸發器,下面緊跟的以“Tab”開頭的是當表達式匹配時所 要執行的動作,Swatch允許指定包括顯示、email、呼叫或任何指定的執行文件。上面 第一個watchfor的含義是找到/INVALID|REPEATED|INCOMPLETE/后把信息顯示到屏幕 上,響鈴,同時向only_you@linuxaid.com.cn發MAIL。詳細的正則表達式的格式請參考 相應的文檔。
缺省情況下,swatch認為swatchrc文件為~/.swatchrc,可以通過運行時指定參數 來改變,如果未找到swatchrc文件,則使用缺省的配置
watchfor = /.*/ echo = random
4.3 測試
Swatch啟動時可以帶很多參數,但使用通常如下格式啟動它就可以了:
/usr/local/bin/swatch -c /var/log/syslogrc -t /var/log/syslog &
-c參數用于指定配置文件,-t參數指定實時監視的日志文件,'&'使swatch在后臺 運行。啟動后,swatch產生子進程,因此swatch是以兩個進程運行的,在停止swatch時 必須殺掉兩個進程。
-t參數是用tail –f filename,從文件的末尾開始查找,如果想查找整個文件, 則應該使用-f filename。
現在讓我們來實驗一下,在swatch程序所在的目錄下建立swatchrc文件,內容如下 :
watchfor = /FAILED/ echo=random
執行./swatch –c swatchrc –f /var/log/authlog,所有登錄失敗的記錄就會顯 示出來,并且還用不同的顏色來顯示。
Apr 26 17:43:34 only_you login[2344]: FAILED LOGIN 1 FROM cjm FOR dsf, Authentication failure Apr 27 09:55:50 only_you login[932]: FAILED LOGIN 1 FROM (null) FOR root, Authentication failure
5.總結
日志是很強大的工具,然而它的大量數據也很容易淹沒我們。如果我們沒有足夠的 時間去檢查數以兆計的數據時,很可能會忽略那些有用的資料。日志自動檢測系統可以 幫助我們解決這個問題。這些自動檢測系統將我們所需要的信息實時地通知我們。希望 本文能對如何定制你自己的日志文件自動檢測系統有一定的幫助。
6.參考資料
[1]《An Introduction to Intrusion Detection& ASSESSMENT》ICSA, Inc. [2]http://www.psionic.com [3] 《The Common Intrusion Detection Framework Architecture》 Phil Porras, SRI Dan Schnackenberg, Boeing Stuart Staniford-Chen, UC Davis, editor Maureen Stillman, Oddysey Research Felix Wu, NCSU