我們一起分析一下這個剛剛修復的RDP漏洞CVE-2019-0708


 

寫在前面的話

在微軟今年五月份的漏洞更新安全公告中,提到了一個跟遠程桌面協議(RDP)有關的漏洞。我們之所以要在這里專門針對這個漏洞進行分析,是因為這個漏洞更新涉及到Windows XP以及其他多個Windows操作系統,而眾所周知,Windows XP已經很多年沒有過更新了。那么為什么微軟這一次要修復這個高危漏洞呢?別着急,我們現在一起來看一看!

根據微軟發布的安全公告,這是一個非常嚴證的安全漏洞,它將導致攻擊者在目標設備上實現遠程代碼執行,並植入蠕蟲等惡意軟件。這也就意味着,一旦目標組織的其中一台設備受到了感染,整個網絡系統內其他未受安全保護的計算機設備也將“無一幸免”。在這份安全公告中,微軟提到了著名的網絡蠕蟲“WannaCry”。在2017年三月份,微軟修復了針對該惡意軟件的相關漏洞(MS17-010),但是在此之前,很多攻擊者都在使用“WannaCry”進行網絡攻擊。

鑒於該漏洞的安全威脅等級(高危漏洞),攻擊者很有可能會在這段時間內開發出相應的漏洞利用工具,McAfee高級威脅研究團隊也對該漏洞以及相關的威脅場景進行了深度分析,我們建議廣大用戶盡快修復漏洞CVE-2019-0708。

 

受影響的操作系統

Windows 2003
Windows XP
Windows 7
Windows Server 2008
Windows Server 2008 R2

 

RDP協議

遠程桌面協議(RDP, Remote Desktop Protocol)是一個多通道(multi-channel)的協議可以幫助用戶(客戶端或稱“本地電腦”)與提供微軟終端機服務的電腦(服務器端或稱“遠程電腦”)建立通信連接。目前,市場上大部分的Windows都安裝了遠程桌面協議。其他操作系統也有相關的客戶端軟件,例如Linux、FreeBSD和Mac OS X等等。
該協議是對國際電信聯盟發布的一個國際標准的多通道會議協議T.120 的一個擴展。RDP協議在終端服務推出后已有四個版本,即4.0、5.0、5.1、5.2。一般來說,版本是根據windows的版本確定的。從客戶端的角度來說,5.X版本間提供的功能差別不是很大,相對於4.0版本,它提供了用戶帶密碼直接登錄、客戶端驅動器資源映射、客戶端音頻回放、最高24位色顯示和符合FIPS加密級別連接。另外,從4.0協議開始變提供的客戶羰功能有:高、中、低三種數據加密級別,客戶端自定義初始登錄環境,客戶端打印機映射,客戶端LPT端口映射,客戶端com端口映射,剪貼板映射,客戶登錄的個性化設置(包括鍵盤、顯示界面大小等)。7.0版:這是最新的版本,僅支持Windows Server 2008 R2 或 Windows 7及以上版本。

 

漏洞概覽

蠕蟲病毒可以在受感染的網絡系統內進行自我復制和傳播,並在受感染的遠程主機上自動運行,而不需要用戶任何的額外交互。如果一款惡意軟件的主要攻擊載體是網絡的話,那么它就應該被歸類為蠕蟲。

遠程桌面協議(RDP)定義了通信雙方在虛擬信道間的數據通信方式,支持客戶端建立點到點的連接。這種虛擬信道為雙向數據通道,可以擴展RDP的功能。Windows Server 2000在RDP v5.1中定義了32種靜態虛擬信道(SVC),但是由於其中涉及還到大量動態虛擬信道(DVC),因此可用的信道數量以及種類會受到一定限制。SVC是在會話開始時創建的,並在會話終止前保持不變,但DVC不同,因為它是根據用戶需求來創建和刪除的。

 

漏洞分析

