在上篇的分析中,我們分析了“隱蜂”挖礦木馬的“Boot劫持”和“內核Rootkit”前兩個關鍵部分,本篇中主要針對Ring3層的挖礦模塊工作機制展開剖析。
三、R3挖礦插件階段
“隱蜂”挖礦木馬在R3層的框架設計也是比較復雜的,整個R3層解壓后的模塊配置文件總數多達30+,同時引入LUA腳本引擎實現更靈活的策略控制,并且在隱蔽性、兼容性等細節處理上也非常完善,所有一切的目的都是為了在隱藏自身的前提下,充分壓榨系統的CPU、GPU設備資源用于挖掘“門羅幣”。從R3層整體設計上劃分,主要包括基礎模塊“subsystem”、引導模塊“ccmain.bin”、外層支持插件包“bsp.lib”以及挖礦插件包“schema.tlb”四大核心部分。
1. 加載R3層基礎模塊“subsystem”
如前文所述,內核模塊在鏡像回調函數中將模塊“stub.bin”通過APC注入到svchost.exe進程,而“stub.bin”是“隱蜂”R3層插件的初始Loader,它會從最初填充的參數中加載后續核心模塊 “subsystem”,在修復重定位和填充IAT后直接跳轉到OEP執行。“subsystem”模塊負責執行升級LUA腳本并解析加載R3插件MRFS鏡像;另外作為基礎模塊,與前文內核模塊“kernel”類似,通過R3層“mpsi.dll”API接口導出核心功能給后續模塊使用;除此還會創建Timer定時檢測內核映像回調是否被摘除、刪除dump文件、掛鉤繞過異常內存檢測等。

“subsystem”模塊中升級功能由LUA腳本控制完成,“etc/exs.bin”文件是編譯后的luac文件,病毒作者修改了頭特征字段,并且調整了LUA虛擬機的opcode表順序防止反編譯,從綁定的函數來看,腳本exs.bin功能比較簡單,讀取“etc/config.js”中的配置,通過偽DGA(結果固定)生成URL直接傳參調用。

最后,“subsystem”模塊會讀取磁盤數據,解密解壓出一個新的“MRFS”鏡像文件,負責注入“/bin/i386/ccmain.bin”到系統進程msdtc.exe,進一步引導加載真正的挖礦插件包。鏡像文件結構與前文一致,解壓結果如下:

2. 加載挖礦插件包的引導模塊“ccmain.bin”
“config.js”配置文件中指明引導模塊“cloudcompute.api”,主要負責解析將“/bin/i386/ccmain.bin”模塊注入到系統進程。注入方法也比較經典,掛起創建系統進程,映射模塊內存到傀儡進程,插入APC指向模塊OEP完成注入。比較有特點的是“自動復活”機制,在完成注入以后注冊回調函數監控傀儡進程句柄,一旦進程結束會再次觸發注入過程,并且這個過程是遞歸的。該注入流程作為通用模板在后續代碼中也會多次用到,細節步驟如下:

如上圖,ccmain.bin模塊入口代碼修正重定位和IAT后,拷貝Shellcode對傀儡進程入口點Patch,當傀儡進程恢復執行到OEP時再次獲取控制權,該模塊功能主要負責存儲在注冊表中插件包的解析和升級,這個插件包是變異的ZIP格式(修改PK頭特征),主要包含引導模塊、外層支持插件組、挖礦插件組三大部分,隨后病毒會加載模塊“/bin/i386/Kaga.so”繼續引導外層插件和挖礦插件工作。

3. 外層支持插件包“bsp.lib”
“Kaga.so”模塊作為后續模塊包的引導模塊,負責從支持模塊包“bsp.lib”中解壓相關模塊進行加載, “bsp.lib”采用了另外一種自定義格式,共包含6個核心模塊文件(x86/x64)和2個Lua腳本,文件格式和組成細節描述如下:

“Kaga.so”模塊其實是一個引導中轉模塊,從傳參來看主要有7個功能分支,核心是加載或注入“/bin/i386/Akagi.bin”,不同分支往下層傳遞不同參數,再由“Akagi.bin”根據參數來引導執行挖礦插件包、外圍控制腳本等不同分支功能。

如上圖紅色標注,主線分支中,“Kaga.so”模塊的調用分支參數為3,傳遞給“Akagi.bin”模塊的參數標記為1。“Akagi.bin”是后續挖礦插件的基礎調度模塊,其核心功能分支如下圖:

