Linux下文件完整性監(jiān)控工具Tripwire詳解
簡(jiǎn)介
Tripwire 是目前最為著名的Unix下文件系統(tǒng)完整性檢查的軟件工具,這一軟件采用的技術(shù)核心就是對(duì)每個(gè)要監(jiān)控的文件產(chǎn)生一個(gè)數(shù)字簽名,保留下來(lái)。當(dāng)文件現(xiàn)在的數(shù)字簽名與保留的數(shù)字簽名不一致時(shí),那么現(xiàn)在這個(gè)文件必定被改動(dòng)過(guò)了。
軟件特點(diǎn)
監(jiān)視和檢查系統(tǒng)發(fā)生的變化能夠及時(shí)地幫助你發(fā)現(xiàn)攻擊者的入侵,它們能夠很好地提供系統(tǒng)完整性的檢查。
用Tripwire建立數(shù)據(jù)完整性監(jiān)測(cè)系統(tǒng)。雖然它不能抵御黑客攻擊以及黑客對(duì)一些重要文件的修改,但是可以監(jiān)測(cè)文件是否被修改過(guò)以及哪些文件被修改過(guò),從而在被攻擊后有的放矢的策劃出解決辦法。
Tripwire原理
Tripwire的原理是Tripwire被安裝、配置后,將當(dāng)前的系統(tǒng)數(shù)據(jù)狀態(tài)建立成數(shù)據(jù)庫(kù),隨著文件的添加、刪除和修改等等變化,通過(guò)系統(tǒng)數(shù)據(jù)現(xiàn)狀與不斷更新的數(shù)據(jù)庫(kù)進(jìn)行比較,來(lái)判定哪些文件被添加、刪除和修改過(guò)。正因?yàn)槌跏嫉臄?shù)據(jù)庫(kù)是在Tripwire本體被安裝、配置后建立的原因,我們務(wù)必應(yīng)該在服務(wù)器開(kāi)放前,或者說(shuō)操作系統(tǒng)剛被安裝后用Tripwire構(gòu)建數(shù)據(jù)完整性監(jiān)測(cè)系統(tǒng)。
Tripwire的基本操作
一個(gè)配置文件(tw.config)描述監(jiān)測(cè)哪些目錄和文件,還有一個(gè)基線(xiàn)簽名數(shù)據(jù)庫(kù)產(chǎn)生一個(gè)有關(guān)改動(dòng)的詳細(xì)報(bào)告。
當(dāng)?shù)谝淮芜\(yùn)行Tripwire時(shí),程序創(chuàng)建一個(gè)簽名的基線(xiàn)數(shù)據(jù)庫(kù)。下一次運(yùn)行時(shí),它使用tw. config文件產(chǎn)生一個(gè)新的簽名數(shù)據(jù)庫(kù)。然后,它比較兩個(gè)數(shù)據(jù)庫(kù),實(shí)施用戶(hù)定義的任何選項(xiàng)屏蔽(排除經(jīng)常更改的文件),最后通過(guò)電子郵件或顯示器來(lái)為用戶(hù)在終端上輸出一個(gè)可讀的報(bào)告。
Tripwire有四種操作模式:數(shù)據(jù)庫(kù)生成、完整性檢查、數(shù)據(jù)庫(kù)更新或交互式更新。
數(shù)據(jù)庫(kù)生成模式產(chǎn)生一個(gè)基線(xiàn)數(shù)據(jù)庫(kù),為未來(lái)的比較打下基礎(chǔ)。
完整性檢查是Tripwire的主要模式,把當(dāng)前文件簽名和基線(xiàn)數(shù)據(jù)庫(kù)進(jìn)行比較來(lái)進(jìn)行檢查。
有兩種更新模式允許用戶(hù)調(diào)整Tripwire數(shù)據(jù)庫(kù)以消除不感興趣的結(jié)果以及應(yīng)付正常的系統(tǒng)變化。例如當(dāng)用戶(hù)帳號(hào)正常增加或刪除時(shí),不希望Tripwire重復(fù)報(bào)告/etc/passwd文件被改動(dòng)了。
默認(rèn)支持報(bào)告方式
Syslog
注意事項(xiàng)
有一點(diǎn)要注意,上述保障機(jī)制的重點(diǎn)在于數(shù)據(jù)庫(kù)內(nèi)的數(shù)字簽名,如果數(shù)據(jù)庫(kù)是不可靠的,則一切工作都喪失意義。所以在Tripwire生成數(shù)據(jù)庫(kù)后,這個(gè)庫(kù)文件的安全極為重要。比較常見(jiàn)的做法是將數(shù)據(jù)庫(kù)文件, Tripwire二進(jìn)制文件,配置文件單獨(dú)保留到"可拿走并鎖起來(lái)"的質(zhì)上,如光盤(pán),將上述文件復(fù)制到光盤(pán)后,關(guān)閉寫(xiě)保護(hù)口,鎖到保險(xiǎn)柜中。這樣即使侵入者拿到盤(pán)也無(wú)計(jì)可施。除這種辦法外,利用PGP等加密工具對(duì)上述關(guān)鍵文件進(jìn)行數(shù)字簽名也是一個(gè)很好的選擇。
當(dāng)然,當(dāng)管理員自身對(duì)某些文件更動(dòng)時(shí), Tripwire的數(shù)據(jù)庫(kù)必然是需要隨之更新的, Tripwire考慮到了這一點(diǎn),它有四種工作模式:數(shù)據(jù)庫(kù)生成,完整性檢查,數(shù)據(jù)庫(kù)更新。交互更新。當(dāng)管理員更動(dòng)文件后,可運(yùn)行數(shù)據(jù)庫(kù)更新模式來(lái)產(chǎn)生新的數(shù)據(jù)庫(kù)文件。
Tripwire只支持英文系統(tǒng)
單文件大于3G的時(shí)候執(zhí)行tripwire –check 會(huì)出錯(cuò),具體原因不明。
Tripwire Install
OS:CentOS
# http://sourceforge.net/projects/tripwire/
# install sendmail, wget
yum -y install gcc gcc-c++
cd /home
wget http://jaist.dl.sourceforge.net/project/tripwire/tripwire-src/tripwire-2.4.2.2/tripwire-2.4.2.2-src.tar.bz2
tar -xf tripwire-2.4.2.2-src.tar.bz2
cd tripwire-2.4.2.2-src
./configure --prefix=/home/tripwire
#在make install 期間,需要手動(dòng)鍵入ENTER,閱讀前言然后輸入accept,接下來(lái)需要手動(dòng)設(shè)置3組密匙口令 (建議:可以3組選同一個(gè)密碼,請(qǐng)?jiān)O(shè)置一個(gè)強(qiáng)力的口令,然后請(qǐng)牢記)
make && make install
# create database
/home/tripwire/sbin/tripwire --init
# 執(zhí)行檢查
/home/tripwire/sbin/tripwire --check
#設(shè)置 crontab
crontab -e
00 10 * * * su /home/tripwire/sbin/tripwire --check|mail -s "tripwire report" example@xiaomi.com
后續(xù)擴(kuò)展:
收集多臺(tái)tripwire報(bào)告,集中處理告警信息發(fā)送郵件通知相關(guān)人員,并按照每天的報(bào)告進(jìn)行存檔,方便日后查看。
最后相關(guān)人員收到的郵件如下:
標(biāo)題:Tripwire Report HI,All 文件完整性監(jiān)控狀態(tài) hostname1 正常 hostname2 正常 hostname3 正常 hostname4 異常 hostname5 正常 hostname6 異常 異常的服務(wù)器請(qǐng)拷貝主機(jī)名,訪(fǎng)問(wèn)下面URL進(jìn)行搜索查看詳細(xì)信息。 http://tripwire.report.xiaomi.com/tripwire_2013-12-4.txt