使用 PtH 攻擊 NTLM 認證的 Web 應用

譯文聲明

本文是翻譯文章,文章原作者,文章來源:labs.mwrinfosecurity.com
原文地址: https://labs.mwrinfosecurity.com/blog/pth-attacks-against-ntlm-authenticated-web-applications/


譯文僅供參考,具體內容表達以及含義原文爲準

本文詳細介紹了在Windows/Active Directory環境中使用PtH攻擊NTLM認證的web應用的詳細步驟。該技術細節來源於Alva ‘Skip’ Duckwall 和Chris Campbell在2012年blackhat中名爲“Still Passing the Hash 15 Years Later…”的演講主題。

 

簡介

Windows Active Directory環境的主要優點是它使用Kerberos 或者 NTLM認證來實現企業級單點登錄(SSO)。這些方法通常用於各種企業資源的訪問控制,從文件共享到Web應用程序,例如SharePoint,OWA或用於特定業務的內部Web應用程序。在Web應用程序的方面,IWA(Integrated Windows Authentication)允許用戶通過Kerberos 或者 NTLM認證對Web應用程序進行自動身份驗證,比如用於Web應用程序的Windows SSO。衆所周知,NTLM身份驗證協議的設計可能存在PtH攻擊,用戶使用哈希密碼而不需原始密碼就能進行身份驗證。自1997年開始,這種攻擊的公共工具已經存在,當時Paul Ashton發佈了一個改進的SMB客戶端,該客戶端使用LanMan哈希來訪問網絡共享。

 

背景

多年來,PtH針對Windows環境的攻擊已經得到了充分的證明。下面是選取的一些有價值的參考文獻:

1.     Microsoft的官方文檔詳細說明了在嘗試NTLM身份驗證之前,“客戶端計算出一個哈希密碼,丟棄掉實際密碼”的過程。在Windows環境中可能更有助於理解NTLM身份驗證爲什麼存在PtH攻擊: https://docs.microsoft.com/en-us/windows/desktop/secauthn/microsoft-ntlm

2.     Hernan Ochoa’s的幻燈片討論了PtH最初的工具包:https://www.coresecurity.com/system/files/publications/2016/05/Ochoa_2008-Pass-The-Hash.pdf 。文章講述了一種從2000年開發的針對Windows機器的PtH攻擊方法。

3.     所有關於PtH的文章中,最感興趣的是pth-suite Linux工具(這工具最初的發佈是爲Backtrack Linux編寫的。所有的工具在Kali Linux中都有了新的位置,有一個需注意的例外,對寫這篇博客非常有用,後面會詳細說明): https://passing-the-hash.blogspot.com/

4.     “Pass-the-Hash Is Dead: Long Live LocalAccountTokenFilterPolicy”討論的是本地用戶賬戶的PtH,以及自Windows Vista的對PtH增加的額外限制:https://www.harmj0y.net/blog/redteaming/pass-the-hash-is-dead-long-live-localaccounttokenfilterpolicy/

5.     使用Metasploit中的PsExec模塊利用PtH: https://www.offensive-security.com/metasploit-unleashed/psexec-pass-hash/

6.     Mimikatz中PtH模塊的GitHub文檔:https://github.com/gentilkiwi/mimikatz/wiki/module-~-sekurlsa#pth

我一直對這種攻擊技術感興趣主要是因爲可以使用PtH攻擊NTLM認證的Web應用。由於Windows Active Directory環境無處不在,大量的企業內部Web應用都用此驗證方案進行登陸,允許從公司工作站無縫SSO(Single Sign-On)到公司資源。因此,如果能夠在Windows環境中對這些網站完成PtH攻擊,就可以在後續對其進行更加深入有效的利用。當一個域名全部使用這種方案時,攻擊的影響就非常明顯了,比如一個給定域名在完整域名hashdump之後,會包含所有員工用戶賬戶相關的NT哈希。在這種情況下,PtH不需要破解任何哈希密碼就可以模擬任意公司員工登陸。這意味着即使對於那些具有安全意識的用戶,他們可能使用了20多個字符長度的密碼,也無法避免攻擊者在企業的Web應用程序上模擬登陸。

 

