近期,360核心安全團隊監測到釣魚網站大量傳播主頁劫持木馬,誘導用戶下載安裝“萬能驅動”軟件后,偷偷在用戶電腦上釋放高隱蔽性的木馬模塊。通過深入的追蹤,我們發現該劫持木馬是Kuzzle木馬團伙制作,目前看來他們不局限于使用bootkit方式來隱藏啟動,本次監測到的木馬結合社工和隱蔽的內核Rootkit技術試圖突破殺軟的防護。
傳播過程
木馬團伙專門用一個服務器來部署名為“萬能驅動”的釣魚網站,在上面放置誘導用戶下載安裝的鏈接。如下是該服務器使用的一個域名,該“萬能驅動”網站頁面高仿驅動精靈官網,實則是一個釣魚網站,兩款軟件的名稱和類型比較相近,極具迷惑性,木馬團伙的仿冒意圖明顯。

圖1
對該釣魚網站的服務器進一步挖掘發現,該服務器使用多個域名來進行釣魚,即釣魚域名均指向同一服務器IP(222.***.51)。
釣魚域名
rj.s****2.cn
rj.n*****c.cn
rj.b***x.cn
rj.q*********o.com
qd.e******6.cn
xp.l****0.com
win7.l****0.com
挖掘過程中發現,服務器首頁為仿冒“驅動精靈”的官網釣魚頁面,此外服務器還部署了其他的釣魚頁面,均是仿冒常用電腦軟件的下載頁面,并且還會判斷域名來控制返回給用戶正常的或惡意的下載鏈接,進而提高其隱蔽性。

圖2
上圖頁面是通過域名“qd.******6.cn”訪問釣魚服務器的“wnys.html”(萬能鑰匙下載頁面),任意點擊頁面的位置將會彈出一個指向“百度”服務器的正常軟件下載鏈接。然而,換一個域名訪問相同的服務器頁面如“http://rj.****2.cn/ wnys.html”,此時彈出的卻是另外一個指向木馬軟件的下載鏈接。
從釣魚網站下載的安裝包是經過二次打包的程序,并且圖標也做了欺騙性修改,一旦用戶下載運行,就會先執行木馬模塊的釋放流程,大概的運行流程如下圖所示:

圖3
樣本分析
下面,我們從釣魚網站下載的安裝包開始,詳細跟蹤木馬的感染過程。

圖4
一、安裝過程
首先,從靜態看該安裝包的大小比較大,原因是由于其在資源里包含了另外兩個安裝包文件,其中一個是正常的“驅動人生”安裝包,另一個則是包含惡意模塊的軟件“FreeImage”。
雙擊安裝包運行后,選擇安裝路徑,然后點擊下一步,首先樣本會檢測安全軟件是否運行,如果用戶電腦沒有運行安全軟件,則會直接偷偷安裝惡意程序“FreeImage”,然后再運行正常的驅動人生程序,當用戶看到驅動人生的安裝界面時木馬模塊實際上已經安裝完畢。
相反,如果檢測過程中發現系統存在360安全衛士,就會彈出誘導信息,讓用戶手動關閉360安全衛士;如果不退出360安全衛士,就會反復彈出對話框直到用戶放棄安裝或者退出360安全衛士后進入上述安裝流程。

圖5
靜默安裝的惡意軟件“FreeImage”是從開源項目改造而來,文件名為“FreeImage_292.exe”,以命令參數“-quiet”啟動后就會釋放惡意驅動模塊“drvtmpl.sys”,并通過寫注冊表的方式直接注冊該驅動服務。
為了使惡意驅動“drvtmpl.sys”優先于安全軟件啟動,惡意程序將驅動添加到“System Reserved”(系統保留)組,從ServiceGroupOrder的加載順序可以看到“SystemReserved”組位于第一啟動順序,這樣保證驅動最優先啟動。
除了注冊關鍵的驅動服務以外,“FreeImage”安裝包還釋放了一些驅動運行過程中需要用到的加密資源。

圖6
至此安裝包的主要工作就完成了,在用戶重啟電腦后,系統就會自動以優先于安全軟件的順序啟動運行惡意驅動“drvtmpl.sys”來完成后續的任務。
二、“drvtmpl.sys”驅動
“drvtmpl.sys”驅動是一個加載器,驅動啟動后先注冊一個“LoadImageNotify”模塊加載回調,在回調函數里完成主要的工作。其主要任務是自我隱藏,在內存解密并加載后續的惡意驅動模塊:surice.*(x86和x64擴展名不同)。

