我們可以通過使用CyberChef和Regex來克服大量基於文本的混淆,在混淆後,系統將識別一些“畸形”的shellcode,我們將在使用SpeakEasy模擬器進行模擬之前手動修復。
哈希:e8710133491bdf0b0d1a2e3d9a2dbbf0d58e0dbb0e0f7c65acef4f788128e1e4,示例鏈接請點此。
TLDR1.識別功能和混淆類型;
2.清除基本混淆與正則表達式和文本編輯器;
3.使用Regex, CyberChef和Subsections去除高級混淆;
4.識別shellcode並修復負字節值(Python或CyberChef);
5.使用Speakeasy驗證和仿真。
初步分析可以使用受感染的密碼保存和解壓縮腳本,這樣我們可以使用文本編輯器(如notepad++)直接打開文件。
打開後,我們可以看到腳本引用了一些Excel對像以及Wscript.Shell,通常用於執行.vbs腳本。
在這個階段,我們將跳轉到使用Wscript來利用Excel執行代碼的假設,避免分析Excel/Wscript組件,直接跳轉到解碼混亂的命令/代碼。
我們可以假設代碼的初始部分是利用Excel和Wscript來運行一個被混淆的vbs腳本。
混淆技術概述從第30行開始,可以看到兩種主要的混淆形式。
1.腳本被分解成許多小字符串,例如“hello world”將是“hello”&“world”
2.該腳本使用Chr解碼的十進制編碼值。例如,“Hello World”可以是“Hell”& chr(111)&“World”。其中的“0”已轉換為十進制111。
3.每行以下劃線_結尾。雖然這不是混淆,但仍然需要刪除以清理腳本。
現在已經確定3種初始形式的“混淆”,接下來可以繼續使用正則表達式來清除它們。
可以在不使用正則表達式的情況下手動刪除和替換每個值,但這是一個非常繁瑣的過程。在這個腳本中,regex是最好的方法。
在清除第一種形式的混淆後。我們可以使用搜索/替換來做到這一點,使用“&”和空替換值。
按下確認鍵後,290個字符串分割混淆被刪除了。
現在,將繼續使用CyberChef來識別和刪除Chr(10)樣式混淆。
這個過程將包括使用一個正則表達式來識別Chr(10),然後使用一個子段來研究這些值並對它們進行解碼,保持剩餘的腳本不變。為此,需要把當前編碼的內容移動到CyberChef中。
用Cyberchef的初步分析現在將腳本移到CyberChef中,可以直接跳到正則表達式(regex)的原型中,以深入研究十進制編碼的值。
對於原型,本文將使用“正則表達式”和“突出匹配”,這是為了確認腳本匹配預期的混淆內容。
這裡使用的正則表達式是Chr \(\d+\):
Chr-需要以Chr開頭的十進制值;
\( and \) -我們希望十進制值包含在括號中,需要轉義括號,因為它們在正則表達式中具有特殊含義;
\d + -指定一個或多個數值;
希望“數值”+“包含在括號中”+“前面加上Chr”。
由於regex看起來正在運行並正確識別值,因此可以繼續並將其更改為分段。
分段允許僅對匹配正則表達式的數據執行所有將來的操作。這允許我們保持腳本的大部分完整,而只解碼那些混淆並匹配我們的正則表達式的值。
接下來繼續將regex複製到分段,確保禁用原始正則表達式。
應用了這個小節之後,現在可以應用一個額外的正則表達式來提取十進制值(但只能是包含在Chr中的值)。
從這裡開始,我們現在可以應用“From decimal”來解碼內容。
至此,我們現在有了一個比以前好看得多的腳本,儘管它仍然到處都有&。
回到文本編輯器
解決了主要的混淆後,可以將CyberChef輸出複制回文本編輯器中。
& chr(110)&值周圍的&符號仍然存在,可以繼續刪除它們。
保留了下劃線(visual basic換行符),繼續使用\s +_ \s +刪除它們,這將刪除所有換行符和周圍的空白。
腳本現在看起來乾淨很多,儘管周圍有很多“”,但不會對分析有什麼影響。
我們可以繼續使用“+”的正則表達式刪除這些引號,這將從腳本中刪除所有引號。
分析清理後的腳本
現在刪除了大部分垃圾代碼,可以繼續查看已解碼的腳本。
可以注意到的第一件事是,在進程注入中有很多api引用(VirtualAllocEx, WriteProcessMemory, CreateProcessA等)。
稍微向下滾動,我們還可以看到一團十六進製字節和進程名,可能用作進程注入的目標。例如,這個blob字節將被注入rundll32.exe。
此時,我們可以假設字節是shellcode。這主要是由於長度短,不能作為標準的pe/exe/dll文件。
在繼續之前,可以先刪除最後剩下的下劃線。
一旦刪除,十六進製字節的blob應該看起來像這樣。 blob太短,不能成為一個完整的PE文件,但是有足夠的空間包含shellcode。
修復用於表示Shellcode的負十進制值shellcode中存在需要修復的負值。雖然不確定負的值如何在visual basic/.vbs運行,但在這種情況下,似乎-4的值對應於256 -4,即252,這是0xfc,這是在Shellcode開頭看到的一個常見字節(cld標誌)。
在分析可能的shellcode之前,我們需要取所有的負值並從256中減去它們。
這可以在CyberChef或Python中完成,示例如下所示。
CyberChef :這可以通過使用一個分段來提取負值,從值256中減去它們來完成。現在,所有值都可以進行十進制解碼。
Python:類似於cyberchef,可以迭代十進制值數組,從數字256中減去負值。
在輸出中,我們可以看到明文字符串以及0xfc的初始Shellcode字節。
兩個輸出也引用了一個可能的C2地址47.98.51[.]47。
此外,兩個輸出都引用EICAR字符串。這是一個字符串,將自動觸發所有殺毒軟件。
據分析,這是一個故意的字符串,旨在防止Cobalt Strike的試用版被濫用。
SpeakEasy的Shellcode仿真
0xfc字節的短長度和存在可以讓我們確信結果是shellcode。為了進一步確認,可以繼續在SpeakEasy模擬器中模擬輸出。
這證實了字節是shellcode,它從ip 47.98.41[.]47充當基於http的下載程序
如上所述,通過分析一個包含shellcode加載器的visual basic腳本,我們成功地識別了一個C2地址,並使用SpeakEasy模擬器確認了shellcode功能。
Recommended Comments