1.概述
2020年3月11日,微軟在3月的安全更新中發佈了一個位於Server Message Block 3.1.1(SMBv3)網絡通信協議的遠程代碼執行漏洞,漏洞編號為CVE-2020-0796,但並未在更新中修復此漏洞。次日,微軟發佈CVE-2020-0796專項補丁。成功利用此漏洞的攻擊者能夠在目標服務器或客戶端上執行任意代碼,類似“永恆之藍”漏洞,該漏洞存在被惡意代碼利用進行大範圍傳播的風險,威脅等級高。
2.漏洞描述
該漏洞是由於SMBv3協議中處理壓縮消息時未進行嚴格安全檢查所導致的。針對服務器,攻擊者可以通過發送特製數據包至目標服務器以利用此漏洞;針對客戶端,攻擊者可以通過配置惡意SMBv3服務器,並誘使用戶連接到該服務器以利用此漏洞。目前有網友已經在Github上公開了該漏洞的檢測工具。
3.受影響範圍
主要受影響的Windows版本如下:
●Windows 10 Version 1903 for 32-bit Systems
●Windows 10 Version 1903 for x64-based Systems
●Windows 10 Version 1903 for ARM64-based Systems
●Windows Server, Version 1903 (Server Core installation)
●Windows 10 Version 1909 for 32-bit Systems
●Windows 10 Version 1909 for x64-based Systems
●Windows 10 Version 1909 for ARM64-based Systems
●Windows Server, Version 1909 (Server Core installation)
4.漏洞原理
SMB 3.1.1協議出現時間較晚,由Windows 10 1903引入(2019年5月)。此協議涉及的模塊包括mrxsmb20.sys、srv2.sys、srvnet.sys等。此次問題和永恆系列一樣,也是出現在srv2.sys這個文件中。
在SMB 3.1.1協議中,引入了數據壓縮傳輸的概念,以求能夠提高傳輸效率。但在解壓縮時,由於考慮不嚴謹導致出現此次問題,而修補後的代碼加入了長度範圍驗證,具體對比如下:
srv2.sys文件中負責解壓縮的代碼使用函數SrvNetAllocateBuffer(srvnet.sys)申請內存,內存長度由傳輸數據(詳見下文)中OriginalSize和Offset相加得到。
SMB2協議中關於壓縮類型數據包定義如下圖:
從上圖可以看到,此數據包目前只存在於SMB 3.1.1中。
申請的內存長度類型為unsigned int,傳輸數據中OriginalSize和offset也都是unsigned int 類型。如沒有進行範圍驗證,則可能產生溢出。
在調試中產生溢出的代碼上下文如下圖所示。
5.修復及緩解建議
微軟已經發布了針對該漏洞的補丁,可通過微軟官網下載相應補丁並安裝更新(https://www.catalog.update.microsoft.com/Search.aspx?q=KB4551762)。
安天建議通過安天智甲一鍵掃描漏洞並下載補丁進行修復。
禁用SMBv3壓縮功能
安天針對此漏洞發佈了免疫工具,使用此工具可禁用SMBv3壓縮功能,以阻止攻擊者對CVE-2020-0796漏洞的利用,同時也可以通
可訪問安天創意論壇下載本工具
訪問安天創意論壇下載本工具:
本工具:
下載鏈接:https://bbs.antiy.cn/forum.php?mod=viewthread&tid=83848
另外也可通過以下PowerShell命令暫時禁用SMBv3壓縮功能:
(1)禁用命令:Set-ItemProperty -Path "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\LanmanServer\\Parameters" DisableCompression -Type DWORD -Value 1 -Force
(2)啟用命令:Set-ItemProperty -Path "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\LanmanServer\\Parameters" DisableCompression -Type DWORD -Value 0 -Force
執行後無需重啟,但此種方式無法防護針對SMB客戶端的攻擊。
針對企業網絡管理員的建議
對於企業網絡管理員,若企業IDS設備支持snort規則,可通過添加以下snort規則來實現對SMBv3壓縮通信的監測:
alert tcp any any -> any 445 (msg:"Windows SMBv3 Client/Server Remote Code Execution Vulnerability CVE-2020-0796"; content:" |FC|SMB"; offset: 0; depth: 10; sid:9000001; rev:1.0; reference:url, portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-0796;reference:url, www.catalog.update.microsoft.com/Search.aspx?q=KB4551762;)
alert tcp any 445 -> any any (msg:"Windows SMBv3 Client/Server Remote Code Execution Vulnerability CVE-2020-0796"; content:"|FC|SMB"; offset: 0; depth: 10; sid:9000002; rev:1.0; reference:url, portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-0796;reference:url, www.catalog.update.microsoft.com/Search.aspx?q=KB4551762;)
[1]CVE-2020-0796 | Windows SMBv3 Client/Server Remote Code Execution Vulnerability
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-0796
[2]Microsoft Update Catalog
https://www.catalog.update.microsoft.com/Search.aspx?q=KB4551762
閱讀更多 安天 的文章