2019年6月11日,Microsoft發佈了六月份安全補丁更新。在該安全更新補丁中,對CVE-2019-1040漏洞進行了修復 。攻擊者利用該漏洞可以繞過NTLM中的MIC(Message Integrity Code)。攻擊者可以修改已經協商簽名的身份驗證流量,然後中繼到另外一臺服務器,同時完全刪除簽名要求。通過該攻擊方式可使攻擊者在僅有一個普通域賬號的情況下,運程控制域中任意機器(包括域控服務器)。

漏洞背景

NTLM中繼是對Active Directory環境最常見的攻擊方式之一。針對此攻擊技術一種重要的緩解措施是進行服務器簽名。當用戶與服務器建立了簽名會話,攻擊者如果無法檢索所需的會話密鑰,就無法劫持會話。但是在默認情況下,只有域控服務器會強制執行SMB簽名,這導致在許多情況下會使得域中其他敏感服務器容易受到攻擊。

圖1 NTLM中繼

在SMB中,通過在NTLM_NEGOTIATE消息中設置”NTLMSSP_NEGOTIATE_SIGN”標誌進行協商會話簽名。如果攻擊者試圖中繼這種NTLM身份驗證,他們將需要確保不協商簽名。一種方法是通過中繼到NTLM消息不管理會話完整性的協議,如LDAPS或者HTTPS。但是這種協議並非每一臺機器都會打開。而SMB協議在局域網中是經常打開的,且存在較多漏洞容易造成代碼執行。因此,NTLM中繼攻擊的重點就在於將SMB身份驗證請求轉發給其他SMB服務器。爲成功執行此類中繼,攻擊者需要修改NTLM_NEGOTIATE消息並取消設置”NTLMSSP_NEGOTIATE_SIGN”標誌。

圖2 NTLM_NEGOTIATE消息指示是否協商SMB簽名

在SMB中,默認情況下,通信的雙方都支持簽名,則必須進行會話簽名。爲了保證在NTLM協商階段不被攻擊者篡改數據,Microsoft在最終的NTLM身份驗證消息中添加了一個額外字段——MIC。但是,微軟對該字段的處理方式存在紕漏:允許無MIC的驗證消息。

MIC(Message Interity Code)消息完整性驗證

NTLM身份驗證由3種消息類型組成:NTLM_NEGOTIATIE,NTLM_CHALLENGE,NTLM_AUTHENTICATE。爲確保在傳輸過程中不會被惡意篡改,在NTLM_AUTHENTICATE消息中添加了一個額外的MIC字段。MIC是使用會話密鑰應用於所有3個NTLM消息的串聯的HMAC_MD5,該會話密鑰只有啓動了認證的賬戶和目標服務器知道。因此,任何試圖篡改其中一條消息的行爲都無法生成相應的MIC,保證傳輸的安全性。

圖3 “MIC”字段可以防止NTLM消息修改

MIC存在於NTLM_AUTHENTICATE消息的’msvAvFlag’字段,標誌0×2表示該消息包括MIC。它應該保護MIC被刪除。但是,微軟Microsoft服務器無法完全執行該機制,而且允許了無MIC的NTLM_AUTHENTICATE消息。這爲後續NTLM中繼攻擊提供了條件。

圖4 ‘flags’字段指示NTLM_AUTHENTICATE消息包括MIC

漏洞分析 4.1 攻擊思路

由於微軟允許無MIC的NTLM_AUTHENTICATE消息,攻擊者可以在獲取到合法的身份驗證後進行中繼。主要是將SMB中繼到LDAP。

首先向Windows服務器(如Exchange)發起身份驗證,在獲得合法的驗證後將該身份驗證通過LDAP中繼到域控服務器,就可以在ActiveDirective中以中繼的受害者權限執行一系列操作。

在Exchange場景下,可以獲得DCSync權限,該種權限是PrivExchange漏洞利用的基礎

在Resource Based Constrained Kerberos場景下,可以利用該種機制獲得受害主機的權限,進而以管理員權限訪問服務器。

對需要中繼的身份驗證的MIC的處理流程如下:

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。

