歡迎您光臨本站 註冊首頁

數據完整性檢測工具:Tripwire

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  作者:nixe0n

綜述


作為一個系統管理員,你需要保護自己的系統不被攻擊者的侵入,但是系統非常龐大,這對你來說恐怕有些勉為其難了。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:<--設置讀取配置和策略文件(默認是/etc/tripwire/tw.pol和/etc/tripwire/tw.cfg)的密碼
Verify the site keyfile passphrase:<--確認一次

....

Enter the local keyfile passphrase:<--設置寫新資料庫的密碼
Verify the local keyfile passphrase:<--確認一次

這兩個密碼被加密后,保存在/etc/tripwire/localhost-local.key和/etc/tripwire/site.key文件中。這兩個密碼分別用來限制用戶對tripwire配置文件讀取以及改寫特徵碼資料庫文件。注意:Tripwire的配置文件、策略文件和特徵碼資料庫文件是以二進位方式保存的無法閱讀。如果要改變策略,只能編輯/etc/tripwire/twpol.txt文件,然後通過Tripwire的策略升級模式升級策略。
....

Please enter your site passphrase: <--輸入密碼

....



準備工作完成之後,可以運行如下命令產生特徵碼資料庫:


#tripwire --init
Please enter your local passphrase: <--輸入密碼
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***


這個命令將根據策略/配置文件的內容產生一個系統快照,特徵碼資料庫文件一般保存在/var/lib/tripwire/目錄下。到這裡初始化工作完成。注意:在初始化過程中,可能產生大量的錯誤信息,例如:


Waring:File System error.
Filename:/proc/driver/rtc
No such file or derectory.
Continuing..


這些錯誤信息一般是由於策略文件編寫不當造成的,可以忽略。為了減少這些錯誤信息的出現,應該根據自己的系統仔細編輯你的策略文件。


使用Tripwire檢查文件的變動

初始化工作完成之後,你就可以使用Tripwire來監視系統內文件的變動情況了。使用如下命令將啟動Tripwire的檢查模式:


#./tripwire --check --interactive -V vi


其中參數--check使Tripwire進入檢查模式,而--interactive使Tripwire包檢查報告輸入一個編輯器vi中;-V指定使用的編輯器。從報告中,你可以看到系統被改變的文件。不過,系統中某些文件的改變是合理的,可以忽略。檢查完成之後,如果系統沒有異常情況,使用Tripwire的升級模式(tripwire -m u)對特徵碼資料庫進行升級就可以了,不過每次的產生的報告都被保存在/var/lib/tripwire/report/目錄中。

最後,要強調的是,Tripwire安裝完成之後,要把其配置文件、特徵碼資料庫文件的多餘許可權去掉,以更好地對其進行保護。



總結


本文討論了如何在Redhat7.2中使用數據完整性檢測工具Tripwire,如果想對Tripwire進行更深入的了解請參考Tripwire的手冊頁,或者到它的官方網站http://www.tripwire.ort查看相關技術資料。


[火星人 ] 數據完整性檢測工具:Tripwire已經有848次圍觀

http://coctec.com/docs/security/show-post-72718.html