【技術向】CVE-2019-1040漏洞分析&防禦報告

星河Salaxy發表於2021-07-07

一.  CVE-2019-1040簡介

2019年6月,Microsoft釋出了一條安全更新。該更新針對CVE-2019-1040漏洞進行修復。此次漏洞,攻擊者可以透過中間人攻擊,繞過NTLM MIC(訊息完整性檢查)保護,將身份驗證流量中繼到目標伺服器。透過這種攻擊使得攻擊者在僅有一個普通域賬號的情況下可以遠端控制Windows域內的任何機器,包括域控伺服器。



二.  CVE-2019-1040描述


2.1  漏洞利用原理

CVE-2019-1040是一個允許繞過NTLM中繼攻擊的漏洞。該漏洞由Marina Simakov和Yaron Zinar(以及微軟公告中的幾個人發現)發現,他們在此釋出了有關此漏洞的技術文章。此漏洞允許繞過NTLM身份驗證中的訊息完整程式碼。然而,如果將Lee Christensen發現的Printer Bug以及我們在Elad Shamir的Kerberos研究中開展的一些研究相結合,我們能發現這個漏洞的影響是相當大的。使用這些漏洞的組合,可以將SMB身份驗證中繼到LDAP。該漏洞使得在任何未修補的Windows伺服器或工作站(位於不同Active Directory中的那些伺服器或工作站)上以SYSTEM身份執行遠端程式碼,並透過未修補的Exchange伺服器升級到域管理員(除非域中的Exchange許可權減少)。


NTLM身份驗證由3種訊息型別組成:NTLM_NEGOTIATE,NTLM_CHALLENGE,NTLM_AUTHENTICATE。微軟為了在NTLM協商階段防止中間人攻擊,在最終的NTLM身份驗證訊息(NTLM_AUTHENTICATE)新增了一個額外欄位——MIC,msvAvFlag欄位表示該訊息是否包含MIC,Flags:0x00000002表示該訊息包含MIC欄位。MIC是一個HMAC_MD5值,應用於3種NTLM訊息的會話金鑰,只有初始認證的賬戶和目標伺服器知道。所以攻擊者試圖篡改訊息時,由於無法生成相應的MIC,會導致攻擊失敗。但是該漏洞成因在於Microsoft伺服器並不驗證’msvAvFlag’欄位,即伺服器允許無MIC的NTLM_AUTHENTICATE訊息,這使得不強制執行簽名的伺服器容易受到中間人攻擊:

 

攻擊思路如下:

(1) 取消設定NTLM_NEGOTIATE訊息中的簽名標誌(NTLMSSP_NEGOTIATE_ALWAYS_SIGN,NTLMSSP_NEGOTIATE_SIGN)

(2) 從NTLM_AUTHENTICATE訊息中刪除MIC

(3) 從NTLM_AUTHENTICATE訊息中刪除版本欄位(刪除MIC欄位而不刪除版本欄位將導致錯誤)。

(4) 取消設定NTLM_AUTHENTICATE訊息中的以下標誌:NTLMSSP_NEGOTIATE_ALWAYS_SIGN,NTLMSSP_NEGOTIATE_SIGN,NEGOTIATE_KEY_EXCHANGE,NEGOTIATE_VERSION。


該漏洞目前有兩種攻擊途徑:

(1) 使用任何AD帳戶,透過SMB連線到受害者Exchange伺服器,並觸發SpoolService錯誤。攻擊者伺服器將透過SMB連線回您,SMB可以使用修改版本的ntlmrelayx中繼到LDAP。使用中繼LDAP身份驗證,向攻擊者帳戶授予DCSync許可權。攻擊者帳戶現在可以使用DCSync轉儲AD中的所有密碼雜湊。

(2) 使用任何AD帳戶,透過SMB連線到受害者伺服器,並觸發SpoolService錯誤。攻擊者伺服器將透過SMB連線回您,SMB可以使用修改版本的ntlmrelayx中繼到LDAP。使用中繼LDAP身份驗證,將受害者伺服器的基於資源的受限委派許可權授予攻擊者控制下的計算機帳戶。攻擊者現在可以作為受害者伺服器上的任何使用者進行身份驗證。


2.2  漏洞針對的物件版本

Windows 7 sp1 至Windows 10 1903

Windows Server 2008 至Windows Server 2019



