作為一個系統管理員,你需要保護自己的系統不被攻擊者的侵入,但是系統非常龐大,這對你來說恐怕有些勉為其難了。Tripwire能夠為你提供幫助,它不是為了抵御攻擊者設計的,然而它能夠幫助你判斷系統的一些重要文件是否被攻擊者修改。1992年,還在Purdue大學COAST實驗室的 Gene H.Kim和Eugene H. Spafford開發了Tripwire。它們的目的是建立一個工具,通過這個工具監視一些重要的文件和目錄發生的任何改變。1997年,Gene Kim和W.Wyatt Starnes發起成立了Tripwire公司。他們成立這個公司的目的之一是發布一個能夠用於更多平台的商業升級版本。Tripwire3的商業版本非常昂貴(這客觀上促使aide的誕生)。 但是,到了2001年3月,情況發生了變化。Tripwire公司發布了Linux下的開放源碼版本Tripwire-2.3.1,這個版本使用GPL作為許可證,代碼是基於商業版的Tripwire-2.x。這無疑是一個好消息,最新的Redhat 7.x就包含了Tripwire-2.3.1的RPM軟件包。 在1992年,Tripwire開發之初,只有很少的UNIX安全工具。 COPS (Computer Oracle and PassWord System)是一個能夠支持很多UNIX平台的安全工具集。自從1989年,就開始自由分發,它使用CRC(循環冗余校驗)監視系統的文件。但是,COPS有很多不足,例如:它不能監視文件索引節點(inode)結構所有的域。 TAMU是一個腳本集,以和COPS相同的方式掃描UNIX系統的安全問題。TAMU通過一個操作系統的特征碼數據庫來判斷文件是否被修改。不過,它不能掃描整個文件系統,而且每當操作系統升級和修補之後,需要升級自己的特征碼數據庫。 Hobgoblin使用一個模板來檢驗文件系統,Hobgoblin運行時,會把系統文件和自己的數據庫進行對比,以此來判斷系統文件是否被修改。然而,如果文件系統改變,卻沒有辦法對它的數據庫進行升級。 ATP能夠做一個系統快照並建立一個文件屬性的數據庫。它使用32位CRC和MD校驗文件,而且每當檢測到文件被修改,它會自動把這個文件的所有權改為root。和COPS、TAMU以及Hobgoblin相比,這個特征是獨一無二的。 但是,以上這些工具,都不能提供足夠的能力和移植性用於完整性檢查。
Tripwire配置 Tripwire從一個配置文件中讀取你想要監視的文件和目錄。其自由版本和商業版本的配置文件是不同的。舊版本的自由版配置文件叫作tw.conf;而商業版和新版自由版(2.3.1)的配置文件是twpol.txt。不過,不要依賴其原始的配置文件,因為它的原始配置文件適用於所有Tripwire支持的操作系統,不一定能夠滿足的的安全要求。例如,其默認的配置就不能監視系統中的SUID和SGID文件,而這對於你的系統安全是非常重要的,因此,你需要自己修改配置加入對這個項目的監視。使用如下命令可以找出系統中的所有SUID文件: find / -type f -perm -4000 -print 以下命令可以找出系統中的所有SGID文件: find / -type f -perm -2000 -print 現在,你需要把以上命令找出的SUID和SGID文件加入到Tripwire的配置文件(自由版)/策略文件(商業版)。除此之外,最好把所有用戶home目錄下的初始文件也納入監視的范疇。主要包括以下文件(這裡是以筆者的Redhat Linux7.2為例): .bashrc、.profile、.bash_profile、.cshrc、kshrc、.login等 bash、csh以及ksh登錄之後的初始化命令或者腳本,根據自己的情況靈活決定。:) .forward 告訴/usr/lib/sendmail把郵件轉發到某些地址。 .netrc FTP初始化命令和宏,可能保存明文口令。 .rhosts 可以使用rsh登錄到本帳戶的遠程主機名。 .xinitrc、.Xauthority、Xdefault等 X窗口系統的一些重要文件。 例如,你可以使用下面的命令找出系統中所有的.bashrc文件: find / -name `.bashrc -print 在找出所有帳戶的重要文件之後,你就可以把它們加入到Tripwire的配置文件或者策略文件了(下面我們將以開放源碼的Tripwire-2.3.1進行討論)。在創建Tripwire的特征碼數據庫之前,還有一件事情要做,就是檢查某些重要文件的權限是否恰當,比如:.netrc和.rhosts的權限應該是600,這樣可以禁止其它用戶對這些文件的訪問。 下面在創建Tripwire特征碼數據庫之前,我們大體了解一下Tripwire支持的特征碼函數。所謂特征碼函數就是使用任意的文件作為輸入,產生一個固定大小的數據(特征碼)的函數。入侵者如果對文件進行了修改,即使文件大小不變,也會破壞文件的特征碼。因此,這些函數可以用於數據完整性檢測。而且這些特征碼函數一般是單向的。Tripwire-2.3.1版本支持如下特征碼例程:
MD5 RSA Data Security公司提出,產生128位特征碼的消息(message)算法。 Snefru Xerox安全散列函數 MD4 RSA Data Security公司提出。利用32位RISC架構的消息算法。 MD2 RSA Data Security公司提出。產生128位特征碼的消息算法。 SHA 安全散列算法(Secure Hash Algorithm) Haval 128位message-digest算法。 CRC-16 16位循環冗余校驗碼 CRC32 32為循環冗余校驗碼 在Redhat7.2中包含了Tripwire-2.3.1的RPM包,其默認的策略文件是針對Redhat的缺省安裝的。如果你使用的其它發布或者非缺省設置,就需要修改Tripwire的默認策略文件(/etc/tripwire/twpol.txt)。一個策略文件大體可以分為:全局變量定義和規則定義兩個部分。Redhat7.2中默認的策略文件還把策略規則分成了更小的部分:文件系統和磁盤管理程序(File System and Disk Administration Programs)、內核管理程序(Kernel Administration Programs)、網絡程序(Networking Programs)、系統管理程序(System Administration Programs)、硬件設備控制程序( Hardware and Device Control Programs)、系統信息程序(System Information Programs)、應用程序信息程序(Application Information Programs)、shell相關程序(Shell Related Programs)、操作系統工具(OS Utilities )、工具符號連接(Critical Utility Sym-Links)、臨時目錄(Temporary Directories)、局部文件(Local files)、系統啟動文件(Critical System Boot Files)、配置文件(Critical configuration files)和設備(Critical devices)。用戶可以根據自己實際情況進行適當的剪輯。下面我們使用一個簡單的策略文件,來介紹Tripwire的配置: # Critical configuration files ( # rulename = "Critical configuration files", severity = 100 ) { /etc -> $(ReadOnly) (rulename="/etc - critical config files") ; /etc/default -> $(ReadOnly) (rulename="/etc/default - critical config files") ; /etc/inittab -> $(ReadOnly) (rulename="/etc/inittab - critical config files") ; /etc/hosts -> $(ReadOnly) (rulename="/etc/hosts - critical config files") ; /etc/xinetd.conf -> $(ReadOnly) (rulename="/etc/xinetd.conf - critical config files"); /etc/protocols -> $(ReadOnly) (rulename="/etc/protocols - critical config files") ; /etc/services -> $(ReadOnly) (rulename="/etc/services - critical config files") ; /etc/xinet.d -> $(ReadOnly) (rulename="/etc/xinet.d - critical config files") ; 下面詳細解釋一下第一條規則。ReadOnly變量是這個軟件的一個預定義變量。這個變量會向Tripwire傳達以下信息: 檢查文件(這裡的文件是廣義的)的如下屬性 權限、索引節點號、連接數、擁有者的用戶ID、擁有者的組ID、大小、類型、修改時間戳、索引節點的設備號、分配的塊數、CRC-32特征碼、MD5特征碼。
忽略文件的如下屬性 設備的設備號、訪問時間戳、索引節點的創建/修改時間戳、文件的增長、SHA特征碼、Haval特征碼、 rulename(規則名)關鍵詞定義的是本規則的的名字,每條規則的名字都是唯一的。這個關鍵詞定義的信息會在報告文件中作為描述顯示出來。 使用
初始化 了解了上面的知識,下面你可以根據自己的系統情況編輯/etc/tripwire/twpol.txt文件。然後運行/etc/tripwire/twinstall.sh(這個腳本是RedHat7.2,Tripwire-2.3.1RPM包自帶的一個安裝腳本)進行第一步的設置: #cd /etc/tripwire/ #./twinstall.sh .... Creating key files... Enter the site keyfile passphrase: