自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

FBI針對(duì)Tor網(wǎng)絡(luò)的惡意代碼分析

安全 應(yīng)用安全
Tor(The Oninon Router)提供一個(gè)匿名交流網(wǎng)絡(luò)平臺(tái),它使得用戶在瀏覽網(wǎng)頁(yè)或訪問(wèn)其它網(wǎng)絡(luò)服務(wù)時(shí)不會(huì)被跟蹤。作為該網(wǎng)絡(luò)的一部分即所謂的“暗網(wǎng)”(darknet),是指只能通過(guò)Tor網(wǎng)絡(luò)訪問(wèn)的服務(wù)器群組,這些服務(wù)器提供包括社區(qū)論壇、電子郵件等多種服務(wù)。

一、背景

Tor(The Oninon Router)提供一個(gè)匿名交流網(wǎng)絡(luò)平臺(tái),它使得用戶在瀏覽網(wǎng)頁(yè)或訪問(wèn)其它網(wǎng)絡(luò)服務(wù)時(shí)不會(huì)被跟蹤。作為該網(wǎng)絡(luò)的一部分即所謂的“暗網(wǎng)”(darknet),是指只能通過(guò)Tor網(wǎng)絡(luò)訪問(wèn)的服務(wù)器群組,這些服務(wù)器提供包括社區(qū)論壇、電子郵件等多種服務(wù)。雖然提供這些服務(wù)都是無(wú)惡意的,初衷是用來(lái)關(guān)注侵犯人權(quán)問(wèn)題,但是由于匿名的原因吸引了很多有犯罪意圖的人,比如傳播兒童色情。事后執(zhí)法部門也不能追蹤到犯罪者的源IP地址。

2013年,在“暗網(wǎng)”服務(wù)器上發(fā)現(xiàn)了一款惡意軟件,它利用特定Web瀏覽器上的安全漏洞在用戶電腦上執(zhí)行一段代碼。該代碼收集一些用戶信息,發(fā)往弗吉尼亞州的服務(wù)器,之后自毀。就惡意軟件的特征來(lái)講,它沒(méi)有明顯的惡意意圖。初步推斷是FBI植入,他們?cè)诟ゼ醽喼萦修k事處,曾經(jīng)也派專人開(kāi)發(fā)過(guò)惡意程序,可能是他們創(chuàng)建了它—現(xiàn)在看來(lái)是真的。

二、對(duì)Shellcode的逆向分析

1、漏洞利用

漏洞利用代碼用javascript編寫(xiě),利用一個(gè)出名的firefox瀏覽器的特定版本(Tor網(wǎng)絡(luò)預(yù)裝的firefox)的漏洞。該漏洞利用代碼經(jīng)過(guò)了模糊處理,但通過(guò)快速掃描可以看到一長(zhǎng)串十六進(jìn)制字符,這些字符是shellcode的前幾個(gè)標(biāo)志性字節(jié),即call操作碼(shellcode經(jīng)常以一個(gè)jump或call開(kāi)始,因此知道了這些操作碼使得識(shí)別shellcode變得容易起來(lái))。

我不會(huì)在這里分析這個(gè)漏洞,但是要看一下這個(gè)shellcode。

首先,讓我們用一些基本的shellcode原則設(shè)定一個(gè)場(chǎng)景。

2、位置無(wú)關(guān)代碼

Shellcode的成功執(zhí)行經(jīng)過(guò)了獨(dú)一無(wú)二的挑戰(zhàn),因?yàn)樗侵苯幼⑷氲揭粋€(gè)進(jìn)程而不是由Windows加載器加載。因此,我們不知道shellcode位于內(nèi)存中的什么地方,更關(guān)鍵的是,不知道標(biāo)準(zhǔn)的windowsAPI函數(shù)位于什么地方(而通常情況下,Windows加載器會(huì)告訴一個(gè)程序這些信息)。

因此,我們必須使用一系列技巧去獲得這個(gè)信息。FBI惡意程序用了一個(gè)常用的技巧去找出它的內(nèi)存地址:

call start
start:
pop ebp

