域滲透提權分析工具 BloodHound 1.3 中的ACL攻擊路徑介紹
簡介和背景
2014年,Emmanuel Gras和Lucas Bouillot在「 信息通信技術研討會」(Symposium on Information and Communications)上發表了題為「 Chemins decontr?leen environement Active Directory 」(「Active Directory 控制路徑」)的安全技術演講,在演講中他們使用圖論和Active Directory對象許可權來回答「誰能成為域管理員」的問題?我強烈建議你查看他們的演示文稿和白皮書,我們從這些資料中為BloodHound項目獲得了最初的一些靈感以及我們添加到BloodHound攻擊圖的對象控制路徑的非常有用的和具體的信息。
Rohan Vazarkar(@CptJesus),Will Schroeder(@harmj0y)和我很自豪地宣布BloodHound 1.3的發布,它引入了基於Active Directory對象控制的幾種新的邊緣類型。此外,Will和Lee(@tifkin_)在開發相應的PowerShell cmdlet方面做了大量的工作,使得pentester或red teamer能夠利用這些新的邊緣類型。我們認為基於ACL的攻擊路徑將開闢Active Directory域中的攻擊格局的「新大陸」。
什麼是ACL?
當我們在談論基於ACL的攻擊時,我們特指的是訪問控制條目(ACE),它填充了自由訪問控制列表(DACL)。DACL位於安全描述符中,它們位於安全對象內。有關常見安全對象的列表,請參閱這篇文章。值得注意的是,Active Directory用戶,組和計算機都是此類安全對象。訪問控制條目描述了Active Directory中針對安全對象的其他主體的允許和拒絕的許可權。
上圖顯示的是用戶「Jeff Dimmock」的安全描述符。紅色突出的部分顯示的是由訪問控制條目(ACE)組成的自由訪問控制列表(DACL)。
最好的例子是當一個對象在另一個對象上是「完全控制」的。例如,考慮「域管理員」組。也就是說,「域管理員」組可以完全控制域中的其他任何對象:
上圖顯示的是授予了「域管理員」組完全控制「Jeff Dimmock」這個用戶的ACE ,圖中紅色突出顯示的部分。
現在, Domain Admins組可以完全控制Active Directory中的其他所有對象; 然而,作為攻擊者,我們感興趣的是我們該如何濫用ACE來控制域管理員,用戶或組,使我們更接近我們的目標。此外,對象的所有者具有對象的完全控制權(等效於GenericAll),而不管任何顯式拒絕的ACE。
濫用ACE
本次更新為BloodHound攻擊圖模式添加了七個新的邊界,基於我們已驗證過的直接對象到對象的控制的情況是可以被濫用的。此外,Will Schroeder(@ harmj0y)和Lee Christensen(@tifkin_)已經付出了相當大的努力來創建易於使用的PowerShell cmdlet來濫用每個相關的ACE:
ForceChangePassword(強制更改密碼):能夠在不知道當前密碼的情況下更改目標用戶的密碼。濫用方法:Set-DomainUserPassword。
AddMembers(添加成員):將任意用戶,組或計算機添加到目標組。濫用方法:Add-DomainGroupMember。
GenericAll:所有對象控制,包括將其他主體添加到組,在不知道當前密碼的情況下更改用戶密碼,使用用戶對象註冊SPN等。濫用方法:Set-DomainUserPassword或Add-DomainGroupMember。
GenericWrite:更新任何未受保護的目標對象的參數值。例如,更新目標用戶對象上的「scriptPath」參數值,可以使該用戶在下次登錄時運行指定的可執行文件或命令。濫用方法:Set-DomainObject。
WriteOwner:更新目標對象所有者。一旦對象所有者已被更改為攻擊者控制的主體,那麼攻擊者就可以用任何他們認為合適的方式來操縱對象。濫用方法:Set-DomainObjectOwner。
WriteDACL:將新的ACE寫入目標對象的DACL。例如,攻擊者可能會向目標對象的DACL寫入新的ACE,使攻擊者「完全控制」目標對象。濫用方法:Add-NewADObjectAccessControlEntry。
AllExtendedRights:執行與對象的擴展Active Directory許可權相關聯的任何操作。例如,將主體添加到組並強制更改目標用戶的密碼都是擴展許可權的使用示例。濫用方法:Set-DomainUserPassword或Add-DomainGroupMember。
使用BloodHound規劃攻擊路徑
完成BloodHound數據收集活動後(注意:默認情況下,所有經過身份驗證的用戶都可以讀取所有對象上的所有ACE!),我們可以使用BloodHound交互界面來規劃攻擊路徑最終拿下我們的目標。讓我們來看一個基於實際環境的真實數據的例子:
上圖顯示的是由BloodHound識別的ACL攻擊路徑,目標組是「域管理員」組。
在上圖顯示的這種情況中,我們有一個相對較低的特權用戶在最左邊,根據這個用戶的ACL確定了控制域管理員組的唯一的攻擊路徑。不幸的是,從OPSEC的角度來看,我們被迫在攻擊路徑的第七步中對許多用戶中的一個執行了密碼重置操作。這一路徑上,我們可能會選擇我們確定的另外兩個用戶進行密碼重置操; 然而,我們還有其他選擇,包括更改用戶的scriptPath屬性或向目標用戶註冊SPN,如Will(@harmj0y)在其博客文章「 Targeted Kerberoasting 」中所描述的:
上圖顯示的是我們攻擊路徑第1步的細節。左側的用戶是中間這個安全組的成員。該組對右側的用戶具有完全的控制權; 因此,左邊的用戶對右側的用戶也具有完全的控制權。
上圖顯示的是攻擊路徑第二步的細節。左邊的用戶屬於中間的用戶組。該用戶組通過「GenericAll」和 「ForceChangePassword」 (實際上是多餘的) 對右側的用戶具有完全的控制許可權。
上圖顯示的是攻擊路徑的最後兩步的細節。左側的組對應於所有屬於右側組中的幾個用戶具有「ForceChangePassword」許可權。右邊的那個用戶組對最右邊的組具有完全的控制許可權,也就是「域管理員」組。
我們的攻擊路徑中的第二個到最後一個步驟要求我們更改一個活動用戶的密碼。對此操作的OPSEC注意事項不應該被輕視:如果攻擊者更改了服務帳戶密碼,並且該服務帳戶的關聯操作開始失敗,那麼可能會提醒SOC。或者,如果我們更改了管理員用戶的密碼,並且用戶在下次登錄時無法登錄,他們可能會懷疑他們的密碼已經被其他人更改。一個很好的解決方案就是在我們獲得DA(域管理員)之後直接將NT哈希值注入到NTDS中,並將用戶的密碼重置為以前的密碼。但是,我還沒有找到辦法(請@gentilkiwi告訴我吧!)。這將要求你在攻擊路徑中的某個時間點檢索目標用戶的NTLM哈希值或明文密碼。
另一個選擇是更改該用戶的密碼,轉到用戶當前正在登錄的計算機上,使用mimikatz獲取用戶登錄該機器進行身份驗證時的明文密碼,並將用戶密碼重置為這個密碼。如果操作得足夠快(如果密碼更改的操作不會仔細審查的話),那麼用戶應該是不會察覺到的。這就是域滲透中信息偵察的關鍵。你對環境,用戶行為和監控功能等的了解越多,你越有可能在執行攻擊路徑中的這一步驟時不會被抓住。
在攻擊路徑的最後一步,我們可以完全控制我們的目標節點「Domain Admins」組:
https://i0.wp.com/wald0.com/wp-content/uploads/2017/05/AttackPathStep4.png?ssl=1請注意,完全控制一個組*不會*自動給你任何控制加入該組的用戶的許可權。在這種情況下,我們所選擇的操作很簡單:將我們控制的任意主體添加到域管理員組即可。一旦攻擊者完成了這個操作,他們可以利用DCSync同步krbtgt的哈希,從域管理員組中刪除他們添加的任意主體,然後使用krbtgt哈希保持許可權的持久性。有關更多信息,請參閱Sean Metcalf(@PyroTek3)的博客文章「 Kerberos&KRBTGT:Active Directory的域Kerberos服務帳戶」。
為了增添一丟丟樂趣,這裡有一個視頻顯示的是利用YOLO方法執行這個攻擊路徑。因為我們只是通過LDAP / ADSI來操縱AD對象,所以我們可以以相當快的速度執行這些攻擊路徑: 域滲透分析-嘶吼4hou.com_騰訊視頻 https://v.qq.com/x/page/o0517b3ux8a.html
用BloodHound審查ACL
Active Directory中進行有效的審查ACL一直是一個令人困惑,令人沮喪和痛苦的過程。BloodHound現在可以快速,輕鬆地對ACL進行審查,有兩個重要的注意事項:首先,我們進行信息收集的唯一的ACL是可以用來控制另一個對象的ACL,我們還有一些工作要做,包括OU,GPO以及可能通過錯誤配置的ACL導致的其他攻擊。其次,我們只關注是「允許」類型的ACE,而不考慮安全性參考監視器按規範順序讀取的ACE所確定的有效訪問許可權; 然而,在大多數環境中,我們注意到很少會使用到「拒絕」類型的ACE。
例如,通過點擊用戶組節點,並滾動到用戶組信息選項卡的底部,我們看到「 入站對象控制項 」部分:
「 顯式對象控制器 」告訴了我們這個對象的第一個程度控制器是誰。請注意,這不同於非繼承的許可權,可能包括從父對象繼承的ACE。通過點擊號碼,我們可以看到這些對象有哪些都是些什麼對象:
「 展開的對象控制器 」使每個用戶組對此對象都具有特權,並將其展開,通過安全組委託顯示具有該許可權的有效主體:
最後,「 傳輸對象控制器 」根據收集的ACL數據畫出所有可能的攻擊路徑。如果存在一個唯一的來控制此對象的ACL攻擊路徑,那麼,BloodHound將為你找到這條路徑:
這些不同的視圖能夠使你即時的了解AD中的其他對象是否有能力控制任何其他節點。
未來的一些工作和結論
很快,我們將會更新BloodHound的模式來反映GPO編輯許可權的利用,因為它們適用於OU以及這些OU的子對象。我們也在不斷的研究,如何在AD中控制對象的方法,而不會觸發監控報警。此外,Will和我將會在Black Hat USA 2017上發表演講,關於在AD中使用ACL設計出非常詭異的後門,所以請在演講的時候期待這些內容吧。
BloodHound在GitHub上提供了自由的開放源代碼,網址為BloodHoundAD/BloodHound
你可以通過點擊這裡加入我們在Slack官方的BloodHound Gang Slack:Join us on Slack!
你可以在Paranoia17中找到我們用來介紹BloodHound 1.3 ACL攻擊路徑更新的地點:https://www.slideshare.net/AndyRobbins3/bloodhound-13-the-acl-attack-path-update-paranoia17-oslo
本文翻譯自BloodHound 1.3 – The ACL Attack Path Update,如若轉載,請註明原文地址: 域滲透提權分析工具 BloodHound 1.3 中的ACL攻擊路徑介紹 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※TruffleHog:一款幫助開發者檢測軟體安全性的工具
※PowerShell攻防進階篇:nishang工具用法詳解
※給你安利這些效率工具 一個比一個好用