前言:一場突如其來的疫情,阻止了大家返崗復工的腳步,為響應國家號召,減少疫情的擴散,最近很多企業客戶使用遠程辦公的方式開展工作,聯軟科技安全實驗室研究人員了解到有些客戶采用虛擬桌面、 RDP等方式臨時開展遠程運維和遠程辦公。
微軟官方在2020年1月份第二周發布了多個安全漏洞的公告,其中RD Gateway存在遠程代碼執行漏洞:CVE-2020-0609,CVE-2020-0610等漏洞直接影響RDP服務,給遠程辦公帶來安全風險。
當未經身份驗證的攻擊者使用 RDP 連接到目標系統并發送經特殊設計的請求時,Windows 遠程桌面協議(RD 網關)中存在遠程執行代碼漏洞。此漏洞是預身份驗證,無需用戶交互。成功利用此漏洞的攻擊者可以在目標系統上執行任意代碼。攻擊者可隨后安裝程序;查看、更改或刪除數據;或者創建擁有完全用戶權限的新帳戶。
什么是RDG?
RDG(Remote Desktop Gateway)也叫做Terminal Services Gateway(終端服務網關)是為遠程桌面RDP提供登陸的Windows服務器組件。用戶登陸RDP服務時,并不是直接連接到RDP服務器,而是連接到RDG網關進行認證,通過認證后網關會轉發RDP流量到用戶指定的地址,完成遠程桌面服務的建立。
漏洞風險
RDG支持3種不同的協議:HTTP, HTTPS 和 UDP,通過分析受影響的DLL和修復后的DLL文件,發現處理UDP協議的函數進行了更新。RDG的UDP協議允許大量的消息分割成不同的分割的UDP包。由于UDP是無連接的,因此包到達時是無序的。該函數的作用的重新聚合函數,確保每個包處于正確的位置。每個包中都含有以下域的header:
●fragment_id: 表示序列中包的位置
●num_fragments: 表示序列中包的數量
●fragment_length: 表示包中數據的長度
消息處理函數用packet header來確保重新聚合后的消息完整性和有效性,但是該函數的實現過程中存在可以被利用的漏洞。
圖:handler包的邊界檢查
memcpy_s 會復制每個fragment到重新組合buffer中的offset,buffer是在堆中分配的。每個fragment的offset是由fragment id乘以1000計算出來的。邊界檢查并不會考慮offset。假設buffer_size是1000,研究人員發送了含有2個fragment的消息。
●第一個fragment (fragment_id=0) 的長度是1。this->bytes_written 是0,所以邊界檢查通過了。
●會有1個字節寫入offset為0的buffer,bytes_written會增加1。第二個fragment (fragment_id=1) 的長度是998,this->bytes_written 是1,1+998仍然小于1000,所以檢測檢查仍然是通過的。
●998字節會寫入offse為1000(fragment_id*1000)的buffer中,這會讓998字節傳遞到buffer的末尾。
需要說明的是包并不是有序發送的。所以,如果發送的第一個包fragment_id=65535,那么offset就等于65535*1000,65534000字節超過了buffer的尾部。通過修改fragment_id,就可以在緩存的尾部的1到65534000之間寫入999字節。該漏洞要比典型的線性堆溢出漏洞更加靈活。不僅可以控制寫入數據的大小,還可以控制寫入的offset。通過精準控制寫入地址,就可以實現準確地寫內存,避免不必要的數據破壞。
圖:收到的fragment包的處理追蹤
Object類有一個32位無符號整數數組(每個fragment一個對應的無符號數)。接收到fragment后,對應的數組記錄就會被設置為0或1。一旦元素被設為1,就表明消息重新組合完成了,并且消息可以被處理。數組的空間最多有64條記錄,但fragment ID的范圍為0到65535。只驗證了fragment_id 小于 num_fragments (也可以被設置為65535)。因此,將fragment_id設置為65到65535可以在數組邊界外寫入1 (TRUE)。通過控制內存中數據值,結合精準寫入的構造代碼,可以修改程序的執行邏輯,從而引發任意代碼執行。
● Windows Server 2012
●Windows Server 2012 R2
● Windows Server 2016
● Windows Server 2019
修復建議
1. 微軟官方已經發布漏洞修復補丁,建議用戶及時確認是否受到漏洞影響,盡快采取修補措施。安全更新連接如下:
https://portal.msrc.microsoft.com/zh-cn/security-guidance/releasenotedetail/2020-Jan
2. 此漏洞僅影響RDP服務的UDP傳輸,默認端口3391,因網絡原因或無法及時進行補丁安裝進行修復時,可以通過配置RDG服務的UDP協議和端口,或者使用防火墻規則禁用UDP協議的3391端口,來暫時緩解漏洞風險。
RDG服務相關配置
防火墻規則配置
【推薦解決方案】
1. 疫情期間,針對采用RDP方式開啟遠程運維的客戶,可免費申請聯軟科技UniCSM網絡空間資產測繪系統(SaaS)平臺,針對CVE-2020-0609/0610漏洞進行在線漏洞檢測,并可持續對遠程辦公場景下的互聯網暴露面、供應鏈漏洞、信息泄露等風險進行監控,提供專家建議。
2. 采用更安全的遠程辦公、遠程運維解決方案,基于零信任架構的聯軟軟件定義邊界SDP遠程安全接入平臺,可實現服務隱身,天然抗攻擊,比VPN、遠程桌面等方式更安全,更穩定,易擴展,更快捷高效。
相關閱讀
1.官方安全通告:https://portal.msrc.microsoft.com/zh-cn/security-guidance/advisory/CVE-2020-0609
2.漏洞風險分析參考出處:https://www.kryptoslogic.com/blog/2020/01/rdp-to-rce-when-fragmentation-goes-wrong/