從活動目錄獲取域管理員許可權的各種姿勢

wyzsk發表於2020-08-19
作者: 修碼的馬修 · 2016/01/12 12:38

Author:Sean Metcalf

From: Attack Methods for Gaining Domain Admin Rights in Active Directory

0x00 前言


對於一個攻擊者來說,有很多方法能在活動目錄中獲得域管理員許可權。這篇文章旨在介紹一些當下比較流行的方法,這裡介紹的方法都基於一個前提——攻擊者已經獲得內網中一臺(或幾臺)機器的許可權並且獲得了普通域使用者的賬戶。

0x01 SYSVOL中的密碼和組策略


這種方法是最簡單的,因為不需要特殊的工具就能實現。攻擊者只需要開啟檔案管理器搜尋 SYSVOL DFS 共享中的XML檔案。大多數時候,groups.xmlscheduledtasks.xmlServices.xml檔案中都會含有使用者憑證。

SYSVOL 是活動目錄中的全域共享資料夾,所有認證使用者都擁有讀許可權。SYSVOL 中包含了登陸指令碼,組策略以及其他域控制器需要需要用到的資料(因為SYSVOL會在所有域控之間自動同步和共享)。所有的組策略檔案會存放在:\\<DOMAIN>\SYSVOL\<DOMAIN>\Policies\

當一個GPP(組策略)被新建,就會有相關的組策略檔案在SYSVOL中被建立,如果提供了密碼,組策略檔案中會同時包含AES-256位的加密後的密碼資料,這加密似乎是足夠安全了。

除了Windows 2012之前的某些系統,微軟在MSDN中提供了解密所需要的AES私鑰。因為認證使用者(信任域中的使用者)都具有SYSVOL的讀許可權,任何人都可以搜尋包含“cpassword”欄位的XML檔案,而裡面正好有AES加密後的密碼。

GroupPolicyPreferences-Password-XMLFileContents

有了這類XML的訪問許可權,攻擊者可以用AES私鑰解密GPP密碼。PowerSploit的Get-GPPPassword函式被認為最好用的攻擊實現,下面的截圖展示了一個類似的PowerShell函式正在解密在SYSVOL中找到的XML檔案中包含的密碼。

GroupPolicyPreferences-Decrypted-Password

其他檔案型別,例如.vbs.bat也可能包含嵌入的密碼(經常是明文)。

VBS-Scripts-In-SYSVOL

你可能會覺得已經發布的補丁能夠防止使用者憑證被放置在組策略配置檔案中,所以這個問題得到了證明。事實證明,筆者在滲透測試中仍然能在SYSVOL目錄中中找到使用者憑證。

對策:

  • 在每臺電腦上都安裝上KB2962486補丁,可以防止新的使用者憑證被放到組策略配置檔案當中。
  • 刪除SYSVOL目錄中包含密碼的GPP xml檔案。
  • 不要把密碼放在所有認證使用者都有權訪問的檔案當中。

關於這種攻擊方法的更多資訊可以參考這篇文章:Finding Passwords in SYSVOL & Exploiting Group Policy Preferences

0x02 針對沒打補丁的域控利用MS14-068漏洞


距離MS14-068的補丁KB3011780釋出已經有超過一年時間了,也出現了很多方法來確保針對MS14-068的攻擊被檢測和識別出來。然而這並不意味著域控就一定打上了補丁或者配置了監測系統。很多公司機構在補丁釋出後的一個月內打上了補丁;但是不能保證每臺新上線的域控都在被配置好之前就打上了補丁。

感謝Gavin Milard(@gmillard on Twitter),我們有了以下的圖,很好地解釋這個漏洞。

Kerb-MS14-068-twitterpic-BoardingPass-Pilot

簡單來講,透過MS14-048,攻擊者可以在五分鐘內重寫有效的Kerberos TGT 認證票據並且成為域管理員(企業管理員)。攻擊原理就像上面的機票一樣,隨便寫上“飛行員”字樣就能透過認證,登上飛機就能理所當然地坐到駕駛艙冒充飛行員享受咖啡福利。

第一個EXP在補丁釋出後的兩週後被公佈,叫做PyKEK,作者是Sylvain Monné (@BiDOrD). PyKEK是一個能在所有安裝了python的機器(Raspberry Pi?)上執行的指令碼,只要機器能連線到一臺沒打補丁的域控就能發揮作用。它會生成一個ccache檔案。用Mimikatz可以把這個生成的ccache檔案注入到記憶體當中,攻擊者就能成為域管理員!有了這個票據,就能被允許訪問域控上面的admin$共享!

Mimikatz-PTC-PyKEK-ccacheFile

限制條件:打了補丁或者域中有Win2012/2012R2 域控

利用MS14-068的步驟:

  1. 作為普通使用者向域控請求一個沒有PAC的Kerberos TGT認證的票據,域控會返回一個TGT(不包含PAC,PAC通常包含有使用者組中的成員關係)
  2. 生成一個偽造的PAC,因為沒有金鑰,所以生成的PAC“被標記”有MD5演算法,而不是帶有域使用者密碼資料的HMAC_MD5型別。
  3. 把偽造的PAC結合上TGT構造認證資料,作為TGS服務的一部分傳送到域控。
  4. 域控會混淆構造的資料,所以直接丟棄之前使用者傳送沒帶有PAC的TGT,然後新構造一個TGT並用自己的認證資料插入到偽造的PAC當中,再把新TGT傳送給使用者
  5. 這樣帶有偽造PAC的TGT就能使使用者成為有漏洞域控上的域管理員。

Benjamin Delpy(Mimikatz 的作者)寫了一個MS14-068的利用工具,叫Kekeo,是PyKEK的升級版。它能夠找到並定位有漏洞的域控,在打了補丁和有2012/2012R2域控的情況下仍能奏效。實現的步驟和PyKEK基本相同,不過在最後加了一個步驟,以此獲得一個能在域中所有域控利用的TGT。它利用攻擊生成的TGT來獲取一個到處都能用的TGT。

MS14068-01

對策:

  • 確保機器在執行DCPromo命令(被提升為域控)前就安裝上了KB3011780補丁。一個快速簡單的方法是用PowerShell命令:get-hotfix 3011780
  • 同時,為機器開啟自動安裝關鍵補丁的選項。

0x03 Kerberos TGS 服務 Ticket離線破解(Kerberoast)


Kerberoast 能夠在不對目標系統傳送任何資料的情況下用普通使用者身份從活動目錄中提取服務的賬戶憑證。人們總是設定弱口令,所以這種攻擊往往能夠得逞。這種攻擊能夠成功的原因是:大多數服務賬戶的密碼都和域的密碼最短長度限制一樣長(通常是10個或12個字元),這意味著即使是採用暴力破解的方式,所花費的時間也不太可能超過密碼過期時限。有的服務賬戶甚至還沒有設定密碼過期時限,所以同一個密碼能夠用個一年半載的也不足為奇。更好玩的是,大多數服務賬戶都有許可權過大的問題,通常還是域管理員組的成員,有著對活動目錄的全部許可權(儘管有時候服務賬戶只需要修改某些特定物件的屬性或者只需在特定服務上擁有管理許可權)。

注意:這種攻擊對Windows系統管理的目標服務不會成功,因為這類服務會在活動目錄中對映成為一個有著128位長密碼的賬戶,這麼長的密碼不可能在短時間內破解出來。

攻擊的步驟包括為目標的服務賬戶的伺服器主體名稱(Service Principle Name—— SPN)請求一個Kerbero服務票據 (TGS) 。這裡會採用一個有效的使用者認證票據(TGT)來請求一個或幾個執行在伺服器上的目標服務票據。域控不會檢測使用者是否真正連線到了這些資源上(即使使用者可能真的有許可權訪問)。域控會在活動目錄中查詢SPN並且用SPN關聯的使用者賬戶把票據進行加密,以此賦予使用者訪問服務的許可權。請求的Kerbero服務票據的加密型別是 RC4_HMAC_MD5, 這意味著服務賬戶的NTLM密碼雜湊會被用來加密服務票據。所以Kerberoast能夠透過嘗試不同的NTLM雜湊來解開kerberos票據,一旦票據被成功解開,它的密碼也就到手了。

注意:獲得服務票據不需要提權,同時也不會傳送資料到目標機器。

Kerberoast-03

Tim Medin 在 DerbyCon 2014 上作了相關的報告:“Attacking Microsoft Kerberos Kicking the Guard Dog of Hades” (幻燈片 & 影片),同時也釋出了Kerberoast Python TGS cracker

對策:

  • 對付這種攻擊最有效的對策其實是保證服務賬戶的密碼在25位以上。
  • 託管服務賬戶(Managed Service Accounts)和使用者組託管服務賬戶(Group Managed Service Accounts)是能夠確保賬戶密碼足夠長、足夠複雜、並且定期更改。一些第三方的密碼管理器也是管理服務賬戶的不錯的解決方案。

關於這種攻擊方法的更多資訊可以參考這篇文章:Cracking Kerberos TGS Tickets Using Kerberoast – Exploiting Kerberos to Compromise the Active Directory Domain

0x04 “瞞天過海”


我把下面這一部分叫做“瞞天過海”,因為很難把這類攻擊進行具體的歸類。可以把它比作一種舞蹈。拿下一臺機器,提權,匯出憑證。然後用憑證跳到另外的機器上,提權,再拿下更多的憑證。

這種攻擊在域中通常能很快見效,因為大多數活動目錄管理員都是用一個賬戶登陸到一臺機器上,並切會用到RunAs(使得管理員的憑證留在了本地機器上面)或者用RDP連線到一臺伺服器(憑證就能透過鍵盤記錄器記錄下來)。

  • 第一步: 攻下一臺機器,透過提權漏洞獲取本地管理員許可權。用Mimikatz或者其他類似的工具匯出最近登陸過本機的使用者憑證。
  • 第二步: 用本地管理員的憑證嘗試登陸到別的機器上。這常常很有效,因為本地管理員的賬戶密碼曾經很難被配置正確(現在你可以用微軟提供的 LAPS)。假如很多(甚至是所有)機器上都用著同樣的賬戶密碼,那麼得到一組賬戶密碼就相當於擁有了所有機器的管理員許可權。你可以用憑證登陸到不同的機器上,直到找到域管理員的憑證。用本地賬戶登陸到不同機器是一種理想的做法,因為這樣的登陸不需要連線到域控上面,也很少有公司機構把機器的安全日誌都傳送到日誌中心繫統(SIEM)。
  • 第三步:利用獲取的憑證登陸到伺服器上以獲得更多的憑證。執行著像Microsoft Exchange Client Access Servers(CAS), Microsoft Exchange OWA, Microsoft SQL 和 Terminal Services(RDP)這類服務的伺服器,很可能在記憶體中存留大量使用者的憑證(或者是一些有域管理員許可權的服務)。
  • 第四步:收網!

有了域管理員的憑證,就沒什麼能夠阻止攻擊者匯出所有的域憑證,並在內網中維持許可權。

如果有服務以域管理員的許可權在所有的工作站或伺服器上執行,只需要攻下一個臺機器就相當與攻下了整個域活動目錄。

通常來說,透過PowerShell來進行遠端管理是一個很好的方法,因為PowerShell採用的是的是網路登陸(不會有憑證儲存在遠端機器的記憶體中)。這很好,微軟也把RDP管理模式逐步移向這種模式。還有種方法能夠用PowerShell連線到遠端系統進行管理,並且能夠透過CredSSP呼叫憑證。問題是CredSSP不夠安全。

Joe Bialek 在PowerShellMagazine.com中寫道:

管理員用PowerShell遠端管理時遇到一個很常見的問題就是“雙躍點”問題。管理員用PowerShell遠端連線到伺服器A上面,並且嘗試在從伺服器A連線到伺服器B。這種情況下第二次連線不會成功。

原因是:預設情況下,PowerShell遠端認證的方式是“網路登陸”。網路登陸只需要向伺服器證明你擁有登陸的憑證而不需要把憑證傳送過去(詳情見:KerberosNTLM認證)。既然遠端伺服器沒有你登陸的憑證,那麼當你進行一次雙躍點登陸(從伺服器A登陸到伺服器B)的時候,結果當然會失敗。

