檢測隱藏在證書文件中的惡意代碼(二)
在上一篇文章中,我們解釋了如何構造具有精妙結構的YARA規則的檢測方法,來檢驗證書里所含有的惡意PowerShell腳本,而AV和IDS通常無法檢測到這些含有惡意代碼的證書。這是因為,很多證書文件中並沒有包含有效的證書,而是一個PowerShell腳本。雖然我們已經發現了各種有效載荷,但包含Windows可執行文件的偽造證書似乎是最常見的。在這篇文章中,我們將分析一個包含PowerShell腳本的證書。
攻擊者可以將這些包含PowerShell腳本的偽造證書文件用作各種有效載荷的容器,以避免殺毒軟體,IDS等檢測到有效載荷。在Windows系統上打開證書文件時,有效載荷並不會被激活,它必須由攻擊者或惡意軟體進行提取。還有一種情況就是,證書文件本身無法進行動態分析,在沙箱中打開證書不會導致代碼的執行,因此通過沙箱檢測也不會發現惡意行為。
分析
我們使用YARA檢測規則在VirusTotal上檢測到證書MD5 0082aed588f76b517946a824fba43994。它的BASE64代碼不以字母M開頭,因此它不會是有效的證書,也不會是Windows可執行文件(PE文件),因為BASE64代碼不會以字母T開頭。
但是當我們用base64dump.py進行分析時,發現了一些異常的信息。
這看起來像一個以powershell.exe開頭的命令,我們來看看完整的代碼。
這個有效載荷經過多層混淆,這是安全人員在野外發現的惡意PowerShell腳本的典型特徵。這也是為什麼我們選擇這個證書的另一個原因,它允許我們展示靜態分析PowerShell腳本的整個過程。
在上圖中,你可以看到powershell.exe是使用-encodedcommand參數執行的,該參數是一串很長的經過BASE64編碼的UNICODE字元串,不過也可以用base64dump解碼。
這個反混淆的腳本也包含BASE64代碼,而且還添加了另一層混淆。讓我們將其重新格式化以獲得更好的可讀性。
我們可以看到,BASE64字元串被解碼、解壓縮(GZip)並執行(IEX)。
解碼和解壓縮後,我們最終會得到另一個PowerShell腳本。 translate.py有一個函數(GzipD)來解壓縮GZip壓縮數據。
可以看出,有很多BASE64代碼,不過這種類型的腳本也是眾所周知的,因為它包含shellcode(BASE64編碼),且在PowerShell進程中被注入後就會執行惡意行為。最後一個if語句帶有一個表達式,查看整數指針(IntPtr)的大小是否為8位元組,這是檢測PowerShell進程是32位還是64位進程的技巧。 32位進程使用4位元組指針而64位進程使用8位元組指針,在本文所舉的腳本樣本中,如果指針不是8位元組長(32位),則直接執行腳本(IEX)。對於64位PowerShell,則啟動32位PowerShell進程(start-job ... IEX ... -RunAs32)來運行腳本。
這個32位的技巧之所以能夠實現,是因為該腳本只包含32位的shellcode,只能在32位進程內運行,而不能在64位進程內運行。
以下是被解碼的另一層BASE64:
當我們解碼這層BASE64編碼的shellcode並提取字元串時,就可以看到一個域和一個用戶代理字元串。
使用scdbg.exe提取和模擬這個shellcode,將使我們更好地了解這個shellcode的作用。
可以看出,shellcode建立了一個HTTP鏈接,以下載多級shell代碼,它們負責啟動遠程可訪問的多個shell。這段代碼是滲透測試工具的典型代碼,如較舊的Metasploit / Meterpreter和PowerShell中開發的類似框架。
總結
無法使用動態分析方法直接分析隱藏在偽造證書文件中的惡意軟體,因為證書在打開時不會執行代碼。因此,對此腳本的檢測需要分幾個步驟,第一步就是提取有效載荷。以上,我們給出了一個靜態分析的例子,它混淆了最終執行第一階段shellcode的PowerShell腳本。這是滲透測試框架的典型特徵,但也會被犯罪分子反過來使用。
※黑客利用URL短地址跳轉進行挖礦
※使用Linux容器迅速搭建滲透測試環境
TAG:嘶吼RoarTalk |