Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    86375919

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

我們會在本文對一個帶簽名的rootkit進行分析,它的主要二進制函數是一個通用加載程序,使攻擊者能夠直接加載第二階段的未簽名內核模塊。

在趨勢科技最近的一次調查中,研究人員發現了一個有趣的攻擊活動,他們最初認為這是檢測微軟簽名文件時的誤報。然而,追踪發現,這是一個新出現的簽名rootkit,它與一個大型命令和控制(CC)基礎設施通信,用於我們目前正在跟踪的未知攻擊者,我們認為這與rootkit FiveSys背後的攻擊者相同。其攻擊目標是中國的遊戲行業。惡意軟件似乎已經通過了Windows硬件質量實驗室(WHQL)獲得了有效簽名。 WHQL簽章要求確保所有驅動程序是獲得OS廠商驗證及簽章,但這類簽章無法保證出於真正App開發商之手。這顯示惡意程序作者想利用微軟簽章制度,讓用戶誤以為它是合法驅動程序而安裝。研究人員已在2023年6月向微軟安全響應中心(MSRC)報告了他們的發現。

主二進製文件充當通用加載程序,允許攻擊者直接加載第二階段未簽名內核模塊。每個第二階段插件都是針對部署它的受害設備自定義的,有些甚至包含針對每台設備的自定義編譯驅動程序。每個插件都有一組要從內核空間執行的特定操作。

發現的變體由八個主要集群組成,這些集群基於從簽名(Authenticode)中的SPC_SP_OPUS_INFO字段中提取的特定於供應商的元數據,揭示了這些變體代表其簽名的各種發布者。

1.png

每個集群中的示例數量

2.png

2022年和2023年使用微軟門戶網站簽署的驅動程序數量

攻擊者目前使用不同的方法對其惡意內核驅動程序進行簽名,通常包括:

濫用微軟簽名門戶;

使用洩露和被盜的證書;

使用黑市服務;

接下來,我們將介紹一種明顯遵循第一種方法的攻擊:濫用WHQL在惡意驅動程序上獲得有效簽名,該惡意驅動程序可以在最新的Windows版本上成功加載。我們還將提供這種新發現的惡意軟件的技術細節,該惡意軟件是由微軟直接簽名的獨立內核驅動程序,這是一種不斷發展的攻擊技術,現在出現的非常頻繁。儘管構建這樣的能力非常複雜,但當前的攻擊者似乎很熱衷於這些工具、策略和程序(TTP)。

3.png

作為獨立內核驅動程序由Microsoft直接簽名的惡意軟件

WHCP濫用史下圖顯示了Windows硬件兼容性程序(WHCP)濫用史,這些報告導致了Windows內核信任模型的妥協。 2021年6月,Netfilter rootkit被報導,之後微軟發布了一份報告,詳細說明它被用作遊戲社區中地理定位作弊的手段。 Bitdefender隨後在2021年10月披露了FiveSys,這是一個主要用於在線遊戲玩家的rootkit,主要目的是竊取憑證和在遊戲中購買劫持。最後,Mandiant報告了已知的最後一次濫用,揭露了Poortry惡意軟件,該惡意軟件已被用於許多網絡攻擊,包括基於勒索軟件的事件。

4.png

WHCP發生時間表

現代rootkit的檢測方法在引入內核模式代碼簽名(KMCS)策略機制的時代,隨著64位簽名驅動程序的數量增加,現在尋找64位簽名的rootkit並不那麼容易,如下圖所示。由於現代內核rootkit的開發成本更高,而且將內核rootkit納入其惡意軟件庫的技術能力不足,或者可以訪問繞過新Windows版本中添加的安全防御所需的技術,這使得檢測這類攻擊變得更加困難。

5.png

2015年前後檢測到的一次以上已簽名驅動程序總數

如下圖所示,研究人員根據以下內容評估了Windows內核驅動程序示例:

