Windows RPC運行時漏洞事后總結?
2022年4月前后,Windows RPC運行時被曝出存在遠程代碼執(zhí)行漏洞,當時曾引起很多人廣泛關注。微軟很快做出反應,發(fā)布補丁程序進行修補。這次事件中,Windows遠程過程調用(RPC)運行時共出現三個關鍵漏洞:CVE-2022-24492、CVE-2022-24528和CVE-2022-26809。
本文主要將介紹其中兩個漏洞的信息,它們所產生的影響和范圍,以及可行的緩解措施。
Akamai最近還撰寫了一篇有關RPC篩選器的指南,該工具可以限制并阻止Windows計算機之間的RPC流量。雖然我們還未確認RPC篩選器是否可以緩解本文所討論的漏洞,但建議感興趣的讀者閱讀此文,進一步了解該工具的機制。
漏洞及其影響
通過利用這些漏洞,未經授權的遠程攻擊者將能利用RPC服務特權在存在漏洞的計算機上遠程執(zhí)行代碼,當然這還要取決于承載RPC運行時的進程。該漏洞可以從網絡外部利用借此入侵網絡,此外也可用于網絡內部橫向移動。
如上表所示,CVE-2022-26809是一種“零點擊”漏洞,無需人工介入即可利用。因此它在通用漏洞評分系統(tǒng)(CVSS)中一舉得到了9.8分的高分(滿分10分)。這意味著該漏洞的嚴重性極高,并且被攻擊者利用的可能性極大。
誰容易受到威脅?
任何Windows計算機,只要445端口被打開且RPC運行時庫未安裝補丁,都會受到該漏洞威脅。根據Shodan的數據,目前有超過70萬臺Windows計算機將該端口暴露在互聯(lián)網上。根據微軟的介紹。監(jiān)聽該TCP端口的服務器也會受到潛在威脅。
定位并理解該漏洞
CVE中提到,該漏洞位于Windows RPC運行時中,該運行時是通過庫文件rpcrt4.dll實現的。當客戶端和服務器進程利用RPC協(xié)議進行通信時,雙方都會加載這個運行時庫。
我們對比了該文件的10.0.22000.434版(2022年3月補丁修補前)和10.0.22000.613版(2022年4月,補丁修補后),發(fā)現有如下多個函數產生了變化:
其中OSF_CCALL::ProcessResponse和OSF_SCALL::ProcessReceivedPDU這兩個函數引起了我們的注意。這兩個函數本質上較為相似,都負責處理RPC數據包,但一個運行在客戶端,另一個運行在服務器端(CCALL和SCALL分別代表客戶端和服務器端)。我們繼續(xù)研究OSF_SCALL::ProcessReceivedPDU的變更,并注意到新版本中增加的兩個代碼塊。
查看修補后的代碼可以看到,在QUEUE::PutOnQueue之后調用了一個新函數。繼續(xù)深入這個新函數并查看其代碼發(fā)現,該函數會檢查整數溢出。也就是說,新增的這個函數是為了驗證整數變量是否保持在預期值范圍內。
繼續(xù)深入查看OSF_SCALL:GetCoalescedBuffer中有漏洞的代碼后發(fā)現,這個整數溢出漏洞會導致堆緩沖區(qū)溢出,即數據被復制到一個太小而裝不下的緩沖區(qū)中。這進而會導致數據被寫入到緩沖區(qū)邊界之外的堆中。只要善加利用,這個基元就可能導致遠程代碼執(zhí)行。
其他幾個函數頁增加了類似的,用于檢查整數溢出的調用:
- OSF_CCALL::ProcessResponse
- OSF_SCALL::GetCoalescedBuffer
- OSF_CCALL::GetCoalescedBuffer
該整數溢出漏洞和防止此漏洞的函數同時存在于客戶端和服務器端的執(zhí)行流程中。
緩解措施
雖然RPC使用了多種安全控制機制和措施(例如安全回調),但我們依然建議根據微軟的說明執(zhí)行下列緩解措施:
- 安裝最新安全更新,緩解這些漏洞。
- 雖然RPC對系統(tǒng)中的某些服務是必須的,但對企業(yè)邊界范圍外的設備,建議阻止TCP 445端口的通信。
- 為了遏制橫向移動,建議只對真正需要的計算機(如域控制器、打印服務器、文件服務器等)允許傳入的TCP 445端口通信。
Akamai Guardicore Segmentation規(guī)則
Akamai Guardicore Segmentation旨在保護用戶防范利用這些漏洞發(fā)起的攻擊。如上文所述,CVE-2022-26809因為完全無需人工介入即可生效,因此CVSS評分極高。這意味著該漏洞被利用時,用戶和安全團隊可能都無法察覺。通過使用明確的訪問控制機制對網絡進行微分段,即可防止利用這些漏洞的攻擊進入內部網絡或在網絡中橫向移動。
為了應用緩解措施,阻止來自網絡外部的SMB流量,請創(chuàng)建如下的分段規(guī)則: