修碼的馬修 · 2016/01/12 12:38python
Author:Sean Metcalfgit
From: Attack Methods for Gaining Domain Admin Rights in Active Directorygithub
對於一個攻擊者來講,有不少方法能在活動目錄中得到域管理員權限。這篇文章旨在介紹一些當下比較流行的方法,這裏介紹的方法都基於一個前提——攻擊者已經得到內網中一臺(或幾臺)機器的權限而且得到了普通域用戶的帳戶。算法
這種方法是最簡單的,由於不須要特殊的工具就能實現。攻擊者只須要打開文件管理器搜索 SYSVOL DFS 共享中的XML文件。大多數時候,groups.xml
、scheduledtasks.xml
、Services.xml
文件中都會含有用戶憑證。shell
SYSVOL 是活動目錄中的全域共享文件夾,全部認證用戶都擁有讀權限。SYSVOL 中包含了登錄腳本,組策略以及其餘域控制器須要須要用到的數據(由於SYSVOL會在全部域控之間自動同步和共享)。全部的組策略文件會存放在:\\<DOMAIN>\SYSVOL\<DOMAIN>\Policies\
數據庫
當一個GPP(組策略)被新建,就會有相關的組策略文件在SYSVOL中被建立,若是提供了密碼,組策略文件中會同時包含AES-256位的加密後的密碼數據,這加密彷佛是足夠安全了。windows
除了Windows 2012以前的某些系統,微軟在MSDN中提供了解密所須要的AES私鑰。由於認證用戶(信任域中的用戶)都具備SYSVOL的讀權限,任何人均可以搜索包含「cpassword」字段的XML文件,而裏面正好有AES加密後的密碼。promise
有了這類XML的訪問權限,攻擊者能夠用AES私鑰解密GPP密碼。PowerSploit的Get-GPPPassword
函數被認爲最好用的攻擊實現,下面的截圖展現了一個相似的PowerShell函數正在解密在SYSVOL中找到的XML文件中包含的密碼。安全
其餘文件類型,例如.vbs
和.bat
也可能包含嵌入的密碼(常常是明文)。服務器
你可能會以爲已經發布的補丁可以防止用戶憑證被放置在組策略配置文件中,因此這個問題獲得了證實。事實證實,筆者在滲透測試中仍然能在SYSVOL目錄中中找到用戶憑證。
對策:
關於這種攻擊方法的更多信息能夠參考這篇文章:Finding Passwords in SYSVOL & Exploiting Group Policy Preferences
距離MS14-068的補丁KB3011780發佈已經有超過一年時間了,也出現了不少方法來確保針對MS14-068的攻擊被檢測和識別出來。然而這並不意味着域控就必定打上了補丁或者配置了監測系統。不少公司機構在補丁發佈後的一個月內打上了補丁;可是不能保證每臺新上線的域控都在被配置好以前就打上了補丁。
感謝Gavin Milard(@gmillard on Twitter),咱們有了如下的圖,很好地解釋這個漏洞。
簡單來說,經過MS14-048,攻擊者能夠在五分鐘內重寫有效的Kerberos TGT 認證票據而且成爲域管理員(企業管理員)。攻擊原理就像上面的機票同樣,隨便寫上「飛行員」字樣就能經過認證,登上飛機就能理所固然地坐到駕駛艙冒充飛行員享受咖啡福利。
第一個EXP在補丁發佈後的兩週後被公佈,叫作PyKEK,做者是Sylvain Monné (@BiDOrD). PyKEK是一個能在全部安裝了python的機器(Raspberry Pi?)上運行的腳本,只要機器能鏈接到一臺沒打補丁的域控就能發揮做用。它會生成一個ccache文件。用Mimikatz能夠把這個生成的ccache文件注入到內存當中,攻擊者就能成爲域管理員!有了這個票據,就能被容許訪問域控上面的admin$共享!
限制條件:打了補丁或者域中有Win2012/2012R2 域控
利用MS14-068的步驟:
Benjamin Delpy(Mimikatz 的做者)寫了一個MS14-068的利用工具,叫Kekeo,是PyKEK的升級版。它可以找到並定位有漏洞的域控,在打了補丁和有2012/2012R2域控的狀況下仍能奏效。實現的步驟和PyKEK基本相同,不過在最後加了一個步驟,以此得到一個能在域中全部域控利用的TGT。它利用攻擊生成的TGT來獲取一個處處都能用的TGT。
對策:
get-hotfix 3011780
Kerberoast 可以在不對目標系統發送任何數據的狀況下用普通用戶身份從活動目錄中提取服務的帳戶憑證。人們老是設置弱口令,因此這種攻擊每每可以得逞。這種攻擊可以成功的緣由是:大多數服務帳戶的密碼都和域的密碼最短長度限制同樣長(一般是10個或12個字符),這意味着即便是採用暴力破解的方式,所花費的時間也不太可能超過密碼過時時限。有的服務帳戶甚至尚未設置密碼過時時限,因此同一個密碼可以用個一年半載的也不足爲奇。更好玩的是,大多數服務帳戶都有權限過大的問題,一般仍是域管理員組的成員,有着對活動目錄的所有權限(儘管有時候服務帳戶只須要修改某些特定對象的屬性或者只需在特定服務上擁有管理權限)。
注意:這種攻擊對Windows系統管理的目標服務不會成功,由於這類服務會在活動目錄中映射成爲一個有着128位長密碼的帳戶,這麼長的密碼不可能在短期內破解出來。
攻擊的步驟包括爲目標的服務帳戶的服務器主體名稱(Service Principle Name—— SPN)請求一個Kerbero服務票據 (TGS) 。這裏會採用一個有效的用戶認證票據(TGT)來請求一個或幾個運行在服務器上的目標服務票據。域控不會檢測用戶是否真正鏈接到了這些資源上(即便用戶可能真的有權限訪問)。域控會在活動目錄中查找SPN而且用SPN關聯的用戶帳戶把票據進行加密,以此賦予用戶訪問服務的權限。請求的Kerbero服務票據的加密類型是 RC4_HMAC_MD5, 這意味着服務帳戶的NTLM密碼哈希會被用來加密服務票據。因此Kerberoast可以經過嘗試不一樣的NTLM哈希來解開kerberos票據,一旦票據被成功解開,它的密碼也就到手了。
注意:得到服務票據不須要提權,同時也不會發送數據到目標機器。
Tim Medin 在 DerbyCon 2014 上做了相關的報告:「Attacking Microsoft Kerberos Kicking the Guard Dog of Hades」 (幻燈片 & 視頻),同時也發佈了Kerberoast Python TGS cracker。
對策:
關於這種攻擊方法的更多信息能夠參考這篇文章:Cracking Kerberos TGS Tickets Using Kerberoast – Exploiting Kerberos to Compromise the Active Directory Domain
我把下面這一部分叫作「瞞天過海」,由於很難把這類攻擊進行具體的歸類。能夠把它比做一種舞蹈。拿下一臺機器,提權,導出憑證。而後用憑證跳到另外的機器上,提權,再拿下更多的憑證。
這種攻擊在域中一般能很快見效,由於大多數活動目錄管理員都是用一個帳戶登錄到一臺機器上,並切會用到RunAs(使得管理員的憑證留在了本地機器上面)或者用RDP鏈接到一臺服務器(憑證就能經過鍵盤記錄器記錄下來)。
有了域管理員的憑證,就沒什麼可以阻止攻擊者導出全部的域憑證,並在內網中維持權限。
若是有服務以域管理員的權限在全部的工做站或服務器上運行,只須要攻下一個臺機器就至關與攻下了整個域活動目錄。
一般來講,經過PowerShell來進行遠程管理是一個很好的方法,由於PowerShell採用的是的是網絡登錄(不會有憑證保存在遠程機器的內存中)。這很好,微軟也把RDP管理模式逐步移向這種模式。還有種方法可以用PowerShell鏈接到遠程系統進行管理,而且可以經過CredSSP調用憑證。問題是CredSSP不夠安全。
Joe Bialek 在PowerShellMagazine.com中寫道:
管理員用PowerShell遠程管理時遇到一個很常見的問題就是「雙躍點」問題。管理員用PowerShell遠程鏈接到服務器A上面,而且嘗試在從服務器A鏈接到服務器B。這種狀況下第二次鏈接不會成功。
緣由是:默認狀況下,PowerShell遠程認證的方式是「網絡登錄」。網絡登錄只須要向服務器證實你擁有登錄的憑證而不須要把憑證發送過去(詳情見:Kerberos 和 NTLM認證)。既然遠程服務器沒有你登錄的憑證,那麼當你進行一次雙躍點登錄(從服務器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的遠程操做時的密碼加密。
大多數人都據說過哈希傳遞攻擊(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。
其實還有其餘種類的盜取憑證的手段,不過這幾種是最多見的:
對策:
活動目錄數據庫(ntds.dit)包含了活動目錄域中全部對象的全部信息。這個數據庫中的數據會被複制到域中的全部域控。這個文件照樣包含了全部域用戶和計算機帳戶的密碼哈希值。只有能登錄到域控上的用戶才能訪問到ntds.dit文件。
顯然,保護好這個文件是很重要滴,由於攻擊者訪問它就能致使整個域和目錄林(forest)被攻陷。
下面列出了幾種不用成爲域管理員就能獲取ntds.dit數據的方法:
備份路徑(備份服務器儲存,媒體,網絡共享)
攻擊者訪問到域控的備份並在備份共享的ntds.dit文件安放後門。管理員應該確保全部能經過網絡訪問的保存域備份的目錄都是安全的。只有域管理員能夠訪問它們,只要有其餘人能訪問,那我的就能搖身一變成爲域管理員。
在準備配置成域控的服務器上找NTDS.dit文件
DCPromo 中會有一個叫IFA的步驟,也就是「從媒體安裝」,這個步驟可使服務器不經過網絡來複制域中的數據。這個IFA集是NTDS.dit的拷貝,它可能出如今爲新域控準備的共享目錄中,也可能在還沒配置成域控的服務器上找到,這樣的服務器就是不安全的。
有虛擬機的管理權限,就能克隆虛擬的域控並離線獲取數據
得到虛擬域控的訪問權並獲取域中的憑證。你有用VMWare嗎?VCenter的管理員是擁有所有權限的。有了VCenter的管理員權限,就能克隆域控直接把數據拷貝到本地。
在VM被掛起的狀況下,還能夠從虛擬機內存直接提取LSASS數據。不要小看虛擬機管理員在虛擬域控上所擁有的能力。
若是你的VCenter管理員組在活動目錄裏,你應該考慮改掉它。
對合適的用戶組賦予恰當的權限,不要給攻擊者提供經過服務器管理員權限給整個活動目錄安裝後門的能力。
你的虛擬機管理員應該被視做是與管理員(若是有虛擬域控的話)
獲取一個有權登錄域控的帳戶
在活動目錄中有幾個組不該該有登錄域控的默認權限。
如下是默認有權登錄域控的用戶組:
這意味着若是一個攻擊者可以拿下Account Operators或者Print Operators中的一個帳戶,整個活動目錄就可能被攻陷,由於這些用戶組有登錄到域控的權限。
對策:
那麼問題來了,若是一個帳戶被賦予登錄域控的權限,接下來會發生什麼?
若是一個帳戶有權登錄域控,二話不說固然是把域控的用戶憑證拖下來。
用Mimitaz導出域中全部憑證
神器Mimikatz可以從域控中到存儲域中的全部用戶憑證。
用Mimitaz導出LSASS內存信息(得到域管理員憑證)
Mimikatz可以在不一樣系統中的LSASS.dmp
中導出LSASS而後提取出登錄過的用戶憑證。在域控上,這樣總能拿到域管理員的憑證。
用任務管理器來導出LSASS內存信息(得到域管理員憑證)
一旦LSASS被導出來,Mimikatz就能提取到登錄過的用戶憑證。在域控上,這也總能拿到域管理員的憑證。
用NTDSUtil建立媒體安裝集(IFM) (抓取NTDS.dit文件)
NTDSUtil一個本地運行的針對活動目錄數據庫(ntds.dit)的命令,同時容許爲DCPromo命令準備IFM集。IFM是用於DCPromo命令中「從媒體安裝」的步驟的,有了它配置域控時就不須要經過網絡從其餘域控拷貝數據。IFM集同時也會在c:\temp
目錄下生成的一份NTDS.dit拷貝。
此文件可能出如今爲新域控準備的共享目錄中,也可能在還沒配置成域控的服務器上找到,這樣的服務器就是不安全的。
從NTDS.dit文件中提取活動目錄域憑證(註冊表系統單元)
一旦攻擊者有了一份NTDS.dit文件的拷貝(還有指定的註冊表鍵值來解密數據庫文件中的加密部分),在活動目錄數據庫文件中的憑證數據就能被提取出來。
一旦攻擊者有了註冊表系統單一和NTDS.dit 文件,他就能獲取全部的活動目錄憑證!下面的截圖來自安裝有Impacket python工具的Kali系統。DIT經過Impacket中的secrectdump.py
腳本被導出。
在2015年十月,DSInternals.com發佈了一個用於從NTDS.dit導出用戶憑證(註冊表系統單元)的PowerShell方法,叫作Get-ADDBAcount
(儘管只能用於Windows 8和Windows 2012系統以上,由於早前的系統有bug)。
一但攻擊者導出了域數據庫,就有不少選擇來維持保留高級權限,包括建立並使用Golden Tickets,這種方法能在拿下一個域的狀況下對整個目錄林(forest)進行攻擊。
參考連接:
drops和zone上已經有不少域滲透相關的資料了,尤爲是三好學生發表的一系列文章,在實戰中具備很好的參考意義。翻譯的這篇文章裏面大多數方法的詳細利用步驟都能在drops上找到,文章的意義在於給剛進入內網的同窗提供思路和方向。
至於工具方面我的也有一些體會,首先Mimikatz是域滲透中必不可少的神器,就像豬豬俠說的:
擼域控,就是先搞定域裏面的任何一臺機器,想辦法弄到SYSTEM權限,mimikataz一上,就收工了。
域滲透,mimikataz出來後,幾乎沒有新思路了。
其實思路仍是有的,就像上面就提供了很多出了Mimikatz以外的思路。一個新趨勢就是域滲透逐漸在往PowerShell上作文章,攻防兩方都在PowerShell研究出了很多新方法。工具方面一個是PowerTools,集合了不少神奇好用的PowerShell腳本,包括提權,維持權限,還有一些SMB相關的攻擊應用等。另外一個就是Empire,可謂是PowerShell在後滲透階段的集大成者。
最後不能不提的固然是以上兩個工具做者harmj0y的博客,上面常常會發布不少域滲透相關的猥瑣思路。