call函數(shù)將執(zhí)行程序移動(dòng)到start標(biāo)簽處,同時(shí)將程序當(dāng)前執(zhí)行的位置壓入堆棧中(這樣我們稍后可以從call函數(shù)返回)。

在此,我們將要用這個(gè)值,從棧里竊取位置,堆棧彈出的值保存到ebp寄存器。我們現(xiàn)在知道了下一條指令的地址,那么就可以用它來(lái)訪問(wèn)跟我們的shellcode相關(guān)的數(shù)據(jù)。

三、定位Windows API

因?yàn)檎G闆r下Windows加載器會(huì)加載Windows API的位置到我們的程序,所以我們不奢望運(yùn)行一個(gè)shellcode時(shí)能夠知道程序的位置信息。找出API函數(shù)慣用的方法是查看FS段寄存器所指的線程信息塊(thread information block)。我們能夠通過(guò)這個(gè)結(jié)構(gòu)體去定位被我們shellcode宿主程序加載的DLLs,然后利用這些DLL的輸出直到找到目標(biāo)函數(shù)為止。當(dāng)然這個(gè)過(guò)程是很乏味的,所以,F(xiàn)BI這個(gè)shellcode使用了一個(gè)庫(kù),包含在MetasploitFramwork內(nèi),這是由Stephen Fewer寫(xiě)的一個(gè)函數(shù)解析器。它的工作原理如下:

push arguments
. . .
push FUNCTIONHASH
call<Stephen’sResolver>

這個(gè)函數(shù)的哈希值是由一個(gè)簡(jiǎn)單的hash算法生成,以我們調(diào)用函數(shù)的名稱命名。這樣做的目的不是為了混淆代碼(盡管它達(dá)到這個(gè)目的),但只允許我們用一個(gè)32位的DWORD來(lái)調(diào)用此函數(shù),而不是一個(gè)長(zhǎng)型字符串(shellcode空間往往是有限的)。

值得慶幸的是,我們自己可以計(jì)算出hash值,或者用別人生成的查找表。

四、開(kāi)始

如果我們對(duì)shellcode的開(kāi)始進(jìn)行反匯編,如下圖:

 

圖片1

 

我們一旦計(jì)算出指向API解析器的ebp寄存器值,我們就可以在windows的API進(jìn)行哈希調(diào)用前獲取其十六進(jìn)制數(shù)。如此,如果在查找表里查找到那個(gè)值,在那個(gè)值附近查找調(diào)用的函數(shù),并且添加一些注釋,如下圖:

 

圖片2

 

這段代碼執(zhí)行完整性檢查,通過(guò)用GET 開(kāi)始的HTTP請(qǐng)求頭部信息以確保shellcode安全運(yùn)行。然后調(diào)用Windows API函數(shù)LoadLibrary()載入兩個(gè)動(dòng)態(tài)鏈接庫(kù):ws2_32.dll(用于互聯(lián)網(wǎng)通信的Windows套接字庫(kù))和iphlpapi.dll(WindowsIP輔助庫(kù))。

五、連接到HTTP服務(wù)器

在必要的庫(kù)文件都加載完之后,shellcode將執(zhí)行下圖中的操作:

 

圖片3

 

再一次,用相同的步驟,用哈希值查找一個(gè)Windows API函數(shù):connect()函數(shù)。我們可以看見(jiàn),在[ebp +0x2e1]位置的數(shù)據(jù)作為一個(gè)參數(shù)傳遞給connect()函數(shù)—從手冊(cè)我們知道,那個(gè)參數(shù)是一個(gè)sockaddr結(jié)構(gòu)體(sockaddr structure)。我們知道ebp寄存器指向我們?cè)趦?nèi)存中的地址,使用那個(gè)地址,再加上偏移量,我們就能定位出那些數(shù)據(jù)在內(nèi)存0x2E8處(ebp=0×7)。

 

圖片4

 

因此,我們?cè)诜治鰏ockaddr之前,先給這些代碼添加一些注釋,命名一些內(nèi)存偏移地址,如下圖:

 

圖片5

 

