Windows NT LAN Manager (NTLM)安全特征繞過漏洞
微軟在本月的微軟補(bǔ)丁日修復(fù)了一個Windows NT LAN Manager (NTLM)安全特征繞過漏洞。該漏洞CVE編號為CVE-2021-1678,CVSS評分為4.3分。攻擊者利用該漏洞可以中繼NTLM 認(rèn)證會話到攻擊者的機(jī)器,使用printer spooler MSRPC 接口來在被攻擊的機(jī)器上遠(yuǎn)程執(zhí)行代碼。
NTLM中繼攻擊是中間人攻擊的一種,攻擊者利用該攻擊可以訪問網(wǎng)絡(luò)來攔截客戶端和服務(wù)器之間合法的認(rèn)證流量,并對經(jīng)過驗證的認(rèn)證請求進(jìn)行中繼以訪問相關(guān)的網(wǎng)絡(luò)服務(wù)。
Print Spooler 權(quán)限提升
漏洞利用中,攻擊者使用了來自特權(quán)用戶賬戶的NTLM 會話來執(zhí)行一系列的RPC 操作。整個漏洞利用的步驟如下所示:
(1) 建立于攻擊者控制的中繼機(jī)器的NTLM 會話;
(2) 攻擊者綁定目標(biāo)的IRemoteWinspool 接口,選擇RPC_C_AUTHN_LEVEL_CONNECT的認(rèn)證級別;
(3) 攻擊者通過建立的RPC 信道來中繼NTLM 認(rèn)證;
(4) 執(zhí)行一系列的RPC命令:
- RpcAsyncInstallPrinterDriverFromPackage (Opnum 62) — 安裝“Generic/Text”打印機(jī)驅(qū)動;
- RpcAsyncOpenPrinter (Opnum 0)
- RpcAsyncXcvData (Opnum 33) — 添加端口
- RpcAsyncAddPrinter (Opnum 1) — 用前面提到的驅(qū)動添加打印機(jī);
- RpcAsyncStartDocPrinter(Opnum 10) — 打開新文檔;
- RpcAsyncWritePrinter (Opnum 12) — 在新文檔中寫入內(nèi)容。
圖 CVE-2021-1678漏洞利用流圖
補(bǔ)丁分析
微軟在補(bǔ)丁中對定時任務(wù)服務(wù)使用的IfCallback 加入了檢查,同時對RPC運行時間沒有太大的影響。研究人員逆行了Spoolsv.exe中IRemoteWinspool的實現(xiàn),發(fā)現(xiàn)了一個名為RpcManager::VerifyRpcValidProtocolSequence 的共享函數(shù),該函數(shù)被多個不同的RPC 接口所使用,其中就包括IRemoteWinSpool。
本來該函數(shù)會驗證ncacn_ip_tcp協(xié)議序列是否用于IRemoteWinspool,以確保只有遠(yuǎn)程的TCP/IP 客戶端才會被接受。但是,在認(rèn)證安全級中沒有相關(guān)的檢查。
在補(bǔ)丁中,二進(jìn)制文件中加入了一個新的IfCallback 函數(shù),偽代碼如下所示:
圖 安裝補(bǔ)丁后IRemoteWinspool使用的新的RPC 驗證流
從中可以看出,驗證協(xié)議序列的調(diào)用被擴(kuò)展了,如下所示:
圖 安裝補(bǔ)丁后安全級別驗證
如上圖所示,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print key中的REG_DWORD value RpcAuthnLevelPrivacyEnabled 必須設(shè)置為1,否則其他的檢查就不會執(zhí)行,系統(tǒng)仍然會受到攻擊。
更多技術(shù)細(xì)節(jié)參見:https://www.crowdstrike.com/blog/cve-2021-1678-printer-spooler-relay-security-advisory/