圖7
1、自我隱藏
drvtmpl.sys主要是通過掛鉤內核注冊表對象回調和磁盤讀寫回調來隱藏自身,下圖是重啟前后的注冊表對比,發現重啟系統后,驅動服務drvtmpl的內容發生變化,注冊表項偽裝成了一個USB擴展驅動,此時使用ARK工具的HIVE解析功能也無法還原真實注冊表信息。
圖8
之所以會出現這種現象,是因為drvtmpl.sys事先掛鉤了注冊表Hive對象的CmpFileWrite回調,在系統寫入Hive文件之前進行攔截保護
同時,驅動還掛鉤磁盤驅動(disk.sys)的IRP讀/寫回調,掛鉤的過程是在“classpnp.sys”驅動模塊的加載空間尋找空閑位置,在該位置寫入跳轉到實際掛鉤函數的代碼,最后再將磁盤驅動的IRP讀寫回調修改成該地址,之所以這樣做是因為想讓磁盤讀寫回調的函數地址仍處于“classpnp.sys”驅動模塊空間,由此繞過某些ARK工具的鉤子檢測。

圖9
drvtmpl.sys主動調用ZwSetValueKey將自身服務的注冊表項進行修改會觸發掛鉤函數的功能。HIVE的掛鉤函數,使磁盤的Hive數據與內存中的不一致,干擾注冊表編輯器的讀取結果。磁盤驅動(disk.sys)IRP讀/寫回調函數的掛鉤主要想保護兩個對象。一個是system服務注冊表對應的Hive文件,即“C:\Windows\System32\config\SYSTEM”,另一個則是“drvtmpl.sys”驅動本身。在掛鉤函數里檢查IO操作的位置是否落在受保護對象的范圍,返回欺騙性數據。
使用PCHunter的Hive分析功能查看drvtmpl服務的注冊表項,將會發送磁盤讀的IRP請求,進入掛鉤后的磁盤讀例程,該例程檢查到讀磁盤的位置剛好落在“SYSTEM”文件中drvtmpl服務項的位置,于是返回給請求者虛假的注冊信息。
當掛鉤函數檢測到讀磁盤的位置為“drvtmpl.sys”驅動本身時,比如用Winhex訪問該驅動,則會返回欺騙性數據(全為0)。

圖10
2、解密shellcode加載surice.*內核模塊
drvtmpl.sys利用shellcode來加載surice.*內核模塊,該內核模塊是一個被加密的驅動文件,在32位環境文件名是“surice.eda”, 64位下文件名是“surice.edi”。
drvtmpl.sys解密shellcode并執行后,讀取“surice.eda”文件到內存,接著進行解密,解密的算法是根據傳入的參數key進行一些簡單的異或運算。
“surice.eda”文件解密后,在內存得到一個原始驅動程序,接著shellcode將驅動程序按照PE格式進行解析,拷貝節數據、修重定位表和填充IAT表,執行驅動程序的入口函數。

圖11
三、“surice.*”驅動
Shellcode加載“surice.*”驅動后,調用了該驅動的入口函數。surice.*的入口函數注冊LoadImageNotify模塊加載、CreateProcessNotify進程創建、CreateThreadNotify線程創建3種回調例程,后續的主要工作由3個回調例程協作完成。surice.*驅動是該木馬的核心業務模塊,主要負責向3環應用層環境注入shellcode,,用來解密并啟動nestor.tga和nsuser.tga木馬模塊。

圖12
1、線程創建回調例程
該例程的主要功能是向explorer.exe桌面進程注入shellcode,并且僅在第一次創建該進程時進行注入操作。注入的過程是先在桌面進程分配一段虛擬內存,同時將該地址存儲在注冊表Tcpip子健下的EchoMode字段,然后拷貝shellcode到該內存,并為其分配MDL映射到內核地址以便驅動在進程創建的回調例程里與shellcode通信。
注入shellcode代碼后通過對explorer.exe的SendMessageW函數進行IAT Hook,獲得shellcode的執行機會。

圖13
2、進程創建回調例程
該例程的主要功能是在系統創建新進程時,通過檢查桌面進程shellcode開始位置緩沖區中的進程列表(剛注入時為空,后由3環木馬模塊修改),來判斷是否為需要劫持的瀏覽器進程。若為要劫持的瀏覽器進程,則設置全局標志來通知模塊加載回調例程向該瀏覽器進程注入shellcode來啟動劫持模塊。進程列表,用分號“;”區分不同進程名。

