結合NTLM中繼和Kerberos委派實現域成員機器的提權
在上個月發表文章中,我們詳細介紹了無約束委派方面的安全問題 ;在本文中,我們將討論另一種型別的Kerberos委派:基於資源的約束委派。需要說明的是,本文的內容以Elad Shamir發表的關於Kerberos的相關研究 為基礎,並結合了我們自己的NTLM研究,提出了一種新型的攻擊技術:如果我們與攻擊物件位於同一網段中,無需任何憑據,就可以在活動目錄中的任意Windows計算機上以SYSTEM許可權執行程式碼。實際上,這只是濫用活動目錄不安全的預設配置的另一個示例,並沒有利用任何新型的漏洞。
攻擊過程概述
如果攻擊者位於本地網路中,無論是物理上還是通過受感染的工作站連線至本地網路,只要網路中尚未使用IPv6協議,他們就可以利用mitm6 接管DNS系統。執行該攻擊時,還可以通過偽造WPAD位置並請求身份驗證來使用惡意代理,這樣,攻擊者就可以通過HTTP完成計算機帳戶和使用者的身份驗證了。關於這種攻擊手法,去年我曾在一篇文章 中給出了詳細的介紹。
我們可以藉助於ntlmrelayx將相關的NTLM身份驗證資料中繼到LDAP(除非應用了相應的防禦措施),並以受攻擊的計算機帳戶的身份進行相關的身份驗證。對於該計算機帳戶來說,我們可以通過LDAP修改其中的某些屬性,其中包括 msDS-AllowedToActOnBehalfOfOtherIdentity屬性。該屬性用於控制哪些使用者可以通過Kerberos模擬來獲取活動目錄中的任意帳戶的身份。這個概念稱為基於資源的約束委託,Elad Shamir 和Harmj0y 對此專門進行了詳細的描述。因此,在中繼計算機帳戶時,可以使其變身為活動目錄中的帳戶,並授予自己模擬該計算機上的使用者的許可權。然後,我們就能夠以具有高許可權的使用者的身份連線到相關的計算機,並執行程式碼、轉儲雜湊值,等等。這種攻擊的優點是,它能在預設配置下進行,並且不需要任何活動目錄相關的憑據。
沒有憑據,就不會出現這類安全問題
對於已經讀過Elad的部落格的讀者來說,很可能已經注意到,為了發動S4U2Proxy攻擊,需要先控制相應的計算機帳戶(或任何其他具有Service Principal Name的帳戶)。預設情況下,活動目錄中的任何使用者最多可以建立10個計算機帳戶。有趣的是,這一限制對使用者帳戶無效,而且可以通過現有的計算機帳戶來完成! 如果可以讓任何使用者或計算機通過NTLM中繼,則可以使用ntlmrelayx來建立計算機帳戶:
在這裡,我們需要通過TLS中繼到LDAP,因為系統禁止通過未加密的連線來建立帳戶。這些計算機帳戶憑證可用於完成活動目錄中的各項事務,例如查詢域資訊甚至執行BloodHound:
中繼和配置委派
下面,讓我們進入攻擊階段。首先,我們需要啟動mitm6來接管目標系統上的DNS服務,就這裡來說,目標就是ICORP-W10(一個已打全補丁的預設Windows 10系統),同時,我們的攻擊將僅限於該主機:
sudo mitm6 -hw icorp-w10 -d internal.corp --ignore-nofqnd
需要注意的是,該主機通過DHCPv6請求IPv6地址,或者開始請求WPAD配置的時候,通常需要花費一點時間。所以,對於我們來說,最好的攻擊時機是受害者重新啟動或重新插入網路電纜的時候,因此,清晨可能是執行該攻擊的最佳時間。無論如何,您都必須要有耐心。然後,我們還需要藉助–delegate-access引數來啟動ntlmrelayx,以發動這種委派攻擊,同時,還需使用-wh attacker-wpad引數,以發動WPAD欺騙,進而傳送身份驗證請求:
ntlmrelayx.py -t ldaps://icorp-dc.internal.corp -wh attacker-wpad --delegate-access
稍後,通過執行mitm6就會看到,受害者將作為我們為WPAD主機設定的DNS伺服器上線:
我們看到,ntlmrelayx會接收連線,建立一個新的計算機帳戶,並授予它針對受害計算機的委派許可權:
接下來,我們可以使用來自impacket 的getST.py指令碼,完成所有S4U2Self和S4U2Proxy方面的相關操作。您需要從這裡 獲得最新版本的impacket,以支援基於資源的委派。在這個示例中,我們將模擬使用者admin,該使用者是Domain Admins組的成員,因此,在ICORP-W10上具有相應的管理訪問許可權:
現在,我們為使用者admin獲取了相應的Kerberos服務票據,該票據是對cifs/icorp-w10.internal.corp有效的。這隻允許我們將該使用者模擬為特定主機,而無法模擬網路中的其他主機。藉助於該票據,我們就可以在目標主機上執行任何操作了,例如,使用secretsdump轉儲雜湊值:
這樣的話,攻擊者就可以完全控制受害者的工作站了。
其他濫用途徑
在本文中,我們重點介紹瞭如何使用mitm6和WPAD執行完全無需藉助任何憑證的中繼攻擊。實際上,通過HTTP連線到被Windows視為內網主機的任何連線,都可以達到同樣的目的(前提是啟用了Intranet自動檢測)。Elad曾在其部落格中詳細如何使用WebDAV在主機上利用此漏洞。另一個攻擊途徑是藉助PrivExchange ,因為它會讓Exchange以SYSTEM身份進行認證,除非安裝了最新的修補程式。
相關工具
NtlmRelayx的更新版本可以從這裡 下載;一旦這個分支合併到主儲存庫中,我將更新本文。
緩解措施
由於該攻擊涉及到多個元件,因此,我們可以採用多種緩解措施。
針對mitm6的防禦措施
我們都知道,即使在純IPv4的環境中,mitm6也能濫用Windows來查詢IPv6地址。如果組織內部沒有使用IPv6的話,則防禦mitm6濫用的最佳方法是通過Windows防火牆的組策略阻止DHCPv6流量和傳入路由器廣告。不過,完全禁用IPv6可能會產生不必要的副作用。將以下預定義規則設定為“Block”而不是“Allow”,就能防禦這種攻擊:
(Inbound) Core Networking – Dynamic Host Configuration Protocol for IPv6(DHCPV6-In) (Inbound) Core Networking – Router Advertisement (ICMPv6-In) (Outbound) Core Networking – Dynamic Host Configuration Protocol for IPv6(DHCPV6-Out)
針對WPAD濫用的防禦措施
如果公司內部沒有使用WPAD,請通過組策略禁用它,並禁用WinHttpAutoProxySvc服務。關於mitm6的緩解和檢測措施的深入講解,請參閱這篇文章 。
針對LDAP中繼的防禦措施
只能通過啟用LDAP簽名和LDAP通道繫結來緩解針對LDAP和LDAPS的中繼。
針對基於資源的委託濫用
這方面難度較大,因為它是一個合法的Kerberos概念。不過,我們可以通過將Administrative使用者新增到Protected Users組或將其標記為帳戶敏感且無法委派來減少攻擊面,從而阻止通過委派來模擬該使用者。關於基於資源的委託濫用的緩解和檢測方法的詳細介紹,請參閱這裡 。