通過「熱修補程式」執行惡意程式碼實例分析

  • 2019 年 10 月 5 日
  • 筆記

序言

前兩天在「蜂鳥」圖標的社交網站看到一個高危樣本,便下載審查一番。文件是一個壓縮包,壓縮包中有兩個普通圖片、一個EXE和一個DLL文件(wwlib.dll)。

通過使用VirusTotal查詢MD5後發現只有wwlib.dll被殺毒引擎檢出為惡意文件,於是筆者不老道的經驗判斷這是一個普通的DLL劫持操作。在一番動態運行後發現確實如此,然後就按照DLL劫持的分析思路進行分析,結果並沒有找到具體得惡意程式碼執行處。之後經過多個小時的奮鬥,終於發現wwlib.dll使用類似「熱修補程式」技術修改了系統ntdll.LdrLoadDLL函數的返回地址使其跳轉到wwlib.dll的惡意函數進而執行多層shellcode。

熱修補程式:又稱為patch,指能夠修復軟體漏洞的一些程式碼,是一種快速、低成本修復產品軟體版本缺陷的方式,可以運行狀態下對程式進行修復。

「熱修補程式」位置

壓縮包中的exe文件作用只是用來載入wwlib.dll,所以我們只對wwlib.dll進行詳細分析。

文件名:wwlib.dll

MD5:6875f307d95790ca25c1da542ea736a8

wwlib.dll被載入後首先執行sub_1000101A函數,獲取ntdll.LdrLoadDll的函數地址並將其返回地址進行修改。

ntdll.LdrLoadDll的返回地址被修改為跳轉到wwlib.dll的sub_1000168E函數。

修改前:

修改後:

除了以上修改外作者還開闢了新的記憶體空間並寫入跳轉到ntdll.LdrLoadDll返回地址7c9364ee的程式碼。但是在調試時並未發現有執行改程式碼的操作,懷疑是作者的測試程式碼。

修改了以上程式碼就能確保惡意程式碼被順利執行。

如何觸發執行惡意程式碼?

以下結果是使用32位的win XP調試而得。當載入DLL文件時調用Kernel32.LoadLibraryA函數,經過下圖中的層層調用最終執行ntdll.LdrLoadDll函數。

由於ntdll.LdrLoadDll函數的返回地址「7c9364ee」被修改為跳轉到wwlib.1000168E地址。「熱修補程式」設置成功後只要進行載入DLL動作即可觸發惡意程式碼,下面是對惡意程式碼下斷點分析的內容。

解密執行shellcode

惡意程式碼首先將修改過的ntdll函數返回地址恢復,對比上一節的圖片可知將「E9 9B B1 6C 93」恢復為「C2 10 00 90 90」。

將解密後的shellcode拷貝到新開闢的記憶體空間並執行。

啟動執行緒進行連接C2操作。

獲取網卡資訊。

執行緒解密C2地址後啟動新的執行緒進行網路操作。

請求地址https:// cloud.doomdns.org/hk12獲取下一階段shellcode程式碼。

執行下載的shellcode程式碼。

總結

詳細分析後發現這並不是一個簡單的DLL劫持操作,而是通過精心構造的跳轉執行惡意程式碼。shellcode程式碼雖然有很多層,但是執行邏輯與程式碼風格基本相同。只要耐下心來,一層一層跟下去就能找到惡意程式碼的執行邏輯。

想到很多朋友不能在VirusTotal直接下載樣本,筆者將本文的樣本放置在github上供大家學習研究。本文種若有遺漏錯誤之處,歡迎大家批評指正、留言交流。

樣本地址:

https://github.com/ShareSample/Hot-Patch-Sample

IOC

3061f320d47a6c985bd219f5ac14ff8a cloud.doomdns.org https:// cloud.doomdns.org/hk12

*本文原創作者:DD黃藥師BB,本文屬於FreeBuf原創獎勵計劃,未經許可禁止轉載