這個(gè)eax寄存器保存著調(diào)用connect()函數(shù)的返回值,如果這個(gè)值為0(來(lái)自微軟用戶手冊(cè))表示connect()調(diào)用成功。但是我們成功連接到哪兒?如果我們現(xiàn)在添加一些注釋到我們之前的反匯編文件,基于我們?cè)谖④浻脩羰謨?cè)中能查到的關(guān)于sockaddr結(jié)構(gòu)體的信息,我們可以這樣添加注釋,如下圖:

 

圖片6

 

通過(guò)對(duì)IP地址進(jìn)行whois快速查詢,只得到很少信息。如下圖:

 

圖片7

 

六、收集用戶信息

接下來(lái),這個(gè)惡意軟件嘗試獲得windows主機(jī)名—通常情況下這是windows機(jī)器的名字。這可能有助于確認(rèn)嫌疑犯和確認(rèn)他們沒(méi)有逮捕錯(cuò)人。

 

圖片9

 

其次,它枚舉了活躍主機(jī)的hostname和IP地址。

 

圖片10

 

使用SendARP()函數(shù)來(lái)發(fā)現(xiàn)網(wǎng)絡(luò)中所有電腦的MAC地址。有一些“恰當(dāng)”的方式做到這樣,但是shellocode只能獲得有限的空間去完成這些事。MAC地址將用戶與一張?zhí)囟ǖ木W(wǎng)卡綁定,于是可以通過(guò)這些網(wǎng)卡的供應(yīng)鏈來(lái)追蹤用戶。

 

圖片11

 

最后,它要構(gòu)建HTTP頭部信息,將MAC地址放進(jìn)Cookie字段,用戶的主機(jī)名放進(jìn)Host字段,并且要以GET請(qǐng)求方式發(fā)送到http://65.222.202.54/05cea4de-951d-4037-bf8f-f69055b279bb。這些十六進(jìn)制數(shù)字的意義不清楚,它們可能是任意選擇或鏈接一個(gè)用戶到特定的接入服務(wù)器。

 

圖片12

 

七、最后階段

這個(gè)shellcode最后階段的唯一目的就是在該shellcode結(jié)束時(shí)運(yùn)行更多的shell代碼—它這樣做的方式稍微有點(diǎn)迂回,我也不知道為什么這樣,也許是一次粗略的嘗試。

那么,最后一歩要怎么做。首先,它利用一些字符串長(zhǎng)度操作找出一些被嵌入在其他所有數(shù)據(jù)區(qū)的代碼。那些代碼計(jì)算出我們的HTTP請(qǐng)求字符串結(jié)束的位置,跳過(guò)在shellcode結(jié)尾處的所有的無(wú)效的空操作指令,然后跳到那里。那里是哪里?誰(shuí)知道!我被告知有更多的shellcode(這不重要),但是我已經(jīng)沒(méi)有時(shí)間來(lái)調(diào)試這個(gè)漏洞并獲得它。

構(gòu)建頭部,然后跳轉(zhuǎn)到頭部結(jié)尾處。

 

圖片13

 

查找http頭部結(jié)尾處的無(wú)效指令并且跳過(guò)它們。

 

圖片14

 

八、運(yùn)行代碼

到目前為止,我以完全靜態(tài)的方式分析了這些代碼—主要是為了完整性。通過(guò)運(yùn)行這些代碼能夠更快速的分析它們,同時(shí)可以驗(yàn)證我們的分析是否正確。既然這段惡意代碼沒(méi)有任何破壞系統(tǒng)的行為,因此我們可以安全的在真機(jī)上運(yùn)行它。于是運(yùn)行它并觀察它發(fā)送給FBI的確切數(shù)據(jù)。因?yàn)閟hellcode不是一個(gè)exe可執(zhí)行文件,我需要一個(gè)shellcode加載器去運(yùn)行它—-它們快速的分配需要的內(nèi)存,加載shellcode并跳轉(zhuǎn)到該處。這是加載shellcode需要做的—-在調(diào)用真正的shellcode之前會(huì)自動(dòng)斷開(kāi)。