為了解決這個問題,PowerShell提供了CredSSP(Credential Security Support Provider)選項。當選擇了CredSSP模式,PowerShell不會進行“網路登陸”,而是進行“網路明文登陸”。網路明文登陸的工作原理是直接把使用者的密碼明文傳送到遠端伺服器上。透過這種方式,伺服器A獲得了使用者的明文密碼,所以也能用它來登陸到伺服器B,雙躍點登陸成功。

更新:以上測試是在Windows Server 2012上面進行的。微軟已經在Windows Server 2012R2和Windows8.1中限制了在記憶體中存放明文憑證。這意味著使用Mimikatz的攻擊者們可能將不會直接看到有明文密碼。不過攻擊者仍能看到NT密碼雜湊和Kerberos TGT,這兩者都能和密碼產生同樣的效果,可以被用於網路的登陸認證。

另外,即使明文憑證沒有被存放在記憶體當中,它依然被髮送到了遠端伺服器。攻擊者能夠向本地安全認證子系統服務(LSASS.exe)注入惡意程式碼並且在傳輸過程中截獲明文密碼。所以即使用Mimikatz找不到明文密碼了,攻擊者還是會有辦法獲得它。

綜上所述,不要用CredSSP就對了。

還有一個類似的問題就是WinRM(PowerShell遠端操作用到的東西)的“AllowUnencrypted”配置。把這個值設為“True”會禁用掉系統WinRM連線時的加密,包括PowerShell的遠端操作時的密碼加密。

從雜湊傳遞攻擊(Pass-the-hash)到憑證傳遞攻擊(Pass-the-Credential)

大多數人都聽說過雜湊傳遞攻擊(PtH),它透過找到賬戶相關的密碼雜湊(通常是NTLM密碼雜湊)來進行攻擊。有趣的是有了PtH,就不必費時間破解密碼的雜湊值來獲得密碼明文了,因為在Windows網路中,雜湊值就是用來證明身份的(知道了使用者名稱和密碼雜湊值就能夠透過驗證)。微軟自家的產品和攻擊顯然不會支援這種攻擊,所以我們需要第三方工具來完成任務,例如:Mimikatz。

一旦攻擊者找到了密碼雜湊,很多大門都會向他們開啟,但是他們可不只有PtH這一種選擇。

票據傳遞攻擊(Pass-the-Ticket——PtT)是透過抓取現有的Kerberos票據來冒充一個使用者。Mimikatz能夠抓取當前使用者的Kerberos票據,也能抓取每一個透過系統認證的使用者的所有票據(如果配置了Kerberos委派機制的不受限訪問,這可成了大問題)。一旦獲得了Kerberos票據,攻擊者就能用Mimikatz來傳遞它並訪問到目標資源(當然是在Kerberos票據的有效時間內)。

超-雜湊傳遞攻擊(OverPass-the-Hash)也就是秘鑰傳遞攻擊,透過獲得的密碼雜湊來獲得Kerberos票據。這種技巧會清除當前使用者的所有Kerberos秘鑰(雜湊值)然後把得到的雜湊值注入到記憶體當中,以此請求獲得Kerberos票據。下次訪問資源需要用到Kerberos票據的時候,被注入的雜湊值(現在是記憶體中的Kerberos秘鑰)會被用來請求Kerberos票據。Mimikatz提供了實現這種攻擊的功能,相比起PtH,這是更加隱秘的一種手段,因為現在已經有好幾種方法能夠檢測到PtH。

注意: 如果獲得雜湊值的型別是NTLM,Kerberos票據的型別是RC4.如果雜湊型別是AES,Kerberos票據型別也會是ABS。

其實還有其他種類的盜取憑證的手段,不過這幾種是最常見的:

  • 雜湊傳遞攻擊:抓取雜湊值並用來訪問資源。直到使用者改密碼雜湊值都是有效的。
  • 票據傳遞攻擊:抓取Kerberos票據用來訪問資源。在票據有效期限內票據都會有效(一般是7天)。
  • 超-雜湊傳遞攻擊:用密碼雜湊值來獲得Kerberos票據。雜湊值在使用者改密碼之前都有效。

