原文:
之前,我們在追蹤Winnti小組的活動期間,偶然遇到了一個非常有趣的樣本。
這個樣本使用了VMProtect強殼,是一個Win64可執行程序,使用了一個來自中國廣州YuanLuo科技的未知簽名。并且,這個可執行文件的屬性與微軟的Net命令-net.exe
很類似,甚至我們在運行樣本時得到了與原版net.exe
工具類似的輸出:
偽裝成net.exe
所有這些證據表明這個樣本很可疑
此程序的代碼隱秘性極強,很難對其進行庖丁解牛式的模塊分析.但幸運的是,我們在一份dump中發現了一些特殊且重要的字符串:隱藏在其中的另外四個樣本,win32版本win64版本,其分別各有一個libray和一個driver.
木馬主體中的字符串
這些字符串讓我們懷疑這個樣本實際上是一個bootkit安裝器。多虧了一些更明確人工痕跡,我們發現了一個類似但是沒有代碼保護的樣本,并證實了我們的猜測。
首先運行這個工具:
原始的HDD Rootkit輸出
簡單看一眼hdroot.exe
的參數,我們就知道這個程序是干什么的-給它提供一個后門當做參數,這個工具就會在系統boot階段幫你安裝它,安裝的后門必須是一個Win32可執行程序或動態鏈接庫。
這個工具叫做 “HDD Rootkit”,于是我們就用HDRoot來命名這個樣本。在2006年8月22日,版本號是1.2。
所以,上文中提到的那個隱蔽性極強的工具可能就是hdroot.exe
,只是經過修改,在受害者設備上使用,以避免暴露工具的意圖.
從Hdroot的這些資源的名稱上我們能看出很多有趣的東西:
HDD Rootkit的資源
我們嘗試在一個bootkit的幫助下運行一些可執行程序。在我們的試驗中,這個可執行程序的角色是扮演一個良性程序,僅僅是在C盤根目錄中創建一個文件。我會通過HDD Rootkit使用下面的代碼來運行這個可執行程序:hdroot.exe inst write_to_c.exe c
:
告訴它我想要在C盤中安裝一個bootkit,讓程序write_to_c.exe
在系統啟動時運行。
HDRoot bootkit的安裝
這個工具會檢查指定磁盤上的可用空間,當可用容量小于總容量30%時,會拒絕安裝bootkit。
檢查可用空間
所以,現在bootkit已經安裝了。我們看看都發生了什么。首先,MBR中的部分代碼替換成了 “MBR”資源中的惡意代碼。
“MBR”資源
前兩個字節EB 70指的是跳轉到第72個偏移,其他的第一部分啟動代碼就在這。0x70前和0xB0后的0指的是保持這些位置上的原始MBR代碼不變。下圖是在安裝了bootkit后,一個打了補丁的MBR。
在MBR中注入的惡意代碼
第一部分會加載下一部分的啟動代碼,bootkit安裝器已經把這些代碼放到了第11個扇區(偏移0x1400字節)。第二部分代碼會從資源“BOOT”中獲取。
第二部分啟動代碼
在第二部分代碼中,第八個偏移上的字節是一個驅動號,下一個DWORD是一個扇區偏移,在這個位置上有下一部分啟動代碼。這個例子的值是0x80,指的是磁盤0和偏移0x5FD9A0,如果乘以0x200字節(扇區大小)得到的結果是0xBFB34000。這是從磁盤開始的偏移字節數,在這里放置著bootkit安裝器從資源 “RKIMAGE”中獲取的第三部分啟動代碼。
“RKIMAGE”資源中有大量的代碼,會實現一個DLL(DLL是從資源 “DLLLOAD”中獲取的)注入到文件系統并修改注冊表,這樣就能加載DLL并在系統啟動時運行。因為bootkit是在較早的啟動階段執行的,這個時候還沒有訪問文件的api可以使用,這個bootkit是自己解析文件系統的(FAT32和NTFS)。
支持的文件系統
搜索硬編碼的特殊文件,其內容已經替換成了從磁盤指定位置獲取的DLL。我們發現多數版本的HDRoot使用了文件 %windir%\WMSysPr9.prx來實現這些目的。有時候DLL會覆蓋一些系統庫文件,對于木馬來說這絕不是一種安全的工作方式,因為這樣可能會造成系統崩潰,并警告用戶出現感染。在能夠用于覆蓋的其他文件中,我們還注意到了如下這些:
%windir%\twain.dll
%windir%\msvidc32.dll
%windir%\help\access.hlp
%windir%\help\winssnap.hlp
%windir%\system\olesvr.dll
%windir%\syswow64\C_932.NLS
%windir%\syswow64\C_20949.NLS
%windir%\syswow64\dssec.dat
%windir%\syswow64\irclass.dll
%windir%\syswow64\msvidc32.dll
%windir%\syswow64\kmddsp.tsp
然后,代碼讀取文件 %windir%\system32\config\system
的內容,維持 HKEY_LOCAL_MACHINE\SYSTEM
的內容。在其他字符串中,注冊表實體文件中都是包含關于安裝服務的信息。在OS啟動時,會有大量的系統服務啟動。比如,通過svchost.exe
啟動的ServiceDll
,要運行的函數庫路徑就指定在ServiceDll
的注冊值中。惡意啟動代碼會在 “system”文件中搜索與系統服務關聯的系統庫路徑,并將值替換成注入DLL的路徑(比如,%windir%\WMSysPr9.prx
)。在所有版本中,我們發現HDRoot利用了下面的服務:
所以,當操作系統開始運行服務時,沒有加載原始服務svchost.exe
,而是加載了惡意代碼。這個惡意庫只是加載和運行了從指定偏移上獲取的后門,在這個位置上有HDD Rootkit。我們發現兩個版本的HDRoot使用了不同的方法來完成這一操作。第一個只是把后門保存成文件%windir%\temp\svchost.exe
,并在WinExec API函數的幫助下執行。所有跡象表明,木馬作者之后覺著這個方法不是運行后門的最好辦法,因為AV產品能檢測到,并且啟動的應用可能在檢查事件時注意到并記錄到系統日志。另一版的DLL并沒有投放文件,而是分配了內存來讀取后門,或許是為了正常執行(根據導入表來加載二進制并修復重定位)和自己運行。這種方法更隱秘,因為減少了后門被發現的幾率,即使是檢測到了DLL和受感染的MBR。
返回到我們的實驗,當命令hdroot.exe inst write_to_c.exe c:
運行時,我們重啟了操作系統。在OS加載后,我們能看到運行程序write_to_c.exe
的結果,雖然是一個后門,但是表現的很好。
創建測試文件zzz.bin
在加載了Windows后,立刻能看到文件C:\zzz.bin
,這證明程序write_to_c.exe
已經成功執行了。
HDRoot的整個感染過程如下:
HDRoot操作方案
有趣的是,惡意軟件沒有功能可以恢復在啟動過程中被替換掉的原始服務。因為受影響的服務是操作系統的一部分,忽視這一做法可能會導致 Windows 故障并且造成感染被發現。這就更奇怪了,考慮到惡意軟件在試圖掩蓋其蹤跡。也只能說是 “試圖”,因為惡意軟件沒能成功。投放的 DLL 有一個函數會儲存注冊表中 ServiceDll 的原始值,存儲與該服務相關的 DLL 路徑。但是由于第三部分的啟動代碼 (從”RKIMAGE"中獲取)有缺陷,代碼會在注入前修復"DLLLOAD"的內容,DLL開始從硬編碼偏移上獲取錯誤的數據,并阻止DLL找到正確的ServiceDll路徑來重新恢復原始值.
路徑保留在了注冊表中的注入惡意DLL
錯誤的注冊表路徑和值名稱
用ServiceDll的原始值錯誤地覆蓋了注冊表SubKey
所以,我們必須要說,這個木馬并不細心,你不會認為這個木馬來自嚴謹的APT小組 Winnti。但是,我們注意到這個木馬的作者在努力地讓這個bootkit能在啟動階段正常運行,避免在OS加載時被完全攔截。但是,上面提到的一些失誤導致感染在受害者計算機上留下了一些可疑的跡象。例如,原始服務,比如Windows Update和Task Scheduler無法運行了,但是看來沒人注意到。
因為配合HDRoot安裝的后門可能是任意的,所以我們無法描述每個案例中HDRoot bootkit會運行什么木馬。但是,在跟蹤HDRoot時。至少我們已經收集到了兩類木馬。第一種是手動從感染了HDRoot的受害者硬盤中提取的。另一種是在一個獨立的投放程序中找到的,這里面包含了HDRoot和安裝的后門。
這個木馬系列是服務器端的Derusbi,我們曾在幾次與Winnti相關的事件中觀察到。通常這個DLL的內部名OfficeUt32.dll
是并且會具有下面的導出函數:
DllRegisterServer
DllUnregisterServer
ServiceMain
SvchostPushServiceGlobals
WUServiceMain
__crt_debugger_hook
不同版本的函數也不同。主要的DLL在主體中還包括其他的木馬組件,通常都是xor-cipher
.
保留額外模塊的結構
HDRoot bootkit安裝的Derusbi樣本包含了一個遠程shell模塊和網絡驅動模塊。
安裝例程是在導出函數“DllRegisterServer
“中實現的。當調用時,這個函數會執行下列操作:
%System32%\wbem\
“,名稱由“ntfs”+三個隨機字母組成,擴展名是 “.mof”,比如“ntfsqwe.mof
“,并把年份設置到文件屬性中的2015年。ServiceDll
”值,與系統服務 “iphlpsvc
” 或 “wuauserv
” 關聯,具體取決于Windows系統版本,并把“ServiceDll
”的原始值以加密形式保存到同一個注冊表鍵值的“Security
”參數。在系統啟動時執行木馬。Security
”參數中指定的服務管理的動態鏈接庫。木馬會將配置數據以加密的形式儲存在HKLM\SOFTWARE\Microsoft\Rpc
注冊表鍵值的“Security
”參數中。這里面包含了獨特的計算機標識符,以及用于匹配輸入的CC服務器數據包的簽名。
木馬可以直接連接到CC服務器,如果在設置中指定了CC;如果沒有定義CC服務器,也可以進入監聽模式。我們發現的與HDRoot bootkit相關的樣本是在監聽模式下工作。
(驅動是在2012年11月19日 17:11:14簽發的,使用了韓國在線游戲廠商XL Games的證書。這個證書在2013年6月21日撤銷了。其序列號是7b:d5:58:18:c5:97:1b:63:dc:45:cf:57:cb:eb:95:0b)
主木馬DLL會解密,投放并運行rootkit作為一個文件 “%System32%\Drivers\Lst_Update.sys
”。在過程開始,驅動就會移除所有在啟動過程中創建的注冊表鍵值和真正的驅動文件。rootkit中包含了惡意網路活動,是監控工具通過hook “\Device\Tcp
” 或 “\Driver\nsiproxy
”系統對象的 IRP_MJ_DIRECTORY_CONTROL
服務例程。另外,驅動還通過hook文件系統驅動 “\FileSystem\Ntfs
”的IRP_MJ_DIRECTORY_CONTROL
服務例程,從用戶模式中隱藏了文件“\windows\system32\wiarpc.dll
”。
如果木馬在監聽模式下工作,rootkit還會參與通訊例程。木馬會嗅探所有輸入的網絡數據包并在其中搜索特制的簽名。如果找到,木馬會重定向這些數據包來監聽主木馬模塊打開的數據包。主模塊會在所有的網絡接口上隨機選擇一個端口,在上面創建一個網絡socket。如果rootkit推送了一個與簽名匹配的網絡數據包,主模塊就會處理。這個網絡數據包中包含有命令代碼和必須執行這個命令的模塊ID。已知的木馬版本會識別5種不同命令的模塊:
正如前面提到的,除了網路驅動,在Dersubi樣本中還發現了唯一的一個額外模塊-遠程Shell。主木馬模塊會解密,投放并運行這個遠程shell作為文件“%Systemroot%\Help\perfc009.dat
”。這個DLL的內部名稱是 Office.dll
,一個導出函數是R32。這個庫是通過執行下面的命令行運行的:
rundll32.exe %Systemroot%\Help\perfc009.dat R32 <random_number>
其中<random_number>
是一個由主模塊生成的預共享值。
遠程shell庫會創建兩個名稱管道,用于與主模塊通訊:
\pipe\usb<random_number>i
\pipe\usb<random_number>o
攻擊者發送的執行命令預計就是通過管道\pipe\usb<random_number>o
來的。當這個命令要在工作目錄%SystemDrive%
中創建一個新的進程是時,已經創建的進程標準輸入就會設置從管道 \pipe\usb<rando_number>i
中獲取命令。也就是說,執行程序的輸入是來自攻擊者,程序輸出會返回到攻擊者,構成了一個高效的后門通道。
我們發現的一個樣本結果是HDRoot使用的一個一鍵后門安裝器。這是一個Win32可執行程序,根據標頭的數據戳顯示,其編譯日期是2013年11月18日。這個可執行程序中包括了自定義類型 “MHM”的資源 “102”和 “103”。這些就是HDRoot安裝器的可執行程序和安裝的后門。
已安裝后門的角色是由可執行程序中的資源 “102”扮演的,會投放為文件 %windir%\bootmgr.exe
。(運行幾步,我們必須要說這不是一個后門而是一個下載器。) “HDRoot”工具,也就是資源 “103”會投放為%windir%\hall32.exe
。然后,投放器會運行下面的命令行:
%windir%\hall32.exe inst %windir%\bootmgr.exe c:
指令HDRoot安裝器hall32.exe
來安裝HDRoot bootkit到硬盤C盤,接下來在系統啟動時運行下載器bootmgr.exe
。
下載器bootmgr.exe和投放器類似也是在2013年11月18日編譯的。根據其主體中指定的列表,這個下載器會通過URL下載文件并運行:
http://www.gbutterfly.com/bbs/data/boot1.gif
http://www.btdot.com/bbs/data/boot1.gif
http://boot.ncook.net/bbs/data/boot1.gif
http://www.funzone.co.kr/bbs/data/boot1.gif
http://www.srsr.co.kr/bbs2/data/boot1.gif
如果這些URL都可用,下載器會將下面的某個文件投放到磁盤上并運行:
%windir%\v3update000.exe
%windir%\v3update001.exe
%windir%\v3update002.exe
下載器會檢查投放的文件大小,只運行大于20896字節的文件。
結果表明這是一個雙重下載器:在其主體中還有具備下載功能的另一個樣本。木馬會把文件投放為 %windir%\svchost.exe
,并接著使用參數“install
”來運行。出于某種原因,在運行了第二個下載器之后,木馬會使用下面的命令行立即停止網絡連接共享服務:
cmd.exe /c net stop sharedaccess
下載器主體中還指定了其他的文件,用于檢查文件系統:
%windir%\system32\midimapbits.dll
%windir%\system32\mpeg4c32.dll
%windir%\winurl.dat
這個木馬能夠識別兩個參數:“install
”* 和 “remove
”。在安裝過程中,會創建一個自啟動 “Winlogon
”服務,其描述是“Provides automatic configuration for the 802.11 adapters
”,會調整為運行自己的可執行程序。“remove
”參數的意思是刪除自身. 在運行時,服務會解密主體中的URL,并嘗試在地址上附上“default.gif
”來下載內容。下面是解密后完整的URL:
http://www.netmarble.net/
http://www.nexon.com/
http://www.tistory.com/start/
http://m.ahnlab.com/
http://www.joinsmsn.com/
http://fcst.co.kr/board/data/media/
http://www.hangame.com/
http://www.msn.com/
http://adw.naver.com/
http://www1.designrg.com/
http://www.topani.com/
http://www.nate.com/
http://www.v3lite.com/
http://www1.webschool.or.kr/
http://snsdate.gndot.com/
http://www.srsr.co.kr/bbs2/data/
http://funzone.co.kr/bbs/data/
http://www.moreuc.com/
http://www1.ncook.net/
如上的url列表中包括了一些合法網站,正常情況來說,這些合法網站是不可能寄存木馬的. 如果寄存了木馬那么只有一個可能:它被入侵了.
這個url列表會下載到如下路徑 %windir%\image.jpg
。但是,這只是一個中間過程。木馬解析的應該是一個文本文件。這個文件的第一行應該包含只比139大的數;如果不是,木馬就會跳過內容處理。第二行是URL。木馬會使用這些URL來下載可執行程序,第三行指定了可執行程序的文件名稱。在下載了木馬后,重置文件的前兩個字節 為“MZ”,并運行。
同時,在下載過程中,木馬會嘗試移除特定的殺毒軟件。在注冊表中發現了卸載命令后,木馬會運行這個命令并通過操作應用上的用戶界面按鍵;來移除3個AV產品: AhnLab的V3 Lite, AhnLab的V3 365 Clinic 和 ESTsoft的 ALYac。雖然,這些產品有自己的進程,但是木馬還包括了交互函數來禁用Naver Vaccine和McAfee安全中心。這些廠商都說這個木馬是用來攻擊韓國的目標。
因為這個木馬已經很久了,我們無法根據下載器中指定的URL下載到相關的材料。服務器也沒有響應,頁面上也沒有內容。
實際上,我們并不是首家遇到HDRoot木馬的AV公司。在2013年末。韓國公司AhnLab就發表了關于ETSO入侵小組的詳細報告。ETSO木馬,根據AhnLab的分類,對應的就是我們檢測到的Winnti木馬。在他們的分析過程中,AhnLab的工程師發現了遭到感染的MBR,根據他們的描述(14-15頁,“2.5維持網絡跡象”),像是HDRoot bootkit 安裝器的作用結果:
AhnLab的HDRoot工作方案
另外,我們還知道熟悉HDD Rootkit工具的事件處理人員并不一定是來AV公司。但是,當談到檢測時,盡管這個危險的威脅比較老了,殺毒產品還是不能很好地檢測到。
不出所料,據KSN稱,HDRoot感染主要分布在Winnti感興趣的區域-東南亞,尤其是韓國。但是其他的地區也出現了感染,并且這一威脅的程度和作用是巨大的。
與HDRoot相關的木馬活動
需要重點指出的是,這個數量并不能代表目標的性質。看起來通過簡單地觀察數量,我們無法知道哪些類型的公司遭到了攻擊。所以,從對某個國家造成的損害來看,這幅圖講了一個不同的故事。
例如,我們現在正在解決俄羅斯和英國兩家公司中的HDRoot感染,在這里,多個使用了我們產品的服務器上都檢測到了這個木馬。在這兩個案例中,感染造成的損失都很大,尤其是俄羅斯的公司,很多公司客戶都受到了影響。但是,在圖上,俄羅斯只遭到了一次攻擊,而UK遭到了23次攻擊。
雖然,我們還沒有發現HDRoot使用了很多木馬系列,目前已知HDRoot的活動就是與Winnti存在關系,我們繼續假設這個bootkit可能用在了多次APT攻擊中。我們已經知道了Winnti活動和其他先前的APT活動都出現了重合。在考慮了HDRoot安裝器的特性是一個獨立的工具,很可能其他的威脅小組已經掌握了這個bootkit。
我們識別HDRoot木馬為:
與HDRoot bootkit相關的后門和下載器:
2c85404fe7d1891fd41fcee4c92ad305
4dc2fc6ad7d9ed9fcf13d914660764cd
8062cbccb2895fb9215b3423cdefa396
c7fee0e094ee43f22882fb141c089cea
d0cb0eb5588eb3b14c9b9a3fa7551c28
a28fe3387ea5352b8c26de6b56ec88f0
2b081914293f415e6c8bc9c2172f7e2a
6ac4db5dcb874da2f61550dc950d08ff
6ae7a087ef4185296c377b4eadf956a4
e171d9e3fcb2eeccdc841cca9ef53fb8
ae7f93325ca8b1965502b18059f6e46a
e07b5de475bbd11aab0719f9b5ba5654
d200f9a9d2b7a44d20c31edb4384e62f
cc7af071098d3c00fdd725457ab00b65
c0118c58b6cd012467b3e35f7d7006ed
c8daf9821ebc4f1923d6ddb5477a8bbd
755351395aa920bc212dbf1d990809ab
11e461ed6250b50afb70fbee93320131
acc4d57a98256dfaa5e2b7792948aaae
1c30032dc5435070466b9dc96f466f95
7d1309ce050f32581b60841f82fc3399
b10908408b153ce9fb34c2f0164b6a85
eb3fbfc79a37441590d9509b085aaaca
3ad35274cf09a24c4ec44d547f1673e7
f6004cfaa6dc53fd5bf32f7069f60e7a
c5d59acb616dc8bac47b0ebd0244f686
e19793ff58c04c2d439707ac65703410
4dc2fc6ad7d9ed9fcf13d914660764cd
8062cbccb2895fb9215b3423cdefa396
c7fee0e094ee43f22882fb141c089cea
d0cb0eb5588eb3b14c9b9a3fa7551c28
%windir%\twain.dll
%windir%\system\olesvr.dll
%windir%\msvidc32.dll
%windir%\help\access.hlp
%windir%\syswow64\C_932.NLS
%windir%\syswow64\C_20949.NLS
%windir%\syswow64\irclass.dll
%windir%\syswow64\msvidc32.dll
%windir%\syswow64\kmddsp.tsp
%windir%\temp\svchost.exe
%System32%\wbem\ntfs<3 random chars>.mof
%System32%\Drivers\Lst_Update.sys
%Systemroot%\Help\perfc009.dat
%windir%\bootmgr.exe
%windir%\hall32.exe
%windir%\system32\midimapbits.dll
%windir%\system32\mpeg4c32.dll
%windir%\bootmgr.dat
%windir%\v3update000.exe
%windir%\v3update001.exe
%windir%\v3update002.exe
%windir%\svchost.exe
%windir%\winurl.dat
%windir%\image.jpg