2021年1月12日,Microsoft發佈了CVE-2021-1678的補丁,這是CrowdStrike®研究人員發現的漏洞。攻擊者可以利用這個漏洞把NTLM身份驗證會話中繼到受攻擊的計算機,用打印機後臺處理程序MSRPC接口在受攻擊的計算機上遠程執行代碼。


Compass Security的Sylvain Heiniger撰寫的《通過RPC中繼NTLM身份驗證》(https://blog.compass-security.com/2020/05/relaying-ntlm-authentication-over-rpc/)首次出現了類似的MSRPC中繼。Sylvain在他的博客裡描述了他如何利用MSRPC接口上不安全的身份驗證級別來通過NTLM中繼實現遠程代碼執行。 


在此博客文章中,我們展示瞭如何利用IRemoteWinSpool MSRPC接口,以及公司如何保護自己免受此漏洞的侵害。該漏洞利用技術類似於其他先前的打印機後臺處理程序漏洞利用文章,例如《PrintDemon:打印後臺處理程序權限提升,持久性和隱密性(CVE-2020-1048及更高版本)》(https://windows-internals.com/printdemon-cve-2020-1048/)。





以下是技術細節:



01

NTLM中繼基礎



NTLM身份驗證協議容易受到中繼攻擊。NTLM中繼是一種常見的攻擊技術,其中,攻擊一臺計算機的攻擊者可以用針對受感染服務器的NTLM身份驗證,橫向移動到其他計算機。


(圖1. NTLM中繼基本流程)


多年來,Microsoft開發出多種緩解措施來阻止NTLM中繼攻擊。有關NTLM中繼的更詳細的介紹,請查看CrowdStrike以前發佈的博客https://www.crowdstrike.com/blog/retrieve-session-key-authentication/)。






02

DCE / RPC中繼



只要沒有保護,就可以從協議到協議之間中繼NTLM身份驗證。以前的NTLM中繼攻擊包括攻擊諸如服務器消息塊(SMB)和LDAP / S的其他協議。本文主要講如何攻擊MSRPC。


SMB和LDAP防止NTLM中繼主要可以通過數據包簽名,即強制用GPO(“ Microsoft網絡服務器:對數字通信(始終)進行數字簽名”(Windows 10)-Windows安全性)。 


MSRPC在執行中繼和中間人攻擊(MITM)數據包安全性方面的方式有所不同。MSRPC服務器定義其所需的身份驗證級別,用來確定基礎身份驗證機制必須提供對這臺服務器(接口)進行身份驗證的功能:


(圖2. MSRPC身份驗證級別)


RPC_C_AUTHN_LEVEL_CONNECT的身份驗證級別在初始請求(綁定請求)上對用戶進行身份驗證,但不對傳輸的命令進行任何加密或簽名。允許這種身份驗證級別的接口容易受到NTLM中繼攻擊。


所以多數人都希望服務器註冊表項的MSRPC API在默認情況下選擇安全選項,拒絕身份驗證級別低於RPC_C_AUTHN_LEVEL_PKT_INTEGRITY的客戶端。但是,在MSRPC情況下,它就是每個接口,因為每個RPC接口都可以通過檢查回調的身份驗證級別來手動執行身份驗證級別(例如,RpcServerRegisterIfEx函數(rpcdce.h)中的IfCallback – Win32應用程序))。 


由於疏忽和之前的設置不妥當,這種情況導致許多RPC服務器易受攻擊。Compass Security的博客就利用了任務計劃程序界面。






03

後臺打印程序特權提升



缺乏數據包安全性的RPC接口易受攻擊,在找這些接口時,我們發現了一個易受攻擊的接口:IRemoteWinspool,用於遠程打印機後臺處理程序管理。


Alex Ionescu和Yarden Shafir的《PrintDemon: 後臺打印程序特權提升,持久性和隱密性(CVE-2020-1048及更高版本)》(https://windows-internals.com/printdemon-cve-2020-1048/)展示了在如何利用打印機後臺處理程序界面,即使啟動用戶沒有足夠的權限來寫入任意文件,也可以將其作為SYSTEM執行此操作。


但我們的情況有所不同。由於我們用的是NTLM中繼,需要在有特權的用戶帳戶中使用NTLM會話來執行一系列RPC操作,這樣才會有成效。


將所有這些拼湊在一起,進行有效的利用,然後會產生以下序列: 


  1. 用攻擊者控制的中繼計算機建立NTLM會話。

  2. 攻擊者綁定目標上的IRemoteWinspool接口,然後選擇RPC_C_AUTHN_LEVEL_CONNECT的身份驗證級別。

  3. 攻擊者通過建立起來的RPC通道中繼NTLM身份驗證。 

  4. 執行一系列類似於PrinterDemon利用流程的RPC命令:


  • RpcAsyncInstallPrinterDriverFromPackage(Opnum 62)—安裝“通用/文本”打印機驅動程序

  • RpcAsyncOpenPrinter(Opnum 0)

  • RpcAsyncXcvData(Opnum 33)— 添加端口

  • RpcAsyncAddPrinter(Opnum 1)— 使用提到的驅動程序添加打印機

  • RpcAsyncStartDocPrinter(Opnum 10)— 創建一個新文檔

  • RpcAsyncWritePrinter(Opnum 12)— 寫入新文檔


我們執行了該攻擊的POC。我們的代碼是基於Compass Security(用IRemoteWinspool替換TSCH接口)所操作的MSRPC中繼裡的impacket(https://github.com/SecureAuthCorp/impacket),以及執行打印後臺處理程序的升級流程。


(圖3. CVE-2021-1678利用流程)







04

修複分析



修補Sylvain Heiniger最初提出的問題時,Microsoft在任務計劃服務的IfCallback中添加檢查,沒有對RPC的運行時間進行大幅改動,也許是因為它的兼容性問。我們提交了類似的實例,不知道Microsoft是否會嘗試其他有針對性的修復或大的改動。


我們對Spoolsv.exe的IRemoteWinspool執行進行了逆向工程,發現了一個叫RpcManager :: VerifyRpcValidProtocolSequence的共享函數,它可用於一些不同的RPC接口,包括IRemoteWinSpool。最初,這個函數是用來驗證IRCATE_WINSpool有沒有用ncacn_ip_tcp協議序列,確保僅接受遠程TCP / IP客戶端(拒絕SMB管道和/或本地ALPC客戶端)。不出所料,身份驗證安全級別沒有受到任何檢查。


修補後,把新的IfCallback函數添加到二進制文件中,然後顯示以下偽代碼:


(圖4.修補後,在IRemoteWinspool中用的新的RPC驗證流程)


如下所示,安全級別的驗證擴展了僅用於驗證協議序列的調用,如下所示:


(圖5.修補程序強制使用RPC_C_AUTHN_LEVEL_PKT_PRIVACY或更高版本後的安全級別驗證)


這是另一種戰略性修復,類似於ITaskScheduler接口的修復,對照RPC_C_AUTHN_LEVEL_PKT_PRIVACY檢查客戶端的身份驗證級別,如果沒有這樣設置,則無法調用RPC_S_ACCESS_DENIED。但我們注意到,只有設置了註冊表值,才能採用此代碼路徑,即使打了補丁後也沒有啟用該值。 


如圖5中的代碼所示,必須把HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Print密鑰中的REG_DWORD值RpcAuthnLevelPrivacyEnabled設置為1,否則無法執行此附加檢查,系統仍然易受到攻擊。


現在已經發布了補丁程序,Microsoft在這篇文章(https://support.microsoft.com/en-us/topic/managing-deployment-of-printer-rpc-binding-changes-for-cve-2021-1678-12a69652-30b9-3d61-d9f7-7201623a8b25)中對此行為進行了說明,該文章表示,在默認情況下,RPC打印機綁定還是允許漏洞連接。6月份的更新將發佈第二個補丁,把安全註冊表項設置成為默認設置。






05

如何保護自己的網絡?



以下的步驟有助於減少您的網絡漏洞,防止其他類似的NTLM中繼攻擊:


補丁程序:儘快打上MS補丁程序,緩解已發現的攻擊。但僅靠打補丁是不夠的。除非按照Microsoft指南(https://support.microsoft.com/en-us/topic/managing-deployment-of-printer-rpc-binding-changes-for-cve-2021-1678-12a69652-30b9-3d61-d9f7-7201623a8b25)更改註冊表項設置,否則你的網絡還是容易受到此類攻擊。對於緊急修補情況,請觀看此視頻(https://www.crowdstrike.com/blog/tech-center/emergency-patching/),瞭解Falcon Spotlight如何讓你的網絡處於安全狀態。


配置安全的NTLM設置:在默認情況下,沒有啟用某些NTLM中繼緩解措施,導致網絡易受攻擊。最值得注意的是SMB簽名,LDAP簽名和LDAPS通道綁定。查看這些安全設置,確保你的網絡有完全受到保護。


跟蹤NTLM的使用:在我看來,應該完全停止使用NTLM。這是基於我們過去發現並在博客中發佈的各種NTLM安全問題。 


檢測NTLM中繼攻擊:保護和刪除網絡中的NTLM是一個漫長而複雜的IT項目。如果你的網絡不是完全安全的,那我們建議你用安全產品來檢測NTLM異常和NTLM中繼攻擊。 






木星安全實驗室(MxLab),由中國網安·廣州三零衛士成立,匯聚國內多名安全專家和反間諜專家組建而成,深耕工控安全、IoT安全、紅隊評估、反間諜、數據保護、APT分析等高級安全領域,木星安全實驗室堅持在反間諜和業務安全的領域進行探索和研究。