我們將在本文介紹解碼用於加載cobalt strike shellcode的簡單.hta加載器的過程,接下來用文本編輯器執行初始分析,並使用CyberChef提取嵌入的shellcode,將使用模擬器(SpeakEasy)驗證shellcode,使用Ghidra執行一些基本分析。
哈希:2 c683d112d528b63dfaa7ee0140eebc4960fe4fad6292c9456f2fbb4d2364680。將zip文件下載到一個安全的虛擬機中,並在感染密碼的情況下解壓縮,將顯示一個.hta文件。hta文件本質上是一個帶有嵌入式腳本的html文件,我們的目標是定位和分析嵌入的腳本。
由於.hta是一種基於文本的格式,我們可以直接在文本編輯器中打開該文件。
使用文本編輯器進行分析在文本編輯器中打開該文件將顯示一小段混淆的代碼,後面跟著一個大的base64 blob。
出於分析目的,我們不需要解碼初始部分,我們可以通過PowerShell命令的存在和分解的wscript.shell來判斷這一點。它通常從javascript執行命令。
使用初始腳本只執行base64 blob的方法,我們可以直接解碼base64。如果base64 blob不能解碼,可以返回到初始片段進行分析。
解碼Base64可以繼續突出顯示整個base64 blob並將其複製到cyberchef,現在可以嘗試解碼它。
將base64內容複製到CyberChef中,可以看到字符之間帶有空字節的明文,這通常表示utf-16編碼,很容易通過“decode text”或“remove null bytes”刪除。
通過在配方中添加“remove null bytes”,可以獲得看起來像PowerShell腳本的解碼內容。
使用“解碼文本”和“utf-16”也可以很好地工作。
這兩個選項都會產生一個解碼的powershell腳本,可以將其複製到一個新的文本編輯器窗口中。
PowerShell腳本分析現在將PowerShell腳本放入文本編輯器中,我們可以繼續掃描關鍵字或任何可能指示下一步操作的內容。
在腳本中間的十六進製字節的大blob,以及大量的api的引用,可用於分配(VirtualAlloc),寫入(memset)和執行(CreateThread)內存中的東西。
在腳本的底部有一些小的東西。該腳本休眠60秒,如果初始腳本失敗,會嘗試切換到64位版本的Powershell。
解碼十六進製字節使用CyberChef為了分析十六進製字節,我們可以復制它們並嘗試使用CyberChef解碼它們,通過複製以下字節並將它們移動到CyberChef來實現。
一旦複製,字節可以用一個簡單的“from十六進制”操作解碼。在本例中,逗號和0x被自動識別。
我們還可以看到,雖然內容被“解碼”,但看起來仍然不太好。
用CyberChef驗證ShellCode此時,驗證我們的假設,即解碼的內容是shellcode。一種常見的方法是在shellcode中查找明文值(ip, api名稱),這需要做額外的分析。
使用CyberChef,可以通過嘗試反彙編字節來驗證我們的理論,即內容是shellcode。我們需要將值轉換為十六進制,然後使用CyberChef的Disassemble x86操作。
在這裡,可以看到字節已經成功反彙編。
1.沒有明顯的紅色部分錶示反彙編失敗;
2.CLD :這是shellcode執行的第一個常見命令。
還有其他一些指標,如早期調用操作和錯誤0D操作,這些都是Cobalt Strike shell代碼常見的情況。這些模式看起來很奇怪,但在看過一些shellcode示例之後就很容易識別了。
現在,我們可以假設數據是shellcode,並通過嘗試執行它來做進一步的驗證。
此時,可以繼續分析反彙編字節,我們需要對x86指令有所熟悉。嘗試並執行代碼通常要容易得多。特別是對於較大的shellcode示例。
通過在模擬器中執行來驗證ShellCode為了進一步驗證數據是shellcode並嘗試確定它的功能,我們可以將其保存到一個文件中,並嘗試在模擬器或調試器中運行它。
在這種情況下,可以使用FireEye的SpeakEasy工具。你可以在這裡閱讀SpeakEasy,並從GitHub下載。
在運行SpeakEasy之前,我們可以先下載可疑shellcode的原始字節,確保刪除十六進制和反彙編x86操作。
你可以將文件命名為任何你喜歡的名稱,本文將其命名為shellcode.bin。
接下來,可以用以下命令在SpeakEasy工具上打開命令提示符。
-t :要模擬的目標文件;
-r :告訴SpeakEasy文件是shellcode;
-a x86 :告訴SpeakEasy假定x86指令。這幾乎總是x86或x64,如果其中一個失敗,可以試試另一個。
按下enter鍵,SpeakEasy就可以成功地模擬代碼。在這裡我們可以看到,為了從51.79.49[.]174:443下載一些東西,進行了許多api調用。
現在,可以安全地假設整個腳本和shellcode的主要目的是充當下載程序。此時,還可以調查到該IP地址的連接,並確定是否成功下載和執行了任何內容。
Recommended Comments