使用PtH攻擊NTLM認證的Web應用

那麼實際中如何對NTLM認證的網站進行攻擊?很長一段時間以來,我用谷歌搜索這個主題的結果,並沒有找到對這種攻擊方法詳細的介紹(大約在2015-2018年)。在研究Kali Linux的PtH工具集(pth-suite)時,有個很奇怪的問題。大部分原來的pth-suite工具在2015年整合到了Kali Linux中,我之前提到的有一個不同,就是pth-firefox,顧名思義就是用於修改Firefox中NTLM認證代碼以便能夠允許Pth的工具。由於這些Linux工具對我沒什麼用,我就把注意力轉移到了研究在Windows主機上使用Mimikatz進行同樣的攻擊的技術上。

在我自己發現一個可用的技術之後,我最近又偶然發現了由Alva ‘Skip’ Duckwall 和Chris Campbell在Blackhat 2012發表的“Still Passing the Hash 15 Years Later…”幻燈片的第30頁。它詳細介紹了一種方法,在使用Hernan Ochoa的Windows憑據編輯器(WCE)直接注入詳細NT哈希到內存後,使IE(或者其他使用Windows內置“Internet Options”的瀏覽器)能夠通過IWA進行認證。他們在演講中的第18分29秒給出了這種技術的演示。我花了很多時間才找到這些信息,併爲實際利用的相關步驟寫了文檔,這篇博客的後續內容將介紹在Windows10主機中如何使用Mimikatz進行攻擊。

 

攻擊

配置環境

爲了演示使用NTLM身份驗證的Web應用程序,我是用了Exchange 2013服務器,配置爲專門使用IWA進行OWA。在Exchange服務器上運行PowerShell配置命令如下:

Set-OwaVirtualDirectory -Identity “owa (Default Web Site)” -FormsAuthentication $false -WindowsAuthentication $true

Set-EcpVirtualDirectory -Identity “ecp (Default Web Site)” -FormsAuthentication $false -WindowsAuthentication $true

其它預先準備的條件:

l  Exchange服務器已加入test.com域。在此域上,使用複雜的密碼和相應的郵箱創建名爲TESTpath的用戶。計算此用戶密碼的NT哈希值,以便稍後攻擊使用。NT哈希生成如下:

python -c 'import hashlib,binascii; print binascii.hexlify(hashlib.new("md4", "Strong,hardtocrackpassword1".encode("utf-16le")).digest())'

57f5f9f45e6783753407ae3a8b13b032

l  在此之後,在未入域的Windows 10主機上下載最新版本的Mimikatz,該主機與Exchange服務器連接的網絡相同。我們爲了能夠使用Exchange服務器的域名而不是IP地址,將此獨立計算機上的DNS服務器設置爲test.com的域名控制器。

攻擊

假設我們的OWA Web應用程序可以在https://exchange.test.com/owa上訪問,通常瀏覽到OWA會有以下提示:

 

NTLM Prompt when no Credentials are Injected into Memory

因爲計算機在內存中沒有任何域憑據,從網站收到的WWW-Authenticate頭指定它可以接受NTLM身份驗證。

以管理員身份運行Mimikatz,我們可以在TESTpth用戶的上下文中啓動命令提示符,方法是使用Mimikatz中的Pass-the-Hash模塊-sekurlsa::pth-並提供用戶的NT哈希作爲參數:

privilege::debug

sekurlsa::pth /user:pth /ntlm:57f5f9f45e6783753407ae3a8b13b032 /domain:TEST /run:cmd.exe

這樣不會改變計算機的本地權限,但是如果我們嘗試從新生成的命令提示符訪問任何網絡資源,它將在我們注入的證書的上下文中完成。

 爲了確保我們的瀏覽器在這些注入的憑據下運行,我們在命令提示符中通過運行“C:Program Filesinternet exploreriexplore.exe”這個命令生成IE進程

 檢查“Internet選項”對話框中“本地Intranet”區域的“安全設置”,我們可以看到默認情況下,只對Intranet區域中的網站自動進行身份驗證(使用SSO)。如下圖所示:

 

Intranet Zone Options

