發新話題
打印

使用 Tripwire

使用 Tripwire

對於可疑行為您可以設定防火牆、監控網路連接埠及觀察系統日誌檔。但是,就算您盡了全力,入侵者仍有可能成功闖入 OpenLinux 系統,留下後門並設下陷阱,這樣就會使您的系統在消除入侵者闖入的原始漏洞後很久仍然不安全。可以使用 Tripwire 來保護系統免受隱藏安全漏洞的損害。

Tripwire 是一個由 Tripwire Security Systems, Inc. (http://www.tripwire.com) 維護的安全軟體套裝程式。該公司還支援在 OpenLinux 和其他 Linux 系統上執行的 Tripwire 的開放源代碼版本(可從 http://www.tripwire.org 上獲取)。

Tripwire 的工作是在系統處於安全狀態時拍攝一張系統快照(最好在作業系統剛安裝好後),檢查關鍵系統指令、配置檔案和裝置,並各自被指定一個唯一的總和檢查值。每次執行 Tripwire 檢查系統時,均會為每個檔案生成新總和檢查值並與舊總和檢查值進行比較。如果程式已被取代或配置檔案已被修改,則 Tripwire 會就此變更發出報警。如果變更來自入侵者,則可刪除受損檔案並用乾淨的副本取代之。

您對 Tripwire 的主要配置工作是修改 Tripwire 策略檔案(位於 /etc/tripwire/twpol.txt 中)。該檔案包含一個清單,其中列出 OpenLinux 中重要的二進位檔案、配置檔案和日誌檔,這些檔案在執行 Tripwire 時被劃分為不同的類別。該類別確定檔案的重要程度和檢查檔案的方式。

若要設定 Tripwire 來保護 OpenLinux,需要進行以下操作:

編輯 Tripwire 策略檔案 (/etc/tripwire/twpol.txt),使其包含需檢查檔案的完整清單。有關的詳細資訊,請參閱「建立策略檔案」部份。
如果需要修改與基本 Tripwire 配置檔案相關的任何資訊(如 Tripwire 檔案的位置和影響 Tripwire 運作方式的選項),請編輯 Tripwire 配置檔案 (/etc/tripwire/twcfg.txt)。有關的詳細資訊,請參閱「編輯 Tripwire 配置檔案」部份。
執行 Tripwire 安裝指令檔 (/etc/tripwire/twinstall.sh) 以完成安裝。有關的詳細資訊,請參閱「執行 twinstall.sh 指令」部份。
安裝 Tripwire 之後,可以用幾種不同的模式執行 Tripwire 指令來配置和檢查 OpenLinux 系統的完整性。可用的模式包括:

資料庫起始化模式 -- 透過建立 Tripwire 監視的所有目錄和檔案的總和檢查值,起始化 Tripwire 資料庫。
資料庫完整性模式 -- 對比 Tripwire 資料庫(假設該資料庫是在系統處於安全狀態時起始化的)檢查目前系統的完整性。
使用 Tripwire 一段時間後,您可能想變更配置檔案,而且肯定要變更策略檔案。使用 twadmin 指令可以對配置和策略檔案解密/解除標記,進行所需變更後再加密/重新標記,使其保持安全。

建立策略檔案
Tripwire 策略檔案的內容是定義在 OpenLinux 系統上需要檢查哪些檔案的完整性以及某個檔案被變更時其報警的嚴重程度。若要確保系統已獲得適當的保護,則需要非常謹慎地徹底設定該檔案。

Tripwire 隨附一個在開始時使用的示例策略檔案。該檔案位於:

/etc/tripwire/twpol.txt

若要變更該檔案,請在任何文字編輯器中以 root 使用者身份開啟之。該檔案會將其內容分為不同類別。參考檔案中的註釋有助於對該檔案進行配置。還有一個 Tripwire 策略指南檔案 (/usr/doc/tripwire/policyguide.txt) 可作為策略檔案中使用的語法參考指南。

預設情況下,twpol.txt 檔案包含與完整安裝 OpenLinux 相關的所有檔案。因此,如果執行 Tripwire 以起始化使用未變更的策略檔案的 Tripwire 資料庫,可能會接收到找不到檔案的訊息。若要減少對錯誤訊息的假警報數量,請用註釋取消 (#) 所有檢查電腦上不存在檔案的行。稍後會說明此過程。

瞭解策略檔案檢查定義
由 Tripwire 基於策略檔案規則檢查的那些檔案由屬性定義分組到 twpol.txt 中。根據使用檔案的方法及變更可能帶來的安全威脅,這些屬性定義允許按不同方法檢查檔案。以下是 twpol.txt 中的屬性定義:

關鍵 (SEC_CRIT) -- 包含不能變更的關鍵系統檔案。/bin 和 /sbin 目錄中的許多系統管理、網路和使用者指令都屬於該類別。
設定 UID (SEC_SUID) -- 包含在特殊使用者許可下執行的指令,即使該指令沒由這位使用者執行。這也被稱作「設定 UID」程式。(由於「設定 UID」程式會增加安全風險,所以 OpenLinux 系統上的這種程式應該很少。)
ReadOnly (SEC_BIN) -- 包含僅供管理員閱讀的二進位和配置檔案。
配置檔案 (SEC_CONFIG) -- 包含極少作出變更的配置檔案。然而,這些檔案一般是存取頻繁的檔案。這些檔案包含在啟動時或登入會話開始時執行的配置檔案。
日誌檔 (SEC_LOG) -- 包含持續不斷地接收和儲存新日誌訊息的檔案。雖然該檔案大小可不斷增長,但所有權權限不應變更。
目錄 (SEC_INVARIANT) -- 包含永遠不能變更所有權和存取權限的目錄。
Tripwire 執行時,如果檔案以不應有的方式作出了變更,那麼報警輸出會分為三種類別顯示在「Tripwire 完整性報告」中。這些類別包括:

低重要性 (SIG_LOW ) -- 因為該檔案不關鍵,所以對安全的影響很小。對 /tmp 目錄的變更就是例子。
中等重要性 (SIG_MED) -- 屬於本類別中的大多數項目都是內容可能發生很多變更的目錄,但所有權並沒有變更。這些目錄中包括 /home 和 /etc 目錄。
高度重要性 (SIG_HI) -- 因為任何已受損的可執行檔案在執行時都潛在地可能導致損壞,所以大多數由 Tripwire 檢查的管理和使用者指令均屬於本類別。
開始編輯 twpol.txt 建立 Tripwire 策略之前,應先瞭解一些該檔案中使用的語法。

瞭解策略檔案語法
大多數策略檔案中的規則說明的是要檢查的檔案或目錄,以及要執行的檢查類型。這些規則按 Tripwire 對檢查到違犯的回應方式(HI、MED 或 LOW)進一步分組。以下是一條規則的常見範例:

/sbin/fsck -> $(SEC_CRIT) ;

該行顯示 /sbin/fsck 指令是作為關鍵檔案(SEC_CRIT 屬性群組)檢查的。twpol.txt 中的大多數行都是採用這種形式。每個群組的屬性在 twpol.txt 檔案的開頭部份定義。以下是 SEC_CRIT 的設定方式:

SEC_CRIT = $(IgnoreNone) -SHa ; # Critical files that cannot change

IgnoreNone 值表示應檢查此檔案的所有屬性。相當於鍵入 +pinusgamctdbCMSH。所有那些字母都是可由 Tripwire 檢查的特定屬性。

您可以定義自己的屬性,用於指定到群組定義中或變更現有的屬性。或者,如果有個別檔案或目錄要檢查,可將其屬性直接新增到規則行中。以下列出 Tripwire 可以檢查的屬性(這些屬性亦在 policyguide.txt 中列出):

表格 13. 策略檔案 (twpol.txt) 可用的屬性 屬性 描述
+a 存取時間戳記
+b 區塊號碼
+c 檔案索引時間戳記(建立/修改)
+d 檔案索引儲存磁碟裝置號碼
+g 檔案所有者的群組 ID
+i 檔案索引號碼
+m 修改時間戳記
+n 檔案索引參考計數
+p 權限和檔案模式位元
+r 裝置號碼
+s 檔案大小 /etc/passwd
+t 檔案類型
+u 檔案所有者的使用者 ID
+l 大小增加的檔案
+C CRC-32 雜亂資訊值
+M MD5 雜亂資訊值
+S SHA 雜亂資訊值
+H Haval 記號值

設定 SEC_INVARIANT 群組的範例提供了對幾個屬性進行檢查的例子:

SEC_INVARIANT = +tpug ;

該群組用於檢查與目錄(如根目錄 (/)、/home 和 /etc)相關的屬性是不是變更項。該範例顯示檢查每個目錄的檔案類型 (t)、權限和檔案模式位元 (p)、檔案所有者使用者 ID (u) 和檔案所有者群組 ID。

若要將特定檔案排除在 Tripwire 檢查之外,可以使用驚嘆號 (!)。以下兩行指令可以避免檢查 /boot/System.map 和 /boot/module-info 檔案。

!/boot/System.map ;

!/boot/module-info ;

可以使用驚嘆號排除系統重新啟動時進出的檔案。

瞭解策略檔案類別
為了更加便於追蹤 Tripwire 所檢查的檔案和目錄類型,這些項目被分組為幾種類別。這些類別更加便於 Tripwire 向檔案群組指定 HI、MED 和 LOW 優先級。以下提供 twpol.txt 中類別的清單:

檔案系統和磁碟管理 -- 包括管理檔案和磁碟的公用程式,如 mkfs、restore、mount、rm、chmod、cp 和許多其他指令。
核心管理程式 -- 包括管理核心功能和模組的指令,如 adjtimex、insmod 和 modinfo。
網路程式 -- 包括關鍵的網路管理程式,如 ipchains、getty、iptunnel、portmap 和 route。
系統管理程式 -- 包括很多基本的系統管理程式,如 shutdown、init 和 syslogd。
硬體和裝置控制程式 -- 包括管理硬體裝置的程式,如 cardmgr 和 hwclock。
系統資訊程式 -- 包括顯示系統資訊的程式,如 kernelversion 和 runlevel 指令。
應用程式資訊程式 -- 包括幾個檢查符號連結和生成符號版本資訊的外部指令。
OS 公用程式 -- 包括很多來自 /bin 的最終使用者指令,如 cat、date、echo、hostname、ls 和 sort。
關鍵公用程式符號連結 -- 包括重要的系統公用程式,這些公用程式實際是到其他指令的符號連結。
臨時目錄 -- 包括經常變更的臨時檔案的目錄,如 /tmp 和 /var/tmp。
本機檔案 - 包括的目錄如 /sbin /usr/bin 和 /usr/sbin,本機系統的二進位程式儲存在這些目錄中。還可以包括本機外殼、安全檔案、啟動指令檔、登入指令檔和本機庫。
關鍵系統啟動檔案 - 包括啟動檔案,如 /boot 和 /sbin/lilo,以及系統每次啟動時均會變更的裝置和其他檔案。
關鍵配置檔案 - 包括專用於系統配置的配置檔案(這種檔案大多位於 /etc 目錄或其子目錄中)。
關鍵裝置 - 包括來自 /dev 和 /proc 的關鍵裝置檔案。
編輯策略檔案
因為 twpol.txt 中包含完整安裝 OpenLinux 的所有檔案,所以如果要安裝較少的套裝程式,很可能需要從清單中刪除一些檔案。然而,如果要新增不屬於 OpenLinux 發行版部份的軟體套裝程式,就應該考慮檢查這些檔案。任何可能被入侵者刪改了的可執行檔案,都可能將執行該程式的人的身份傳遞給入侵者。

編輯 Tripwire 配置檔案
Tripwire 配置檔案 (/etc/tripwire/twcfg.txt) 包含多個 Tripwire 選項。以下是一個 twcfg.txt 檔案的範例:

ROOT =/usr/sbin

POLFILE =/etc/tripwire/tw.pol

DBFILE =/var/lib/tripwire/$(HOSTNAME).twd

REPORTFILE =/var/lib/tripwire/report/$(HOSTNAME)-

$(DATE).twr

SITEKEYFILE =/etc/tripwire/site.key

LOCALKEYFILE =/etc/tripwire/ducks.handsonhistory.com-

local.key

EDITOR =/bin/vi

LATEPROMPTING =false

LOOSEDIRECTORYCHECKING =false

MAILNOVIOLATIONS =true

EMAILREPORTLEVEL =3

REPORTLEVEL =3

MAILMETHOD =SENDMAIL

SYSLOGREPORTING =false

MAILPROGRAM =/usr/lib/sendmail -oi -t

您能夠以 root 使用者身份,使用任何文字編輯器變更該檔案中的任何資訊。不過您可能並不想變更檔案中的太多資訊,因為該檔案可用於提醒您 Tripwire 檔案和目錄放在何處,選項的設定有何不同。

該檔案包括策略檔案 (POLFILE)、資料庫檔案 (DBFILE)、報告檔案 (REPORTFILE)、站台金鑰 (SITEKEYFILE) 和本機金鑰檔案 (LOCALKEYFILE) 的位置。您可以變更 Tripwire 的一些運作方式,如 LATEPROMPTING(如果設定為真,密碼片語提示將會盡可能推遲到最後時刻,從而不將密碼片語存入記憶體)和 LOOSEDIRECTORYCHECKING(如果設定為真,會防止報告僅僅因變更該目錄內的檔案而產生的目錄變更)。

還有數個可變更的值與電子郵件和錯誤日誌報告有關。MAILNOVIOLATIONS 即使在沒發現危害的情況下也會給管理員發送電子郵件。EMAILREPORTLEVEL 和 REPORTLEVEL 設定錯誤訊息級別(從 1 到 4),該錯誤資訊級別會分別透過電子郵件傳送給管理員並輸出到「Tripwire 完整性檢查」報告中。MAILMETHOD 和 MAILPROGRAM 分別將 SENDMAIL 設施和 sendmail 程式定義為郵寄方式。SYSLOGREPORTING 設定為真時,會將表示 Tripwire 何時執行的訊息傳送到系統日誌裝置中進行記錄。

執行 twinstall.sh 指令
最初建立加密的 Tripwire 配置檔案時,需要執行 /etc/tripwire/twinstall.sh 指令檔。在此過程中,twinstall.sh 會要求您建立本機和站台密碼片語。這些密碼片語以後將用於建立、檢查和升級 Tripwire 資料庫。以下是一個 twinstall.sh 會話的過程:

以 root 使用者身份鍵入以下指令:
/etc/tripwire/twinstall.sh

輸出結果會告訴您 twinstall.sh 正在建立金鑰檔案並要求按以下方式輸入站台金鑰檔案密碼片語:

Enter the site keyfile passphrase: **********

Verify the site keyfile passphrase:**********

按提示鍵入站台金鑰檔案密碼片語以保護 Tripwire 檔案,然後按要求再鍵入一次。金鑰生成完成後,會按以下方式要求您輸入本機金鑰檔案密碼片語:
Enter the local keyfile passphrase:**********

Verify the local keyfile passphrase:**********

按提示鍵入本機金鑰檔案密碼片語以保護 Tripwire 檔案,然後按要求再鍵入一次。此時已建立 /etc/tripwire/tw.cfg。隨後會按以下方式要求您輸入站台密碼片語:
Please enter your site passphrase:

按提示鍵入站台密碼片語。 建立了 /etc/tripwire/tw.pol 檔案。
現在建立 Tripwire 資料庫的準備已就緒。

建立 Tripwire 資料庫
若要為 OpenLinux 系統建立 Tripwire 資料庫,需要使用帶 --init 選項的 Tripwire 指令。Tripwire 資料庫提供了一個用於與將來系統檢查進行比較的基準。將來以檢查模式 (--check) 執行 Tripwire 時,會看到一個所偵測到的差異清單。那些檔案應作為非法進入可能造成的潛在危害來檢查。

從外殼上以 root 使用者身份鍵入以下指令來建立 Tripwire 資料庫:

tripwire --init

所有在策略檔案中建立的檔案都將受到檢查。然後建立總和檢查值來唯一地辨識每個檔案所處的狀態。包含這些總和檢查值的資料庫被複製到 /var/lib/tripwire/host.domain 檔案中,此處 host.domain 應被所用主機的完整網域名稱取代。

第一次建立資料庫後檢查檔案時,可能會看到一些錯誤。這些錯誤是由未安裝到系統上的檔案產生的。此時需要從策略檔案中刪除不存在檔案的輸入項。有關變更和更新策略和配置檔案過程的資訊,請參閱「更新策略或配置檔案」。

採用 Tripwire 檢查系統
任何時候,只要建立了與系統相符的策略檔案並建立了工作的 Tripwire 資料庫後,就可以執行帶 --check 選項的 Tripwire 來檢查系統。該檢查結果就是「Tripwire 完整性檢查報告」。若要執行該報告,請以 root 使用者身份,從外殼上鍵入以下指令:

tripwire --check

所有列在策略檔案中的檔案都將基於為每個檔案定義的屬性進行檢查。例如,Tripwire 所檢查的屬性有:每個檔案是否存在、是否未變更所有權、權限位元是否相同以及修改日期是否未變更。

瞭解「完整性檢查報告」
該報告顯示於螢幕上,也是以唯一的名稱放置在目錄 /var/lib/tripwire/report 下的加密檔案中。該名稱包含完整的主機名稱和一組代表目前日期和時間的數字。報告分為四個主要部份:

報告總結 -- 本部份包含主機名稱、主機 ID 和電腦的 IP 位址。還列出策略檔案、配置檔案和資料庫檔案的位置,以及執行產生該報告的指令行。以下是一個「報告總結」的範例:
使用的策略檔案:/etc/tripwire/tw.pol

使用的配置檔案:/etc/tripwire/tw.cfg

============= 報告總結:=================

主機名稱:d.xyzcorp.com

主機 IP 位址: 198.162.0.51

主機 ID:無

使用的資料庫檔案:/var/lib/tripwire/d.xyzcorp.com.twd

使用的指令行:tripwire --check

規則總結 - 本部份包含一張圖表,顯示在每個類別中已新增、刪除或修改的檔案的總數。該總結顯示變更檔案數的總和。
物件總結 - 本部份顯示已變更哪些單個檔案。應檢查每個檔案以確保該檔案未被篡改。
錯誤報告 - 本部份顯示所遇錯誤的清單。特別是可以看到一個檔案清單,這些是策略檔案中從最初的資料庫起始化直到現在都沒有發現的檔案。
列印「完整性檢查報告」
如果要在以後檢視該報告,可使用以下 twprint 指令顯示該報告:

twprint --print-report -r /var/lib/tripwire/report/rpt

在本範例中,「rpt」由要列印報告的名稱取代。因為報告名稱中會使用日期/時間戳記,所以最後的報告顯示的是最新情況。

更新策略或配置檔案
從系統中修改、新增或刪除檔案時,需要更新策略檔案 (twpol.txt)。可能還要變更配置檔案 (twcfg.txt) 中的某些設定。更新該檔案就不會重複看到相同的錯誤訊息了(許多這些錯誤並不是真正的錯誤)。若要建立新的策略和配置檔案,請執行以下步驟:

以 root 使用者身份,對加密的策略和配置檔案解密,然後執行以下兩個指令,將結果輸出為純文字檔案:
twadmin --print-polfile > /etc/twpol.txt

twadmin --print-cfgfile > /etc/twcfg.txt

以 root 使用者身份使用文字編輯器開啟 /etc/twpol.txt 和 /etc/twcfg.txt 檔案。作出任何需要的變更以反映系統上需檢查的檔案 (twpol.txt),或變更配置選項 (twcfg.txt)。
執行以下 twadmin 指令以更新加密的策略和配置檔案:
twadmin --create-polfile -S /etc/tripwire/site.key /etc/tripwire/twpol.txt

twadmin --create-cfgfile -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt

得到提示後輸入密碼片語。如果該指令成功,它會告知已成功寫入一個新策略檔案。
透過鍵入以下指令重新起始化 Tripwire 資料庫:
tripwire --init

新資料庫現在應該已經設定完成,可以準備執行下一個檢查了。

總結
Tripwire 套裝程式讓您獲得可作為系統安全基準使用的 OpenLinux 系統快照。可依據該基準定期對目前系統執行檢查,以瞭解是否有人篡改了關鍵的系統程式和配置檔案。

TOP

發新話題