三.  Exchange攻擊過程


3.1  實驗環境

圖片


圖片

在域中新建一個用於測試的賬戶user2



3.2  漏洞利用過程


1. ntlmrelayx

執行ntlmrelayx.py指令碼進行NTLM中繼攻擊,設定SMB伺服器並將認證憑據中繼到LDAP協議。其中--remove-mic選項用於清除MIC標誌,--escalate-user用於提升指定使用者許可權。


圖片


2. 觸發SpoolService

執行printerbug.py指令碼,觸發SpoolService的bug


圖片


3. dump出所有密碼雜湊值

透過secretsdump.py的DCSync功能dump出所有密碼雜湊值


圖片



四.  Kerberos委派攻擊過程


4.1  實驗環境

圖片


域控制器需要開啟LDAPS支援,因為該攻擊方式需要新增新的計算機賬戶,必須在LDAPS進行。

在域中新建一個用於測試的賬戶user1,一個域管理員admin2。


圖片


圖片



4.2  漏洞利用過程

4.2.1  漏洞檢測

受影響範圍內且未安裝最新補丁程式的所有系統都容易受到攻擊。使用者可以檢查當前系統是否已打補丁,並確定其是否容易受到攻擊。


4.2.2  漏洞利用

1. 開啟NTLM中繼

執行ntlmrelayx.py指令碼進行NTLM中繼攻擊,設定SMB伺服器並將認證憑據中繼到LDAP協議。其中--remove-mic選項用於清除MIC標誌,delegate-access選項將中繼計算機帳戶(這裡即輔助域控制器)的訪問許可權委託給攻擊者。


圖片


2. 執行printerbug.py指令碼,觸發SpoolService的bug


圖片


3. printerbug.py指令碼執行成功後,將觸發輔助域控制器(SDC)回連攻擊主機,回連使用的認證使用者是輔助域控制器(SDC)本地計算機賬戶AAA/USER1$。ntlmrelayx.py透過ldaps將該使用者賬戶中繼到域控伺服器(DC),因為這種攻擊方式下所冒用的身份AAA/USER1$並不在Exchange Windows Permissions組內,不具有修改ACL許可權,但是可以透過此身份在DC上新增一個新計算機賬戶(下圖中FAXSEEZU$), 並修改其約束委派授權,授予它對受害計算機(輔助域控制器)的委派許可權。


圖片


圖片


4. 使用impaket中的getSP.py指令碼,透過-impersonate引數模擬使用者admin2請求其票證,儲存為ccache,admin2使用者為Domain Admins組的成員,具有對輔助域控制器(SDC)的管理與訪問許可權。


圖片


5. 使用上一步驟中儲存的Kerberos服務票證,我們可以在目標主機(SDC)上模擬admin2身份,從而執行任何操作,例如使用secretsdump轉儲雜湊值。


圖片



五.  防禦建議

1. 安裝官方補丁:

https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2019-1040

https://nsfocusglobal.com/windows-ntlm-tampering-vulnerability-cve-2019-1040-threat-alert/

安裝完後需要重啟伺服器


2. 其他緩解措施

1) 強制執行SMB簽名,開啟域中所有伺服器的強制SMB執行功能 (在 Windows 域環境下,預設只有域控伺服器開啟了強制 SMB 簽名)

2) 儘量不使用NTLMv1,因為NTLMv1的安全性較低,可以透過設定GPO來完全禁止

3) 啟用所有域控伺服器的強制 LDAPS Channel Binding 功能 (此功能預設不啟用。啟用後有可能造成相容性問題。)

4) 啟用所有域控伺服器的強制 LDAP Signing 功能,防止LDAP中的NTLM中繼 (此功能預設不啟用。啟用後有可能造成相容性問題。)

5) 開啟EPA,防止Web伺服器上的NTLM中繼,強制所有Web伺服器(OWA,ADFS)只接受EPA的請求

6) 開啟所有重要伺服器(比如所有 Exchange 伺服器)上相關應用的Channel Binding 功能(如 IIS 的 Channel Binding 功能)

7) 減少使用NTLM,即使是安全配置和完全修補的NTLM也比Kerberos更不安全



六.  參考連結

https://www.freebuf.com/vuls/207399.html

https://xz.aliyun.com/t/5418

https://www.anquanke.com/post/id/180161



相關文章