因此,爲了在Windows上使用PtH攻擊Internet Explorer,必須將目標站點添加到“本地Intranet區域”。可以使用一個單獨的通配符域來代替單獨添加網站到這個域,在這種情況下,“*.test.com”將匹配“Test.com”的所有子域。配置如下面的截圖:Sites in Intranet Zone

 

配置完成後,當瀏覽到https://exchange.test.com/owa。TESTpth用戶將通過NTLM認證自動進行身份驗證,然後OWA加載成功。

 

Authenticated to OWA

 

潛在的影響

在域名泄露之後,對任何支持IWA的公司,PtH攻擊Web應用程序將變得非常高效,可以模擬任何員工獲取權限。雖然這可能主要包括的是微軟Web服務,比如SharePoint和OWA(如果IWA是專門啓用的),但是各種定製的內部財務程序,包括那些用來外部支付的應用程序,也是一樣的。現在行業開始轉向雲服務環境,通常涉及ADFS聯合身份驗證,一般默認情況下,ADFS在提供Internet explorer用戶代理時支持IWA。在這種情況下,意味着可以通過PtH訪問公司的雲端資源。

 

建議

雖然這篇文章的主要目的不是討論保護Windows Active Directory環境的問題,但我們不能只在一個點上說問題,應該給感興趣的人提供一些解決這些攻擊的更深層次的思考。更多的細節沒有在這篇文章討論,可以在以前的文章中找到:Planting the Red Forest: Improving AD on the Road to ESAE.

Windows環境中的Pth問題無法自己本身解決。Active Directory用於SSO的兩種協議都能發生Pth類型的攻擊。最好的建議就是首先要防止密碼哈希和Kerberos密鑰的泄露。最重要的是域名控制器,域管理員控制,或其他在Active Directory作用包含保存憑據信息的部分不被泄露,這些都將直接導致所有存儲的密碼哈希和Kerberos密鑰的泄露。在Windows10和Server 2016中,可使用Credential Guard來保護內存中保存的憑據信息不受到竊取攻擊。

在單獨查看Web應用程序的IWA時,確保在登陸過程中使用多重身份驗證(MFA)會有很好效果。有一個特例,在ADFS和Office 365一起使用時,通過IWA進行初始身份驗證,爲了完整整個驗證還需要請求第二個因素,之後才能授權訪問公司資源。但不幸這種方法不能通用的解決Pth問題,因爲不是所有協議都支持它,比如SMB不支持MFA,但還提供允許遠程代碼執行的功能,這就使攻擊者可以不受阻礙地使用PtH在企業環境中橫衝直撞。

 

最後說明:Kerberos認證的 “PtH”

PtH背後的概念是,一旦憑證存儲被泄露,就可以使用被盜存儲的憑證材料(絕不應該是明文密碼),模擬用戶進行身份驗證,而無需獲取該用戶的相應明文密碼。

在參考Microsoft關於實現Kerberos協議的文檔時,描述瞭如何使用“Kerberos與身份驗證”來獲取Kerberos票證授權(TGT)。這個過程要求用戶給域控制器發送一個“驗證信息”,使用從用戶登錄的密碼派生的主密鑰加密。然後,該文檔解釋了當DC收到TGT請求時,“它在其數據庫中查找用戶,獲取關聯用戶的主密鑰,解密預身份驗證數據,並評估內部的時間戳。”這意味着祕鑰本身用於用戶的身份驗證而不是作爲用戶的明文密碼。用戶的密碼派生祕鑰存儲在AD數據庫中,意味着如果此數據庫遭到破壞(比如:當攻擊者獲得與管理員權限時候),則可以恢復存儲的祕鑰以及用戶存儲的NT哈希。由於只需要存儲的祕鑰來創建有效的驗證信息,而Kerberos身份驗證的作用就是“傳遞祕鑰”。Alva Duckwall和Benjamin Delpy將此攻擊稱爲“超越哈希”,而surklsa::pth Mimikatz模塊只支持使用Kerberos密鑰來編寫Kerberos預認證請求。

當然這意味着Web應用程序或任何其他公司支持直接使用AD進行Kerberos身份驗證,則可以使用OTH對其進行攻擊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章