事件分析
最近國內外各安全廠商都發布了SMBGhost(CVE-2020-0796)漏洞的預警報告和分析報告,筆者利用周末休息時間也研究了一下,就算是做一個筆記了,分享給大家一起學習下,目前外面研究的POC大部分是通過SMB壓縮數據包長度整數溢出之后導致系統Crash,基本也沒啥用,估計現在各大廠商的漏洞研究人員和一些技術成熟的黑客組織都在加緊研究RCE完整利用程序吧,這個漏洞能不能完整利用,會不會像永恒之藍那樣,還需要持續研究跟蹤,同時也需要關注后面會不會抓到一些利用這個漏洞的在野攻擊樣本。
漏洞簡介
3月12日晚,微軟發布安全公告披露了一個最新的SMB遠程代碼執行漏洞(CVE-2020-0796),該漏洞主要是因為在最新的Windows 10系統中,處理SMB3.1.1協議的壓縮消息時,對頭部數據沒有做任何安全檢查,從而引發內存破壞漏洞,黑客利用此漏洞,可無須任何權限的情況下,即可實現遠程內核代碼執行。
漏洞成因
從Windows10 v1903/Windows Server v1903開始,微軟在協議SMB3.1.1中開啟了對數據壓縮傳輸的支持,但是由于SMB沒有正確處理壓縮的數據包,在客戶端/服務端解壓數據的時候,沒有對COMPRESSIN_TRANSFORM_HEADE結構進行安全校驗,導致后續代碼發生一連串整形溢出、越界讀寫等漏洞。
影響版本
Windows10 Version 1903 for 32-bit Systems
Windows10 Version 1903 for x64-based Systems
Windows10 Version 1903 for ARM64-based Systems?
Windows Server, Version 1903 (服務器核心安裝)
Windows10 Version 1909 for 32-bit Systems
Windows10 Version 1909 for x64-based Systems
Windows10 Version 1909 for ARM64-based Systems?
Windows Server, Version 1909 (服務器核心安裝)
漏洞捕獲
從事漏洞分析與研究的朋友都會時刻關注各大廠商公布的漏洞或補丁信息,從公布的這些漏洞信息與補丁,就可以定位到相應的模塊進行分析調試,此前微軟發布了各個版本操作系統的CVE-2020-0796的補丁包,如下所示:
查看這個漏洞的細節信息,包含漏洞簡介,如下所示:
影響范圍,以及相應的補丁下載,如下所示:
緩解措施,如下所示:
漏洞分析
1.分析SMB漏洞,需要對SMB漏洞的結構數據比較熟悉,SMB數據結構,可參考微軟的官網,里面有SMB的詳細數據結構信息,如下所示:
下載文檔之后,查看文檔目錄中關于對SMB傳輸壓縮數據包頭的處理,如下所示:
可以找到COMPRESSION_TRANSFORM_HEADE數據結構,如下所示:
里面各個字段的含義,如下所示:
上面這些信息是分析這個漏洞的基礎,一定要弄清楚!
2.漏洞的成因在于SMB在處理接收的壓縮數據包時出現的錯誤,先定位到接收壓縮數據后處理函數srv2!Srv2ReceiveHandler,通過上面的分析,我們可以利用COMPRESSION_TRANSFORM_HEADE的結構體中的ProtocolId字段定位到相關的代碼處,如下所示:
如果傳輸的數據為壓縮數據,則跳轉到解壓縮數據處理函數Srv2DecompressData,如下所示:
在Srv2DecompressData函數中,使用SrvNetAllocateBuffer進行內存分配時,未對傳入的數據進行校驗,會導致整數溢出,然后調用SmbCompressionDecompress函數進行數據解壓操作,如下所示:
打過補丁之后,微軟修改了這個函數,對傳入的值進行三次校驗,如下所示:
對比補丁前后的文件中對應的函數,如下所示:
漏洞檢測
發送SMB數據包,檢測返回的流量數據包特征,如下所示:
構造SMB壓縮數據包,SMB數據包頭數據,如下所示:
附加上數據壓縮算法,如下所示:
檢測返回的流量數據包中SMB壓縮版本,如下所示:
以及數據包最后的數據,如下所示:
這種檢測方法很弱,可能會有誤報,目前各廠商的檢測方案和工具都沒有公布,不然可以逆向分析看看。
防御方案
1.windows自動更新
設置->更新和安全->Windows更新,點擊“檢查更新”,如下所示:
2.手動安裝補丁包
查看自己的電腦Win10操作系統版本,可以按Win+R鍵,然后鍵入WINVER命令,如下所示:
確定之后會彈出Win10操作系統版本,我的版本為1809,如下所示:
如果操作系統版本為Windows 10 1903之后,可以根據自己操作系統的版本安裝微軟提供的對應補丁包程序,下載地址:
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-0796
3.可以手動修改注冊表,防止被黑客遠程攻擊:
按Win+R鍵,然后鍵入WINVER命令,打開注冊表編輯器,如下所示:
HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters建立一個名為DisableCompression的DWORD,值為1,禁止SMB的壓縮功能,如下所示:
普通用戶只要用方法二去微軟官網下載相應的補丁包,安裝補丁包就可以了
參考鏈接:
1. https://github.com/ClarotyICS/CVE2020-0796
2.https://syntricks.com/cve-2020-0796-aka-smbghost-vulnerability/
3.https://www.synacktiv.com/posts/exploit/im-smbghost-daba-dee-daba-da.html
4.https://github.com/eerykitty/CVE-2020-0796-PoC
5.https://github.com/ioncodes/SMBGhost