漏洞CVE-2019-0708涉及到了RDP驅動器termdd.sys中的_IcaBindVirtualChannels 和_IcaRebindVirtualChannels。我們可以從下圖中看到,系統初始化了RDP連接序列,並且會在安全機制啟用前完成信道的建立,這就導致了漏洞CVE-2019-0708的可蠕蟲化,因為它可以通過開放端口3389在目標網絡系統內實現自我復制和傳播。

先給大家簡單介紹一下“MS_T120”這個靜態虛擬信道,它的RDP信道編號為31,位於GCC會話初始序列中。這是一個微軟內部使用的信道名稱,而且在客戶端通過一個SVC來請求建立連接時,不會顯示關於“MS_T120”這個信道的使用信息。

下圖顯示的是GCC會話初始化序列的信道請求信息,我們可以看到其中不涉及到任何關於MS_T120信道的信息。

但是在GCC會話初始化的過程中,客戶端提供的信道名稱並不在服務器端的白名單中,因此攻擊者將能夠設置另一個名為“MS_T120”的SVC信道(而不是之前編號為31的合法信道)來讓目標系統發生堆內存崩潰,或實現遠程代碼執行。

下圖顯示的是GCC會話初始化過程中的非正常信道請求(“MS_T120”信道編號為4):

MS_T120信道管理中涉及到的組件我們在下圖中進行了標注。MS_T120參考信道會在rdpwsx.dll中創建,堆內存也會在rdpwp.sys中分配內存池。當MS_T120參考信道在信道編號非31的場景下建立時,便會發生堆內存崩潰。

下圖顯示的是微軟的漏洞修復情況,微軟在termdd.sys的_IcaBindVirtualChannels和_IcaRebindVirtualChannels函數中的客戶端連接請求部分添加了針對信道名稱“MS_T120”的檢測代碼,並確保該信道會跟信道序列31進行綁定。

在對Windows 2003和Windows XP的漏洞補丁進行了分析之后,我們弄清楚了RDP協議在安裝補丁之前以及安裝補丁之后的信道解析流程,因此我們打算針對這個漏洞開發一份漏洞概念驗證代碼,並嘗試在目標設備上利用該漏洞來實現遠程代碼執行,然后啟動計算器程序。

下圖為我們PoC程序的執行截圖:

經過簡單配置之后,我們在目標設備上啟用了遠程桌面協議,並且在運行概念驗證代碼前確保了該設備沒有安裝漏洞補丁。

我們通過研究分析,確認了PoC代碼的有效性,並成功在目標系統上實現了遠程代碼執行。但是,如果目標系統啟用了網絡等級認證功能,那么這份PoC代碼就無法正常運行了。不過攻擊者如何能夠獲取到目標網絡系統的管理員憑證,那么他們仍然能夠繞過這種安全保護機制。

由於微軟已經針對該漏洞發布了相應的漏洞補丁,因此我們就不再詳細討論針對該漏洞的利用方法了,而且出於對廣大用戶的安全性負責的角度考慮,我們也不打算對外公開我們的PoC代碼。

 

緩解方案

1、 確保我們的Windows系統已安裝了針對漏洞CVE-2019-0708的安全補丁,我們強烈建議廣大用戶盡快安裝該補丁。

2、 禁止設備在外網使用遠程桌面協議,並將其限制在內網使用。如果可以的話,建議廣大用戶直接禁用遠程桌面協議,因為該協議如果被禁用,那么設備安全也就完全不會受到該漏洞的影響了。

3、 在遠程桌面協議的GCC會話初始化序列時,將“MS_T120”與信道編號31進行綁定,如果請求的信道編號不正確,則禁止建立連接。

需要注意的是,我們還可以在注冊表中修改默認的RDP端口,重啟之后我們就可以使用新的通信端口了:

但是,惡意軟件在獲取到了目標系統的管理員權限之后,是可以修改這種配置參數的,並且在注冊表中寫入新的通信端口。

 

McAfee用戶須知

McAfee NSP在2019年5月21日增加了如下所示的簽名驗證保護,因此McAfee NSP用戶不會受到此類攻擊的影響:

0x47900c00 “RDP: Microsoft Remote Desktop MS_T120 Channel Bind Attempt”


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM