完整性是安全要求的基本要求之一,本文將向讀者詳細介紹如何利用開源完整性檢測工具Tripwire來檢查系統的完整性。
一、系統的完整性
我們知道,系統的正常運行要靠系統程序的正常運轉,而程序的運行又與其可執行文件休戚相關。所以,維護系統完整性是確保系統安全的一項基本工作。我們這裡的系統完整性是指系統中可執行文件的完整性,也就是說系統中的程序文件沒被非法修改。
如果可執行文件被惡意修改的話,如改變、插入或刪除等,將直接威脅到系統的安全性。大多數情況下,黑客滲入到系統後會立即修改某些系統文件以創建後門,如用准備好的替代物換掉系統中原有的/bin/login文件以便使其不用口令便能登陸系統;然後再修改某些文件,例如/bin/ls等,以便隱藏其行徑。如果我們沒能發現這些改變的話,那無異於身處險境卻還以為很安全,這就為黑客的長期入侵提供了非常有利的條件,同時也意味著我們的損失將更大!為了改變這種被動的局面,我們需要一種文件完整性檢查工具,使得當系統文件被惡意修改後能及時發現,從而為進一步處理創造條件。
二、Tripwire概述
Tripwire的運行機理
Tripwire是一款最為常用的開放源碼的完整性檢查工具,它生成目標文件的校驗和並周期性的檢查文件是否被更改。下面我們簡單介紹一下Tripwire的運行機理。與大多數完整性檢查程序相同,對於需要監視的文件,Tripwire會使用校驗和來為文件的某個狀態生成唯一的標識(又稱為"快照"),並將其存放起來以備後用。當Tripwire程序運行時,它先計算新的標識,並於存放的原標識加以比較,如果發現不匹配的話,它就報告系統管理人員文件已經被修改。接下來,系統管理員就可以利用這個不匹配來判斷系統是否遭到了入侵。例如,如果Tripwire已經為/bin/login和/bin/ls存放了快照,那麼對它們的尺寸、inode號、權限以及其他屬性的任何修改,都逃不過Tripwire的火眼金睛。尤其是對於文件內容的修改,即使只改變了一個字節,Tripwire也能察覺得到,因為校驗和是針對文件整體的。
通過對以上運行機制的了解我們不難發現,完整性檢查工具的安裝時機非常重要,最好是在交付用戶使用和連入網絡之前的Linux系統初裝時進行。因為完整性檢查工具只有保留了系統文件的初始狀態(快照),才能確保系統文件的完整性;如果在系統使用一段時間後再取其快照的話,它很可能已經不再是原系統文件的映象(如已經遭到破壞),所以這時的完整性檢測的可靠性已經打了折扣。
Tripwire的組成
Tripwire主要由策略和數據庫組成。策略不僅指出Tripwire應檢測的對象即文件和目錄,而且還規定了用於鑒定違規行為的規則。一般情況下,對於/root、/bin和/lib目錄及其中文件的任何修改都應視為違規行為。數據庫則用來存放策略中規定的檢測對象的快照。只要建立了策略和數據庫,我們就可以隨時用快照來比較當前的文件系統,然後生成一個完整性檢測報告,從而判斷系統的完整性是否受到攻擊。除了策略和數據庫外,Tripwire還有一個配置文件,用以控制數據庫、策略文件和Tripwire可執行程序的位置等。
為了防止被篡改,Tripwire對其自身的一些重要文件進行了加密和簽名處理。這裡涉及到兩個密鑰:site密鑰和local密鑰。其中,前者用於保護策略文件和配置文件,如果多台機器具有相同的策略和配置的話,那麼它們就可以使用相同的site密鑰;後者用於保護數據庫和報告,因此不同的機器必須使用不同的local密鑰。
三、Tripwire的安裝和設置
Tipwire的安裝
Tripwire的下載地址為http://www.tripwire.org。如果您使用的是Red Hat Linux的話,可以下載該站點上的RPM格式的程序(當前最新版本為rpm4-tripwire-2.3-47.i386.tar.gz),假設將其下載到/A目錄的話,安裝過程如下所示:
rpm -ivh /A/rpm4-tripwire-2.3-47.i386.tar.gz
./configure make make install
# cd /etc/tripwire # ./twinstall.sh #
tripwire --init # rm twcfg.txt twpol.txt
DIR=/etc/tripwire SITE_KEY=$DIR/site.key
LOCAL_KEY=$DIR/`hostname`-local.key
# twadmin --generate-keys --site-keyfile $SITE_KEY
# twadmin --generate-keys --local-keyfile $LOCAL_KEY
# twadmin --create-cfgfile --cfgfile $DIR/tw.cfg \
--site-keyfile $SITE_KEY $DIR/twcfg.txt
# twadmin --create-polfile --cfgfile $DIR/tw.cfg \
--site-keyfile $SITE_KEY $DIR/twpol.txt
# cd $DIR # chown root:root $SITE_KEY $LOCAL_KEY tw.cfg tw.pol
# chmod 600 $SITE_KEY $LOCAL_KEY tw.cfg tw.pol
# tripwire -init
# rm twcfg.txt twpol.txt