4.2 攻擊途徑

1. 使用任意AD賬戶,通過SMB連接到受害主機Exchange服務器,觸發SpoolService的一個bug。然後使用網上公開的ntlmrelayx.py腳本中繼到LDAP。使用中繼的LDAP身份驗證,攻擊者可以獲得DCSync權限,然後使用DCSync轉儲AD中所有的密碼哈希。

2. 使用任意AD賬戶,通過SMB連接到受害主機Exchange服務器,觸發SpoolService的一個bug。然後使用網上公開的ntlmrelayx.py腳本中繼到LDAP。攻擊者使用中繼的LDAP身份驗證,獲取Resource Based Constrained Kerberos中的相關權限,然後攻擊者以受害主機服務器上的任意用戶進行身份驗證。成功驗證後,可以進一步進行下一步攻擊,甚至控制整個Wshoindows域。

影響範圍

目前受影響的Windows版本:

Windows 10 for 32-bit Systems

Windows 10 for x64-based Systems

Windows 10 Version 1607 for 32-bit Systems

Windows 10 Version 1607 for x64-based Systems

Windows 10 Version 1703 for 32-bit Systems

Windows 10 Version 1703 for x64-based Systems

Windows 10 Version 1709 for 32-bit Systems

Windows 10 Version 1709 for ARM64-based Systems

Windows 10 Version 1709 for x64-based Systems

Windows 10 Version 1803 for 32-bit Systems

Windows 10 Version 1803 for ARM64-based Systems

Windows 10 Version 1803 for x64-based Systems

Windows 10 Version 1809 for 32-bit Systems

Windows 10 Version 1809 for ARM64-based Systems

Windows 10 Version 1809 for x64-based Systems

Windows 10 Version 1903 for 32-bit Systems

Windows 10 Version 1903 for ARM64-based Systems

Windows 10 Version 1903 for x64-based Systems

Windows 7 for 32-bit Systems Service Pack 1

Windows 7 for x64-based Systems Service Pack 1

Windows 8.1 for 32-bit systems

Windows 8.1 for x64-based systems

Windows RT 8.1

Windows Server 2008 for 32-bit Systems Service Pack 2

Windows Server 2008 for 32-bit Systems Service Pack 2 (Server Core installation)

Windows Server 2008 for Itanium-Based Systems Service Pack 2

Windows Server 2008 for x64-based Systems Service Pack 2

Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core installation)

Windows Server 2008 R2 for Itanium-Based Systems Service Pack 1

Windows Server 2008 R2 for x64-based Systems Service Pack 1

Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)

Windows Server 2012

Windows Server 2012 (Server Core installation)

Windows Server 2012 R2

Windows Server 2012 R2 (Server Core installation)

Windows Server 2016

Windows Server 2016 (Server Core installation)

Windows Server 2019

Windows Server 2019 (Server Core installation)

Windows Server, version 1803 (Server Core Installation)

Windows Server, version 1903 (Server Core installation)

修復建議

1. 由於針對該漏洞的 poc已在網上公開流傳,強烈建議廣大用戶及時安裝微軟針對該漏洞的安全更新補丁:

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

2. 其他緩解措施

以下措施可以在無法及時安裝安全更新補丁時作爲臨時解決方案,爲確保安全,仍然建議廣大用戶在條件允許的情況下及時進行補丁安裝:

1)開啓域中所有服務器的強制SMB 簽名 (在 Windows 域 中 ,默認只有域控服務器開啓了強制 SMB 簽名)

2)對LDAP over TLS強制執行LDAP簽名和LDAP通道綁定來阻止NTLM中繼到LDAP

3)開啓EPA,強制所有Web服務器(OWA,ADFS)只接受EPA的請求

4)開啓所有重要服務器(比如所有 Exchange 服務器)上相關應用的Channel Binding

5)減少使用NTLM

6)如無特殊需求,禁用Printer Spooler服務

參考鏈接

*本文作者:深信服千里目安全實驗室,轉載請註明來自FreeBuf.COMfor攻擊者bit服務器

相關文章