這篇文章不是我的原創(chuàng)文章,是我在黑客內(nèi)參征求了作者的同意之后轉(zhuǎn)載的一篇文章。
在今年的上一個季度,我們發(fā)現(xiàn)有越來越多的惡意軟件開始使用各種加密、封裝和加殼等保護(hù)技術(shù)來對惡意代碼進(jìn)行混淆處理,以防止系統(tǒng)或程序?qū)ζ溥M(jìn)行識別。除此之外,這些技術(shù)甚至還會讓研究人員對其的靜態(tài)分析變得更加困難。雖然越來越多的惡意軟件開發(fā)人員開始使用這種保護(hù)性的加殼技術(shù),但這也直接導(dǎo)致了另一種惡意軟件分析方法的誕生。
其中的一種分析方法,就是通過分析惡意代碼中負(fù)責(zé)告訴系統(tǒng)如何執(zhí)行特定操作的API調(diào)用以及控制命令。在這種方法中,我們不需要對已加殼的文件進(jìn)行逆向分析,因為我們只需要對惡意代碼所執(zhí)行的API調(diào)用來進(jìn)行動態(tài)分析,就可以知道某個特定文件具體的功能了。通過這樣的方法(分析API調(diào)用),我們可以確定一個文件是否具有惡意性,而有些API調(diào)用只有某些特殊類型的惡意軟件才會去使用。比如說,常用的惡意Payload下載API是URLDownloadToFile,而GetWindowDC這個API一般用于間諜軟件或鍵盤記錄器等惡意工具(用于屏幕截。。
接下來,我們會對一個惡意軟件樣本進(jìn)行分析,并給大家介紹這項技術(shù)的實現(xiàn)方法。
木馬樣本
黑客內(nèi)參所要分析的惡意軟件樣本是一個名叫1.exe的著名木馬,它的SHA256如下:
0213b36ee85a301b88c26e180f821104d5371410ab4390803eaa39fac1553c4c
如何通過API調(diào)用來分析惡意軟件
這個文件是加了殼的(VMProtect),所以我們就很難使用反編譯工具來對其進(jìn)行分析了。由于我個人并不擅長逆向工程分析,因此我打算通過分析該文件在沙盒環(huán)境的執(zhí)行過程中的API調(diào)用來了解它的行為。
下面這張圖片中,顯示的是我們通過觀察它在沙盒環(huán)境中的運行情況所得到的API調(diào)用列表:
如何通過API調(diào)用來分析惡意軟件
首先,我們來看一看這些函數(shù)到底有什么作用。其中有部分函數(shù)可以在微軟的網(wǎng)站中找到相關(guān)內(nèi)容:
GetModuleHandle函數(shù)
為特定模塊獲取模塊處理器,該模塊必須在調(diào)用進(jìn)程中被加載。GetModuleHandleA (ANSI)
GetProcAddress函數(shù)
獲取一個輸出函數(shù)的地址,或從指定的動態(tài)鏈接庫(DLL)獲取變量。
_wtoi
將一個字符串轉(zhuǎn)換成整型
CreateStreamOnHGlobal函數(shù)
這個函數(shù)將創(chuàng)建一個流對象,該對象可以使用一個HGLOBAL內(nèi)存處理器來存儲流內(nèi)容。
StrStr函數(shù)
查找字符串中出現(xiàn)的第一個子字符串,匹配是大小寫敏感的。StrStrA(ANSI)
wsprintf函數(shù)
向特定的緩沖區(qū)中寫入格式化數(shù)據(jù),可根據(jù)相應(yīng)的格式化字符串標(biāo)準(zhǔn)向輸出緩沖區(qū)中寫入任意參數(shù)。wsprintfA (ANSI)
WinHttpOpen函數(shù)
該函數(shù)可以初始化WinHTTP函數(shù)并返回一個WinHTTP-session處理器。
GetModuleFileName函數(shù)
獲取包含指定模塊的文件的完整路徑,該模塊必須在當(dāng)前的調(diào)用進(jìn)程中被加載。GetModuleFileNameW (Unicode)
LoadLibrary函數(shù)
向調(diào)用進(jìn)程的地址空間加載特定模塊,該模塊可能還會加載其他的模塊。LoadLibraryA (ANSI)
LocalAlloc函數(shù)
向堆內(nèi)存中分配指定大小的字節(jié)。
LocalFree函數(shù)
釋放指定的本地內(nèi)存對象,并初始化該對象的處理器。
GetModuleFileName函數(shù)
獲取包含指定模塊的文件的完整路徑,該模塊必須在當(dāng)前調(diào)用進(jìn)程中被加載。GetModuleFileNameA (ANSI)
ExitProcess函數(shù)
終止調(diào)用進(jìn)程以及所有相關(guān)的線程。
關(guān)鍵的惡意識別指標(biāo)
需要注意的是,上面給出的所有函數(shù)并非都能夠之別標(biāo)明某個可執(zhí)行程序的真實作用。但是針對WinHttpOpen的調(diào)用可以告訴我們這個應(yīng)用是有特殊目的的。
那我們就可以從這個函數(shù)下手,我們使用URL Revealer(Kahu Security)來檢測流量的目的地,并發(fā)現(xiàn)了兩個該惡意應(yīng)用會不斷嘗試連接的URL地址。
注:當(dāng)我們向VirusTotalAPI提交一個文件來進(jìn)行掃描時,最好提交這種形式的POST
上面這個鏈接指向的是一個已失效的Twitter地址,當(dāng)我使用Twitter的高級搜索功能進(jìn)行查找時,黑客內(nèi)參發(fā)現(xiàn)這條推文早就已經(jīng)被刪除了。
如何通過API調(diào)用來分析惡意軟件
但不幸的是,這個網(wǎng)站已經(jīng)無法解析了,但這個網(wǎng)站原本是一個專門提供網(wǎng)站入侵服務(wù)的地下站點。不過需要注意的是,這個Twitter賬號目前仍然是活躍的。
由此看來,我們就沒辦法弄清楚這個惡意軟件想要利用GET請求來做什么了。但是我們可以用其他的方法搞清楚它想用VirusTotal來掃描什么東西?下面是我們使用WireShark所捕捉到的數(shù)據(jù)包:
如何通過API調(diào)用來分析惡意軟件
在這個數(shù)據(jù)包中,你可以看到惡意軟件用來在VirusTotal網(wǎng)站上掃描文件的API密鑰以及文件名。所以,通過對API調(diào)用和數(shù)據(jù)包進(jìn)行重構(gòu),我們發(fā)現(xiàn)這款惡意軟件會向VirusTotal提交自己的拷貝版本,即惡意軟件副本,而這正好是Vflooder木馬家族的典型行為。Vflooder是一種特殊類型的Flooder木馬,而Flooder木馬可以向目標(biāo)發(fā)送大量的信息來中斷目標(biāo)的正常操作。但是我認(rèn)為VirusTotal可能無法檢測到這種惡意軟件威脅。
總結(jié)
實際上,我們本文所分析的Vflooder木馬樣本其實還是費查更簡單的。但是通過分析API調(diào)用來了解惡意軟件的行為,其實并不是一件容易的事情,因為我們發(fā)現(xiàn)有很多的惡意軟件會添加無效/冗余的API調(diào)用來增加我們的分析難度。但無論怎樣,分析API調(diào)用也是一種檢測惡意軟件的有效方法,因為攻擊者想要做的事情,肯定要在代碼中有所體現(xiàn)。
原文來自:[url=]黑客論壇[/url](/)