上一節中說過,當netstat,ls等命令被修改,從而發現系統已經被入侵,下面該怎麼辦?根據你系統的重要性的不同,你有很多種選擇。但是我推薦對用戶目錄,passWord及其他關鍵的系統文件進行備份。然後重新安裝系統。但是不要隨便就將備份的文件拷貝到新系統,因為攻擊者可能在這些文件中隱藏一些非法的東西。
也可以不重新安裝系統,而是通過TCP wrapper來限制對主機的訪問,並且關閉非關鍵的網絡服務。然後更新被影響的包。重新干淨的啟動系統是很重要的,但是要實現這點並不容易。若你發現procps或net-tools包已經被攻擊者修改,第一件事情是重新安裝干淨的包來替換被攻擊者做了手腳留下後門的包。一般最好從你的系統發布者處得到最新的包來重新安裝一旦攻擊者進入到系統其就將在系統上存放一些工具並且將之隱藏起來,使你不容易發現。下面是一個事實在在的被攻擊者入侵的系統的實例。當系統被攻擊者入侵,服務器被限制網絡訪問,並且替代所有的受影響的包。然後就需要通過仔細查看log文件來發現重復的企圖進入系統。查看/etc/passwd文件,發現一個不屬於合法的用戶。進入到該用戶的目錄下:/home/jon,運行 "ls -l"得到如下的內容:
. .. .. .bashrc .bash_history .screenrc emech.tar.gz
除了一個名字為emech.tar.gz的文件以外,看不出什麼異常現象。但是仔細觀察,你就會發現系統有兩個 ".."目錄。(指該子目錄的上一級目錄)是的確很奇怪,我使用命令"cd .."我就會進入到/home目錄。原來其中子目錄名字是在兩個點後面有一個空格。(".. ")你可以通過如下命令發現:
# cd /home/jon
# echo .* cat -v
. .. .. .bashrc .bash_history .screenrc emech.tar.gz
仔細觀察可以發現每個子目錄都是被一個空格隔開,而在第二個“..”和.bashrc之間有兩個空格。這就意味著第二個".."子目錄其實為點-點-空格。下面進入到該目錄:
# cd ".. "
然後列出該目錄下的內容:
#ls
randfiles mech.set mech.pid checkmech cpu.memory
mech.help mech.usage mech mech.levels emech.users
psdevtab
下一步我們再查看是否其還在其他地方隱藏了文件:
# find / -user jon -print
除了/home/jon目錄以外,還發現如下的內容;
/usr/local/bin/.httpd
/tmp/cl
/tmp/.l/bcast
/tmp/.l/.l
/tmp/.l/imapd
/tmp/.l/log
/tmp/.l/pscan
/tmp/.l/pscan.c
/tmp/.l/rpc
/tmp/.l/slice2
/tmp/.l/sniffer
/tmp/.l/sXPloit
/tmp/.l/thc
/tmp/.l/ufs.c
這個入侵者已經在系統上安裝了Sniffers、端口掃描器,他給自己營造了一個很好的"窩" 。在查看中,還在合法的用戶的目錄下發現了一個可怕的名為"tcp.log"的文件。文件該文件有幾百行長,包括每一次telnet 及 FTP 出入該系統的連接!除了通告在該文件中出現的可能已經被入侵的機器管理員應該重新安裝系統以外,我同樣告訴他們需要重新系統的所有的用戶的口令。
下面有一些例子來幫助你搜索隱藏的危險。首先查看位於用戶目錄的具有"suid"或"guid"的文件。這些文件的可執行屬性位為s而不是x。如:
#ls -s /usr/bni/passwd
-r-s--x--x 1 root root 10704 Apr 14 1999 /usr/bin/passwd
屬性第四位的 "s" 表示該命令被執行時,該進程的實際有效用戶ID就變為root用戶。為了允許普通用戶修改自己的密碼,這是必須的。第七位的x若為s則表示別的組的用戶若運行該程序則該程序則具有用戶所有組的有效組ID。使程序能冒充特定的用戶或者組並不是一件有害的事情。但是一般來說非管理用戶在其目錄下不應該具root-suid 程序。我們可以使用下面的命令來查尋這樣的文件:
# find /home -perm -4000 -o -perm -2000 -print
下一步我們繼續尋找入侵者留下的程序和文件,所以需要一個快速的尋找隱藏目錄的方法。下面的方法就是尋找如".kde"的隱藏目錄。你也可以找到如".. "或“..."等目錄:cracker.
# find / -type d -name ".*" -print
"-type d"選項指僅僅列出目錄。這個命令不會不會將"."或".."列出。
作為一個好的系統管理者,為了擊敗攻擊者的攻擊行動,最好的方法是了解攻擊者的工作原理和機制。它們使用了那些工具,它們如何操作入侵等等。所以深入理解掌握我這裡講解的各種網絡工具是很有必要的。
上個星期,我用實例的方式說到了了一個攻擊者使用sniffer監聽網絡流來搜集用戶名和密碼。下面我們就詳細說明sniffer是如何工作的。簡單的說,sniffer是一個使你能檢測你的網絡接口接收到所有的數據報。一般情況下,計算機僅僅接受目的地址是自身的數據報,而sniffer使網絡接口進入雜錯模式,從而可以接受網卡收到的所有的數據報。
若你運行ifconfig eth0命令,會得到下面的結果:
eth0 Link encap:Ethernet HWaddr 00:C0:4F:E3:C1:8F
inet addr:192.168.22.2 Bcast:192.168.22.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:49448 errors:0 dropped:0 overruns:0 frame:0
TX packets:33859 errors:0 dropped:0 overruns:0 carrier:0
collisions:6 txqueuelen:100
Interrupt:10 Base address:0x300
打開兩個終端,一個終端裡運行sniffer器-sniffit;
# sniffit -i
另外一個虛擬終端裡你可以再次運行ifconfig eth0。你將會發現輸出中有下面的內容:
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
注意和上面相比較,增加了一個單詞"PROMISC" 這是雜錯模式(promiscuous mode)的縮寫,
sniffit是一個輕量級的,基於終端的sniffer器。你可以從http://reptile.rug.ac.be/~coder/sniffit/sniffit.Html得到它。
另外一個類似的sniffer是netwatch,你可以從http://www.slctech.org/~mackay/netwatch.html得到它。
如果你不希望在系統中安裝另外的sniffer,你可以使用系統中帶有的一個工具:tcpdump 這個工具雖然不如前面兩個工具那麼華麗,但是她可以完成所有同樣的功能。
# tcpdump host www.Linuxjournal.com -l tee /tmp/tcpdump.out
其中-l指示tcpdump將輸出數據存進入一個文件中。下面是輸出的內容:
16:41:49.101002 www2.linuxjournal.com.www > marcel.somedomain.com.1432: F
2303148464:2303148464(0) ack 1998428290 win 16352
16:41:49.101206 marcel.somedomain.com.1432 > www2.linuxjournal.com.www: . ack
1 win 32120 (DF)
16:41:50.001024 www2.linuxjournal.com.www > marcel.somedomain.com.1429: F
1805282316:1805282316(0) ack 1988937134 win 16352
16:41:50.001215 marcel.somedomain.com.1429 > www2.linuxjournal.com.www: . ack
1 win 32120 (DF)
16:41:50.840998 www2.linuxjournal.com.www > marcel.somedomain.com.1431: F
1539885010:1539885010(0) ack 1997163524 win 16352
16:41:50.841198 marcel.somedomain.com.1431 > www2.linuxjournal.com.www: . ack
1 win 32120 (DF)
16:41:51.494356 marcel.somedomain.com.1429 > www2.linuxjournal.com.www: P
1:335(334) ack 1 win 32120 (DF)
16:41:51.497003 marcel.somedomain.com.1433 > www2.linuxjournal.com.www: S
2019129753:2019129753(0) win 32120
(DF)
16:41:51.671023 www2.linuxjournal.com.www > marcel.somedomain.com.1429:
R
Linux系統中可以得到有很多種的sniffer。攻擊者在入侵系統以後,也許會使用修改的ps命令來隱藏其運行的sniffer器。或者將其改為一個看上去很正常的進程的名字。
在Linux環境下,比較著名的後門程序名字是rootkit,在各個搜索引擎都可以找到相關資料。你可以嘗試使用這些工具來促進你對攻擊者使用工具的了解