“暗云”是一個迄今為止最復雜的木馬之一,感染了數以百萬的計算機, 暗云木馬使用了很多復雜的、新穎的技術來實現長期地潛伏在用戶的計算機系統中。其使用了BootKit技術,直接感染磁盤的引導區,感染后即使重裝系統格式化硬盤也無法清除該木馬。該木馬使用了很多創新的技術,有以下特點:
第一、隱蔽性非常高,通過Hook磁盤驅動實現對已感染的MBR進行保護,防止被安全軟件檢測和清除,并且使用對象劫持技術躲避安全人員的手工檢測。隱蔽性極高,截至目前為止,幾乎所有的安全軟件都無法檢測和查殺該木馬。
第二、云思想在暗云木馬中的使用:木馬以輕量級的身軀隱藏于磁盤最前端的30個扇區中,這些常駐與系統中代碼并沒有傳統木馬的功能,這些代碼的功能僅僅是到執行的服務器(云端)下載其他功能代碼到內存中直接執行,這些功能模塊每次開機都由隱藏的模塊從云端下載。因此木馬體積小巧,且云端控制性強。
第三,Ring 3與Ring 0的通信方式:微軟正統的通信方式是Ring 0代碼創建驅動設備,Ring 3代碼通過打開Ring 0創建的設備開實現相互之間的通信。常見的木馬使用的通信方式則是在Ring 0對指定的API函數進行Hook,而暗云木馬是通過注冊回調的方式來實現。
第四,操作系統全量兼容:一份BootKit同時兼容x86、x64兩種版本的操作系統,且能夠兼容xp、win7等當前主流的操作系統版本,因此影響范圍十分廣泛。在推廣獲利方面,該木馬也是涵蓋當前主流的推廣獲利渠道——推廣小網站、推廣手機應用、推廣游戲、大網站加推廣ID。
第五,有效對抗殺軟:有于木馬的主體在內核中運行,且啟動時間比所有的安全軟件都早,因此大部分的安全軟件無法攔截和檢測該木馬的惡意行為。木馬能夠在內核中直接結束部分安全軟件進程,同時可以向任意安全軟件進程插入APC執行。插入的APC代碼不穩定,且會關閉安全軟件的設備句柄,會導致安全軟件崩潰或退出,大大減少了被檢測的機率。
圖1. 暗云 木馬啟動流程圖(圖中按紅紫綠黑分四個模塊)
圖2 . 暗云木馬模塊功能分工示意圖
電腦開機后,受感染的磁盤MBR第一時間獲得CPU的控制權,其功能是將磁盤3-63扇區的木馬主體加載到內存中解密執行,木馬主體獲得執行后通過掛鉤int 15中斷來獲取第二次執行的機會,隨后讀取第二扇區中的備份MBR正常地引導系統啟動。
系統引導啟動時會通過int 15中斷查詢內存信息,此時掛鉤15號中斷的木馬便得以第二次獲得CPU控制權,獲得控制權后木馬掛鉤BILoadImageEx函數,調用原始15號中斷并將控制權交回給系統繼續引導。
當系統引導代碼調用BILoadImageEx加載ntoskrnl.exe時,木馬便第三次獲得控制權,獲得控制權后木馬再一次執行掛鉤操作,此次掛鉤的位置是ntoskrnl.exe的入口點,隨后將控制權交給系統繼續引導。
當引導完畢進入windows內核時,掛鉤ntoskrnl入口點的木馬代碼第四次獲得CPU控制權,此時木馬已真正進入windows內核中,獲得控制權后,分配一塊內存空間,將木馬內核的主功能代碼拷貝到分配的空間中,并通過創建PsSetCreateThreadNotifyRoutine回調的方式使主功能代碼得以執行。至此完成木馬由MBR到windows內核的加載過程。
木馬主功能代碼的主要實現以下三個功能:1、劫持磁盤驅動實現隱藏和保護被感染的MBR;2、向ring3的一個svchost進程插入APC;3、通過設置注冊表回調來接收ring3返回。
插入到svchost代碼只實現一個簡單的功能:判斷操作系統類型,從云端下載相應的Addata.dat模塊到本地,解密執行,云端模塊的URL硬編碼在Shellcode中。
圖3. BootKit 啟動過程示意圖
感染后的MBR(黑)與原始MBR(紅)對比圖
此模塊為木馬云端配置的第一個模塊,其格式固定,以簡單的循環移位的方式進行加密,解密后的模塊數據結構如下:
云端模塊1解密后的數據結構
該模塊的前4字節為標志“CODE”,僅作為數據合法性校驗,校驗成功后直接執行其后的Shellcode,而Shellcode的功能則是負責將Addata.dll在內存中加載,最終從其入口點處開始執行之。
Addata.dll的主要功能是下載者,其具體的行為仍然依賴于云端配置,其運行后首先會從云端下載配置文件,配置文件所在的URL為:http://ad.sqc3.com/update/config.db,該URL硬編碼在文件中。下載后解析配置文件,由配置文件來決定代碼中的功能是否執行,以及具體的參數信息,能夠實現的功能以及實際配置文件信息如下表所示:
能實現的功能 | 開關 | 參數信息 |
---|---|---|
設置瀏覽器主頁 | 關 | none |
檢測指定殺軟 | 關 | none |
下載Dll并Load | 關 | none |
下載Exe并運行 | 關 | none |
下載Shellcode執行 | 關 | http://jm.sqc3.com/cn/jmdm.db,解密后傳入內核 http://jm.sqc3.com/cn/jmdmx64.db(如果是64位系統) |
Addata.dll中硬編碼的配置文件URL信息
設置瀏覽器主頁的相關代碼
對下載的文件可進行不同的處理(LoadLibrary、CreateProcess、加載到內核執行),這里還有一個很有意思的代碼:DeleFileA(“我真的凌亂了…….”),作者都凌亂了,真的很復雜!
Shellcode是通過NtSetInformationKey代入內核的(內核注冊了cmpCallBack)
此模塊為木馬云端配置的第二個模塊,由云端模塊一下載后傳遞到內核執行,已相對較為復雜的加密算法進行加密,其中文件的前0x32字節為解密key,解密后的模塊數據結構如下:
云端模塊2解密后的數據結構
由于此木馬同時兼容32位操作系統和64位操作系統,因此這個此模塊包含兩個版本,內核模塊會根據操作系統的類型執行相應的Shellcode,因為兩套代碼功能完全一致,以下僅分析x86部分。
該模塊首先被NtSetInformationKey傳入內核,由內核模塊從內核Shellcode開始執行,內核Shellcode的功能有如下兩個:
1)結束指定殺軟進程,包括kxetray.exe、kxescore.exe、QQPcTray.exe,由于管家的進程有object鉤子防護,因此不會被干掉。
2)遍歷進程,如果進程名為以下之一,則將尾部的應用層Shellcode 以apc的方式插入到該進程中,插入一個進程后便退出遍歷,不再插其他進程。具體進程列表如下:360tray.exe、360safe.exe、360sd.exe、360rp.exe、zhudongfangyu.exe、QQPcRtp.exe、KSafeSvc.exe、KSafeTray.exe、BaiduSdTray.exe、BaiduAnTray.exe、BadduAnSvc.exe、BaiduHips.exe、BaiduProtect.exe、wscntfy.exe、spoolsv.exe、alg.exe,以上進程名均硬編碼于Shellcode中。
應用層Shellcode被插入指定進程后開始執行,其功能是在內存中動態加載jmdm.dll文件并跳到其入口點執行。
jmdm.dll的主要功能依然是下載者,其代碼與Addata.dll有60%以上的相似性,可以確定為同一份源碼修改而來,其具體的行為仍然依賴于云端配置,其運行后首先會從云端下載配置文件,配置文件所在的URL為:http://jm.sqc3.com/cn/jmdmpz.db,該URL硬編碼在文件中。下載后解析配置文件,由配置文件來決定代碼中的功能是否執行,以及具體的參數信息,能夠實現的功能以及實際配置文件信息如下表所示:
能實現的功能 | 開關 | 參數信息 |
---|---|---|
設置瀏覽器主頁 | 關 | none |
關閉指定殺軟句柄 | 開 | \Device\360SelfProtection \Device\360SpShadow0 \Device\qutmipc \FileSystem\Filters\FltMgrMsg \FileSystem\Filters\qutmdrv |
檢測殺軟進程 | 關 | none |
下載Dll并Load | 關 | none |
下載Exe并運行 | 開 | http://tg.sqc3.com/tg/inst.exe http://tg.sqc3.com/tg/update.exe |
以上行為執行完畢后,木馬會等待下載的inst.exe、update.exe運行完畢后重新創建一個新的宿主進程,隨后調用ExitProcess退出原始宿主進程。
調用ZwTerminateProcess結束安全軟件進程kxetray.exe、kxescore.exe、QQPcTray.exe,由于管家的進程有object鉤子防護,因此不會被干掉。
遍歷進程,看進程是否在硬編碼的進程列表中,如果是,則插入apc,找到一個進程之后跳出循環,即只向一個進程插入apc
插apc的具體代碼
關閉名為\Device\qutmipc等的設備句柄,名稱字符串硬編碼于文件中
配置文件http://jm.sqc3.com/cn/jmdmpz.db 的URL硬編碼在文件中
下載指定URL的文件到本地,加載或者運行
木馬的最終目的只有一個——盈利,而inst.exe和update.exe,這連個落地的PE文件,則是真正能夠使作者獲得豐厚收益的模塊,也是木馬開始執行真正惡意的行為。
Inst.exe運行后首先在桌面上釋放一個名為“美女視頻聊天”的快捷方式,該快捷方式指向一個http://haomm.com,并帶了一個推廣id,實現推廣網站盈利。 Inst.exe還會釋放XnfBase.dll、thpro32.dll兩個dll到%appdata%目錄下,并通過注冊服務的方式加載這兩個dll。 XnfBase.dll實現的功能是LSP劫持,當用戶使用瀏覽器瀏覽www.hao123.com、www.baidu.com等網站的時候在其網址尾部添加推廣ID,從而實現獲利。thpro32.dll實現的功能是:不斷地刪除系統中指定提供者的LSP,防止其他木馬或安全軟件通過LSP再次修改推廣ID。
Update.exe運行后會創建兩個svchost.exe傀儡進程,并將解密出的功能模塊分別注入到兩個進程中,一個負責向安卓手機安裝推廣app、另一個實現向含有“私服”等關鍵詞的QQ群上傳共享文件,用來推廣私服游戲獲利。
木馬通過各種推廣來實現盈利
當用戶用瀏覽器訪問www.baidu.com等網站時,為其添加推廣id,實現推廣獲利
在桌面上創建的美女視頻聊天快捷方式,推廣haomm.com這個網站
不斷檢測是否有LSP模塊,有則刪除,保護自己的推廣ID不被修改
向指定名稱的QQ群上傳私服游戲,進行私服游戲的推廣