對策:

  • 管理員應該為管理事務劃分出專門的管理員機器。管理員的賬戶永遠不要登陸到用來收發郵件和上網的普通機器上。這樣就能降低憑證被盜取的機會。 需要注意的是智慧卡不能夠防止憑證被盜取,因為在訪問資源的時候仍會用到賬戶所對應的密碼雜湊值。智慧卡只能保證正在登陸的使用者擁有智慧卡,一旦被用來登陸系統,智慧卡的兩個驗證因素就會變為一個,就是使用者的密碼雜湊值(被存放在記憶體裡)。還有就是,當賬戶設定為用智慧卡登陸的時候,系統會為賬戶設定一個新的密碼(還永遠不會改變)。
  • 在工作機和伺服器上的所有本地管理員賬戶都應該足夠長,足夠複雜,足夠隨機,可以用微軟 LAPS之類的產品來保證這點
  • 配置組策略來放置本地管理員賬戶透過網路來認證登陸。下面幾條簡單的GPO就能阻止本地賬戶在透過網路登陸(包括RDP),同時也能阻止域管理員和企業管理員登陸到本地。GPO有一些幾條: *禁止以下使用者組從網路登陸到這臺電腦:本地賬戶,企業管理員,域管理員 *禁止以下使用者組從遠端桌面登陸:本地賬戶,企業管理員,域管理員 *禁止以下使用者組本地登陸:企業管理員,域管理員

GroupPolicy-Prevent-LocalAccount-LogonOverNetwork

獲取訪問活動目錄資料庫檔案的許可權(ntds.dit)

活動目錄資料庫(ntds.dit)包含了活動目錄域中所有物件的所有資訊。這個資料庫中的資料會被複制到域中的所有域控。這個檔案照樣包含了所有域使用者和計算機賬戶的密碼雜湊值。只有能登陸到域控上的使用者才能訪問到ntds.dit檔案。

顯然,保護好這個檔案是很重要滴,因為攻擊者訪問它就能導致整個域和目錄林(forest)被攻陷。

下面列出了幾種不用成為域管理員就能獲取ntds.dit資料的方法:

備份路徑(備份伺服器儲存,媒體,網路共享)

攻擊者訪問到域控的備份並在備份共享的ntds.dit檔案安放後門。管理員應該確保所有能透過網路訪問的儲存域備份的目錄都是安全的。只有域管理員可以訪問它們,只要有其他人能訪問,那個人就能搖身一變成為域管理員。

在準備配置成域控的伺服器上找NTDS.dit檔案

DCPromo 中會有一個叫IFA的步驟,也就是“從媒體安裝”,這個步驟可以使伺服器不透過網路來複制域中的資料。這個IFA集是NTDS.dit的複製,它可能出現在為新域控準備的共享目錄中,也可能在還沒配置成域控的伺服器上找到,這樣的伺服器就是不安全的。

有虛擬機器的管理許可權,就能克隆虛擬的域控並離線獲取資料

獲得虛擬域控的訪問權並獲取域中的憑證。你有用VMWare嗎?VCenter的管理員是擁有全部許可權的。有了VCenter的管理員許可權,就能克隆域控直接把資料複製到本地。

在VM被掛起的情況下,還可以從虛擬機器記憶體直接提取LSASS資料。不要小看虛擬機器管理員在虛擬域控上所擁有的能力。

如果你的VCenter管理員組在活動目錄裡,你應該考慮改掉它。

對合適的使用者組賦予恰當的許可權,不要給攻擊者提供透過伺服器管理員許可權給整個活動目錄安裝後門的能力。

你的虛擬機器管理員應該被視作是與管理員(如果有虛擬域控的話)

獲取一個有權登陸域控的賬戶

在活動目錄中有幾個組不應該有登陸域控的預設許可權。

Default-DC-LogOnLocallyGroups

以下是預設有權登陸域控的使用者組:

  • Enterprise Admins (目錄林管理員組)
  • Domain Admins(域管理員組)
  • Administrators
  • Backup Operators
  • Account Operators
  • Print Operators

這意味著如果一個攻擊者能夠拿下Account Operators或者Print Operators中的一個賬戶,整個活動目錄就可能被攻陷,因為這些使用者組有登陸到域控的許可權。