圖14
3、模塊加載回調例程
該例程在全局標志g_flag_brower大于0且加載模塊為ntdll.dll(創建進程加載的第一個模塊)時進入劫持流程,劫持過程是通過修改瀏覽器程序的OEP使其跳轉到注入的shellcode的入口點。
該例程往瀏覽器進程注入的shellcode實際上與線程創建回調例程往桌面進程注入的shellcode相同,不過在執行前修改了一下其中的一個路徑參數,配置shellcode去解密加載另一個木馬模塊nsuser.tga(此模塊由注入桌面進程的模塊nestor.tga聯網下載而來)。
除了注入shellcode到瀏覽器進程外,該例程還負責阻止安全軟件往瀏覽器加載安全模塊,使其失去對瀏覽器的保護功能。

圖15
四、瀏覽器劫持
系統啟動過程中驅動程序的準備工作完成后,后續的任務就主要交給3環的shellcode程序來完成。桌面進程的shellcode解密nestor.tga模塊來負責控制管理、升級等功能,而瀏覽器進程的shellcode解密nsuser.tga模塊實現劫持主頁的功能。1、nestor.tga模塊
本模塊運行后會聯網進行更新檢測,并下載相應的加密資源包進行解壓,更新的接口需要帶上特定的參數才能返回正常的更新信息。

圖16
更新信息包含重要的字段時downloadurl和mainpage,一個是更新包的下載地址,另一個則是云控劫持的瀏覽器主頁地址。下載地址對應的更新包包含加密的瀏覽器劫持模塊nsuser.tga和劫持配置文件fpld.spc,具體的文件列表和對應功能如下所示。
更新包文件
說明
fpld.spc
瀏覽器劫持配置
nestor.idx
包含資源包文件列表的索引信息
nestor.tga
注入桌面進程的更新、控制程序32位版
nestor.tgi
注入桌面進程的更新、控制程序64位版
nshper.tga
監控360安全防護產品
nsupp.tgg
負責拷貝資源包文件
nsuser.tga
注入瀏覽器進程的劫持程序
surice.eda
更新的業務驅動32位版
surice.edi
更新的業務驅動64位版
更新完資源后,根據程序的設定將會有一段潛伏期,若感染的時間不超過3天則不會運行瀏覽器劫持的流程。當時間超過3天,控制程序將讀取劫持配置文件fpld.spc,根據其中的信息生成劫持列表填充到shellcode起始位置(如上文所述)。fpld.spc文件解密后的瀏覽器劫持列表如下。

圖17
然后驅動層模塊surice.*就會啟動瀏覽器注入功能,進而啟動nsuser.tga模塊進行劫持。
2、nsuser.tga模塊
本模塊注入瀏覽器時,安全軟件的保護模塊也被卸載掉了,在此基礎上對瀏覽器進行劫持就顯得相對輕松。劫持瀏覽器主頁的方式是利用瀏覽器的通用功能修改其命令行參數,使瀏覽器解析參數里附帶一個url,實現在啟動時打開的第一個頁面(主頁)為該url。
對于IE瀏覽器,本模塊直接修改進程空間里的命令行。獲取GetCommandLineA/ GetCommandLineW(這兩個API的內部實現只是簡單地返回一個保存命令行參數字符串及其長度的全局對象)的返回對象,將其中的命令行字符串指針指向新的命令行參數,并更新其字符串長度。IE瀏覽器啟動時獲取到的命令行參數就會包含要劫持的主頁地址,從而瀏覽器的主頁信息就被修改,并且不會留下痕跡。
而對于第三方的瀏覽器,考慮到其啟動時獲取命令行參數的方式可能不同,采取使用新命令行參數重新創建子進程的方式來進行主頁劫持。

圖18
感染分布
下面是此類木馬4月份在全國各地區的傳播情況分布圖,傳播的量級在10萬以上,可以看出主要在沿海地區傳播,其中廣東省為重災區:

圖19
總結與查殺
Kuzzle木馬團伙善于使用木馬的手法來做流氓推廣業務盈利,盜用知名公司的數字簽名,感染VBR,釣魚網站傳播,RootKit保護技術,甚至還采用誘導用戶退出安全軟件的社工套路,不斷的更新其木馬的自我隱藏、自我保護的技術,最終在安全軟件嚴防死守的夾縫中得以生存。從本例木馬的執行框架來看,木馬經過多層的偽裝和隱藏,環環相扣,從傳播到安裝,經3環進入0環,又從0環滲透到3環,每一步都是精心策劃,小心謹慎的繞過安全檢測,還試圖逃離安全人員的審查,盡可能的長期潛藏在用戶電腦中牟利。
目前360已針對此類樣本全面查殺,為用戶電腦保駕護航,同時也提醒廣大用戶安裝軟件時使用正規的下載渠道,避免上當受騙。

圖20
Hashs

圖21
|