Tripwire:一款老牌的文件完整性檢查器
Tripwire是一款最為常用的開(kāi)放源碼的完整性檢查工具,它生成目標(biāo)文件的校驗(yàn)和并周期性的檢查文件是否被更改。下面我們簡(jiǎn)單介紹一下 Tripwire的運(yùn)行機(jī)理。與大多數(shù)完整性檢查程序相同,對(duì)于需要監(jiān)視的文件,Tripwire會(huì)使用校驗(yàn)和來(lái)為文件的某個(gè)狀態(tài)生成唯一的標(biāo)識(shí)(又稱為 "快照"),并將其存放起來(lái)以備后用。當(dāng)Tripwire程序運(yùn)行時(shí),它先計(jì)算新的標(biāo)識(shí),并于存放的原標(biāo)識(shí)加以比較,如果發(fā)現(xiàn)不匹配的話,它就報(bào)告系統(tǒng)管理人員文件已經(jīng)被修改。接下來(lái),系統(tǒng)管理員就可以利用這個(gè)不匹配來(lái)判斷系統(tǒng)是否遭到了入侵。例如,如果Tripwire已經(jīng)為/bin/login和 /bin/ls存放了快照,那么對(duì)它們的尺寸、inode號(hào)、權(quán)限以及其他屬性的任何修改,都逃不過(guò)Tripwire的火眼金睛。尤其是對(duì)于文件內(nèi)容的修改,即使只改變了一個(gè)字節(jié),Tripwire也能察覺(jué)得到,因?yàn)樾r?yàn)和是針對(duì)文件整體的。
下載鏈接:http://down.51cto.com/data/149235
>>去網(wǎng)絡(luò)安全工具百寶箱看看其它安全工具
Tripwire的工作原理
當(dāng)Tripwire運(yùn)行在數(shù)據(jù)庫(kù)生成模式時(shí),會(huì)根據(jù)管理員設(shè)置的一個(gè)配置文件對(duì)指定要監(jiān)控的文件進(jìn)行讀取,對(duì)每個(gè)文件生成相應(yīng)數(shù)字簽名,并將這些結(jié)果保存在自己的數(shù)據(jù)庫(kù)中,在缺省狀態(tài)下,MD5和SNCFRN(Xerox的安全哈希函數(shù))加密手段被結(jié)合用來(lái)生成文件的數(shù)字簽名。除此以外,管理員還可使用MD4,CRC32,SHA等哈希函數(shù),但實(shí)際上,使用上述兩種哈希函數(shù)的可靠性已相當(dāng)高了,而且結(jié)合MD5和sncfrn兩種算法(尤其是sncfrn)對(duì)系統(tǒng)資源的耗費(fèi)已較大,所以在使用時(shí)可根據(jù)文件的重要性做取舍。當(dāng)懷疑系統(tǒng)被入侵時(shí),可由Tripwire根據(jù)先前生成的,數(shù)據(jù)庫(kù)文件來(lái)做一次數(shù)字簽名的對(duì)照,如果文件被替換,則與Tripwire數(shù)據(jù)庫(kù)內(nèi)相應(yīng)數(shù)字簽名不匹配, 這時(shí)Tripwire會(huì)報(bào)告相應(yīng)文件被更動(dòng),管理員就明白系統(tǒ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)外, 一次性介質(zhì),如cd-r也是很好的選擇,這樣即使侵入者拿到盤(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,安裝前的準(zhǔn)備工作
Tripwire支持絕大多數(shù)Unix操作系統(tǒng),它的安裝需要編譯環(huán)境,如gcc,cc等,還需要gzip,gunzip等解壓工具。這些工具管理員可從相應(yīng)站點(diǎn)獲取,這里不討論。Tripwire可從www.tripwire.com獲得,到它的主頁(yè)download部分,可以看到當(dāng)前可免費(fèi)download的Tripwire1.3 ASR版本,下載下來(lái)就是。
安裝Tripwire
Tripwire的tar包解開(kāi)后,我們可以看到如下目錄結(jié)構(gòu),建議先看看根下的README文件,對(duì)Tripwire有個(gè)整體的了解。隨后,我們就可以一步步的安裝這個(gè)軟件了。
步驟1:匹配主機(jī)環(huán)境
在Tripwire的根下有Ported這個(gè)文件,它是對(duì)支持的系統(tǒng)及相關(guān)配置文件的描述,管理員第一步需要打開(kāi)這個(gè)文件,找到符合自己系統(tǒng)的描述,本文的測(cè)試環(huán)境是solaris2.6,我們截取相關(guān)部分來(lái)看看,
- vendor: Sun Microsystems, Inc.
- os: SunOS
- os version: 5.x (Solaris 2.x)
- compiler: cc
- cflags: -O
- ldflags:
- libs:
- conf.h: conf-svr4.h
- tw.config: tw.Conf.sunos5
notes:
在這一段描述中,要尤其注意的是conf.h 和tw.config對(duì)應(yīng)的行,在下幾步的配置中需要用到它們兩個(gè)對(duì)應(yīng)的文件。此處要注意的是:每種操作系統(tǒng)這兩個(gè)地方所對(duì)應(yīng)的文件是不同的。
步驟2:配置監(jiān)控目標(biāo)
進(jìn)入include目錄,編輯config.h文件,將第一步Ported中conf.h后對(duì)應(yīng)的文件名和路徑寫(xiě)入config.h開(kāi)始#include部分,此例中即為
- #include "../configs/conf-svr4.h"
同時(shí)注意的是,在configh文件中還有Tripwire配置文件,Tripwire數(shù)據(jù)庫(kù)文件的放置路徑及生成數(shù)據(jù)庫(kù)的文件名等設(shè)置,管理員按照個(gè)人喜好設(shè)置即可編輯好config.h后,還要根據(jù)本機(jī)情況編輯修改位于configs目錄下的Tripwire配置文件,也就是上面Ported 文件中tw.config對(duì)應(yīng)的tw.conf.sunos5,我們知道,對(duì)文件,目錄等的監(jiān)控就是在這里設(shè)置的。我們一段段的選取一部分這個(gè)文件來(lái)看看:
- #
- # - : ignore the following atributes
- # + : do not ignore the following attributes
- #
- # p : permission and file mode bits a: access timestamp
- # i : inode number m: modification timestamp
- # n : number of links (ref count) c: inode creation timestamp
- # u : user id of owner 1: signature 1
- # g : group id of owner 2: signature 2
- # s : size of file
注意上述p,I,n,u,g,s,a,c,1,2等,它表示可以對(duì)文件,目錄設(shè)置的監(jiān)控項(xiàng)目,管理員可組合使用,最前面的-,+號(hào)表示選取或忽略這些屬性。如下例:
- /var +pinugsm12-a
它表示對(duì)目錄/var下所有文件檢查,監(jiān)控項(xiàng)目分別有文件屬性,inode,鏈接數(shù),屬組,屬主,修改時(shí)間,生成時(shí)間,數(shù)字簽名等,但是,對(duì)這個(gè)目錄下的文件的訪問(wèn)不加監(jiān)控,如果訪問(wèn)也監(jiān)控的話,正常的用戶訪問(wèn)也會(huì)被Tripwire捕捉,這沒(méi)有必要。
為了方便起見(jiàn),Tripwire作者把常見(jiàn)組合做成了模板,如下,
- #
- # Templates: (default) R : [R]ead-only (+pinugsm12-a)
- # L : [L]og file (+pinug-sam12)
- # N : ignore [N]othing (+pinusgsamc12)
- # E : ignore [E]verything (-pinusgsamc12)
- #
tw.conf.sunos5這個(gè)文件再向下,就是管理員根據(jù)情況填寫(xiě)了,把需要監(jiān)控的文件及目錄加入列表,賦予相應(yīng)屬性即可。如下:
- / R
- /.rhosts R # may not exist
- /.profile R # may not exist
- /etc/dfs/dfstab R
- /etc/hosts.equiv R
- /etc/inet/inetd.conf R
- /etc/inet/protocols R
- /etc/inet/services R
- /etc/init.d R
- /etc/motd L
- #/etc/named.boot R # may not exist
- /etc/opt R
- /etc/passwd L
- /etc/profile R
步驟3:編譯
完成上兩步后,就可以編譯了,在Tripwire的根下,執(zhí)行make,系統(tǒng)即會(huì)自動(dòng)編譯,編譯成功后,可以再執(zhí)行make test,Tripwire會(huì)自動(dòng)檢查編譯情況及工作狀態(tài),它會(huì)一段一段的測(cè)試,我們選取一段如下:
- === test.Update.sh: DESCRIPTION
- This shell script exercises all the Tripwire integrity checking
- and database update functionalities。
- === test.update.sh: Setting up auxiliary scripts ===
- === test.update.sh: BEGIN ===
- ../src/tripwire -loosedir -c /tmp/twtest/tw.config -d /tmp/twtest/tw.db -i all
- === test.update.sh: testing GROWING (safe) files ===
- === test.update.sh: testing GROWING (unsafe) files ===
- === test.update.sh: testing ADDED files ===
- === test.update.sh: testing DELETED files ===
- === test.update.sh: testing CHANGED files ===
- === test.update.sh: testing input schemes ===
- === test.update.sh: tw.config from stdin
- === test.update.sh: database from stdin
- === test.update.sh: testing complex UPDATE cases
- === test.update.sh: changed ignore-mask (UPDATE file)
- === test.update.sh: changed ignore-mask (UPDATE entry)
- === test.update.sh: testing UPDATED files (7 cases)
- === test.update.sh: case 1: update: add new file ===
- === test.update.sh: case 2: update: delete file ===
- === test.update.sh: case 3: update: update file ===
- === test.update.sh: case 4: nonsense case (skipping) ===
- === test.update.sh: case 6: update: delete entry ===
- === test.update.sh: case 5: update: add entry ===
- === test.update.sh: case 7: update: update entry ===
- === test.update.sh: PASS ===
我們可以看到,Tripwire對(duì)update功能一項(xiàng)項(xiàng)的做檢測(cè),并在最后PASS了,當(dāng)Tripwire所有的檢測(cè)項(xiàng)目都PASS后,編譯就OK了。
步驟4:生成數(shù)據(jù)庫(kù)
成功編譯Tripwire,我們準(zhǔn)備開(kāi)始對(duì)需要監(jiān)控的文件進(jìn)行掃描,以生成Tripwire數(shù)據(jù)庫(kù),在Tripwire 的src目錄下:如下操作。/tripwire -init,則系統(tǒng)會(huì)根據(jù)tw.conf.sunos5文件內(nèi)的設(shè)置,開(kāi)始掃描并生成相應(yīng)的數(shù)據(jù)庫(kù),上面提到,數(shù)據(jù)庫(kù)文件的路徑是在第二步configh中設(shè)置的,在本例中為/var/tripwire,我們得到了名為tw.db_secu.unix.com的數(shù)據(jù)庫(kù)文件。建議此時(shí)將Tripwire可執(zhí)行文件,數(shù)據(jù)庫(kù)文件,配置文件COPY到軟盤(pán)等地方,放到安全的地方。以后需要安全鑒別時(shí)直接在軟盤(pán)上執(zhí)行即可。
步驟5:測(cè)試
數(shù)據(jù)庫(kù)生成了,我們來(lái)測(cè)試一下吧,首先我們?cè)诟聇ouch生成一個(gè)goadd文件,其次我們把根下的.cshrc文件做一下改動(dòng),在里面加入幾個(gè)#注釋號(hào)。然后我們來(lái)運(yùn)行一下Tripwire看如何:
- / Tripwire -c ./tw.config.sunos5 -d ./tw.db_secu.unix.com
- Tripwire(tm) ASR (Academic Source Release) 1.3.1
- File Integrity Assessment Software
- (c) 1992, Purdue Research Foundation, (c) 1997, 1999 Tripwire
- Security Systems, Inc。 All Rights Reserved。 Use Restricted to
- Authorized Licensees。
- ### Phase 1: Reading configuration file
- ### Phase 2: Generating file list
- ./tripwire: /.profile: No such file or directory
- ./tripwire: /kernel/unix: No such file or directory
- ### Phase 3: Creating file information database
- ### Phase 4: Searching for inconsistencies
- ###
- ### Total files scanned: 4437
- ### Files added: 1
- ### Files deleted: 0
- ### Files changed: 1
- ###
- ### Total file violations: 2
- ###
- added: -rw-r--r-- root 0 Jul 3 18:45:31 2000 /goadd
- changed: -r--r--r-- root 669 Jul 3 18:46:15 2000 /.cshrc
- ### Phase 5: Generating observed/expected pairs for changed files
- ###
- ### Attr Observed (what it is) Expected (what it should be)
- ### =========== ============================= =============================
- /.cshrc
- st_size: 669 668
- st_mtime: Mon Jul 3 18:46:15 2000 Mon Jul 3 09:00:41 2000
- st_ctime: Mon Jul 3 18:46:15 2000 Mon Jul 3 09:00:41 2000
- md5 (sig1): 3z9gKjlZGq5GbeWOxpYaF9 1Z7K0n3ZKAyuPpAZB1G8uq
- snefru (sig2): 1vCDeMR45lpRCChmDithiW 1oRYPpQ:oZA6hVx6Zi4.NG
可以看到,系統(tǒng)運(yùn)行經(jīng)過(guò)了5個(gè)步驟,首先讀取配置文件,其次生成配置文件中設(shè)置為需要監(jiān)控,但實(shí)際并不存在的文件列表。第三部生成文件信息庫(kù),第四步報(bào)告檢查情況。我們看到共掃描了4437個(gè)文件,其中有一個(gè)文件是新增加的,有一個(gè)文件發(fā)生了改變。在下面它列出了這兩個(gè)文件-正是我們做了手腳的文件!在最后一步Tripwire將發(fā)生了改變的文件現(xiàn)在字節(jié)數(shù),生成時(shí)間,修改時(shí)間, md5, snefru簽名及數(shù)據(jù)庫(kù)中的記錄對(duì)比列出,是不是很爽?
上面我們講到的是Tripwire的主要功能,在命令行狀態(tài)下敲入tripwire -h 就會(huì)有其它使用參數(shù)的介紹,有興趣的管理員不妨一試。