某個以釣魚郵件發起的 APT 攻擊
測試環境 : windows 10 VM
Guildline.xlam
首先模擬 SMTP client 行為 , 從 SMTP 郵件中抽取出惡意程式 , 並將惡意程式檔名改為 Guildline.xlam
Excel 開啟惡意程式 , 開啟後詢問用戶是否需要啟用 Macro , 推測惡意程式利用 VBA 執行惡意行為
按下 Enable Macros 後 , Office 開始執行 VBA , 從 Workbook_Open
進入 , 呼叫了 userothraLoad
以及 open_new_sheet
動態追蹤 userothraLoad
的行為 , 發現了程式從 UserForm1
中取出資源並解密 , 並將解密後的惡意程式寫入 Environ$("USERPROFILE") & "\Glhvadia\hbraeiwas"
, 最後再呼叫 Shell 執行解密後的惡意程式
hraeiwas.exe
PEiD 查看位於 USERPROFILE\Glhvadia
的惡意程式 hbraeiwas
利用 dnSpy 反編譯並動態追蹤觀察程式行為 , 發現程式在 Form1.Unzip 當中取出 Resources.dlrarhsiva7 , 寫入 C:\ProgramData\Hdlharas\mdkhm.zip
, 再解壓為 C:\ProgramData\Hdlharas\dlrarshiva.exe
, 最後利用 Process.Start 執行 dlrarshiva.exe
dlrarshiva.exe
動態追蹤程式行為 , 發現 dlrarshiva.exe 會執行 dlrarhsivalookup_connect 函數試圖與 C2 連接 , C2 位置為 185.136.161.124:6128
, 繼續追下去發現惡意程式沒有成功與 C2 建立連線 , 並且在每次連線失敗後會切換附埠號
靜態追蹤 , 如果連接成功 , 等待 C2 送出指令封包 , 接收到指令封包後 , 執行 see_response 函數處理 C2 指令
自架 C2
執行 dlrarshiva.exe , 開啟 wireshark 觀察封包 , 確認 C2 目前已經關閉
為了動態追蹤惡意程式以及錄製 C2 封包 , 自己架了一個簡單的 C2 與惡意程式互動
由 get_command 以及 see_response 函數的程式碼可以猜測 C2 指令封包前 5 bytes 是指令大小 , 後面則是接指令 cmd + ‘=’ + arg
public string[] dlrarhsivaget_command()
{
string[] result;
try
{
byte[] array = new byte[5];
this.dlrarhsivabytesRead = this.dlrarhsivanetStream.Read(array, 0, 5);
int num = BitConverter.ToInt32(array, 0);
byte[] array2 = new byte[num];
int num2 = 0;
for (int i = num; i > 0; i -= this.dlrarhsivabytesRead)
{
int count = (i > this.dlrarhsivabuffSize) ? this.dlrarhsivabuffSize : i;
this.dlrarhsivabytesRead = this.dlrarhsivanetStream.Read(array2, num2, count);
num2 += this.dlrarhsivabytesRead;
}
string text = Encoding.UTF8.GetString(array2, 0, num).ToString();
if (text.Trim() == "")
{
result = null;
}
else
{
result = text.Split(new char[]
{
'='
});
}
}
catch
{
this.dlrarhsivais_working = false;
result = null;
}
return result;
}
將 C2 ip patch 為 localhost
因為 wireshark 不能直接側錄本地戶傳的封包 , 所以我用 RawCap 側錄並 pipe 到 wireshark 顯示
RawCap.exe 127.0.0.1 \\.\pipe\RawCap
C2 成功連接惡意程式
C2 功能包括了檔案讀寫 , 檔案刪除 , 進程查看 , 螢幕截圖
C2 執行 file 讀檔
C2 執行 getavs 獲取所有進程資訊
C2 執行 scren 獲取螢幕截圖
C2 執行 dirs 獲取目錄資訊
其它追蹤 C2 指令
command | 功能 |
---|---|
delt <file> | 刪除檔案 |
runf <file> | 執行檔案 |
filsz <file> | 查看檔案大小 |
endpo <pid> | 刪除進程 |
dowf <filename> | 寫檔 |
info | 查看作業系統版本以及當前用戶名 |