初步研判
SHA256:9090807bfc569bc8dd42941841e296745e8eb18b208942b3c826b42b97ea67ff
我們可以看到引擎0檢出,是個免殺樣本,不過通過微步云沙箱的行為分析,已經被判為惡意
行為分析
進程行為
可以看到demo顯示調用了winver獲取了主機的基本信息,然后調起taskmgr,以其身份再次調用自己,可能是一個提權行為
文件行為
沒有文件被寫入,但是原文件運行完就沒了
注冊表行為
發現多了一個正常的文件的計劃任務,啟動權限還是SYSTEM,啟動時間每兩小時一次
文件還帶dll,一看就是白加黑
網絡行為
未檢出
詳細分析
主程序邏輯
主文件是一個pe文件
直接對這個qt樣本進行動態調試十分困難,不僅僅是因為采用了Qt框架,還有就是采用PoolParty timer模塊,利用內置計時器線程池任務執行shellcode,所以想要一步一步走到shellcode是非常困難的,后續我們使用api斷點的方式進行分析
poolparty項目地址
我們在virtualalloc下斷就可以發現程序在內存中載入了一個pe文件
這個時候查看調用堆棧就會發現被破壞了,不知道主文件的邏輯哪里調用的shellcode,但是我么可以發現shellcode段的調用還是能看到的,這個時候我們就需要回溯一下了,第一次進入shellcode是什么時候,大概率也是第一個使用virtuallalloc的位置
我們回溯一下,可以發現,第一次載入了一段shellcode,我們把它單獨拿出
直接運行shellcode會連接如下ip,不過根據X情報社區的情報,不像是惡意的c2,暫時保留
apihash的味道撲面而來
我們在主程序動調查看堆棧可以看到調用堆棧
shellcode邏輯如圖所示
第一段shellcode中創建內存對一段數據的魔改RC4解密,key為數字12345
這里出來的就是上方的dll了
后續shellcode中進行內存對齊并跳轉入口段做初始化
然后進入第二個函數
后續找到run函數
最后調用執行dll中的run函數
dll邏輯
邏輯如圖所示,獲取了主程序的名稱,如果不是winlogon就進進入if內,winlogon是用于登錄相關的操作的,如果文件名包含winlogon.exe就進入sub_18003c10,這里猜測內部應該是用于常規的權限維持,如果不包含就相當于是初始化,如果是管理員權限就進入sub_180004240不是就進入sub_180001000。
非管理員下運行
因為sub_180001000比較短,所以直接跳轉看看這個
首先是拼接出了如下路徑
C:\windows\system32\winver.exe
然后湊出了類似UUID的值,貌似是利用RPC通信去做提權操作
用RPCview可以看到是這樣一個進程
后續又調用taskmgr.exe
利用taskmgr.exe身份使用CreateProcessAsUserW創建創建子線程,猜測是用于提權的
這樣就會有一個是管理員權限的程序,這時候我們回到dll調用位置,以admin身份進入
管理員下運行
首先是賦值了兩端code,一段是當前這段shellcode,另一段是RC4未解密的dll數據
緊接著有復制了一段數據,看著有點像之前RC4解密前的dll
然后遍歷進程查看是否有winlogon.exe,去獲取他的進程號
然后把shellcode寫入進程
利用ALPC完成權限維持
這個時候我們就能判斷出該進程把shellcode和加密的dll全部寫入了winlogon.exe中,然后讓shellcode在winlogon中執行,實現行為隱藏。
這個時候我們再回到最初的位置
winlogon.exe內運行
進入后又是一段魔改RC4的解密,解密出的內容居然是一個IP?
非常可疑,這個ip曾經被用于銀狐
之后打算創建如下exe并寫入數據
C:\Program Files\Common Files\System\Overwolf.exe
貌似是個白文件,可能是白加黑把,我們繼續往下看看
然后在同目錄下創建"teamspeak_control.dll"和teamspeak_control.bin文件
然后起了一個線程執行shellcode
我們dump出來單獨看看,發現就和上面一樣的shellcode,執行dll中的run函數,這個放放
流程之后解密獲取了計劃任務的COM組件CLSID和riid并初始化
然后就是利用COM執行命令了
連接并獲取\Microsoft\Windows目錄
?Connect@?QITaskService@@TaskServiceImpl@@UEAAJUtagVARIANT@@000@Z
?GetFolder@?QITaskService@@TaskServiceImpl@@UEAAJPEAGPEAPEAUITaskFolder@@@Z
...
結果就是給白加黑創建了計劃任務
最后刪除自己
至此,關于Qt部分的邏輯就結束了
白加黑分析
經過簡單diff,發現他把dll中所有的導出函數內容都設置為了同一個,所以只要隨便調用一個就會觸發黑行為。。
但是直接在函數下斷點無法定位到,我們發現在運行代碼后文件被刪除了,所以我們可以對文件刪除也就是DeleteFileW進行下斷,然后回溯找源頭
好像有點似曾相識,和我們之前調用dll一樣
我們像之前一樣在virtualAlloc位置下斷,發現堆棧上的并非是導出函數,而是dllentry中創建的線程,不過這都不重要
把同目錄下的同名bin文件讀取進來了
然后又是解密shellcode并執行dll中的邏輯了,這里就不過多贅述了
至此,邏輯基本成型
邏輯概述
主程序(Qt)利用poolparty timer創建并調用shellcode,shellcode調用dll run函數,run函數給dll提權重新加載,提權后把shellcode注入winlogon.exe,在winlogon.exe中生成白加黑文件并為其創建計劃任務(每兩小時執行一次),白加黑文件重復前面所有,不過在run時就不需要提權了,因為計劃任務是以SYSTEM身份運行的
C2
18.166.104.207
在x情報社區中查詢c2可以找到很多同源的樣本,而且非常新鮮
木馬的類型也被檢出,能夠幫助我們在初步研判時建立起一個基本框架