0x01 背景描述
2021 年 9 月初,我們發(fā)現(xiàn)有攻擊者在多個(gè) Microsoft Windows 服務(wù)器上使用特權(quán)提升漏洞進(jìn)行網(wǎng)絡(luò)攻擊。該漏洞有許多和CVE-2016-3309相同的調(diào)試字符串,但仔細(xì)分析顯示,這是一個(gè)0 day漏洞。我們發(fā)現(xiàn),樣本在 Win32k 驅(qū)動(dòng)程序中利用了未知漏洞,漏洞利用使用了泄漏內(nèi)核模塊基地址技術(shù)。微軟給此Win32k 內(nèi)核驅(qū)動(dòng)程序中的UAF漏洞分配了CVE-2021-40449編號(hào) ,并作為 10 月補(bǔ)丁星期二的一部分,于 2021 年 10 月 12 日發(fā)布了補(bǔ)丁版本。
https://github.com/siberas/CVE-2016-3309_Reloaded/
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-40449
除了在野外發(fā)現(xiàn)此0 day漏洞,我們還分析了此0 day漏洞一起使用的惡意軟件載荷,并發(fā)現(xiàn)在對(duì) IT 公司、國防承包商和外交實(shí)體的廣泛間諜活動(dòng)中發(fā)現(xiàn)了惡意軟件的變體。
我們將這一系列活動(dòng)稱之為“MysterySnail”。
0x02 特權(quán)提升漏洞利用
已發(fā)現(xiàn)的漏洞利用工具支持以下 Windows 產(chǎn)品:
Microsoft Windows Vista
Microsoft Windows 7
Microsoft Windows 8
Microsoft Windows 8.1
Microsoft Windows Server 2008
Microsoft Windows Server 2008 R2
Microsoft Windows Server 2012
Microsoft Windows Server 2012 R2
Microsoft Windows 10 (build 14393)
Microsoft Windows Server 2016 (build 14393)
Microsoft Windows 10 (build 17763)
Microsoft Windows Server 2019 (build 17763)
CVE-2021-40449 是 Win32k NtGdiResetDC 函數(shù)中的UAF漏洞。與許多其他 Win32k 漏洞一樣,此漏洞的根本原因是能夠設(shè)置用戶模式回調(diào)并在執(zhí)行這些回調(diào)時(shí)執(zhí)行惡意的 API 函數(shù)。當(dāng)ResetDC 函數(shù)在執(zhí)行其回調(diào),第二次執(zhí)行相同的句柄時(shí)將觸發(fā) CVE-2021-40449。此漏洞的利用過程如下:
1、ResetDC 的用戶模式調(diào)用執(zhí)行系統(tǒng)調(diào)用 NtGdi ResetDC 及其內(nèi)部函數(shù)GreResetDCInternal。此函數(shù)將指向 PDC 對(duì)象,然后執(zhí)行調(diào)用函數(shù) hdcOpenDCW。
2、函數(shù) hdcopenDCW 執(zhí)行用戶模式回調(diào),可用于第二次執(zhí)行相同句柄的重置處理。
3、如果漏洞在回調(diào)期間執(zhí)行ResetDC,則 NtGdi ResetDC和GreResetDCInternal內(nèi)部將再次執(zhí)行為同一 DC 執(zhí)行。
4、如果漏洞利用在第二次調(diào)用GreResetDCInternalDC內(nèi)部時(shí)忽略所有回調(diào),此函數(shù)將按預(yù)期執(zhí)行。它將創(chuàng)建一個(gè)新的 DC 。
5、在回調(diào)中,在第二次ResetDC 調(diào)用完成后,漏洞利用可以恢復(fù) PDC 對(duì)象的釋放內(nèi)存并完成回調(diào)執(zhí)行。
6、執(zhí)行回調(diào)后,函數(shù) hdcOpenDCW 返回到 GreResetDC 內(nèi)部,但分步檢索的指針現(xiàn)在是一個(gè)懸空指針, 它指向以前被破壞的 PDC 對(duì)象的內(nèi)存。
7、在 GreResetDC 內(nèi)部執(zhí)行的后期階段,一個(gè)畸形的 PDC 對(duì)象可用于執(zhí)行具有受控參數(shù)的任意內(nèi)核函數(shù)的調(diào)用。
在已發(fā)現(xiàn)的漏洞利用中,攻擊者能夠使用 GDI 調(diào)色板對(duì)象實(shí)現(xiàn)所需的內(nèi)存狀態(tài),并使用單個(gè)調(diào)用到內(nèi)核函數(shù)來構(gòu)建用于讀取和編寫內(nèi)核的原始存儲(chǔ)器。此步驟很容易完成,因此可以使用公開的技術(shù)泄漏當(dāng)前加載的驅(qū)動(dòng)程序/內(nèi)核模塊的內(nèi)核地址。
0x03 MysterySnail RAT樣本
我們深入到MysterySnail RAT家族開始分析一個(gè)以前未知的遠(yuǎn)程shell類型的木馬。我們分析的樣本是在 2021 年 8 月 10 日上傳VT的。樣本很大 , 8.29MB。文件大小的原因之一是,它是與 OpenSSL 庫靜態(tài)編譯的,包含屬于該庫的未使用的代碼和數(shù)據(jù)。但其大小的主要原因是存在兩個(gè)非常大的函數(shù),會(huì)消耗CPU處理器的時(shí)鐘周期。這些函數(shù)還使用了隨機(jī)生成的字符串,這些字符串也存在于二進(jìn)制文件中?! ttps://www.virustotal.com/gui/file/b7fb3623e31fb36fc3d3a4d99829e42910cad4da4fa7429a2d99a838e004366e
反編譯函數(shù)使用的隨機(jī)字符串
我們先假設(shè)這兩個(gè)函數(shù)是用于免殺的,隨后這一理論得到其他代碼邏輯和大量的導(dǎo)出函數(shù)的證實(shí),實(shí)際工作僅由其中一個(gè)函數(shù)執(zhí)行。
導(dǎo)出函數(shù)的名稱,實(shí)際業(yè)務(wù)邏輯是從函數(shù)“GetInfo”執(zhí)行
樣本中有兩個(gè)硬編碼網(wǎng)址,以純文本形式存在 ?!皐ww[.]disktest[.]com” 和 “www[.]runblerx[.]com” 。它們被放入類變量中使用,但從未使用:真正的 C2 地址由單字節(jié) xor 解碼 - “http[.]ddspadus[.]com” 。
惡意軟件枚舉“Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer”注冊表密鑰下的值,并使用它們請求通過代理服務(wù)器進(jìn)行隧道處理,以防止無法直接連接到 C2。
惡意軟件本身不是很復(fù)雜,其函數(shù)類似于許多其他遠(yuǎn)程shell程序。有一些特殊功能,如監(jiān)控插入的磁盤驅(qū)動(dòng)器、代理中轉(zhuǎn)。
命令具有與下面相同格式,所有通信都通過 SSL 加密。
通信命令格式
在收到任何命令之前,惡意軟件會(huì)收集并發(fā)送有關(guān)受害者機(jī)器的一般信息。此信息包括:
?計(jì)算機(jī)名稱
?當(dāng)前 OEM 代碼頁、默認(rèn)標(biāo)識(shí)符
?Windows 產(chǎn)品名稱
?本地 IP 地址
?登錄用戶名
?活動(dòng)名稱(Campaign name)
一個(gè)有趣的事實(shí)是,默認(rèn)情況下,“Campaign name”被設(shè)置為“windows”。此名稱被覆蓋,但它可能表示有為其他平臺(tái)編譯的相同 RAT 版本。
RAT 總共執(zhí)行 20 個(gè)命令,命令描述和命令 ID 在下面的表格中。
RAT 支持的命令列表
0x04 IOCs
www[.]disktest[.]com www[.]runblerx[.]com http[.]ddspadus[.]com
MD5 e2f2d2832da0facbd716d6ad298073ca SHA1 ecdec44d3ce31532d9831b139ea04bf48cde9090 SHA256 b7fb3623e31fb36fc3d3a4d99829e42910cad4da4fa7429a2d99a838e004366e