問:有人匯報我的計算機系統發生了安全事故,但是我卻看不出任何問題。我如何知道我的系統是否出現問題了呢?
答:作為一個系統管理員最不希望聽到的事情就是有人打電話告訴他:“我有足夠的理由相信你的計算機系統被入侵,也許現在正在運行有一個網絡嗅探器。
我的系統被入侵了?正在運行嗅探器?這是什麼意思呢?我怎麼判斷這是否是真的呢?我該怎麼辦呢?
Uuix特洛伊木馬的歷史
如果回到二十世紀八十年代,那時候查找Unix系統發生了什麼問題是並不是非常困難的一件事情。
o "last"命令可以顯示入侵者使用了哪個賬號,它們來自哪裡,它們什麼時候登錄了你的系統。
o "ls"命令可以顯示它們的文件。"ps"命令將顯示嗅探器、密碼破解器及其他入侵者運行的程序。
o "netstat"命令可以顯示當前網絡連接及哪些端口被監聽等待連接請求。
o "ifconfig"命令可以判斷以太接口是不是處於雜錯模式(如果入侵者安裝了嗅探器,網卡就會處於雜錯模式,從而監聽網絡上所有的信息,而不僅僅是發給自己的信息)
簡而言之,系統能提供給你精確的可信信息。
然而隨著時間的推移,聰明的黑客發明了隱藏自己活動蹤跡的方法,通過開發程序來幫助隱藏自己。這些方法和程序在電子公告牌或雜志中被發表,如2600及Phrack等等。
例如:由Black Tie Affair在Phrack 25的"Hiding Out Under Unix"文章中,提供了修改/var/log/wtmp文件來隱藏入侵者活動賬號信息的源代碼。
後來很多聰明的程序員都加入了編寫修改如"ls","ps","netstat"等系統程序的時間和大小的行動。把這些系統進程變為特洛伊木馬程序。
正如特洛伊木馬被希臘人洗劫特洛伊一樣,這些程序看上去似乎很熟悉和值得信任,但是實際上它們隱藏了很多異常信息以使管理員使用它們察看系統信息時相信系統一切都是正常的。從而入侵者可以監聽得到登錄密碼、隱藏它們的文件、隱藏它們的網絡連接和進程。由於這些木馬程序具有和同目錄下的文件一樣的時間,看上去具有一樣的校驗碼(使用其他木馬技術)。從而管理員看不到任何異常現象,而認為系統是"clean"且正常的。
這些木馬程序以"rootkit"的方式捆綁打包。Linux Root Kit 3(lrk3)於1996年發布,增添了tcp wrapper木馬和一些增強的程序,當時在X86兼容機linux系統中隱藏活動和通過嗅探器來偷竊密碼是最常用的方法。
很多入侵者都將木馬的配置文件(指示木馬隱藏哪些東西的配置文件)存放在默認的位置。知道這些默認位置的管理員能相當容易地發現並禁止它們,並且可以使用"strings"命令來察看這些二進制木馬程序的可疑字符串。另外一個常用的方法是使用"find"命令來查找所有的在24小時內更新的文件。雖然"ls"可能會撒謊,"find"一般不大會出現問題。第三個方法是對於那些使用rpm管理包的系統如redhat等,可以考慮使用"rpm -Vf /bin/ps"命令來對關鍵程序的完整性進行校驗,如果"ps"沒有被修改,則該命令不會返回任何內容,否則會輸出:
S.5....T c /bin/ps
這表示ps程序被修改過。
後來,ante在1998年11月發布了Linux Root Kit 4(lrk4)。這個版本添加了新的木馬程序"pidof"、"killall"(用來根據進程名來殺進程的命令)、"find"、"top"、"crontab"及新的檢測嗅探器的程序。
從README處得到的該kit包含的所有程序列表:
bindshell port/shell類型的守護進程
chfn 經過木馬化的系統程序,可以獲得root權限
chsh 經過木馬化的系統程序,可以獲得root權限
crontab 經過木馬化的系統程序,隱藏定時任務
du 經過木馬化的系統程序,隱藏文件
find 經過木馬化的系統程序,隱藏文件
fix 文件修復器
ifconfig 經過木馬化的系統程序,隱藏活動的嗅探器
inetd 經過木馬化的系統程序,實現遠程訪問權限
killall 經過木馬化的系統程序,不能殺掉被隱藏的進程
linsniffer 嗅探器
login 經過木馬化的系統程序,實現遠程訪問權限
ls 經過木馬化的系統程序,實現隱藏文件
netstat 經過木馬化的系統程序,實現隱藏網絡連接
passwd 經過木馬化的系統程序,實現獲得root權限
pidof 經過木馬化的系統程序,實現隱藏進程
ps 經過木馬化的系統程序,實現隱藏進程
rshd 經過木馬化的系統程序,實現獲得遠程訪問權限
sniffchk 經過木馬化的系統程序,實現檢測嗅探器是否在運行
syslogd 經過木馬化的系統程序,隱藏特定的log信息
tcpd 經過木馬化的系統程序,隱藏連接,避免遠程連接被拒絕
top 經過木馬化的系統程序,實現隱藏進程
wted wtmp/utmp編輯器
z2 Zap2 utmp/wtmp/lastlog擦除器
sshd sshd程序
對付這個木馬程序包有幾個解決方法。
可以嘗試使用你確信沒有是可信的程序來察看系統狀態,對於管理員來說這可能是最容易的方法了。在系統被入侵以後你不能信任系統的任何程序,這就需要你對系統進行徹底檢查。但是作為管理員這時候面對的最大的問題是如何識別系統中哪些程序被修改或被替換的。
識別哪些程序是被修改或替換過是非常麻煩的事情。如果管理員在系統安裝成功以後馬上就對所有可執行命令生成MD5校驗和,則這個過程就非常簡單了。有些軟件如"tripware"可以自動生成對所有指定程序的MD5校驗和,並且自動監視這些程序是否發生了變化。配置諸如"tripware"這樣的程序是值得的,在系統發生問題tripware以後可以很快幫助管理員發現問題並且恢復系統。
對於使用了軟件包方式管理軟件的發布,如redhat來說,RPM命令本身具有驗證軟件包完整性的功能。命令“rpm -V -a”可以用來根據本地的rpm數據庫校驗系統安裝的所有rpm包的完整性。但是由於rpm數據庫也可能被修改,因此你不能完全相信該命令的結果。除非rpm數據庫存放在不可寫的介質中,如cdrom。
最好的方法是通過和另外一台redhat鏡象服務器中的文件進行比較來校驗文件。為了和FTP服務器上的“/bin/ls”命令進行比較,可以這樣進行:
# rpm -Vvp ftp://mirror.site/dir/RedHat/RPMS/fileutils-3.16-10.i386.rpm
S.5....T /bin/ls
注:這裡的/bin/ls屬於fileutils包的文件。可以從
http://www.redhat.com/mirrors.Html
得到所有的鏡象服務器。
為了避免在確認系統哪些程序被修改,管理員往往更希望直接通過替換來恢復系統。這時候問題就成為“了恢復對系統的控制必須替換哪些程序?”
替換可以是有目的的(僅僅重新安裝那些可疑程序),也可以是完全重新安裝系統。
無論哪一種方式,替換行為將破壞入侵者行為在你的系統上留下的痕跡。這可能會妨礙徹底的調查。尤其是在你希望起訴入侵者時,由於有用的證據被破壞,起訴將不可能。因此在恢復系統以前最好對整個系統進行完全的備份。
對於這兩種解決辦法-部分或完全替換系統文件-第一種辦法的危險是可能不能完全清除被修改的程序,從而系統仍然處於危險中;第二種方法的問題是需要花費更多的時間來恢復並可能破壞系統重要數據。
對於部分替換來說,你至少需要恢復lrk4的Makefile中修改的程序,一般來說包括以下
Should you chose to do a partial re-installation, you will need to
replace all of the programs modified by the lrk4 Makefile. On a Red Hat
5.2 system, at minimum the following RPM packages must be replaced:
rpm包名 文件名
util-linux /usr/bin/chfn
usr/bin/chsh
/bin/login
fileutils /bin/ls
passwd /usr/bin/passwd
procps /bin/ps
/usr/bin/top
rsh /usr/sbin/in.rshd
net-tools /bin/netstat
/sbin/ifconfig
sysklogd /usr/sbin/syslogd
netkit-base /usr/sbin/inetd
tcp_wrappers /usr/sbin/tcpd
psmisc /usr/bin/killall
SysVinit /sbin/pidof
findutils /usr/bin/find
注:在附錄中有一個名為findrpms的腳本,其可以產生這個包列表。可以實現來驗證這些包:
# for i in `./findrpms`
> do
> echo Verifying package $i
> rpm -Vp ftp://mirror.site/dir/RedHat/RPMS/$i
> done
如果這些包在鏡象站點中被更新,你需要修改上面的路徑指向對應你的redhat版本的rpm包所在目錄。
由於希望替換已經安裝在系統中的文件(同樣也是已經在RPM數據庫中),因此需要在rpm命令中使用參數"--force"來重新安裝那些已經安裝了的軟件包。
要從Rdhat的FTP服務器上更新上面列出的第一個軟件包的命令是:
rpm -Uvh ftp://ftp.redhat.com/redhat/updates/6.2/i386/util-linux-2.7-18.i386.rpm
其他一些木馬程序
和"ps"和"netstat"同樣重要的一個系統工具命令是"lsof"(LiSt Open Files)。使用"lsof"命令管理員可以查看進程、進程UID(包括sniffer、IRC、login shell)、網絡連接和所有當前被打開的文件(如顯示sniffer的log文件、工作目錄等信息)。
可以從Redhat光盤來安裝或者從匿