對策:

  • 限制使用者組/賬戶登陸到域控的許可權
  • 避免使用者組/賬戶擁有對活動目錄的全部許可權,尤其是服務賬戶
  • 保護好每一個活動目錄資料庫(ntds.dit)的複製,不要把它放在信任級別低於域控的任何地方。

那麼問題來了,如果一個賬戶被賦予登陸域控的許可權,接下來會發生什麼?

如果一個賬戶有權登陸域控,二話不說當然是把域控的使用者憑證拖下來。

用Mimitaz匯出域中所有憑證

神器Mimikatz能夠從域控中到儲存域中的所有使用者憑證。

Mimikatz-LSADump-LSA

用Mimitaz匯出LSASS記憶體資訊(獲得域管理員憑證)

Mimikatz能夠在不同系統中的LSASS.dmp中匯出LSASS然後提取出登陸過的使用者憑證。在域控上,這樣總能拿到域管理員的憑證。

Mimikatz-Sekurlsa-Minidump

用工作管理員來匯出LSASS記憶體資訊(獲得域管理員憑證)

一旦LSASS被匯出來,Mimikatz就能提取到登陸過的使用者憑證。在域控上,這也總能拿到域管理員的憑證。

TaskManager-DumpLSASS

用NTDSUtil建立媒體安裝集(IFM) (抓取NTDS.dit檔案)

NTDSUtil一個本地執行的針對活動目錄資料庫(ntds.dit)的命令,同時允許為DCPromo命令準備IFM集。IFM是用於DCPromo命令中“從媒體安裝”的步驟的,有了它配置域控時就不需要透過網路從其他域控複製資料。IFM集同時也會在c:\temp目錄下生成的一份NTDS.dit複製。

此檔案可能出現在為新域控準備的共享目錄中,也可能在還沒配置成域控的伺服器上找到,這樣的伺服器就是不安全的。

NTDSUtil-CreateIFM

從NTDS.dit檔案中提取活動目錄域憑證(登錄檔系統單元)

一旦攻擊者有了一份NTDS.dit檔案的複製(還有指定的登錄檔鍵值來解密資料庫檔案中的加密部分),在活動目錄資料庫檔案中的憑證資料就能被提取出來。

一旦攻擊者有了登錄檔系統單一和NTDS.dit 檔案,他就能獲取所有的活動目錄憑證!下面的截圖來自安裝有Impacket python工具的Kali系統。DIT透過Impacket中的secrectdump.py指令碼被匯出。

IMPacket-Dump-Credentials-NTDSdit

在2015年十月,DSInternals.com釋出了一個用於從NTDS.dit匯出使用者憑證(登錄檔系統單元)的PowerShell方法,叫做Get-ADDBAcount(儘管只能用於Windows 8和Windows 2012系統以上,因為早前的系統有bug)。

一但攻擊者匯出了域資料庫,就有很多選擇來維持保留高階許可權,包括建立並使用Golden Tickets,這種方法能在拿下一個域的情況下對整個目錄林(forest)進行攻擊。

參考連結:

0x05 譯後記


drops和zone上已經有很多域滲透相關的資料了,尤其是三好學生發表的一系列文章,在實戰中具有很好的參考意義。翻譯的這篇文章裡面大多數方法的詳細利用步驟都能在drops上找到,文章的意義在於給剛進入內網的同學提供思路和方向。

至於工具方面個人也有一些體會,首先Mimikatz是域滲透中必不可少的神器,就像豬豬俠說的:

擼域控,就是先搞定域裡面的任何一臺機器,想辦法弄到SYSTEM許可權,mimikataz一上,就收工了。
域滲透,mimikataz出來後,幾乎沒有新思路了。

其實思路還是有的,就像上面就提供了不少出了Mimikatz之外的思路。一個新趨勢就是域滲透逐漸在往PowerShell上做文章,攻防兩方都在PowerShell研究出了不少新方法。工具方面一個是PowerTools,集合了很多神奇好用的PowerShell指令碼,包括提權,維持許可權,還有一些SMB相關的攻擊應用等。另一個就是Empire,可謂是PowerShell在後滲透階段的集大成者。

最後不能不提的當然是以上兩個工具作者harmj0y的部落格,上面經常會發布很多域滲透相關的猥瑣思路。

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章