他們簽署的驅動程序簽名被吊銷;

它們有一個或多個基於惡意軟件搜索引擎的誤報檢測,包括VirusTotal惡意軟件存儲庫:

Set 1:未被吊銷且無誤報檢測的已簽名驅動程序;

Set 2:未被吊銷且有一個或多個來自不同引擎的誤報檢測的已簽名驅動程序;

Set 3:已被吊銷且無誤報的簽名驅動程序;

Set 4:已被吊銷的簽名驅動程序,其中包含來自不同引擎的一個或多個誤報。

6.png

Windows內核驅動程序基於其簽名驅動程序被吊銷或以其他方式進行採樣,並且它們具有一個或多個誤報檢測。

從Set 1和Set 2中尋找新的示例提交以查找攻擊這樣就可以研究這個新出現的示例集群和服務於第二階段插件的底層CC基礎設施。

7.png

從2020年到2022年5月,屬於示例Set 2的內核驅動程序提交數量增加

第一階段分析根據從這次活動中收集的示例,我們確定了兩個不同的集群,它們的示例之間有多個相似之處。研究人員觀察到一種模式,即使用VMProtect對一些示例進行模糊處理,然後在沒有任何模糊處理的情況下對具有更多功能的較新示例進行簽名,這表明這些示例背後的攻擊者仍處於測試和開發階段。

8.png

有很多相似之處的兩個不同集群

大多數示例都是“Microsoft Windows Hardware Compatibility Publisher”簽名的驅動程序。下面我們將對第一個集群中的一個示例進行分析。

驅動程序首先檢查加載到內存中的驅動程序上是否有另一個實例,方法是嘗試打開由驅動程序在初始化期間創建的符號名稱“\?\ea971b87”。如果成功打開,DriverEntry返回的錯誤代碼“0FFFFCFC7”將停止加載驅動程序。然後,如果驅動程序尚未加載,它將創建一個符號名稱“\?\ea971b87”,並初始化其處理程序的函數。基於我們觀察到的當前變體,它僅使用“IRP_MJ_DEVICE_CONTROL”和“IRP_J_SHUTDOWN”。

9.png

檢查驅動程序是否已經加載

10.png

初始化IO處理程序

11.png

註冊關閉通知處理程序

然後,驅動程序檢查二進制編譯是調試構建還是發布,如下圖所示。在調試構建的情況下,它在整個執行過程中打印一些調試消息,這表明目前的產品仍在開發和測試中。然後,驅動程序通過編輯註冊表禁用用戶帳戶控制(UAC)和安全桌面模式,並初始化Winsock內核(WSK)對象,以啟動CC服務器的網絡活動。

12.png

檢查編譯是否是調試構建的

13.png

禁用UAC然後初始化WSK對象

14.png

從“IRP_J_DEVICE_CONTROL”設備控制處理程序掛接文件系統堆棧

第一階段網絡初始化第一階段驅動程序負責與CC服務器之間的所有網絡通信。它使用WSK(一種內核模式的網絡編程接口)從內核空間啟動所有通信。使用WSK,內核模式軟件模塊可以使用用戶模式Winsock2支持的相同套接字編程概念執行網絡I/O操作。

它使用域生成算法(DGA)生成不同的域。如果它無法解析地址,它會直接連接到硬編碼在驅動程序內部的輻射ip,它連接到端口80上的驅動程序,並創建一個TCP套接字用於通信。

15.png

wsk創建的套接字類型

16.png

解析DNS

17.png

解析DNS

18.png

來自第一階段驅動程序的DNS請求

19.png

連接CC服務器

然後,它定期連接到CC服務器以獲取配置。它可以選擇作為內核驅動程序加載程序:

它逐字節地接收來自CC服務器的數據;

它對接收到的數據進行解碼和解密;

它將接收到的內核驅動程序直接加載到內存中,而不將其寫入磁盤;

