一個笑話裡說一個小偷進入到一家,偷光了屋子裡所有的東西,但是卻用一個相同的拷貝代替了偷走的東西。但是在網絡攻擊環境下,這卻是可能發生的。當一個攻擊者利用一個系統漏洞非法入侵進入到你的系統。當你使用ps命令列出系統中的所有的進程時,卻看不到什麼異常的證據。你查看你的passWord文件,一切也是那麼的正常。到底發生了什麼事情呢?當系統進入到你的系統以後,第一步要做的事情就是取代系統上某些特定的文件:如netstat命令等。當你使用netstat -a命令時,就不會顯示系統攻擊者存在的信息。當然攻擊者將替代所有的可能洩露其存在的文件。一般來說包括:
/bin/ps
/bin/netstat
/usr/bin/top
由於這些文件已經被取代。所以簡單的利用ls命令查看這些文件是看不出什麼破綻的。有若干種方法你可以驗證系統文件的完整性。如果你安裝的是Red Hat, Caldera, TurboLinux或任何使用RPM的系統。你可以利用RPM來驗證系統文件的完整性:
首先你應該查明你的那些你需要查看的文件來自哪個軟件包,使用rpm命令你可以查明某個文件屬於某個包:
# rpm -qf /bin/netstat
net-tools-1.51-3
然後,可以掃描整個rpm包來查看那些發生了改變。對沒有發生改變的包使用該命令將沒有任何輸出信息,如下所示:
# rpm -V net-tools
#
將netstat的5.2版本的二進制可執行文件替換為6.0的版本以後再使用該命令的結果為:
.......T /bin/netstat
這說明/bin/netstat/文件已經被修改。若我使用rpm -qf測試ps和top命令可以得到其屬於包procps,然後在驗證包procps的完整性。下面是一個被黑的站點的結果:
# rpm -qf /bin/ps
procps.2.0.2-2
# rpm -V procps
SM5..UGT /bin/ps
SM5..UGT /usr/bin/top
攻擊者入侵到系統中,並且用自己的ps及top命令替代了我們系統中的命令。從而使管理員看不到其運行的進程,也許是一個sniffer來監聽所有的用戶所有進出網絡的數據並找尋到密碼信息。
下面是一個小的script來掃描你系統的所有的rpm庫,並檢查所有的包是否被篡改。但是應該注意的是並不是所有該scripts報告的問題都是說明該系統文件被攻擊者破壞。例如你的apssword文件一般肯定和你安裝系統時是不同的:
#!/bin/bash
#
# Run through rpm database and report inconsistencies
#
for rpmlist in `rpm -qa` # These quotes are back quotes
do
echo " ----- $rpmlist -----" ; rpm -V $rpmlist
done > /tmp/rpmverify.out
當你運行該scripts時,輸出被定向到文件/tmp/rpmverify.out你可以使用less命令查看該文件。但是由於文本文件如:/etc/passwd, /etc/inetd.conf等很可能顯示為被修改過。但是你如何知道這些是管理員自己修改的還是入侵者修改的呢方法是在你確保你的系統是干淨的,沒有被攻擊者入侵時,你為這些系統文件創建指紋信息。在你懷疑你的系統被入侵時使用這些這些指紋信息來判定系統是否被入侵。創建文件的指紋信息是通過命令md5sum 來實現的:
# md5sum /etc/passwd
d8439475fac2ea638cbad4fd6ca4bc22 /etc/passwd
# md5sum /bin/ps
6d16efee5baecce7a6db7d1e1a088813 /bin/ps
# md5sum /bin/netsat
b7dda3abd9a1429b23fd8687ad3dd551 /bin/netstat
這些數據是我的系統上的文件的指紋信息。不同的系統上的文件的 指紋信息可能是不同的,你應該是使用md5sum來計算自己系統文件的指紋信息。下面是一些你應該創建指紋信息的文件;
/usr/bin/passwd
/sbin/portmap
/bin/login
/bin/ls
/usr/bin/top
/etc/inetd.conf
/etc/services
通過指紋信息你可以決定是否有系統文件被修改。
>