我們将在本文中詳細介紹發生在 2023 年 2 月的 BlackCat 勒索軟件事件,研究人員在其中發現了一種新型逃避功能。
2022 年 12 月下旬,Mandiant、Sophos 和 Sentinel One 的研究人員發現惡意内核驅動程序是通過幾個微軟硬件開發人員帳戶 ( 由微軟 Windows 硬件開發人員計劃認證 ) 簽名的,微軟随後撤銷了幾個在這些攻擊中被濫用的微軟硬件開發者賬戶。
我們将在本文中介紹有關 2023 年 2 月發生的 BlackCat 勒索軟件事件,該變體與三家安全商 2022 年 12 月下旬披露的惡意驅動程序重疊。衆所周知,BlackCat 在逃避功能上使用了多種技術,比如使用禁用和修改工具或使用安全模式引導技術。
本文重點分析揭示了這種新功能,它涉及使用簽名内核驅動程序進行逃避。我們認爲這個新的内核驅動程序是一個最新版本,繼承了以前研究中披露的示例的主要功能。該驅動程序與單獨的用戶客戶機可執行文件一起使用,試圖控制、暫停和終止部署在攻擊目标上的安全代理的各種進程。
攻擊者使用不同的方法對其惡意内核驅動程序進行簽名:通常是通過濫用 Microsoft 簽名門戶、使用洩露和被盜的證書或使用地下服務。在示例中,攻擊者試圖部署 Mandiant 披露的舊驅動程序,該驅動程序通過 Microsoft 簽名 ( SHA256: b2f955b3e6107f831ebe67997f8586d4fe9f3e98 ) 。由于該驅動程序之前已經被發現并檢測到,攻擊者部署了另一個由被盜或洩露的交叉簽名證書簽名的内核驅動程序。
惡意簽名的内核驅動程序
我們觀察到的 2023 年 2 月的勒索軟件事件證明,勒索軟件運營商及其附屬機構對獲得他們在攻擊中使用的勒索軟件有效負載的特權級訪問非常感興趣。他們通常使用包含低權限組件的勒索軟件家族,以避免在最終有效負載被釋放後被安全産品檢測到。跟蹤分析發現,大多數與内核相關的有效負載通常是在企圖逃避階段被發現的。
内核級攻擊的分布
大多數與内核相關的有效負載都是在企圖逃避階段被發現的
一些勒索軟件攻擊試圖遵守微軟的代碼簽名要求。這使得惡意攻擊者可以靈活地在釋放實際負載之前編譯爲特定任務 ( 通常涉及削弱防禦和逃避 ) 設計的内核模塊。攻擊者可以采取以下方法:
1. 使用代碼簽名證書,該證書要麽是洩露的,要麽是竊取的,要麽是從黑市購買的。
2. 通過模仿合法機構并按照微軟的流程獲取交叉簽名證書 ( 前提是微軟允許對内核模式代碼進行交叉簽名 ) ,濫用微軟的門戶來發布簽名的内核模塊,獲得新的有效代碼簽名證書,以及從黑市購買與真實身份相關的有效代碼簽名證書和 / 或擴展驗證(EV)證書。
顯示攻擊者如何遵守微軟代碼簽名要求的圖表
對簽名驅動程序的分析
接下來,我們将研究二月 BlackCat 攻擊中使用的簽名驅動程序(ktgn.sys)。下圖顯示了這些新簽署的驅動程序的其他示例,以及它們是如何被用作 BlackCat 逃避程序的。
BlackCa 在逃避階段釋放的文件
通過虛拟機保護的用戶代理 tjr.exe 将内核驅動程序釋放到用戶臨時目錄 C:%User%AppDataLocalTempKtgn.sys。然後安裝被釋放的驅動程序,名稱爲 Ktgn,啓動值爲 System(在系統重新啓動時啓動)。通過我們對用戶與該驅動程序交互時發生的情況的分析,我們觀察到它隻使用了一個公開的設備輸入和輸出控制(IOCTL)代碼—— Kill Process,該代碼用于阻止安裝在系統上的安全代理進程。
與此同時,驅動程序 ktgn.sys 使用當前吊銷的有效數字簽名從 "BopSoft" ( 它也曾被其他攻擊者用于代碼簽名 ) 簽名,可以成功加載到執行簽名策略的 64 位 Windows 安裝中,該驅動程序使用 Safengine Protector v2.4.0.0 工具進行混淆,這使得靜态分析技術不可靠。通過加載被混淆的驅動程序并嘗試構建一個用戶模式客戶端來觀察暴露的 IOCTL 接口,我們可以确定每個 IOCTL 代碼的函數。最後,我們觀察到相同的内核驅動程序被不同的代碼簽名證書簽名。
具有不同簽名者的驅動程序變體
用于混淆二進制文件的封裝程序
由于它沒有注冊卸載回調函數,因此隻有在釋放或修改服務注冊表項後重新啓動系統時,才能卸載驅動程序。
服務控制管理器無法停止該服務
缺少卸載函數的驅動程序
一個名爲 \.keHeperDriverLink 的符号鏈接被創建,該符号允許用戶模式客戶端與其連接和通信。請注意,該鏈接隻允許一個連接,如果多個客戶端試圖同時連接,系統将崩潰。
正在檢查另一個用戶模式進程是否正在嘗試連接到驅動程序
暴露的 IOCTL 接口
這個客戶機支持 10 個不同的命令,每個命令實現一個特定的功能,該功能由内核驅動程序通過适當的 IOCTL 接口執行。驅動程序和用戶模式客戶端之間的通信使用 irp_mj_devicide_control 處理程序通過以下代碼發生,每個 IOCTL 代碼及其對應的功能:
222088h:激活驅動程序
22208ch:取消激活驅動程序
222094h:終止進程
222184h:删除文件
222188h:強制删除文件
22218ch:複制文件
222190h:強制複制文件
2221c8h:注冊進程 / 線程對象通知
2221c4h:注銷進程 / 線程對象通知
222264h:重啓系統
根據我們對内核驅動程序的分析,它似乎仍在開發和測試中,因爲它的結構不是很好,而且它的一些功能目前還不能使用。接下來将介紹各種 IOCTL 接口的詳細信息。
IOCTL 222088h
在執行任何其他操作之前,必須首先調用 IOCTL 222088h 來激活驅動程序。如果未調用此代碼,驅動程序将不接受任何操作,并将返回消息 STATUS_ACCESS_DENIED。用戶模式客戶端将此激活字節數組發送給驅動程序。
激活是對位于驅動程序中的大小爲 0x42 的硬編碼字節數組進行簡單的字節比較。如果比較通過,它将設置一個 BOOLEAN 标志,該标志将在任何操作之前進行檢查。
運行内存中的激活字節數
複制激活字節以測試驅動程序操作
IOCTL 22208 ch
IOCTL 22208Ch 在用戶模式客戶端完成取消之前在 IOCTL 代碼 222088h 中設置的标志的操作後被調用。這将使驅動程序失效并停止處理任何新的操作。
客戶端将需要傳遞 IOCTL 代碼 222088h 中傳遞的相同字節數組,以便成功完成操作。
IOCTL 222094 h
IOCTL 222094h 用于阻止任何用戶模式進程(甚至是受保護的進程)。Tt 從用戶代理接收進程 ID,然後在目标進程上下文中創建内核線程。創建的内核線程調用 ZwTerminateProcess API 來終止目标進程。
檢查驅動程序是否激活
IOCTL 222094h 終止進程
IOCTL 222184 h
IOCTL 222184h 用于删除特定的文件路徑。
IOCTL 222184h 删除文件路徑
IOCTL 222188 h
IOCTL 222188h 強制删除文件。爲此,内核驅動程序執行以下操作:
1. 它嘗試使用暴力方法打開系統上的所有進程(從 PID=0x4 到 PID=0x27FFD);
2. 當它成功地打開一個進程時,它會嘗試引用進程内的所有句柄,再次使用暴力方法(從 HANDLE=0x4 開始到 HANDLE=0x27FFD);
3. 當它成功引用句柄時,它使用 ObQueryNameString API 将句柄映射到名稱。當找到匹配項時,内核驅動程序關閉句柄。
此操作将确保關閉對該文件的所有引用,并且該操作可以成功完成,而不會出現任何錯誤,說明該文件正被其他應用程序使用。
暴力破解 PID
暴力破解句柄
IOCTL 22218 ch
IOCTL 22218Ch 用于複制文件。
IOCTL 22218Ch 用于複制文件
IOCTL 222190 h
IOCTL 222190h 用于強制複制文件。驅動程序使用與強制删除相同的操作(IOCTL 代碼:222188h)。它使用暴力方法關閉所有進程對文件的所有引用,然後複制文件。
IOCTL 2221C4h 和 IOCTL 2221C8h
IOCTL 2221C4h 和 2221C8h 都用于注冊和注銷進程 / 線程通知回調。然而,在撰寫本文時,這兩條路徑都是無法實現的,這表明它們仍處于開發或測試階段。
注冊對象通知的僞代碼
注銷對象通知的僞代碼
對象通知函數的僞代碼
IOCTL 222264 h
IOCTL 222264h 通過調用 HalReturnToFirmware API 重啓系統。
總結
攻擊者通過終端保護平台 ( EPP ) 和終端檢測與響應 ( EDR ) 技術,正在積極尋求對 Windows 操作系統的高權限訪問的惡意攻擊,繞過各類防護措施。由于這些添加的保護層,攻擊者傾向于選擇阻力最小的方法,通過内核層(甚至更低級别)運行惡意代碼。所以我們認爲,這種威脅會一直存在。
惡意攻擊者将繼續使用 rootkit 對安全工具隐藏惡意代碼,繞過防禦,并在很長一段時間内不會被檢測到。這些 rootkit 将被惡意組織大量使用,他們既擁有逆向工程低級系統組件的技能,又擁有開發此類工具所需的資源。這些惡意攻擊者還擁有足夠的财力,可以從黑市購買 rootkit 或購買代碼簽名證書來構建 rootkit。這意味着涉及這類 rootkit 的主要危險在于它們能夠隐藏複雜的有針對性的攻擊,這些攻擊将在攻擊的早期使用,允許攻擊者在受害者環境中啓動實際有效負載之前就逃脫檢測。
緩解措施
代碼簽名證書通常會被攻擊者濫用,因爲它們在攻擊中提供了額外的混淆層。對于組織來說,洩露的密鑰不僅會帶來安全風險,還會導緻對原始簽名軟件的聲譽和信任的喪失。企業應該通過實現最佳實踐來保護他們的證書,例如減少對私鑰的訪問,從而降低對證書進行未經授權訪問的風險。爲私鑰使用強密碼和其他身份驗證方法還可以幫助保護它們免受惡意攻擊者的竊取或破壞。此外,使用單獨的測試簽名證書 ( 用于測試環境中使用的預發布代碼 ) 可以最大限度地減少實際發布簽名證書在攻擊中被濫用的可能性。
對于一般的勒索軟件攻擊,組織可以實現一個系統的安全框架,分配資源來建立一個強大的防禦策略。建議如下:
盤點資産和數據;
識别授權和未經授權的設備和軟件;
審計事件和事件日志;
管理硬件和軟件配置;
僅在必要時授予管理員權限和訪問權限;
監控網口、協議和服務;
爲合法應用程序建立軟件許可列表;
實施數據保護、備份和恢複措施;
啓用多因素身份驗證 ( MFA ) ;
在系統各層部署最新版本的安全解決方案;
注意攻擊的早期迹象;
保護潛在的入口點 ( 如終端、電子郵件、web 和網絡 ) ,組織可以檢測并防範惡意元素和可疑活動,從而保護自己免受勒索軟件攻擊。