記一次新型變種QakBot木馬分析
背景
年初單位郵箱收到了一篇釣魚郵件還有一個附件xlsb的文檔,將宏命令提取出來,發現會從遠程下載一個文件下載后將文件上傳到殺毒網開始查殺,51個殺軟也就10個左右報毒了,很明顯是有點問題的。

2
病毒分析
通過前期的分析從文件中dump出一個可疑的PE文件,當然你可以用OD的工具去Load,寫了一個加載程序,然后在下斷LoadLiarbryA,加載成功后名為:hello.dll


入口處之前跟過發現存在很多花指令分析起來也挺耗時間,調用函數是來回跳來跳去,要么就是來回賦值做一些沒用的操作,這里就不從頭開始分析了,劍走偏鋒直接從FindResourceA開始。

從資源段里加載一個可疑資源:

老三樣:LoadResource、SizeofResource、LockResource



之后Virtualalloc分配內存00300000 和 00E70000


向申請的內存空間寫入資源數據:

一路F8跟到解密后的數據:

dump出一份PE,然后用regsvr32.exe OD加載寫入參數下斷VirtualAllocEx。


將shellcode指令寫入內存:

過程中還發現在系統函數使用過程不直接調用API函數,而是利用FS寄存器找到TEB的地址(TEB+0x30)->到PEB結構地址在PEB+0x0C地方指向PEB_LDR_DATA結構,PEB_LDR_DATA+0x1C的地方就是Dll地址獲取kernel32.dll加載到內存的位置。
找到其導出表,定位導出的GetProcAddress函數,使用GetProcAddress函數獲取地址,再保存然后再調用(一部分防止殺毒發現)。

看到這讓我想起了一種傀儡進程的注入方式,那顯然應該有創建進程或者是打開進程句柄的操作,bp CreateProcess。

Flags=CREATE_SUSPENDED 那么創建的該進程可被掛起,使用ZwUnmapViewOfSection卸載掉該進程內存鏡像(長度為 SizeOfImage的內存)就得到了干凈的內存,再將shellcode寫入后重新恢復主線程運行,不落磁盤讀寫,從內存中啟動一個程序。


不出意料恢復主線程執行后桌面程序會加載dll。

使用IDA分析:

大體不算太復雜的調用關系,但是函數較多:

還有一些亂七八糟的函數比較多,主要看看大概做了哪些事情,獲取操作系統版本\名稱\系統目錄等信息。


獲取磁盤類型:

創建命令管道:

那應該有C2服務器,IP地址在數據段應該是加密了,IDA沒有分析出來,直接開啟抓包加載該dll執行完后,發現有幾個為美國的IP地址比較可疑。


加密的數據包:

通過威脅情報搜索后:

3
總結
分析完這個樣本后之后我還通過威脅情報找到了歷史版本的其他QakBot樣本進行了分析,跟以往樣本唯一不一樣地方就是使用了傀儡進程的方式來注入,該技術也不算什么新鮮的技術。
后面我還分析360U盤查殺的注入方式,其實沒有必要搞那么復雜,通過COM注冊方式把桌面的注冊表CLSID修改或者添加InprocServer32項目中創建一個名為InprocServer32的目錄,然后寫入兩個值:
1、Dll的路徑地址;
2、數值名稱為ThreadingModel數值數據為Apartment。每次啟動explorer.exe桌面應用的時候就會自動加載指定的Dll文件了。