攻擊的善后工作
1. 日志系統(tǒng)簡(jiǎn)介
如果攻擊者完成攻擊后就立刻離開(kāi)系統(tǒng)而不做任何善后工作,那么他的行蹤將很快被系統(tǒng)管理員發(fā)現(xiàn),因?yàn)樗械木W(wǎng)絡(luò)操作系統(tǒng)一般都提供日志記錄功能,會(huì)把系統(tǒng)上發(fā)生的動(dòng)作記錄下來(lái)。所以,為了自身的隱蔽性,黑客一般都會(huì)抹掉自己在日志中留下的痕跡。想要了解黑客抹掉痕跡的方法,首先要了解常見(jiàn)的操作系統(tǒng)的日志結(jié)構(gòu)以及工作方式。Unix的日志文件通常放在下面這幾個(gè)位置,根據(jù)操作系統(tǒng)的不同略有變化
?。痷sr/adm——早期版本的Unix。
?。疺ar/adm新一點(diǎn)的版本使用這個(gè)位置。
?。疺arflort一些版本的Solaris、 Linux BSD、 Free BSD使用這個(gè)位置。
?。痚tc,大多數(shù)Unix版本把Utmp放在此處,一些Unix版本也把Wtmp放在這里,這也是Syslog.conf的位置。
下面的文件可能會(huì)根據(jù)你所在的目錄不同而不同:
acct或pacct-一記錄每個(gè)用戶使用的命令記錄。
accesslog主要用來(lái)服務(wù)器運(yùn)行了NCSA HTTP服務(wù)器,這個(gè)記錄文件會(huì)記錄有什么站點(diǎn)連接過(guò)你的服務(wù)器。
aculo保存撥出去的Modems記錄。
lastlog記錄了最近的Login記錄和每個(gè)用戶的最初目的地,有時(shí)是最后不成功Login的記錄。
loginlog一記錄一些不正常的L0gin記錄。
messages——記錄輸出到系統(tǒng)控制臺(tái)的記錄,另外的信息由Syslog來(lái)生成
security記錄一些使用 UUCP系統(tǒng)企圖進(jìn)入限制范圍的事例。
sulog記錄使用su命令的記錄。
utmp記錄當(dāng)前登錄到系統(tǒng)中的所有用戶,這個(gè)文件伴隨著用戶進(jìn)入和離開(kāi)系統(tǒng)而不斷變化。
Utmpx,utmp的擴(kuò)展。
wtmp記錄用戶登錄和退出事件。
Syslog最重要的日志文件,使用syslogd守護(hù)程序來(lái)獲得。
2. 隱藏蹤跡
攻擊者在獲得系統(tǒng)最高管理員權(quán)限之后就可以隨意修改系統(tǒng)上的文件了(只對(duì)常規(guī) Unix系統(tǒng)而言),包括日志文件,所以一般黑客想要隱藏自己的蹤跡的話,就會(huì)對(duì)日志進(jìn)行修改。最簡(jiǎn)單的方法當(dāng)然就是刪除日志文件了,但這樣做雖然避免了系統(tǒng)管理員根據(jù)IP追蹤到自己,但也明確無(wú)誤地告訴了管理員,系統(tǒng)己經(jīng)被人侵了。所以最常用的辦法是只對(duì)日志文件中有關(guān)自己的那一部分做修改。關(guān)于修改方法的具體細(xì)節(jié)根據(jù)不同的操作系統(tǒng)有所區(qū)別,網(wǎng)絡(luò)上有許多此類功能的程序,例如 zap、 wipe等,其主要做法就是清除 utmp、wtmp、Lastlog和 Pacct等日志文件中某一用戶的信息,使得當(dāng)使用w、who、last等命令查看日志文件時(shí),隱藏掉此用戶的信息。
管理員想要避免日志系統(tǒng)被黑客修改,應(yīng)該采取一定的措施,例如用打印機(jī)實(shí)時(shí)記錄網(wǎng)絡(luò)日志信息。但這樣做也有弊端,黑客一旦了解到你的做法就會(huì)不停地向日志里寫(xiě)入無(wú)用的信息,使得打印機(jī)不停地打印日志,直到所有的紙用光為止。所以比較好的避免日志被修改的辦法是把所有日志文件發(fā)送到一臺(tái)比較安全的主機(jī)上,即使用loghost。即使是這樣也不能完全避免日志被修改的可能性,因?yàn)楹诳图热荒芄ト脒@臺(tái)主機(jī),也很可能攻入loghost。
只修改日志是不夠的,因?yàn)榘倜鼙赜幸宦?,即使自認(rèn)為修改了所有的日志,仍然會(huì)留下一些蛛絲馬跡的。例如安裝了某些后門程序,運(yùn)行后也可能被管理員發(fā)現(xiàn)。所以,黑客高手可以通過(guò)替換一些系統(tǒng)程序的方法來(lái)進(jìn)一步隱藏蹤跡。這種用來(lái)替換正常系統(tǒng)程序的黑客程序叫做rootkit,這類程序在一些黑客網(wǎng)站可以找到,比較常見(jiàn)的有LinuxRootKit,現(xiàn)在已經(jīng)發(fā)展到了5.0版本了。它可以替換系統(tǒng)的ls、ps、netstat、inetd等等一系列重要的系統(tǒng)程序,當(dāng)替換了ls后,就可以隱藏指定的文件,使得管理員在使用ls命令時(shí)無(wú)法看到這些文件,從而達(dá)到隱藏自己的目的。
3. 后門
一般黑客都會(huì)在攻入系統(tǒng)后不只一次地進(jìn)入該系統(tǒng)。為了下次再進(jìn)入系統(tǒng)時(shí)方便一點(diǎn),黑客會(huì)留下一個(gè)后門,特洛伊木馬就是后門的最好范例。Unix中留后門的方法有很多種,下面介紹幾種常見(jiàn)的后門,供網(wǎng)絡(luò)管理員參考防范。
<1>密碼破解后門
這是入侵者使用的最早也是最老的方法, 它不僅可以獲得對(duì)Unix機(jī)器的訪問(wèn), 而且可 以通過(guò)破解密碼制造后門. 這就是破解口令薄弱的帳號(hào). 以后即使管理員封了入侵者 的當(dāng)前帳號(hào),這些新的帳號(hào)仍然可能是重新侵入的后門. 多數(shù)情況下, 入侵者尋找口令 薄弱的未使用帳號(hào),然后將口令改的難些. 當(dāng)管理員尋找口令薄弱的帳號(hào)是, 也不會(huì)發(fā) 現(xiàn)這些密碼已修改的帳號(hào).因而管理員很難確定查封哪個(gè)帳號(hào).
<2>Rhosts + + 后門
在連網(wǎng)的Unix機(jī)器中,象Rsh和Rlogin這樣的服務(wù)是基于rhosts文件里的主機(jī)名使用簡(jiǎn) 單的認(rèn)證方法. 用戶可以輕易的改變?cè)O(shè)置而不需口令就能進(jìn)入. 入侵者只要向可以訪 問(wèn)的某用戶的rhosts文件中輸入"+ +", 就可以允許任何人從任何地方無(wú)須口令便能進(jìn) 入這個(gè)帳號(hào). 特別當(dāng)home目錄通過(guò)NFS向外共享時(shí), 入侵者更熱中于此. 這些帳號(hào)也成 了入侵者再次侵入的后門. 許多人更喜歡使用Rsh, 因?yàn)樗ǔH鄙偃罩灸芰? 許多管 理員經(jīng)常檢查 "+ +", 所以入侵者實(shí)際上多設(shè)置來(lái)自網(wǎng)上的另一個(gè)帳號(hào)的主機(jī)名和 用戶名,從而不易被發(fā)現(xiàn).
<3>校驗(yàn)和及時(shí)間戳后門
早期,許多入侵者用自己的trojan程序替代二進(jìn)制文件. 系統(tǒng)管理員便依靠時(shí)間戳和系 統(tǒng)校驗(yàn)和的程序辨別一個(gè)二進(jìn)制文件是否已被改變, 如Unix里的sum程序. 入侵者又發(fā) 展了使trojan文件和原文件時(shí)間戳同步的新技術(shù). 它是這樣實(shí)現(xiàn)的: 先將系統(tǒng)時(shí)鐘撥 回到原文件時(shí)間, 然后調(diào)整trojan文件的時(shí)間為系統(tǒng)時(shí)間. 一旦二進(jìn)制trojan文件與 原來(lái)的精確同步, 就可以把系統(tǒng)時(shí)間設(shè)回當(dāng)前時(shí)間. Sum程序是基于CRC校驗(yàn), 很容易 騙過(guò).入侵者設(shè)計(jì)出了可以將trojan的校驗(yàn)和調(diào)整到原文件的校驗(yàn)和的程序. MD5是被 大多數(shù)人推薦的,MD5使用的算法目前還沒(méi)人能騙過(guò).
<4>Login后門
在Unix里,login程序通常用來(lái)對(duì)telnet來(lái)的用戶進(jìn)行口令驗(yàn)證. 入侵者獲取login.c的 原代碼并修改,使它在比較輸入口令與存儲(chǔ)口令時(shí)先檢查后門口令. 如果用戶敲入后門 口令,它將忽視管理員設(shè)置的口令讓你長(zhǎng)驅(qū)直入. 這將允許入侵者進(jìn)入任何帳號(hào),甚至 是root.由于后門口令是在用戶真實(shí)登錄并被日志記錄到utmp和wtmp前產(chǎn)生一個(gè)訪問(wèn) 的, 所以入侵者可以登錄獲取shell卻不會(huì)暴露該帳號(hào). 管理員注意到這種后門后, 便 用"strings"命令搜索login程序以尋找文本信息. 許多情況下后門口令會(huì)原形畢露. 入侵者就開(kāi)始加密或者更好的隱藏口令, 使strings命令失效. 所以更多的管理員是 用MD5校驗(yàn)和檢測(cè)這種后門的.
<5>Telnetd后門
當(dāng)用戶telnet到系統(tǒng), 監(jiān)聽(tīng)端口的inetd服務(wù)接受連接隨后遞給in.telnetd,由它運(yùn)行 login.一些入侵者知道管理員會(huì)檢查login是否被修改, 就著手修改in.telnetd. 在in.telnetd內(nèi)部有一些對(duì)用戶信息的檢驗(yàn), 比如用戶使用了何種終端. 典型的終端 設(shè)置是Xterm或者VT100.入侵者可以做這樣的后門, 當(dāng)終端設(shè)置為"letmein"時(shí)產(chǎn)生一 個(gè)不要任何驗(yàn)證的shell. 入侵者已對(duì)某些服務(wù)作了后門, 對(duì)來(lái)自特定源端口的連接產(chǎn) 生一個(gè)shell .
<6>服務(wù)后門
幾乎所有網(wǎng)絡(luò)服務(wù)曾被入侵者作過(guò)后門. Finger, rsh, rexec, rlogin, ftp, 甚至 inetd等等的作了的版本隨處多是. 有的只是連接到某個(gè)TCP端口的shell,通過(guò)后門口 令就能獲取訪問(wèn).這些程序有時(shí)用刺媧□?Ucp這樣不用的服務(wù),或者被加入inetd.conf 作為一個(gè)新的服務(wù).管理員應(yīng)該非常注意那些服務(wù)正在運(yùn)行, 并用MD5對(duì)原服務(wù)程序做 校驗(yàn).
<7>Cronjob后門
Unix上的Cronjob可以按時(shí)間表調(diào)度特定程序的運(yùn)行. 入侵者可以加入后門shell程序 使它在1AM到2AM之間運(yùn)行,那么每晚有一個(gè)小時(shí)可以獲得訪問(wèn). 也可以查看cronjob中 經(jīng)常運(yùn)行的合法程序,同時(shí)置入后門.
<8>庫(kù)后門
幾乎所有的UNIX系統(tǒng)使用共享庫(kù). 共享庫(kù)用于相同函數(shù)的重用而減少代碼長(zhǎng)度. 一些 入侵者在象crypt.c和_crypt.c這些函數(shù)里作了后門. 象login.c這樣的程序調(diào)用了 crypt(),當(dāng)使用后門口令時(shí)產(chǎn)生一個(gè)shell. 因此, 即使管理員用MD5檢查login程序, 仍然能產(chǎn)生一個(gè)后門函數(shù).而且許多管理員并不會(huì)檢查庫(kù)是否被做了后門.對(duì)于許多入 侵者來(lái)說(shuō)有一個(gè)問(wèn)題: 一些管理員對(duì)所有東西多作了MD5校驗(yàn). 有一種 辦法是入侵者對(duì)open()和文件訪問(wèn)函數(shù)做后門. 后門函數(shù)讀原文件但執(zhí)行trojan后門 程序. 所以 當(dāng)MD5讀這些文件時(shí),校驗(yàn)和一切正常. 但當(dāng)系統(tǒng)運(yùn)行時(shí)將執(zhí)行trojan版本 的. 即使trojan庫(kù)本身也可躲過(guò) MD5校驗(yàn). 對(duì)于管理員來(lái)說(shuō)有一種方法可以找到后門, 就是靜態(tài)編連MD5校驗(yàn)程序然后 運(yùn)行. 靜態(tài)連接程序不會(huì)使用trojan共享庫(kù).
<9>內(nèi)核后門
內(nèi)核是Unix工作的核心. 用于庫(kù)躲過(guò)MD5校驗(yàn)的方法同樣適用于內(nèi)核級(jí)別,甚至連靜態(tài) 連接多不能識(shí)別. 一個(gè)后門作的很好的內(nèi)核是最難被管理員查找的, 所幸的是內(nèi)核的 后門程序還不是隨手可得, 每人知道它事實(shí)上傳播有多廣.
<10>文件系統(tǒng)后門
入侵者需要在服務(wù)器上存儲(chǔ)他們的掠奪品或數(shù)據(jù),并不能被管理員發(fā)現(xiàn). 入侵者的文章 常是包括exploit腳本工具,后門集,sniffer日志,email的備分,原代碼,等等. 有時(shí)為 了防止管理員發(fā)現(xiàn)這么大的文件, 入侵者需要修補(bǔ)"ls","du","fsck"以隱匿特定的目 錄和文件.在很低的級(jí)別, 入侵者做這樣的漏洞: 以專有的格式在硬盤(pán)上割出一部分, 且表示為壞的扇區(qū). 因此入侵者只能用特別的工具訪問(wèn)這些隱藏的文件. 對(duì)于普通的 管理員來(lái)說(shuō), 很難發(fā)現(xiàn)這些"壞扇區(qū)"里的文件系統(tǒng), 而它又確實(shí)存在.
<11>Boot塊后門
在PC世界里,許多病毒藏匿與根區(qū), 而殺病毒軟件就是檢查根區(qū)是否被改變. Unix下, 多數(shù)管理員沒(méi)有檢查根區(qū)的軟件, 所以一些入侵者將一些后門留在根區(qū).
<12>隱匿進(jìn)程后門
入侵者通常想隱匿他們運(yùn)行的程序. 這樣的程序一般是口令破解程序和監(jiān)聽(tīng)程序 (sniffer).有許多辦法可以實(shí)現(xiàn),這里是較通用的: 編寫(xiě)程序時(shí)修改自己的argv[] 使它看起來(lái)象其他進(jìn)程名. 可以將sniffer程序改名類似in.syslog再執(zhí)行. 因此 當(dāng)管理員用"ps"檢查運(yùn)行進(jìn)程時(shí), 出現(xiàn) 的是標(biāo)準(zhǔn)服務(wù)名. 可以修改庫(kù)函數(shù)致使 "ps"不能顯示所有進(jìn)程. 可以將一個(gè)后門或程序嵌入中斷驅(qū)動(dòng)程序使它不會(huì)在進(jìn)程表 顯現(xiàn). 使用這個(gè)技術(shù)的一個(gè)后門 例子是amod.tar.gz :
http://star.niimm.spb.su/~maillist/bugtraq.1/0777.html
也可以修改內(nèi)核隱匿進(jìn)程.
<13>網(wǎng)絡(luò)通行后門
入侵者不僅想隱匿在系統(tǒng)里的痕跡, 而且也要隱匿他們的網(wǎng)絡(luò)通行. 這些網(wǎng)絡(luò)通行后 門有時(shí)允許入侵者通過(guò)防火墻進(jìn)行訪問(wèn). 有許多網(wǎng)絡(luò)后門程序允許入侵者建立某個(gè)端 口號(hào)并不用通過(guò)普通服務(wù)就能實(shí)現(xiàn)訪問(wèn). 因?yàn)檫@是通過(guò)非標(biāo)準(zhǔn)網(wǎng)絡(luò)端口的通行, 管理 員可能忽視入侵者的足跡. 這種后門通常使用TCP,UDP和ICMP, 但也可能是其他類型報(bào) 文.
<14>TCP Shell 后門
入侵者可能在防火墻沒(méi)有阻塞的高位TCP端口建立這些TCP Shell后門. 許多情況下,他 們用口令進(jìn)行保護(hù)以免管理員連接上后立即看到是shell訪問(wèn). 管理員可以用netstat 命令查看當(dāng)前的連接狀態(tài), 那些端口在偵聽(tīng), 目前連接的來(lái)龍去脈. 通常這些后門可 以讓入侵者躲過(guò)TCP Wrapper技術(shù). 這些后門可以放在SMTP端口, 許多防火墻允許 e-mail通行的.
<15>UDP Shell 后門
管理員經(jīng)常注意TCP連接并觀察其怪異情況, 而UDP Shell后門沒(méi)有這樣的連接, 所以 netstat不能顯示入侵者的訪問(wèn)痕跡. 許多防火墻設(shè)置成允許類似DNS的UDP報(bào)文的通 行. 通常入侵者將UDP Shell放置在這個(gè)端口, 允許穿越防火墻.
<16>ICMP Shell 后門
Ping是通過(guò)發(fā)送和接受ICMP包檢測(cè)機(jī)器活動(dòng)狀態(tài)的通用辦法之一. 許多防火墻允許外 界ping它內(nèi)部的機(jī)器. 入侵者可以放數(shù)據(jù)入Ping的ICMP包, 在ping的機(jī)器間形成一個(gè) shell通道. 管理員也許會(huì)注意到Ping包暴風(fēng), 但除了他查看包內(nèi)數(shù)據(jù), 否者入侵者不 會(huì)暴露.
<17>加密連接
管理員可能建立一個(gè)sniffer試圖某個(gè)訪問(wèn)的數(shù)據(jù), 但當(dāng)入侵者給網(wǎng)絡(luò)通行后門加密 后,就不可能被判定兩臺(tái)機(jī)器間的傳輸內(nèi)容了.