Windows惡意軟體API調用特徵分析

1.背景

目標:

1)找到病毒調用概率高的API

2)找到病毒調用概率不高,但是當調用頻次高的時候,是病毒概率高的API。

通常對病毒使用API的認識都是基於病毒工程師的經驗,但是我們並不知道每個API對於是否是病毒的貢獻有多大。通過對大量病毒樣本的統計分析,我們可以得出相關的數據。

從網上下載3000個樣本,1500個病毒,1500個無毒。用沙箱進行掃描,得到樣本調用API和是否是病毒。如下圖所示

取API的動態調用次數作為每個樣本的特徵,病毒類標記為1,非病毒類標記為0。如下所示:

{『LdrUnloadDll』:4, 『RegCloseKey』:45,…} 1n{『GetFileSize』:1, 『NtWriteFile』:4, ….} 0n

2. 分析

將樣本的API調用次數表示到折線圖和條形圖上,藍色表示正常樣本,綠色表示病毒樣本。如下圖所示:

條形圖按API調用的次數分布到5個區間1+(1~10),10+(10~100),100+(100~1000),1000+(1000~5000),5000+(5000~)。

通過對大量樣本的圖形的觀察發現,病毒比較常用的API(如:WriteProcessMemory,Process32NextW等)不管是折線圖還是條形圖,綠色線條所佔的比例都很大。

病毒使用率低的API,藍色線條占的比例比較大。

有些API的調用,折線圖綠線比例大,條形圖藍線比例比較大。這種情況下病毒對API的調用次數會很多(會有很多成千上萬次的調用),普通樣本對API調用次數很少(一般不超過100次)。

因此我們可以計算折線圖和條形圖中綠色像素所佔的比例來評估API對病毒的影響。

3. 方法

P1 = 折線圖佔用率:綠色像素/(綠色像素+藍色像素)

P2 = 條形圖佔用率:綠色像素/(綠色像素+藍色像素)

1) 計算API對病毒分類的貢獻(P1*P2)

對於最能表示病毒特徵的API,其被病毒調用的概率要比被正常樣本調用的概率大的多,同時高頻調用的次數也比正常樣本大的多。如Process32NextW

所以P1,P2的值也會很大。

對於最不可能被病毒調用的API,P1,P2的值都會很小。

因此可以用P1*P2來表示API對病毒分類的貢獻,進行排序後,數值會往兩端移動。

(上圖:貢獻度排序曲線)

2) 計算API的高頻調用對病毒分類的貢獻(P1-P2)

對於__exception__這樣的,P1值很大,但是P2值比較小。其高頻次調用的情況下是病毒的概率很高,無法單純的從是否調用來判斷是否為病毒。

用P1-P2來評價高頻次調用。

4.結果

1)計算P1*P2,進行排序,部分結果如下。

數據結果分別為(API名,(貢獻值,API調用次數概率,調用API的樣本為病毒的概率,病毒樣本數量))

貢獻值為1的API,沒有被正常樣本調用過。(可能是由於樣本數量太小造成的,特別是病毒樣本數量只有幾次的API)。其圖像如下:

貢獻值比較大的API基本都是病毒常用的,經常用來識別病毒。如排在前10的有:

WriteProcessMemory,nNtGetContextThread,ngethostbyname,nCreateToolhelp32Snapshot,nNtSetContextThread,nProcess32NextW,nProcess32FirstW,nInternetOpenA,nGetComputerNameA,nGetFileSizeExn

其圖像如下

中間這部分數據用於下一節。

排在後面的都是比較沒有病毒特性的API,比如WriteConsoleA,WriteConsoleW,MessageBoxTimeoutW,InternetGetConnectedState,select等。圖像示例如下:

2)計算P1-P2,進行排序,部分結果如下。

這部分可以找到那些低頻次調用貢獻度下,但是高頻次調用貢獻度大的API。

數據格式(API名,(提升度,API調用次數概率,調用API的樣本為病毒的概率,正常樣本調用最大次數))

比如NtQueryAttributesFile,正常樣本使用這個API的可能性更大。但是正常樣本很少調用超過10次的。 因此超過10次調用NtQueryAttributesFile的樣本就很可能是病毒了。

GetFileAttributesW 超過100次調用則很有可能是病毒。

超過10次的__exception__調用時病毒的概率很大。

完整的數據整理看數據部分。

5.結論

1)通過計算貢獻度=病毒調用API概率*調用次數比例可以將API兩極化

結果會受樣本數量的影響,需要過濾掉次總數低的數據

2)通過(調用次數比例-病毒調用API概率)可以找到那些調用次數少時對病毒分析沒什麼幫助,但是調用次數多時幫助很大的API。

6.數據

1)對病毒識別影響大的API

2) 調用次數少難以區分,調用次數多可以用於識別病毒的API

本文為 change 原創稿件,授權嘶吼獨家發布,未經許可禁止轉載,如若轉載,請聯繫嘶吼編輯: Windows惡意軟體API調用特徵分析

推薦閱讀:

初探域滲透神器Empire
如何處理格式為ACE的惡意軟體文件?
厚客戶端滲透測試實戰(三)

TAG:技术分析 | MicrosoftWindows |