近期,火絨安全實驗室在某論壇中發(fā)現(xiàn)一名用戶發(fā)帖上傳了被篡改過的火絨劍程序,該事件詳細經過可參考《情況說明 | 非官方火絨劍存在后門風險,請用戶謹慎下載使用》,在此不做贅述,本文為該樣本的內容分析。經火絨工程師確認,該“盜版火絨劍”中的 uactmon.dll 文件被篡改,在其 DLL 加載時會解密出惡意 DLL 數(shù)據(jù)并加載執(zhí)行,最后實現(xiàn)后門操作。目前,火絨安全產品可對上述被篡改的病毒樣本進行攔截查殺,請廣大用戶及時更新病毒庫以提高防御能力。同時我們也希望廣大用戶在官方渠道下載軟件,避免企業(yè)或個人信息及財產存在被泄露的風險。
查殺圖
樣本執(zhí)行流程圖如下圖所示:
流程圖
從下圖可以看出被篡改文件沒有數(shù)字簽名。
對比圖
一、樣本分析
樣本中被篡改的 uactmon.dll 會解密出加載器,隨后加載器再解密加載后門模塊并執(zhí)行后門邏輯。
后門功能具體如下:
進程管理:進程遍歷、進程終止、模塊遍歷、權限獲取、安全標識符獲取等。
文件管理:創(chuàng)建文件、刪除文件、移動文件、寫入文件、執(zhí)行程序、獲取文件信息等。
鼠標鍵盤模擬:實現(xiàn)遠程控制鼠標和鍵盤。
管道后門:創(chuàng)建管道、寫入管道執(zhí)行遠程命令。
插件管理:客戶端通過下載插件執(zhí)行惡意代碼。
其他功能:設置配置以及下載 DLL 利用 rundll32.exe 執(zhí)行。
系統(tǒng)信息獲?。韩@取主機名、系統(tǒng)版本、殺毒軟件列表、進程名、安裝軟件列表等。
本文將以加載階段、通信階段、后門功能、發(fā)送系統(tǒng)信息四個環(huán)節(jié)為主進行詳細分析。
1.1 加載階段
該 uactmon.dll 動態(tài)鏈接庫入口函數(shù) dllmain_dispatch 中的 _SEH_prolog4 函數(shù)被惡意重定向,作為病毒入口執(zhí)行病毒代碼。
重定向
隨后利用 fs:34h 獲取上一個錯誤號 2 ,并基于此錯誤號進行計算,最后計算出解密函數(shù)的地址并調用解密函數(shù),解密函數(shù)會解密出加載器代碼。
調用解密函數(shù)
解密加載器代碼
在加載器中解密惡意 DLL 數(shù)據(jù),獲取到 DLL 并調用 DLL 入口點函數(shù)。
解密出惡意 DLL 數(shù)據(jù)
加載器函數(shù)
手動加載細節(jié)
1.2 通信階段
檢查互斥體 Global\{950DD698-EB8C-469E-A50B-F76D0283392E} 是否存在,如存在則循環(huán)至不存在為止。
檢查互斥體
隨后讀取 C:\ProgramData\Microsoft OneDrive\index.dat 文件并解析成字典格式,如不存在則會初始化字典并創(chuàng)建該文件,同時在創(chuàng)建之后修改該文件的時間戳。
初始化時:
mc 值是固定頭 9X3eR2p 加上 21 位隨機數(shù)組成的,后續(xù)請求遠程服務器時將會附帶該值,用來識別客戶端;
ts 值是 Sleep 的秒數(shù),初始化時賦予值為 28。
讀取或寫入 index.dat 文件
初始化字典
寫入 .dat 文件
之后讀取字典中的 disable 值,如果為 true 則不會繼續(xù)執(zhí)行。
檢測 disable 值
檢測 disable 值后通過異或 0x1F 解密出遠程服務器地址 20.2.66.39,并設置為 ICMP 協(xié)議。
獲取 IP 地址并設置 ICMP 協(xié)議
睡眠 {ts} 秒后利用 ICMP 協(xié)議發(fā)送數(shù)據(jù)包,數(shù)據(jù)包中包含 mc 值,其前后分別填充了 0xC681 和 0x1101。之后利用 recvfrom 函數(shù)接收回復的數(shù)據(jù),通過回復的數(shù)據(jù)部分偏移為 2 的字節(jié)并減掉 0x65 為標準來判斷要執(zhí)行哪個函數(shù)。其中管道后門和插件管理都可以遠程執(zhí)行惡意代碼。
功能號
根據(jù)指令執(zhí)行相應函數(shù)
接收 ICMP 數(shù)據(jù)
WireShark 監(jiān)測到的數(shù)據(jù)
其中進程管理函數(shù)會主動連接遠程服務器 443 端口,隨后獲取指令,通過指令分別執(zhí)行特定的惡意操作,同時會發(fā)送系統(tǒng)信息。
下圖是進程管理接收指令的代碼,其他后門功能運行機制與此相同。
進程管理主邏輯(其他后門功能也相同)
接收指令并執(zhí)行函數(shù)(其他后門功能也相同)
1.3 后門功能
執(zhí)行后門功能后會回復 log 或者打包數(shù)據(jù)發(fā)送至遠程服務器中。
發(fā)送信息
1.3.1 進程管理
進程管理有以下功能:
功能號
遍歷進程:遍歷進程時獲取進程名、進程 ID、父進程 ID、進程路徑等,最后加密壓縮發(fā)送至遠程服務器。
遍歷進程
壓縮發(fā)送
終止進程:通過進程 ID 終止指定進程。
終止進程
遍歷模塊:遍歷指定 PID 進程獲取模塊信息,并壓縮發(fā)送。
遍歷模塊
獲取進程權限:
獲取權限名
1.3.2 文件管理
文件管理有以下功能:
功能表
其中部分函數(shù)截圖:通過指定路徑刪除文件、移動文件,還可以通過傳遞過來的時間參數(shù)設置文件時間。
文件管理部分截圖
1.3.3 模擬鍵鼠
模擬鼠標:利用 SendInput 函數(shù)實現(xiàn)鼠標轉輪、右鍵點擊、左鍵雙擊、左鍵單擊、鼠標移動功能。
鼠標部分功能
模擬鍵盤:利用 SendInput 函數(shù)實現(xiàn)鍵盤按下后彈起的操作。
模擬按鍵
1.3.4 管道后門
創(chuàng)建管道:創(chuàng)建管道以及創(chuàng)建無界面 cmd.exe 或者 powershell.exe 等。
創(chuàng)建管道
寫入管道:用于遠程執(zhí)行指令。
寫入管道
1.3.5 插件管理
插件管理有以下功能:
功能表
加載插件代碼圖:
加載插件
1.3.6 其他功能
除上述功能以外還有以下功能號相對應的功能:主要是用于更新配置相關。
功能表
設置禁用:可以通過將 disable 設置為 true 來使該客戶端不再與遠程服務器交互。
設置禁用
下載 DLL 執(zhí)行導出函數(shù) Entry:先下載 iscsiexe.dll ,同時下載 npf.dll 或 npfs.dll,隨后利用 rundll32.dll 程序執(zhí)行 iscsiexe.dll 導出函數(shù) Entry。
執(zhí)行導出函數(shù)
1.4 發(fā)送系統(tǒng)信息
每次執(zhí)行后門功能函數(shù)時都會發(fā)送一次系統(tǒng)信息。發(fā)送的信息包含主機名、系統(tǒng)版本、殺毒軟件列表、指定注冊表、當前進程 ID 和進程名、檢查互斥體 Global\\{54902E83-9AA7-4DB5-977C-A1EBC760CAAE}、遍歷安裝包注冊表。
獲取主機名和系統(tǒng)版本:
獲取主機名和系統(tǒng)版本
殺毒軟件列表:通過遍歷進程獲取進程信息,并比對進程名確認進程是否存在,如果存在則將殺軟名添加到列表中。如果沒有殺軟存在則回復“無”字符串。
下圖是殺軟名和進程名對照表:
對照表
檢測以及添加到列表中
安裝包列表:遍歷 Uninstall 注冊表并提取其中的 DisplayName 值添加到列表中,從而獲取安裝包列表。
獲取安裝軟件列表
獲取指定注冊表路徑的值:
Directory\shellex\CopyHookHandlers\Files
SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\DarkTheme
Directory\shellex\ContextMenuHandlers\Files
二、附錄
C&C:
HASH:
講點大白話:有的小伙伴表示沒有學過計算機知識,看不太懂這篇文章,那么你可以參考如下說明。
假如你有一個動物園,動物園里有很多你喜歡并珍藏的動物,但也有壞猴子偷偷翻進動物園住下干擾動物們生活(沒有說所有猴子都壞的意思),偶爾也有小偷光顧你的動物園偷走用來喂動物的蘋果。你很生氣,決定為你的動物園安裝一個監(jiān)控。但是出于種種原因,比如找不到賣監(jiān)控的店家、喜歡的那一款過于昂貴等等,你最終找了一個二手販子。二手販子交給你的監(jiān)控看起來十分好用,你認為可以對動物園放心了,但其實你不知道,監(jiān)控被注入了隱藏的程序,可以偷偷轉移你的信息,也告訴了幕后黑手動物園幾點沒人,甚至他還知道住著珍貴動物的房間密碼是多少,他借著病毒,操控著動物園的一切?;蛟S有一天,你發(fā)現(xiàn)你進不去自己的動物園了。
而動物園就是你的電腦,二手販子的監(jiān)控是被注入后門的非官方火絨劍,希望你永遠有給動物園開門的自由。
目前火絨安全產品已支持對該“非官方火絨劍”進行查殺,在這里也再次提醒廣大用戶,認準官方渠道,非官方渠道軟件安全性無法保證,各平臺下載需謹慎!