Tripwire:一款老牌的文件完整性檢查器
Tripwire是一款最為常用的開放源碼的完整性檢查工具,它生成目標文件的校驗和并周期性的檢查文件是否被更改。下面我們簡單介紹一下 Tripwire的運行機理。與大多數完整性檢查程序相同,對于需要監視的文件,Tripwire會使用校驗和來為文件的某個狀態生成唯一的標識(又稱為 "快照"),并將其存放起來以備后用。當Tripwire程序運行時,它先計算新的標識,并于存放的原標識加以比較,如果發現不匹配的話,它就報告系統管理人員文件已經被修改。接下來,系統管理員就可以利用這個不匹配來判斷系統是否遭到了入侵。例如,如果Tripwire已經為/bin/login和 /bin/ls存放了快照,那么對它們的尺寸、inode號、權限以及其他屬性的任何修改,都逃不過Tripwire的火眼金睛。尤其是對于文件內容的修改,即使只改變了一個字節,Tripwire也能察覺得到,因為校驗和是針對文件整體的。
下載鏈接:http://down.51cto.com/data/149235
Tripwire的工作原理
當Tripwire運行在數據庫生成模式時,會根據管理員設置的一個配置文件對指定要監控的文件進行讀取,對每個文件生成相應數字簽名,并將這些結果保存在自己的數據庫中,在缺省狀態下,MD5和SNCFRN(Xerox的安全哈希函數)加密手段被結合用來生成文件的數字簽名。除此以外,管理員還可使用MD4,CRC32,SHA等哈希函數,但實際上,使用上述兩種哈希函數的可靠性已相當高了,而且結合MD5和sncfrn兩種算法(尤其是sncfrn)對系統資源的耗費已較大,所以在使用時可根據文件的重要性做取舍。當懷疑系統被入侵時,可由Tripwire根據先前生成的,數據庫文件來做一次數字簽名的對照,如果文件被替換,則與Tripwire數據庫內相應數字簽名不匹配, 這時Tripwire會報告相應文件被更動,管理員就明白系統不"干凈"了。
有一點要注意,上述保障機制的重點在于數據庫內的數字簽名,如果數據庫是不可靠的,則一切工作都喪失意義。所以在Tripwire生成數據庫后,這個庫文件的安全極為重要。比較常見的做法是將數據庫文件, Tripwire二進制文件,配置文件單獨保留到"可拿走并鎖起來"的質上,如軟盤,將上述文件復制到軟盤后,關閉寫保護口,鎖到保險柜中。除軟盤外, 一次性介質,如cd-r也是很好的選擇,這樣即使侵入者拿到盤也無計可施。除這種辦法外,利用PGP等加密工具對上述關鍵文件進行數字簽名也是一個很好的選擇。
當然,當管理員自身對某些文件更動時, Tripwire的數據庫必然是需要隨之更新的, Tripwire考慮到了這一點,它有四種工作模式:數據庫生成,完整性檢查,數據庫更新。交互更新。當管理員更動文件后,可運行數據庫更新模式來產生新的數據庫文件。
下載Tripwire,安裝前的準備工作
Tripwire支持絕大多數Unix操作系統,它的安裝需要編譯環境,如gcc,cc等,還需要gzip,gunzip等解壓工具。這些工具管理員可從相應站點獲取,這里不討論。Tripwire可從www.tripwire.com獲得,到它的主頁download部分,可以看到當前可免費download的Tripwire1.3 ASR版本,下載下來就是。
安裝Tripwire
Tripwire的tar包解開后,我們可以看到如下目錄結構,建議先看看根下的README文件,對Tripwire有個整體的了解。隨后,我們就可以一步步的安裝這個軟件了。
步驟1:匹配主機環境
在Tripwire的根下有Ported這個文件,它是對支持的系統及相關配置文件的描述,管理員第一步需要打開這個文件,找到符合自己系統的描述,本文的測試環境是solaris2.6,我們截取相關部分來看看,
- 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對應的行,在下幾步的配置中需要用到它們兩個對應的文件。此處要注意的是:每種操作系統這兩個地方所對應的文件是不同的。
步驟2:配置監控目標
進入include目錄,編輯config.h文件,將第一步Ported中conf.h后對應的文件名和路徑寫入config.h開始#include部分,此例中即為
- #include "../configs/conf-svr4.h"
同時注意的是,在configh文件中還有Tripwire配置文件,Tripwire數據庫文件的放置路徑及生成數據庫的文件名等設置,管理員按照個人喜好設置即可編輯好config.h后,還要根據本機情況編輯修改位于configs目錄下的Tripwire配置文件,也就是上面Ported 文件中tw.config對應的tw.conf.sunos5,我們知道,對文件,目錄等的監控就是在這里設置的。我們一段段的選取一部分這個文件來看看:
- #
- # - : 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等,它表示可以對文件,目錄設置的監控項目,管理員可組合使用,最前面的-,+號表示選取或忽略這些屬性。如下例:
- /var +pinugsm12-a
它表示對目錄/var下所有文件檢查,監控項目分別有文件屬性,inode,鏈接數,屬組,屬主,修改時間,生成時間,數字簽名等,但是,對這個目錄下的文件的訪問不加監控,如果訪問也監控的話,正常的用戶訪問也會被Tripwire捕捉,這沒有必要。
為了方便起見,Tripwire作者把常見組合做成了模板,如下,
- #
- # 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這個文件再向下,就是管理員根據情況填寫了,把需要監控的文件及目錄加入列表,賦予相應屬性即可。如下:
- / 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的根下,執行make,系統即會自動編譯,編譯成功后,可以再執行make test,Tripwire會自動檢查編譯情況及工作狀態,它會一段一段的測試,我們選取一段如下:
- === 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對update功能一項項的做檢測,并在最后PASS了,當Tripwire所有的檢測項目都PASS后,編譯就OK了。
步驟4:生成數據庫
成功編譯Tripwire,我們準備開始對需要監控的文件進行掃描,以生成Tripwire數據庫,在Tripwire 的src目錄下:如下操作。/tripwire -init,則系統會根據tw.conf.sunos5文件內的設置,開始掃描并生成相應的數據庫,上面提到,數據庫文件的路徑是在第二步configh中設置的,在本例中為/var/tripwire,我們得到了名為tw.db_secu.unix.com的數據庫文件。建議此時將Tripwire可執行文件,數據庫文件,配置文件COPY到軟盤等地方,放到安全的地方。以后需要安全鑒別時直接在軟盤上執行即可。
步驟5:測試
數據庫生成了,我們來測試一下吧,首先我們在根下touch生成一個goadd文件,其次我們把根下的.cshrc文件做一下改動,在里面加入幾個#注釋號。然后我們來運行一下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
可以看到,系統運行經過了5個步驟,首先讀取配置文件,其次生成配置文件中設置為需要監控,但實際并不存在的文件列表。第三部生成文件信息庫,第四步報告檢查情況。我們看到共掃描了4437個文件,其中有一個文件是新增加的,有一個文件發生了改變。在下面它列出了這兩個文件-正是我們做了手腳的文件!在最后一步Tripwire將發生了改變的文件現在字節數,生成時間,修改時間, md5, snefru簽名及數據庫中的記錄對比列出,是不是很爽?
上面我們講到的是Tripwire的主要功能,在命令行狀態下敲入tripwire -h 就會有其它使用參數的介紹,有興趣的管理員不妨一試。