資源描述:
《針對tor網(wǎng)絡(luò)的惡意代碼分析》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、一、背景Tor(TheOninonRouter)提供一個匿名交流網(wǎng)絡(luò)平臺,它使得用戶在瀏覽網(wǎng)頁或訪問其它網(wǎng)絡(luò)服務(wù)時不會被跟蹤。作為該網(wǎng)絡(luò)的一部分即所謂的“暗網(wǎng)”(darknet),是指只能通過Tor網(wǎng)絡(luò)訪問的服務(wù)器群組,這些服務(wù)器提供包括社區(qū)論壇、電子郵件等多種服務(wù)。雖然提供這些服務(wù)都是無惡意的,初衷是用來關(guān)注侵犯人權(quán)問題,但是由于匿名的原因吸引了很多有犯罪意圖的人,比如傳播兒童色情。事后執(zhí)法部門也不能追蹤到犯罪者的源IP地址。2013年,在“暗網(wǎng)”服務(wù)器上發(fā)現(xiàn)了一款惡意軟件,它利用特定Web瀏覽器上的安全漏洞在用戶電腦上執(zhí)行一段代碼。該代碼收集一些用戶信息,發(fā)往弗吉
2、尼亞州的服務(wù)器,之后自毀。就惡意軟件的特征來講,它沒有明顯的惡意意圖。初步推斷是FBI植入,他們在弗吉尼亞州有辦事處,曾經(jīng)也派專人開發(fā)過惡意程序,可能是他們創(chuàng)建了它—現(xiàn)在看來是真的。二、對Shellcode的逆向分析1、漏洞利用漏洞利用代碼用javascript編寫,利用一個出名的firefox瀏覽器的特定版本(Tor網(wǎng)絡(luò)預裝的firefox)的漏洞。該漏洞利用代碼經(jīng)過了模糊處理,但通過快速掃描可以看到一長串十六進制字符,這些字符是shellcode的前幾個標志性字節(jié),即call操作碼(shellcode經(jīng)常以一個jump或call開始,因此知道了這些操作碼使得識別s
3、hellcode變得容易起來)。我不會在這里分析這個漏洞,但是要看一下這個shellcode。首先,讓我們用一些基本的shellcode原則設(shè)定一個場景。2、位置無關(guān)代碼Shellcode的成功執(zhí)行經(jīng)過了獨一無二的挑戰(zhàn),因為它是直接注入到一個進程而不是由Windows加載器加載。因此,我們不知道shellcode位于內(nèi)存中的什么地方,更關(guān)鍵的是,不知道標準的windowsAPI函數(shù)位于什么地方(而通常情況下,Windows加載器會告訴一個程序這些信息)。因此,我們必須使用一系列技巧去獲得這個信息。FBI惡意程序用了一個常用的技巧去找出它的內(nèi)存地址:callstarts
4、tart:20currencydeposit,weprescribeapassonaregularbasis,qilucardaccountonaregularbasis),certificatebondsandsavingsbonds(electronic);3.notdrawnonabanksavingscertificate,certificatebondsapplyformortgageloans,acceptingonlythelenderpopebpcall函數(shù)將執(zhí)行程序移動到start標簽處,同時將程序當前執(zhí)行的位置壓入堆棧中(這樣我們稍后可以從call
5、函數(shù)返回)。在此,我們將要用這個值,從棧里竊取位置,堆棧彈出的值保存到ebp寄存器。我們現(xiàn)在知道了下一條指令的地址,那么就可以用它來訪問跟我們的shellcode相關(guān)的數(shù)據(jù)。三、定位WindowsAPI因為正常情況下Windows加載器會加載WindowsAPI的位置到我們的程序,所以我們不奢望運行一個shellcode時能夠知道程序的位置信息。找出API函數(shù)慣用的方法是查看FS段寄存器所指的線程信息塊(threadinformationblock)。我們能夠通過這個結(jié)構(gòu)體去定位被我們shellcode宿主程序加載的DLLs,然后利用這些DLL的輸出直到找到目標函數(shù)為
6、止。當然這個過程是很乏味的,所以,F(xiàn)BI這個shellcode使用了一個庫,包含在MetasploitFramwork內(nèi),這是由StephenFewer寫的一個函數(shù)解析器。它的工作原理如下:pusharguments...pushFUNCTIONHASHcall這個函數(shù)的哈希值是由一個簡單的hash算法生成,以我們調(diào)用函數(shù)的名稱命名。這樣做的目的不是為了混淆代碼(盡管它達到這個目的),但只允許我們用一個32位的DWORD來調(diào)用此函數(shù),而不是一個長型字符串(shellcode空間往往是有限的)。值得慶幸的是,我們自己可以計算出has
7、h值,或者用別人生成的查找表。四、開始如果我們對shellcode的開始進行反匯編,如下圖:20currencydeposit,weprescribeapassonaregularbasis,qilucardaccountonaregularbasis),certificatebondsandsavingsbonds(electronic);3.notdrawnonabanksavingscertificate,certificatebondsapplyformortgageloans,acceptingonlythelender我們一旦計算出指向A