天天看點

RPM 校驗軟體包完整性

有些事情對我們系統管理者來說至少發生過一次,就是你感覺到你的系統好像不對勁,開始懷疑有人已經突破了你的防禦。确定此事是否發生的途徑之一就是檢查系統檔案有沒有變化,你需要安裝TripWire或者其他審計工具來幫忙。

幸運的是,RedHat的程式員們開發了一個工具,叫作RedHatPackageManager,簡稱為RPM。在RedHat的Linux系統中是預設存在的。

RPM能為我做些什麼?

RPM是一個強大的工具,用來安裝、更新和校驗RedHat系統上的軟體包。它的校驗功能可以用來确認檔案是否被修改或覆寫,這正是本文所要讨論的。除了檔案的大小和時間戳,RPM還能檢查檔案的資訊文摘或MD5簽名。

在RFC1321中有MD5的較長的描述。簡單的說,MD5根據檔案的内容用算法産生一個唯一的128位簽名,用任何方法改變檔案都會導緻簽名改變。盡管人們一直在讨論修改檔案後能保持簽名不變的理論可能性,但截止到目前還沒有人能夠做到。是以在檔案使用前後各作一次MD5檢查,能夠99.9999%的保證檔案沒有改變。

如何使用RPM來檢查檔案?

有一些RPM的參數你需要注意。第一個是“-V”,它檢查與某一RPM包相關所有檔案的完整性。文法為:

rpm-Vpackage_name_to_verify

比如系統上運作了sendmail,通過以下指令檢查所有相關檔案的完整性:

rpm-Vsendmail

輸出看來是這樣的:

[root@fubar/root]#rpm-Vsendmail

S.5....Tc/etc/aliases

missing/etc/mail/ip_allow

S.5....Tc/etc/mail/relay_allow

S.5....Tc/etc/sendmail.cf

S.5....Tc/etc/sendmail.cw

S.5....T/usr/sbin/sendmail

S.5....T/var/log/sendmail.st

[root@fubar/root]#

隻有校驗失敗的檔案才被列出,沒有列出的檔案應該是完好無損的。左邊給出了為什麼校驗失敗的原因,具體解釋如下:

S=大小改變

M=權限改變

5=MD5改變

L=連接配接改變

D=裝置改變

U=使用者改變

G=組改變

T=日期和時間改變

missing=檔案丢失

從上面的輸出可見,檔案aliases,relay_allow,sendmail.cf和sendmail.cw的大小、時間日期和MD5發生了改變。由于它們是配置檔案,應該沒什麼關系。但是/usr/bin/sendmail的改變就要引起注意了,它是一個監聽在25端口的可執行檔案,用來接受信件。除非你更新了sendmail,否則它不應該校驗失敗,很明顯有人修改或者覆寫了原來的sendmail檔案,可能帶有木馬或者後門。

輸出還顯示ip_allow檔案被删除或者被改名。這是用來檢查和控制SPAM的一個檔案,它的丢失某種程度上表明相關的二進制檔案可能被修改。

當觀察RPM輸出的時候,在檢查日期時間和檔案大小的同時,要特别注意MD5是否變化,入侵者經常修改或覆寫某些檔案來隐藏他們的蹤迹。

挨個檢查軟體包很費時間,用“-a”選項可以一次性檢查所有RPM包:

rpm-Va>/root/rpm_chk.txt&

這條指令讓RPM檢查伺服器上安裝的RPM包,結果輸出到rpm_chk.txt檔案,最後的可選項“&”表示指令在背景運作,給出shell提示符可以作其他事情。

最後一個技巧,當你想要檢查某個檔案而不知道它屬于哪個RPM包,可以用“-qf”選項檢視哪個軟體包安裝了此檔案:

[root@fubar/root]#rpm-qf/usr/sbin/sendmail

sendmail-8.8.7-20

這表明此sendmail檔案是sendmail-8.8.7-20RPM包的一部分。如果一個檔案沒有關聯的RPM包,輸出大概是這樣的:

[root@fubar/root]#rpm-qf/sbin/.vile_stuff

file/sbin/.vile_stuffisnotownedbyanypackage

小心你系統上運作的不能被校驗的程式!

如何開始?

首先,你必須有root權限來運作RPM。當以普通使用者身份來運作RPM校驗時,它的輸出資訊是不正确的,因為普通使用者對某些檔案可能都沒有read權限。這意味着隻有root才能檢查整個系統檔案的完整性。

RPM二進制檔案在/bin目錄下,它的資料庫檔案在/var/lib/rpm下。

最安全的方法是在伺服器連到Internet之前,把這些資料檔案和RPM二進制檔案儲存到軟碟或CD上,這能夠保證你的工具自身是安全的。

第一件事是檢查/var/lib/rpm,這些資料檔案的日期和時間應該和安裝系統當時的情況一樣,如果你發現日期不對,就要小心了。

其次,我們可以使用RPM來校驗自身的完整性:

[root@fubar/root]#rpm-Vrpm

沒有輸出表示RPM應該沒有什麼問題。但這不是絕對的,因為二進制檔案如果本身可疑就很難說。是以要盡可能使用CD上的工具,如果你沒有比較安全的工具,用RPM校驗自身在一般情況下也足夠了。

現在我們知道RPM自身沒有問題了,對整個系統作個檢查:

一個簡單的技巧就是定期檢查整個系統,然後比較不同時期的rpm_chk.txt,進而發現哪些不正常的檔案改動。

總結

盡管RPM不是專門設計用來審計檔案的,但它可以幫你不少忙。目前RedHatLinux各個版本中都預設自帶RPM,這意味着你完成RedHatLinux安裝以後,就可以使用RPM了,同時MD5提供了一種高精确度的檔案校驗方法。唯一注意的是要保證RPM自身和它所有資料檔案的完整性,以防止入侵者修改它們來隐藏蹤迹