它解析接收到的可移植可執行文件(PE)並執行所有重新定位;

它調用驅動程序入口點;

這樣,內核插件就永遠不會接觸磁盤,只會在內存中,這使得它更隱蔽,並使其能夠繞過檢測。

20.png

解碼從CC服務器接收到的數據

21.png

接收第一階段的配置

22.png

解析用於加載新接收到的驅動程序的函數地址

23.png

獲取驅動程序入口地址

24.png

調用驅動程序入口函數

第二階段插件下載的第二階段驅動程序是自簽名的,因為它完全由第一階段加載程序加載,繞過Windows本機驅動程序加載程序。因此,不需要對這些第二階段的變體進行簽名。它打開文件“C:\WINDOWS\System32\drivers\687ae09e.sys”,然後讀取數據並對其進行編碼。然後,它將數據劃分為內存塊並將其寫入註冊表路徑“\ registry \Machine\Software\PtMyMem”及其大小和MD5。之後,它從磁盤中刪除文件“C:\WINDOWS\System32\drivers\687ae09e.sys”。

25.png

第二階段的自簽名驅動程序

26.png

讀取文件

27.png

文件信息

28.png

註冊表中的編碼文件

29.png

刪除寫入磁盤的文件

實現持久性第一階段關閉通知函數檢查是否已從CC服務器接收到內核插件並將其加載到內存中,以便進行清理。它還檢查註冊表項“\ registry \Machine\Software\PtMyMem”,如果它出現,則迭代其所有子鍵並解碼數據,將其寫入磁盤“C:\WINDOWS\System32\drivers\687ae09e”。 sys”路徑。最後,它創建一個名為“BaohuName”的服務,該服務將在系統再次啟動時運行。

第一階段和第二階段(從CC服務器下載的插件)作為攻擊者自我保護和持久性方法的一部分協同工作。該技術與從CC服務器下載的內核插件相結合,將成為該驅動程序的主要持久性機制。對這個特定的第二階段插件的詳細分析如下:

第一階段驅動程序連接CC服務器並下載第二階段驅動程序;

第二階段驅動程序從磁盤讀取第一階段驅動程序並將其寫入註冊表,然後從磁盤刪除;

第一階段和第二階段的驅動器只存在於內存中;

在重新啟動之前,執行第一階段關閉通知例程;

關機例程將從註冊表中自我讀取,自我寫回磁盤,並創建一個服務,該服務將在下次系統重新啟動時啟動。

Defender停止器插件此驅動程序的主要目標是停止Windows Defender。它首先從註冊表項“HKEY_LOCAL_MACHINE\\SOFTWARE\\Policies\\Microsoft\\Windows Defender”禁用反間諜軟件檢測,禁用“SecurityHealthService”服務,並停止殺毒檢測。

30.png

停止反間諜軟件檢測

31.png

停止“SecurityHealthService”服務

32.png

禁用殺毒檢測

然後在“映像文件執行選項”註冊表中為所有Windows Defender進程添加一個條目,因此當其中任何一個進程崩潰時,另一個進程將啟動。將啟動的可執行文件是“C:\\Users\\Administrator\\Desktop\\111111111.exe”,這表明這些插件是自定義的,攻擊者正在根據需要積極開發新的插件。它最終會終止所有Windows Defender進程。

33.png

將條目添加到映像文件執行選項

34.png

映像文件執行中的調試器值

35.png

映像文件執行中的調試器值

36.png

Windows Defender進程

37.png

終止進程

代理插件此插件負責在設備上安裝代理,並將web瀏覽流量重定向到遠程代理設備。它首先編輯Windows代理配置“hxxp[:]//4dpyplftay8g90qb7l.kkvgsytcw4hsn3g0nc5r[.]xyz:17654/api/pac/PacReback?key=10252”。

38.png

編輯的Windows代理配置

然後,它在瀏覽器中註入一個JavaScript,根據