天行健灬乄的個人空間

信息量4659

黑客內參詳解如何通過API調用來分析惡意軟件2017/12/27 16:37:40

這篇文章不是我的原創(chuàng)文章,是我在黑客內參征求了作者的同意之后轉載的一篇文章。
在今年的上一個季度,我們發(fā)現(xiàn)有越來越多的惡意軟件開始使用各種加密、封裝和加殼等保護技術來對惡意代碼進行混淆處理,以防止系統(tǒng)或程序對其進行識別。除此之外,這些技術甚至還會讓研究人員對其的靜態(tài)分析變得更加困難。雖然越來越多的惡意軟件開發(fā)人員開始使用這種保護性的加殼技術,但這也直接導致了另一種惡意軟件分析方法的誕生。

其中的一種分析方法,就是通過分析惡意代碼中負責告訴系統(tǒng)如何執(zhí)行特定操作的API調用以及控制命令。在這種方法中,我們不需要對已加殼的文件進行逆向分析,因為我們只需要對惡意代碼所執(zhí)行的API調用來進行動態(tài)分析,就可以知道某個特定文件具體的功能了。通過這樣的方法(分析API調用),我們可以確定一個文件是否具有惡意性,而有些API調用只有某些特殊類型的惡意軟件才會去使用。比如說,常用的惡意Payload下載API是URLDownloadToFile,而GetWindowDC這個API一般用于間諜軟件或鍵盤記錄器等惡意工具(用于屏幕截。。

接下來,我們會對一個惡意軟件樣本進行分析,并給大家介紹這項技術的實現(xiàn)方法。
木馬樣本

黑客內參所要分析的惡意軟件樣本是一個名叫1.exe的著名木馬,它的SHA256如下:

0213b36ee85a301b88c26e180f821104d5371410ab4390803eaa39fac1553c4c

如何通過API調用來分析惡意軟件

這個文件是加了殼的(VMProtect),所以我們就很難使用反編譯工具來對其進行分析了。由于我個人并不擅長逆向工程分析,因此我打算通過分析該文件在沙盒環(huán)境的執(zhí)行過程中的API調用來了解它的行為。


下面這張圖片中,顯示的是我們通過觀察它在沙盒環(huán)境中的運行情況所得到的API調用列表:

如何通過API調用來分析惡意軟件

首先,我們來看一看這些函數(shù)到底有什么作用。其中有部分函數(shù)可以在微軟的網(wǎng)站中找到相關內容:

GetModuleHandle函數(shù)

為特定模塊獲取模塊處理器,該模塊必須在調用進程中被加載。GetModuleHandleA (ANSI)

GetProcAddress函數(shù)

獲取一個輸出函數(shù)的地址,或從指定的動態(tài)鏈接庫(DLL)獲取變量。

_wtoi

將一個字符串轉換成整型

CreateStreamOnHGlobal函數(shù)

這個函數(shù)將創(chuàng)建一個流對象,該對象可以使用一個HGLOBAL內存處理器來存儲流內容。


StrStr函數(shù)

查找字符串中出現(xiàn)的第一個子字符串,匹配是大小寫敏感的。StrStrA(ANSI)

wsprintf函數(shù)

向特定的緩沖區(qū)中寫入格式化數(shù)據(jù),可根據(jù)相應的格式化字符串標準向輸出緩沖區(qū)中寫入任意參數(shù)。wsprintfA (ANSI)

WinHttpOpen函數(shù)

該函數(shù)可以初始化WinHTTP函數(shù)并返回一個WinHTTP-session處理器。

GetModuleFileName函數(shù)

獲取包含指定模塊的文件的完整路徑,該模塊必須在當前的調用進程中被加載。GetModuleFileNameW (Unicode)

LoadLibrary函數(shù)

向調用進程的地址空間加載特定模塊,該模塊可能還會加載其他的模塊。LoadLibraryA (ANSI)

LocalAlloc函數(shù)

向堆內存中分配指定大小的字節(jié)。

LocalFree函數(shù)

釋放指定的本地內存對象,并初始化該對象的處理器。

GetModuleFileName函數(shù)

獲取包含指定模塊的文件的完整路徑,該模塊必須在當前調用進程中被加載。GetModuleFileNameA (ANSI)

ExitProcess函數(shù)

終止調用進程以及所有相關的線程。
關鍵的惡意識別指標

需要注意的是,上面給出的所有函數(shù)并非都能夠之別標明某個可執(zhí)行程序的真實作用。但是針對WinHttpOpen的調用可以告訴我們這個應用是有特殊目的的。

那我們就可以從這個函數(shù)下手,我們使用URL Revealer(Kahu Security)來檢測流量的目的地,并發(fā)現(xiàn)了兩個該惡意應用會不斷嘗試連接的URL地址。

注:當我們向VirusTotalAPI提交一個文件來進行掃描時,最好提交這種形式的POST

上面這個鏈接指向的是一個已失效的Twitter地址,當我使用Twitter的高級搜索功能進行查找時,黑客內參發(fā)現(xiàn)這條推文早就已經(jīng)被刪除了。

如何通過API調用來分析惡意軟件

但不幸的是,這個網(wǎng)站已經(jīng)無法解析了,但這個網(wǎng)站原本是一個專門提供網(wǎng)站入侵服務的地下站點。不過需要注意的是,這個Twitter賬號目前仍然是活躍的。

由此看來,我們就沒辦法弄清楚這個惡意軟件想要利用GET請求來做什么了。但是我們可以用其他的方法搞清楚它想用VirusTotal來掃描什么東西?下面是我們使用WireShark所捕捉到的數(shù)據(jù)包:

如何通過API調用來分析惡意軟件

在這個數(shù)據(jù)包中,你可以看到惡意軟件用來在VirusTotal網(wǎng)站上掃描文件的API密鑰以及文件名。所以,通過對API調用和數(shù)據(jù)包進行重構,我們發(fā)現(xiàn)這款惡意軟件會向VirusTotal提交自己的拷貝版本,即惡意軟件副本,而這正好是Vflooder木馬家族的典型行為。Vflooder是一種特殊類型的Flooder木馬,而Flooder木馬可以向目標發(fā)送大量的信息來中斷目標的正常操作。但是我認為VirusTotal可能無法檢測到這種惡意軟件威脅。
總結

實際上,我們本文所分析的Vflooder木馬樣本其實還是費查更簡單的。但是通過分析API調用來了解惡意軟件的行為,其實并不是一件容易的事情,因為我們發(fā)現(xiàn)有很多的惡意軟件會添加無效/冗余的API調用來增加我們的分析難度。但無論怎樣,分析API調用也是一種檢測惡意軟件的有效方法,因為攻擊者想要做的事情,肯定要在代碼中有所體現(xiàn)。
原文來自:[url=]黑客論壇[/url](/)
網(wǎng)站地圖 - 手機版 - 留言反饋
個人空間相關信息由系統(tǒng)索引庫每60分鐘定時更新同步,非實時數(shù)據(jù)顯示