新聞中心
Unit 42研究人員討論了基于虛擬機(jī)監(jiān)控程序的沙盒中基于內(nèi)存的工件構(gòu)建的機(jī)器學(xué)習(xí)渠道,該沙盒是Advanced WildFire的一部分。可以提高對(duì)惡意軟件的檢測(cè)精度。

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、撫寧網(wǎng)絡(luò)推廣、小程序開(kāi)發(fā)、撫寧網(wǎng)絡(luò)營(yíng)銷、撫寧企業(yè)策劃、撫寧品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供撫寧建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
正如我們以前所介紹的,惡意軟件開(kāi)發(fā)者正在不斷完善他們的攻擊手段,以使靜態(tài)分析和沙盒等策略失效。封裝方法和沙盒逃避等技術(shù)的不斷發(fā)展讓防御者防不勝防。
更糟糕的是,流行的檢測(cè)技術(shù),如結(jié)構(gòu)分析、靜態(tài)簽名和許多類型的動(dòng)態(tài)分析,并不能很好地應(yīng)對(duì)目前越來(lái)越復(fù)雜的攻擊。
惡意軟件開(kāi)發(fā)者越來(lái)越多地采用逃避技術(shù),如混淆、封裝和在進(jìn)程內(nèi)存中執(zhí)行動(dòng)態(tài)注入的shellcode。使用來(lái)自文件結(jié)構(gòu)的線索進(jìn)行惡意軟件檢測(cè)可能并不總是成功的。封裝技術(shù)可以充分修改文件結(jié)構(gòu)以消除這些線索。因此,僅在這類特征上訓(xùn)練的機(jī)器學(xué)習(xí)模型將無(wú)法有效地檢測(cè)出此類樣本。
這種檢測(cè)方法的另一種流行的替代方法是使用機(jī)器學(xué)習(xí)模型,該模型基于惡意軟件在沙盒內(nèi)的執(zhí)行痕跡來(lái)預(yù)測(cè)惡意行為。然而,正如我們?cè)瓉?lái)所詳細(xì)介紹的那樣,沙盒逃避非常普遍,有效負(fù)載通常會(huì)根據(jù)任何數(shù)量的線索選擇不執(zhí)行,這些線索會(huì)指向正在模擬的樣本。
惡意軟件也可能會(huì)無(wú)意或有意地破壞沙盒環(huán)境,覆蓋日志文件,或由于其所使用的低級(jí)技巧而阻止成功分析。這意味著,在執(zhí)行日志上訓(xùn)練機(jī)器學(xué)習(xí)模型也不足以捕捉這些逃避類的惡意軟件。
使用NSIS Crypter加密的GuLoader惡意軟件
在這篇文章中,我們將分析一個(gè)使用Nullsoft Scriptable Install System(NSIS)加密器加密的GuLoader下載器。NSIS是一個(gè)用于創(chuàng)建Windows安裝程序的開(kāi)源系統(tǒng)。
Hash cc6860e4ee37795693ac0ffe0516a63b9e29afe9af0bd859796f8ebaac5b6a8c
為什么靜態(tài)分析沒(méi)有幫助
GuLoader惡意軟件是加密的,它也是通過(guò)NSIS安裝文件傳遞的,這對(duì)于靜態(tài)分析來(lái)說(shuō)并不理想,因?yàn)楸仨毷紫冉鈮嚎s文件內(nèi)容。一旦它被解壓縮,我們?nèi)匀挥屑用艿臄?shù)據(jù)和一個(gè)NSIS腳本。腳本本身也會(huì)動(dòng)態(tài)地解密代碼的某些部分,這是使其難以檢測(cè)的另一個(gè)因素。
然而,沒(méi)有太多的結(jié)構(gòu)線索可以識(shí)別這可能是惡意軟件。因此,在可移植可執(zhí)行文件(PE)結(jié)構(gòu)上訓(xùn)練的機(jī)器學(xué)習(xí)模型將不能有效地將該文件與其他良性文件區(qū)分開(kāi)來(lái)。
NSIS腳本和提取GuLoadershellcode
要提取NSIS腳本,我們必須使用7-Zip的舊版本15.05。這個(gè)版本的7-Zip能夠解包腳本,而新版本已經(jīng)刪除了解包NSIS腳本的功能。一旦我們提取了文件內(nèi)容和NSIS腳本(如圖1所示),我們就可以開(kāi)始分析腳本并查看GuLoader示例是如何執(zhí)行的。
NSIS腳本
如果向下滾動(dòng)腳本,我們會(huì)很快注意到文件正在復(fù)制到新創(chuàng)建的名為%APPDATA%\Farvelade\Skaermfeltet的文件夾中。雖然不清楚原因,但所使用的文件路徑似乎是丹麥語(yǔ)。在復(fù)制活動(dòng)之后,腳本中有常規(guī)的安裝邏輯,但是有一個(gè)名為func_30的有趣函數(shù)。
在此函數(shù)被調(diào)用之前,字符串$INSTDIR\Filterposerne\Malkekvg. exeNat被復(fù)制到名為$4的字符串變量中,如圖2和圖3所示。函數(shù)func_30從Programmeludviklinger210中讀取數(shù)據(jù)。Kon文件并構(gòu)建代碼,它將在字符Z被看到后立即調(diào)用這些代碼。
NSIS允許開(kāi)發(fā)人員能夠從Windows DLL調(diào)用任何導(dǎo)出的函數(shù),并且還允許他們將結(jié)果直接保存在NSIS寄存器/堆棧中。此功能允許惡意軟件開(kāi)發(fā)者在運(yùn)行時(shí)動(dòng)態(tài)調(diào)用Windows API函數(shù),并使靜態(tài)分析更加困難,因?yàn)樵诜治鲋氨仨殞?duì)其進(jìn)行評(píng)估。
調(diào)用函數(shù)func_30
解碼NSIS代碼
要解碼動(dòng)態(tài)代碼,我們可以編寫(xiě)一個(gè)簡(jiǎn)短的Python腳本,該腳本再現(xiàn)行為并提取Windows API調(diào)用:
下圖顯示了上述腳本產(chǎn)生的解碼數(shù)據(jù)
解碼的Windows API調(diào)用
解碼后的函數(shù)一起從NSIS壓縮文件中的另一個(gè)文件中讀取shellcode,并使用EnumWindows函數(shù)執(zhí)行它。如果我們必須用偽代碼編寫(xiě)這個(gè)過(guò)程,它看起來(lái)應(yīng)該是這樣的:
為了使其余的分析更容易,我們將使用shellcode生成一個(gè)PE。為了生成可執(zhí)行文件,我們可以使用Cerbero Profiler或LIEF Python庫(kù)等工具。
在本例中,我們使用了LIEF庫(kù)來(lái)構(gòu)建一個(gè)新的可執(zhí)行文件。我們所要做的就是添加一個(gè)包含Malkekvg.Nat文件內(nèi)容的新部分,并將入口點(diǎn)設(shè)置為正確的偏移量。一旦我們得到了這些,就應(yīng)該能夠在IDAPro中打開(kāi)shellcode,并看到它包含有效的x86指令。
在IDA Pro的入口點(diǎn)生成PE文件
Shellcode分析
現(xiàn)在我們?cè)赑E文件中有了Shellcode的第一階段,我們可以在動(dòng)態(tài)分析中運(yùn)行它,看看會(huì)發(fā)生什么。我們將看到的第一件事是它檢測(cè)到虛擬機(jī),并在顯示消息框后停止執(zhí)行。此文本在運(yùn)行時(shí)使用4字節(jié)XOR密鑰解密。
無(wú)法在虛擬環(huán)境中執(zhí)行該示例
如果我們?cè)贗DA Pro中打開(kāi)文件并稍微遵循代碼,就應(yīng)該能夠看到用于解密第一階段的大函數(shù)。雖然函數(shù)圖概述看起來(lái)很大,但識(shí)別垃圾代碼仍然很容易。
進(jìn)行解密的代碼如下圖所示。在下圖中,我們可以看到跳轉(zhuǎn)到第二階段的最終調(diào)用。此時(shí),我們可以將第二階段轉(zhuǎn)儲(chǔ)到另一個(gè)可執(zhí)行文件中進(jìn)行解密。
我們可以直接從內(nèi)存中轉(zhuǎn)儲(chǔ)可執(zhí)行文件,但是必須確保將入口點(diǎn)修補(bǔ)到正確的地址(在本例中為0x404328)。
第一階段的Shellcode解密
調(diào)用到下一階段
第二階段使用了許多反分析技術(shù),其中的一些反分析技術(shù)為:
內(nèi)存掃描已知沙盒字符串;
虛擬機(jī)監(jiān)控程序檢查;
時(shí)間測(cè)量;
為了獲得GuLoader正在下載的最終負(fù)載,我們必須手動(dòng)繞過(guò)所有這些檢查,在不受所有這些技術(shù)影響的沙盒中運(yùn)行它,或者在裸金屬沙盒上運(yùn)行它。
提取有效負(fù)載信息
為了在不分析第二階段的情況下獲得有效負(fù)載信息(包括所有字符串),我們可以使用Spamhaus描述的一個(gè)小技巧。GuLoader使用簡(jiǎn)單的XOR加密來(lái)加密其字符串,其中包括有效負(fù)載URL。
要解密字符串,我們可以對(duì)已經(jīng)知道存在于第二階段中的模式使用暴力。XOR運(yùn)算的結(jié)果就密鑰。對(duì)此的唯一限制是模式必須足夠大,以便我們能夠完全解密有效負(fù)載URL。例如,一個(gè)好的模式可能是用戶代理字符串,默認(rèn)設(shè)置為Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) ,如Gecko。
為了快速自動(dòng)找到解密密鑰,我們必須首先加密一個(gè)短模式(例如,用戶代理字符串的前8個(gè)字節(jié)),然后搜索該結(jié)果是否在文件中的某個(gè)位置。如果它在文件中的某個(gè)位置,那么我們可以繼續(xù)解密剩余的模式以獲得完整的加密密鑰。
我們會(huì)在本文的最后附上Python腳本,該腳本能夠通過(guò)上述方法從有效負(fù)載中找到加密密鑰。在任何轉(zhuǎn)儲(chǔ)的第二階段GuLoader負(fù)載上運(yùn)行腳本后,我們應(yīng)該能夠看到一些字符串和負(fù)載URL。
GuLoader有時(shí)在有效負(fù)載URL前面包含7到8個(gè)隨機(jī)字符,它在運(yùn)行時(shí)將其替換為http://或https://。使用http還是https的區(qū)別是由隨機(jī)模式中的第四個(gè)字符決定的。
在此示例中,有效負(fù)載URL為http://ozd[.]com[.]ar/wp-includes/nHMoYlbGLWls101.qxd,并且在分析時(shí)有效載荷仍然在線。
最終下載的有效負(fù)載來(lái)自FormBook惡意軟件家族,其SHA256值為fa0b6404535c2b3953e2b571608729d15fb78435949037f13f05d1f5c1758173。
機(jī)器學(xué)習(xí)如何檢測(cè)?
在之前的一篇文章中,我們?cè)敿?xì)介紹了在實(shí)時(shí)沙盒運(yùn)行期間可以從內(nèi)存中提取的幾種可觀察工件。我們發(fā)現(xiàn),當(dāng)與機(jī)器學(xué)習(xí)結(jié)合使用多種逃避技術(shù)檢測(cè)惡意軟件時(shí),來(lái)自內(nèi)存分析的數(shù)據(jù)是非常強(qiáng)大的。
接下來(lái)我們回仔細(xì)觀察所有這些關(guān)于運(yùn)行時(shí)內(nèi)存中被修改的內(nèi)容,并將它們與大規(guī)模的機(jī)器學(xué)習(xí)相結(jié)合,用于惡意軟件檢測(cè)。該算法可以自動(dòng)找到模式,并且可以識(shí)別惡意軟件試圖在內(nèi)存中隱藏其足跡、動(dòng)態(tài)分配和執(zhí)行shellcode或使用解包的共性。
在這個(gè)GuLoader示例中,人類分析人員會(huì)立即識(shí)別出有幾個(gè)獨(dú)特的函數(shù)指針。我們還會(huì)注意到,惡意軟件已經(jīng)將其自身進(jìn)程內(nèi)存中的多個(gè)頁(yè)面的頁(yè)面權(quán)限更改為可寫(xiě)和可執(zhí)行。我們的機(jī)器學(xué)習(xí)模型能夠自動(dòng)執(zhí)行這些活動(dòng),從各種內(nèi)存構(gòu)件中提取有關(guān)特征來(lái)檢測(cè)GuLoader示例。
如上所述,我們?yōu)锳dvanced WildFire創(chuàng)建的自動(dòng)分析平臺(tái)將以一種高性能的方式自動(dòng)提取所有這些基于內(nèi)存的工件。這意味著所有與動(dòng)態(tài)解析函數(shù)指針、權(quán)限更改和解包可執(zhí)行文件相關(guān)的信息都可以在我們手動(dòng)管理的檢測(cè)邏輯中使用,也可以用于我們的機(jī)器學(xué)習(xí)渠道。
使用機(jī)器學(xué)習(xí)模式的檢測(cè)
下圖顯示了我們?nèi)绾蝿?chuàng)建一個(gè)機(jī)器學(xué)習(xí)模型渠道的高級(jí)視圖,該模型渠道是根據(jù)從上述基于內(nèi)存的工件中提取的自定義特征進(jìn)行訓(xùn)練的。我們選擇的特性被設(shè)計(jì)成保留來(lái)自冗長(zhǎng)工件的最有用的信息。
我們還將惡意軟件執(zhí)行跟蹤作為額外的信息源,并構(gòu)建了一個(gè)集成模型來(lái)檢測(cè)惡意樣本。如下圖所示,從四個(gè)內(nèi)存工件和惡意軟件執(zhí)行痕跡中自動(dòng)提取各種自定義特征,并將它們傳遞給一個(gè)分類模型以檢測(cè)惡意樣本。此外,我們還構(gòu)建了一個(gè)集成模型,該模型基于內(nèi)存工件和基于執(zhí)行跟蹤的特性進(jìn)行訓(xùn)練,以提高其性能。
機(jī)器學(xué)習(xí)模型架構(gòu)
文件樣本由流程渠道處理,以將內(nèi)存工件和其他惡意軟件屬性保存到功能存儲(chǔ)中。特征提取階段使用流式處理和批處理PySpark作業(yè)的組合來(lái)生成用于訓(xùn)練模型的最終特征向量。
ground truth標(biāo)簽來(lái)自一個(gè)單獨(dú)的渠道,該渠道根據(jù)惡意軟件特征和研究人員輸入為樣本分配標(biāo)簽。該渠道通過(guò)使用樣本首次出現(xiàn)的時(shí)間和哈希來(lái)生成非重疊的訓(xùn)練和評(píng)估數(shù)據(jù)集。
解釋模型預(yù)測(cè)
為了識(shí)別模型的局限性和能力,理解機(jī)器學(xué)習(xí)模型的預(yù)測(cè)是至關(guān)重要的。機(jī)器學(xué)習(xí)很容易出現(xiàn)誤報(bào),因?yàn)樗鼑?yán)重依賴于訓(xùn)練數(shù)據(jù)的質(zhì)量和多樣性,以及對(duì)不斷變化的文件進(jìn)行預(yù)測(cè)的泛化能力。因此,具有識(shí)別預(yù)測(cè)的因果特征的能力是非常有用的。
Shapley值
Shapley加法解釋(SHAP)是一種博弈論方法,用于解釋任何機(jī)器學(xué)習(xí)模型的輸出。與基線預(yù)測(cè)相比,SHAP值解釋了每個(gè)特征對(duì)輸入特征向量的實(shí)際預(yù)測(cè)的影響。在下圖中,從右到左的紅色特征是將模型推向惡意預(yù)測(cè)的最頂層特征。從左到右,藍(lán)色的特征表示降低預(yù)測(cè)為惡意軟件概率的最頂層特征。
如上圖所示,我們繪制了具有重要SHAP值的前七個(gè)特征及其相應(yīng)原始特征值的力圖。由于這些頂級(jí)特征的存在,我們的機(jī)器學(xué)習(xí)模型能夠檢測(cè)到GuLoader。這些特性對(duì)應(yīng)于幾個(gè)特定的動(dòng)態(tài)解析API指針及其在內(nèi)存中的相對(duì)位置,以及樣本所做的內(nèi)存頁(yè)權(quán)限更改的相對(duì)類型。
通過(guò)聚類尋找相似樣本
另一種理解模型預(yù)測(cè)的方法是在訓(xùn)練數(shù)據(jù)集中識(shí)別相似的樣本。我們使用基于密度的掃描(DBScan)作為聚類技術(shù),如下圖所示,因?yàn)樗试S異常值和不同形狀的聚類。
基于DBSCAN的集群
總結(jié)
GuLoader家族是unit42開(kāi)發(fā)的機(jī)器學(xué)習(xí)模型檢測(cè)惡意軟件的一個(gè)很好的示例,因?yàn)镚uLoader使用沙盒逃避和靜態(tài)防護(hù),使得傳統(tǒng)防御很難單獨(dú)使用結(jié)構(gòu)線索和執(zhí)行日志進(jìn)行檢測(cè)。
在Advanced WildFire中,開(kāi)發(fā)人員引入了一個(gè)基于虛擬機(jī)監(jiān)控程序的沙盒,它可以在執(zhí)行期間暗中觀察GuLoader的內(nèi)存,以解析有意義的內(nèi)存駐留工件和對(duì)機(jī)器學(xué)習(xí)檢測(cè)渠道有用的信息。這允許安全防護(hù)人員使用從觀察到的基于內(nèi)存的工件中提取的特征來(lái)準(zhǔn)確地檢測(cè)惡意行為。
本文翻譯自:https://unit42.paloaltonetworks.com/malware-detection-accuracy/
網(wǎng)站名稱:機(jī)器學(xué)習(xí)如何檢測(cè)那些使用沙盒逃避和靜態(tài)防護(hù)的惡意軟件
網(wǎng)頁(yè)地址:http://m.fisionsoft.com.cn/article/djpccei.html


咨詢
建站咨詢