從上圖可以看出,引導邏輯中最關鍵的兩個分支,一個分支是挖礦插件包“lib/schema.tlb”的引導加載,注入的默認進程為“WmiPrvSE.exe”,這部分的功能邏輯會在下個小節中單獨講解;另一個分支默認情況下注入目標進程為“dllhost.exe”,主要用于執行外層控制腳本”dispatcher.lua”,這個腳本通過注冊回調綁定核心模塊通知,主要用于外部環境的檢測控制,包括常見抓包工具、硬件檢測工具、安全軟件的監控探測,保證可以隨時隱藏自身活動痕跡;并且還會同類相殘,針對其他挖礦木馬進行對抗屏蔽;除此之外還會監控常見的游戲進程,并針對性調整挖礦的策略配置,在這些細節上的處理調整可以說做到了近乎極致,從中不難看出“隱蜂”木馬的隱蔽性和幕后開發團隊的專業性。
除了前面的的兩大關鍵分支,外層支持插件包“bsp.lib”中還有“Amagi.bin”和“Taihou.bin”兩個
模塊未被提及,“Amagi.bin”是注入母體模塊,通過掛鉤CsrCreateProcess將“Taihou.bin”注入到
cmd、explorer系統進程或常見的游戲進程中(匹配簽名列表),但暫未發現“Amagi.bin”模塊被加載調
用;而“Taihou.bin”模塊通過LdrRegisterDllNotification注冊模塊加載通知回調,搜索特征對ntdll.dll、
gdi32.dll、nvapi.dll、nvml.dll等模塊中的關鍵函數調用進行hook,目的用于隱藏挖礦進程對于CPU、
GPU等設備資源的占用情況。未發現實際調用,這部分功能不再過多展開。

4. 引導加載挖礦插件包“schema.tlb”
最后是最核心的挖礦插件包“schema.tlb”,包含頭部引導code和插件包數據兩大部分,頭部shellcode負責從后續數據中解壓出挖礦包核心模塊“coredll.bin”,插件包文件鏡像格式與前面“bsp.lib”采用的自定義格式一致,包含各類挖礦模塊、腳本共計19個文件,目錄結構如下:

從文件構成可以看出這套挖礦插件包的設計比較復雜,限于篇幅就不再過多展開,簡單來說,這是一套用于挖取門羅幣的插件包,核心架構同時支持CPU和GPU模式,兼容CUDA和OpenGL兩大并行計算庫。其中核心模塊“coredll.bin”負責LUA腳本引擎綁定初始化、挖礦算法核心模塊、框架依賴模塊加載,檢測當前系統的設備環境并開啟挖礦核心機制運行。另外還有兩個比較關鍵的LUA腳本文件,其中“config.lua”是挖礦參數配置腳本,主要包括礦池配置、任務默認參數等,可以看到“隱蜂”使用的自建礦池“stratum+tcp://data.supportithelp.com:8080”。

另外一個LUA腳本“dispatcher.lua” 通過向核心模塊注冊回調,根據核心模塊對顯卡設備狀態的監控通知去動態調整挖礦策略參數,非常靈活的一種設計。

尾言
“隱蜂”Bootkit挖礦木馬的分析到此就告一段落,分析溯源的過程中我們也充分領略了其幕后開發團伙的專業程度,對我們的安全對抗的改進升級也帶來不少啟發。專業化、團伙化也是近兩年新型木馬發展的一個重要趨勢,對于安全對抗的雙方來講,這是一種螺旋式上升的過程,Bootkit技術與挖礦木馬結合的“隱蜂”只是這條曲線的一個標志節點,虛擬貨幣的熱潮不退,這樣的對抗還會不斷持續升級下去。
附錄(IOC)
樣本HASH:
無 (攻擊鏈無落地文件,需要樣本的安全廠商或團隊可以通過kis_sample#kingsoft.com與我們聯系)
升級URL:
sstp://*.gatedailymirror.info/upd.pkg
sstp:// *.redteamshop.info/upd.pkg
sstp:// *.wefoundsome.xyz/upd.pkg
sstp:// *.foundrosysquad.info/upd.pkg
sstp://ask.thesupporthelp.com:443/mlf_plug.zip.sig
注冊表:
HKLM\Software\Microsoft\.NETFramework/ RS4
礦池地址:
stratum+tcp://data.supportithelp.com:8080
|