然后我們啟動(dòng)調(diào)試器跨步執(zhí)行到調(diào)用cnnect()函數(shù)。我們不得不把這個(gè)shellcode的目標(biāo)指向另一臺(tái)我們自己的機(jī)器,便于觀察運(yùn)行結(jié)果。因此,我將讓他指向ip地址為192.168.0.254的77端口,然后在這個(gè)機(jī)器上運(yùn)行netcat程序抓取數(shù)據(jù)。在下圖代碼暫停的箭頭所指處,就是早期通過(guò)patch方式來(lái)修改sockaddr結(jié)構(gòu)體。

 

圖片15

 

然后我們繼續(xù)跨步執(zhí)行到調(diào)用send()函數(shù),執(zhí)行它,之后我們能看見(jiàn)在netcat終端的輸出,它將輸出它收到的所有數(shù)據(jù)—顯示的那些數(shù)據(jù)原本是發(fā)給FBI。你可以看到,cookie里面的ID包含了我的MAC地址,Host 頭部包含了我的desktop名。

 

圖片16

 

最后,我們跨步執(zhí)行到最后階段—最后的空操作可能是用來(lái)注入更多的已經(jīng)提取的shellcode。在那個(gè)十六進(jìn)制查看器窗口可以看見(jiàn),我們構(gòu)造的那個(gè)HTTP請(qǐng)求已經(jīng)發(fā)出。

 

圖片17

 

九、結(jié)論

這個(gè)惡意軟件從用戶瀏覽器發(fā)送確認(rèn)信息給攻擊機(jī),然后使用戶firefox瀏覽器崩潰。就復(fù)雜性而言,它沒(méi)有很明顯的特別之處,也沒(méi)有使用一些大家不知道的新技術(shù)。

如果這個(gè)惡意軟件作者是FBI,那么他們需要去回答一些很嚴(yán)肅的問(wèn)題。這些惡意程序被植入到非美國(guó)的服務(wù)器上,并攻擊利用全球用戶的瀏覽器(他們當(dāng)中很多人是無(wú)辜的)他們這樣做甚至可能會(huì)得到法律授權(quán)?我不這么認(rèn)為。當(dāng)有人告發(fā)時(shí)FBI是否需要出示他們?cè)?jīng)得到過(guò)法律授權(quán)的證據(jù)?未必。我希望他們會(huì)依據(jù)用戶的電腦內(nèi)發(fā)現(xiàn)的證據(jù)和在收到起訴時(shí)取得的證據(jù)—-盡管最初的搜索授權(quán)可能很不靠譜。不管怎么說(shuō),我畢竟不是一個(gè)律師。

本文來(lái)自英國(guó)樸茨茅斯大學(xué)加雷斯.歐文的博文《Analysis of the FBI Tor Malware》,由IDF實(shí)驗(yàn)室李秀烈翻譯。

責(zé)任編輯:藍(lán)雨淚 來(lái)源: IDF實(shí)驗(yàn)室博客
相關(guān)推薦

2013-11-05 15:06:29

scdbg惡意代碼分析安全工具

2013-11-08 10:42:09

代碼工具

2017-03-27 15:46:14

2016-11-24 11:07:54

Andriod惡意代碼

2021-11-17 10:40:33

網(wǎng)絡(luò)安全惡意代碼網(wǎng)絡(luò)攻擊

2011-08-09 11:45:45

2014-10-23 09:40:57

2022-09-26 11:40:59

網(wǎng)絡(luò)釣魚(yú)惡意代碼

2014-12-12 14:55:42

移動(dòng)惡意代碼移動(dòng)安全

2014-10-29 14:43:05

2013-07-27 21:04:58

2014-10-23 18:26:02

破殼漏洞Shellshock遠(yuǎn)程代碼執(zhí)行漏洞

2021-03-01 11:33:03

微軟惡意代碼惡意軟件

2011-08-09 11:51:37

2014-12-30 16:37:11

2013-12-10 14:54:58

2019-05-27 11:13:07

2010-09-03 12:01:17

SQL刪除

2020-08-10 09:00:16

微軟瀏覽器Windows

2023-03-29 09:17:17

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)