當(dāng)網(wǎng)絡(luò)安全捍衛(wèi)者需要編譯exploit代碼時(shí),這已經(jīng)不是第一次了。每天發(fā)現(xiàn)針對Windows和Linux超過十多個(gè)的新exploit對我們來講也不是罕見的,不幸的是,你不能夠始終信任exploit的作者或者安全技術(shù)文章。
首先,許多exploits并不是廣告。它們要么根本不起作用,要么僅在特定的時(shí)候起作用,要么僅在一個(gè)很小范圍的機(jī)器中運(yùn)行。你測試的exploit代碼越多,你所能明白的指令真相也就越多。
其次,許多網(wǎng)絡(luò)包含的防御措施彌補(bǔ)了exploit的攻擊向量。比如說,如果有一個(gè) exploit能夠 在Windows XP SP2被利用,如果你的電腦包含基于硬件的防緩沖區(qū)溢出芯片(比如說NX),這個(gè)exploit可能就不能被利用了,或者它的影響能夠降低到最小程度。也許你的機(jī)器包含防病毒掃描工具、IPSes、或者基于主機(jī)的防火墻,能夠有效的阻止攻擊。當(dāng)不知何時(shí)漏洞的補(bǔ)丁發(fā)布了,它真的就可以修復(fù)這個(gè)漏洞嗎?在你經(jīng)過試驗(yàn)之前你是不能夠知道的。
最后,測試exploit代碼能夠給你好的示例,能夠讓你的小組成員和管理者相信你的電腦在安全防護(hù)上有多成功。
一些exploits是以編譯過的形式發(fā)布的:它們僅僅是以可執(zhí)行文件形式運(yùn)行,你不得不手工編譯或者使用一種腳本語言來運(yùn)行它。在這種情況下,要做的一件事情就是找到exploit代碼。如果你訂閱了若干安全郵件列表,也許在你的收件箱中就有一封電子郵件能夠鏈接到某個(gè)exploit代碼。
我最喜愛的一個(gè)exploit代碼郵件列表是FrSIRT,但是最近它們關(guān)閉了它們站點(diǎn)上的公開漏洞利用代碼部分。現(xiàn)在要想?yún)⑴c只能通過付費(fèi)這一種方式了。
還有其它一些安全郵件列表仍舊公開exploit代碼,包括“Full Disclosure”(全面披露)公共安全郵件列表以及Dave Aitel的 Dailydave。
Packet Storm也是一個(gè)好的站點(diǎn),盡管通過搜索經(jīng)常返回太多的信息并且需要進(jìn)行一些數(shù)據(jù)挖掘。Metasploit也始終提供exploit和shell代碼資源,但它不像其它一些站點(diǎn)那樣全面。
如果上面所說的對你都沒用,那就使用你最喜歡使用的搜索引擎然后鍵入適當(dāng)?shù)年P(guān)鍵字。通常你會(huì)找到這個(gè)exploit作者本人的e-mail地址,然后從那里可以找到通向代碼的鏈接。大多數(shù)時(shí)間作者的web站點(diǎn)上都會(huì)有關(guān)于這個(gè) exploit的更多細(xì)節(jié)、exploit代碼更新以及許多其它你以前都沒有聽說過的相關(guān)的信息。
大多數(shù)瀏覽器exploit代碼是以JavaScript、VBScript、 Perl或者Python腳本語言的形式出現(xiàn)的。把這些腳本語言拷貝到基于ASCII的文本編輯器(比如KWrite、記事本等等),然后把它們保存為. HTM或者.HTML文件,然后使用你的瀏覽器打開它。
非瀏覽器腳本層exploits在瀏覽器之外運(yùn)行,它需要帶一個(gè)或者多個(gè)語法參數(shù)的本地腳本引擎才能運(yùn)行。例如,也許需要像下面這樣運(yùn)行這個(gè)exploit代碼:
perl –w exploit.pl –n –w –h 10.1.1.1 –i
打開這個(gè)腳本文件然后研究一下位于最頂端注釋的運(yùn)行時(shí)指令。研究代碼也能夠讓你保證在這里面沒有潛伏秘密的木馬代碼和惡意代碼。我曾經(jīng)就看到過除了竊取當(dāng)前用戶密碼文件和發(fā)送到遠(yuǎn)程IP地址之外別的什么都不做的exploit代碼。如果你不能夠在運(yùn)行之前充分分析這份代碼,那么就在一個(gè)虛擬的環(huán)境中運(yùn)行它,或者根本就不要去運(yùn)行它。
其它類型的exploits必須編譯成可執(zhí)行文件才能夠測試它。一些惡意代碼能夠被幾乎任何相關(guān)語言的編譯器編譯,但是其它的都必須通過特定的編譯器才能夠創(chuàng)建(這一般都會(huì)在代碼開始的注釋中說明)。比方說,C+程序通常可以使用任何 C+編譯器編譯成可執(zhí)行文件。在Linux環(huán)境中,我通常使用 GNU的C編譯器-gcc,鍵入像這樣的命令就可以:
gcc –o OutPutFileName InPutName.c
參數(shù)-o后面的文本指出了要輸出的可執(zhí)行文件的名字。
有時(shí)候,一個(gè)編譯器需要附加的支持文件和庫文件才能正常工作。Exploit代碼作者或者代碼的注釋中通常會(huì)對此進(jìn)行說明,如果不這樣做,編譯的時(shí)候就會(huì)出現(xiàn)錯(cuò)誤。
其它的exploit代碼程序需要特定的編譯器才能進(jìn)行編譯,通常作者會(huì)說明的。大多數(shù)情況下,作者使用公共的編譯器,比如Borland公司或者微軟公司的。
如果你不會(huì)編譯代碼,那就下載預(yù)編譯的exploit代碼。這樣就不需要親自研究源代碼,也不需要自己動(dòng)手編譯它。然而,如果它包含其它惡意命令或者 bugs,你永遠(yuǎn)都不會(huì)知道。Exploit代碼作者通常會(huì)稍微禁止一下他們的 exploit代碼,不讓它們很容易就可以運(yùn)行。通過在最終用戶一邊的研究工作,他們認(rèn)為專家需求的增加能夠減少對黑客的崇拜。


