UNIX入侵檢測(cè)
1.概述 入侵檢測(cè)(Intrusion Detection),顧名思義,便是對(duì)入侵行為的發(fā)覺(jué)。它通過(guò) 對(duì)計(jì)算機(jī)網(wǎng)絡(luò)或計(jì)算機(jī)系統(tǒng)中的若干關(guān)鍵點(diǎn)收集信息并對(duì)其進(jìn)行分析,從中發(fā)現(xiàn)網(wǎng)絡(luò)或 系統(tǒng)中是否有違反安全策略的行為和被攻擊的跡象。進(jìn)行入侵檢測(cè)的軟件與硬件的組合 便是入侵檢測(cè)系統(tǒng)(Intrusion Detection System,簡(jiǎn)稱IDS)。與其他安全產(chǎn)品不同的 是,入侵檢測(cè)系統(tǒng)需要更多的智能,它必須可以將得到的數(shù)據(jù)進(jìn)行分析,并得出有用的 結(jié)果。一個(gè)合格的入侵檢測(cè)系統(tǒng)能大大的簡(jiǎn)化管理員的工作,保證網(wǎng)絡(luò)安全的運(yùn)行。
日志是使系統(tǒng)順利運(yùn)行的重要保障。它會(huì)告訴我們系統(tǒng)發(fā)生了什么和什么沒(méi)有發(fā) 生。然而,由于日志記錄增加得太快了,鋪天蓋地的日志使系統(tǒng)管理員茫然無(wú)措,最終 使日志成為浪費(fèi)大量磁盤空間的垃圾。日志具有無(wú)可替代的價(jià)值,但不幸的是它們經(jīng)常 被忽略,因?yàn)橄到y(tǒng)管理員在并不充裕的時(shí)間里難以查看大量的信息。標(biāo)準(zhǔn)的日志功能不 能自動(dòng)過(guò)濾和檢查日志記錄,并提供系統(tǒng)管理員所需要的信息。
對(duì)于入侵者來(lái)說(shuō),要做的第一件事就是清除入侵的痕跡。這需要入侵者獲得root權(quán) 限,而一旦系統(tǒng)日志被修改,就無(wú)法追查到攻擊的情況。因此,好的系統(tǒng)管理員應(yīng)該建 立日志文件檢測(cè)。有很多工具可以實(shí)現(xiàn)日志檢測(cè)的功能,其中就有Logcheck和Swatch。 本文將對(duì)Logcheck和Swatch逐一進(jìn)行介紹。
2.日志文件系統(tǒng)
審計(jì)和日志功能對(duì)于系統(tǒng)來(lái)說(shuō)是非常重要的,可以把感興趣的操作都記錄下來(lái),供 分析和檢查。Unix采用了syslog工具來(lái)實(shí)現(xiàn)此功能,如果配置正確的話,所有在主機(jī)上 發(fā)生的事情都會(huì)被記錄下來(lái),不管是好的還是壞的。
Syslog已被許多日志系統(tǒng)采納,它用在許多保護(hù)措施中--任何程序都可以通過(guò) syslog記錄事件。Syslog可以記錄系統(tǒng)事件,可以寫到一個(gè)文件或設(shè)備中,或給用戶發(fā) 送一個(gè)信息。它能記錄本地事件或通過(guò)網(wǎng)絡(luò)紀(jì)錄另一個(gè)主機(jī)上的事件。
Syslog依據(jù)兩個(gè)重要的文件:/sbin/syslogd(守護(hù)進(jìn)程)和/etc/syslog.conf配 置文件,習(xí)慣上,多數(shù)syslog信息被寫到/var/adm或/var/log目錄下的信息文件中 (messages.*)。一個(gè)典型的syslog紀(jì)錄包括生成程序的名字和一個(gè)文本信息。它還包 括一個(gè)設(shè)備和一個(gè)行為級(jí)別(但不在日志中出現(xiàn))。
/etc/syslog.conf的一般格式如下:
設(shè)備.行為級(jí)別 [;設(shè)備.行為級(jí)別]記錄行為 設(shè)備 描述 auth 認(rèn)證系統(tǒng):login、su、getty等,即詢問(wèn)用戶名和口令 authpriv同LOG_AUTH,但只登錄到所選擇的單個(gè)用戶可讀的文件中 cron cron守護(hù)進(jìn)程 daemon其他系統(tǒng)守護(hù)進(jìn)程,如routed kern內(nèi)核產(chǎn)生的消息 lpr 打印機(jī)系統(tǒng):lpr、lpd mail電子郵件系統(tǒng) news網(wǎng)絡(luò)新聞系統(tǒng) syslog由syslogd產(chǎn)生的內(nèi)部消息 user隨機(jī)用戶進(jìn)程產(chǎn)生的消息 uucpUUCP子系統(tǒng) local0~local7 為本地使用保留 行為級(jí)別描述 debug 包含調(diào)試的信息,通常旨在調(diào)試一個(gè)程序時(shí)使用 info情報(bào)信息 notice 不是錯(cuò)誤情況,但是可能需要處理 warn(warning) 警告信息 err(error) 錯(cuò)誤信息 crit重要情況,如硬盤錯(cuò)誤 alert 應(yīng)該被立即改正的問(wèn)題,如系統(tǒng)數(shù)據(jù)庫(kù)破壞 emerg(panic) 緊急情況 記錄行為(舉例)描述 /dev/console發(fā)送消息到控制臺(tái) /var/adm/messages把消息寫到文件/var/adm/messages @loGhost把消息發(fā)到其它的日志記錄服務(wù)器 fred,user1傳送消息給用戶 *傳送消息給所有的在線用戶
有個(gè)小命令logger為syslog系統(tǒng)日志文件提供一個(gè)shell命令接口,使用戶能創(chuàng)建 日志文件中的條目。用法:logger 例如:logger This is a test!
它將產(chǎn)生一個(gè)如下的syslog紀(jì)錄:Apr 26 11:22:34 only_you: This is a test!
更詳細(xì)的幫助信息請(qǐng)man syslogd,man syslog.conf
3.Logcheck
3.1 logcheck介紹
Logcheck是一軟件包,用來(lái)實(shí)現(xiàn)自動(dòng)檢查日志文件,以發(fā)現(xiàn)安全入侵和不正常的活 動(dòng)。Logcheck用logtail程序來(lái)記錄讀到的日志文件的位置,下一次運(yùn)行的時(shí)候從記錄 下的位置開(kāi)始處理新的信息。所有的源代碼都是公開(kāi)的,實(shí)現(xiàn)方法也非常簡(jiǎn)單。
Logcheck SHELL腳本和logtail.c程序用關(guān)鍵字查找的方法進(jìn)行日志檢測(cè)。在這兒 提到的關(guān)鍵字就是指在日志文件中出現(xiàn)的關(guān)鍵字,會(huì)觸發(fā)向系統(tǒng)管理員發(fā)的報(bào)警信息。 Logcheck的配置文件自帶了缺省的關(guān)鍵字,適用于大多數(shù)的*inx系統(tǒng)。但是最好還是自 己檢查一下配置文件,看看自帶的關(guān)鍵字是否符合自己的需要。
Logcheck腳本是簡(jiǎn)單的SHELL程序,logtail.c程序只調(diào)用了標(biāo)準(zhǔn)的ANSI C函數(shù)。 Logcheck要在cron守護(hù)進(jìn)程中配置,至少要每小時(shí)運(yùn)行一次。腳本用簡(jiǎn)單的grep命令來(lái) 從日志文件檢查不正常的活動(dòng),如果發(fā)現(xiàn)了就發(fā)MAIL給管理員。如果沒(méi)有發(fā)現(xiàn)異常活 動(dòng),就不會(huì)收到MAIL。
3.2 安裝和配置logcheck
3.2.1 下載Logcheck
下載網(wǎng)址 下載后放在/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平臺(tái)下使用 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下創(chuàng)建目錄 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 //修改文件訪問(wèn)權(quán)限,確認(rèn)只有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 主腳本文件。控制所有的處理過(guò)程,用grep命令檢查日志文件,發(fā)現(xiàn) 問(wèn)題報(bào)告系統(tǒng)管理員。由cron定時(shí)啟動(dòng)。
logtail 記錄日志文件上次處理到的位置。被logcheck程序調(diào)用,避免重復(fù)處理已 處理過(guò)的日志文件。所有的日志文件都由此程序處理,在同一目錄下會(huì)產(chǎn)生文件 ######.offset,其中######是檢查的日志文件名。文件中記錄了logtail開(kāi)始處理的偏 移量,如果刪除掉,則從文件開(kāi)始處進(jìn)行處理。Logcheck跟蹤日志文件的inode號(hào)和文 件大小,如果inode號(hào)發(fā)生變化,或者是文件大小比上次運(yùn)行時(shí)的小, logtail會(huì)重置 偏移量,處理整個(gè)文件。
Logcheck.hacking 文件中包含了系統(tǒng)受到攻擊時(shí)的關(guān)鍵字。這個(gè)文件的關(guān)鍵字比 較稀少,除非能知道某種特定的攻擊方式的特征。缺省的關(guān)鍵字是ISS(Internet Security Scanner)攻擊產(chǎn)生的,或者是sendmail中的地址欄里的非法語(yǔ)法。在日志文 件中找到了關(guān)鍵字就會(huì)給管理員發(fā)信。
logcheck.violations 文件中包含了產(chǎn)生否定或拒絕信息的系統(tǒng)事件。如denIEd, refused等。
logcheck.violations.ignore 文件中包含了要對(duì)logcheck.violations進(jìn)行反向 查找的關(guān)鍵字。
3.2.4 配置
為了使logcheck運(yùn)行正常,先要對(duì)syslog.conf進(jìn)行配置,你應(yīng)該根據(jù)自己的需要 進(jìn)行配置,下面給出的只是一個(gè)例子。
把下面的內(nèi)容加到/etc/syslog.conf中
#記錄mail,news以外的消息 *.*;mail.none;news.none -/var/log/messages #記錄認(rèn)證請(qǐng)求 auth.*;authpriv.* /var/log/authlog #記錄所有的內(nèi)核消息 kern.* /var/log/kernlog #記錄警告和錯(cuò)誤消息 *.warn;*.err /var/log/syslog
這四個(gè)文件/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等)打開(kāi)文件/usr/local/etc/logcheck.sh,在其中會(huì)找到下面的內(nèi) 容
# 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自帶的內(nèi)容,也就是logcheck要檢查的日志文件,把它該為下面的內(nèi) 容,使之于syslog.conf的內(nèi)容相一致:(應(yīng)該根據(jù)你配置的syslog.conf進(jìn)行修改)
$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,指的是發(fā)郵件時(shí)的收信人,缺省為 root@localhost,本機(jī)的root用戶,如果機(jī)器與Internet相連,也可以指定真實(shí)的帳 號(hào),我就把它改為了only_you@linuxaid.com.cn,這樣就可以隨時(shí)收到郵件了,不須用 root帳號(hào)登錄到linux機(jī)器上去。
在/etc/crontab中增加一項(xiàng),讓cron定時(shí)啟動(dòng)logcheck。關(guān)于cron的用法請(qǐng)參考相 應(yīng)文檔。
00,10,20,30,40,50 * * * * root /usr/local/etc/logcheck.sh
每10分鐘運(yùn)行一次。
3.2.5 測(cè)試
都配置好了,試試效果如何吧。登錄一下,故意輸錯(cuò)口令,看看有什么事情發(fā)生。 10分鐘以后,我的only_you@linuxaid.com.cn信箱真的收到了一封信,信的內(nèi)容大致 如下:
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
剛裝好不長(zhǎng)時(shí)間,logcheck就報(bào)告有人試圖登錄到我的機(jī)器上來(lái),不知道這位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開(kāi)發(fā)的用于實(shí)時(shí)監(jiān)視日 志的PERL程序。Swatch利用指定的觸發(fā)器監(jiān)視日志記錄,當(dāng)日志記錄符合觸發(fā)器條件 時(shí),swatch會(huì)按預(yù)先定義好的方式通知系統(tǒng)管理員。
Swatch非常容易安裝。它是一個(gè)PERL程序,無(wú)需編譯。Swatch有一個(gè)很有用的安裝 腳本,將所有的庫(kù)文件、手冊(cè)頁(yè)和PERL文件復(fù)制到相應(yīng)目錄下。安裝完成后,只要?jiǎng)?chuàng)建 一個(gè)配置文件,就可以運(yùn)行程序了。Swatch的下載網(wǎng)址,最新的版本為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
現(xiàn)在的版本需要perl 5和Time::HiRes, Date::Calc,Date::format, file::Tail. 模塊,系統(tǒng)自帶的perl可能不包括,沒(méi)關(guān)系,它的安裝程序會(huì)自己到網(wǎng)上去找。
[root@only_you swatch-3.0.1]# perl Makefile.PL
系統(tǒng)提示HiRes 1.12模塊沒(méi)有安裝,詢問(wèn)是否安裝,回答y,
接著系統(tǒng)提示Are you ready for manual configuration? [yes]
敲n就會(huì)自動(dòng)配置,然后它自己到網(wǎng)上去裝東西,具體在干什么我也不清楚了。裝 完這個(gè)又說(shuō)缺別的東西,還是讓它自己去裝。試著執(zhí)行一下./swatch,如果沒(méi)有錯(cuò)誤信 息就說(shuō)明安裝成功了。
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'代表一個(gè)swatch將要進(jìn)行搜索匹配的 正則表達(dá)式,也就是我們的觸發(fā)器,下面緊跟的以“Tab”開(kāi)頭的是當(dāng)表達(dá)式匹配時(shí)所 要執(zhí)行的動(dòng)作,Swatch允許指定包括顯示、email、呼叫或任何指定的執(zhí)行文件。上面 第一個(gè)watchfor的含義是找到/INVALID|REPEATED|INCOMPLETE/后把信息顯示到屏幕 上,響鈴,同時(shí)向only_you@linuxaid.com.cn發(fā)MAIL。詳細(xì)的正則表達(dá)式的格式請(qǐng)參考 相應(yīng)的文檔。
缺省情況下,swatch認(rèn)為swatchrc文件為~/.swatchrc,可以通過(guò)運(yùn)行時(shí)指定參數(shù) 來(lái)改變,如果未找到swatchrc文件,則使用缺省的配置
watchfor = /.*/ echo = random
4.3 測(cè)試
Swatch啟動(dòng)時(shí)可以帶很多參數(shù),但使用通常如下格式啟動(dòng)它就可以了:
/usr/local/bin/swatch -c /var/log/syslogrc -t /var/log/syslog &
-c參數(shù)用于指定配置文件,-t參數(shù)指定實(shí)時(shí)監(jiān)視的日志文件,'&'使swatch在后臺(tái) 運(yùn)行。啟動(dòng)后,swatch產(chǎn)生子進(jìn)程,因此swatch是以兩個(gè)進(jìn)程運(yùn)行的,在停止swatch時(shí) 必須殺掉兩個(gè)進(jìn)程。
-t參數(shù)是用tail –f filename,從文件的末尾開(kāi)始查找,如果想查找整個(gè)文件, 則應(yīng)該使用-f filename。
現(xiàn)在讓我們來(lái)實(shí)驗(yàn)一下,在swatch程序所在的目錄下建立swatchrc文件,內(nèi)容如下 :
watchfor = /FAILED/ echo=random
執(zhí)行./swatch –c swatchrc –f /var/log/authlog,所有登錄失敗的記錄就會(huì)顯 示出來(lái),并且還用不同的顏色來(lái)顯示。
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.總結(jié)
日志是很強(qiáng)大的工具,然而它的大量數(shù)據(jù)也很容易淹沒(méi)我們。如果我們沒(méi)有足夠的 時(shí)間去檢查數(shù)以兆計(jì)的數(shù)據(jù)時(shí),很可能會(huì)忽略那些有用的資料。日志自動(dòng)檢測(cè)系統(tǒng)可以 幫助我們解決這個(gè)問(wèn)題。這些自動(dòng)檢測(cè)系統(tǒng)將我們所需要的信息實(shí)時(shí)地通知我們。希望 本文能對(duì)如何定制你自己的日志文件自動(dòng)檢測(cè)系統(tǒng)有一定的幫助。
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
