Active Directory域滲透之白銀票證後門
本文的內容描述了一種方法,通過該方法,攻擊者可以在拿到域管理級別的許可權約5分鐘後,就可持久的對Active Directory的管理進行訪問。
這篇文章將探討攻擊者如何利用計算機帳戶憑據來持久的訪問和控制企業內網,以及企業如何緩解這類潛在的安全問題。
計算機帳號
加入Active Directory(AD)的每台計算機在AD中都有一個關聯的計算機帳戶。AD中的計算機帳戶是一個安全主體(與用戶帳戶和安全組相同),因此它具有與用戶帳戶一樣多的屬性(包括安全標識符(SID),memberOf,lastlogondate,passwordlastset等。計算機帳戶可以屬於安全組,並且通常由於各種原因,最常見的是用於組策略過濾,以便某些組策略僅適用(或不適用)於特定的計算機組。
計算機帳戶密碼在計算機加入域時進初始設置,並以與用戶密碼大致相同的方式進行身份驗證。不同的是,計算機的密碼不必定期更改,以便計算機可以在域中進行身份驗證(與用戶帳戶不同)。有一個設置可以配置計算機的帳戶密碼「應該」多久進行一次更改,域中的計算機通常會每隔30天更改其計算機帳戶密碼(默認情況下)。也就是說,這個門檻是可以改變的,用來改變計算機帳號密碼的過程可以完全被禁用。
計算機帳戶密碼的更改更符合一些規則,我之前已經發表了關於如何使用計算機帳戶密碼在系統中提升許可權。但是,在這篇博文中我沒有涵蓋本文中探討的其他角度。
默認情況下,計算機帳戶是「域計算機」AD組的成員,並且是為了組策略管理的目的,通常將其添加到了Active Directory組,儘管還有其他原因可能會將計算機帳戶添加到AD組。
計算機組中計算機的常見示例:
域控制器是「域控制器」組的成員。
只讀域控制器(RODC)是「只讀域控制器」組的成員。
Exchange伺服器通常是不同Exchange AD組的成員,例如「Exchange Server」。
把計算機作為管理員?
一個顯而易見的問題是「管理員組中的計算機的影響會是什麼?」
當計算機通過Kerberos在域中進行身份驗證時,就會創建一個票證或令牌,其中包含計算機的SID和計算機所屬的安全組的所有SID,就像用戶登錄時一樣。這意味著經過身份驗證的計算機對域或林中的資源具有與屬於同一個組的成員的用戶類似的許可權。如果計算機帳戶在管理員組中,則計算機帳戶就具有了管理員許可權,並且該計算機上的任何管理員都可以獲得相同的許可權。
計算機帳戶可以擁有更高的資源許可權,包括Active Directory的完整管理員許可權。
計算機如何利用這些許可權或訪問許可權?
計算機中的SYSTEM帳戶「擁有」包含這些許可權的SID具有的票證或令牌(從技術上來說「SYSTEM」並不是帳戶,只是適用於此描述而已)。任何在計算機上具有(本地)管理許可權的人都可以將其許可權的上下文改為「SYSTEM」 ,以便有效地掌握計算機帳戶在AD中的權利。Mimikatz提供了在系統上抓取所有Kerberos票證和令牌的能力,因此重用這些票證最終利用這些許可權將是一件微不足道的小事。
請注意,具有許可權的計算機帳戶與服務帳戶之間的功能差異與存儲在作為服務運行的系統上的憑據的許可權無關。如果系統受到威脅,這兩個都會導致憑據泄露。但是,服務帳戶的管理方式與計算機帳戶完全不同,在大多數情況下使用服務帳戶更好一些。
特權升級
攻擊者可以簡單的將許可權從計算機上的管理員許可權提升到域中的許可權,因為計算機的帳戶已經加入到了管理員組中。
例如,如果管理伺服器加入到具有域控制器的備份許可權的組中,則所有攻擊者都需要做的是入侵具有該管理伺服器許可權的管理員帳戶,然後在該管理伺服器上獲取系統許可權就拿下了整個域。
顯然,這個工作必須有幾個事情要做:
1.修改管理員許可權的帳戶到管理伺服器。
2.管理伺服器計算機帳戶需要域控制器的許可權。
根據我的個人經驗以及別人的經驗,我發現這是不僅僅是一個可能的情況,而且在許多企業組織的內網中確實可以做到。
請注意,還有其他幾種方法可以利用與這種類似的場景,這並不是唯一的潛在攻擊方式。
漏洞利用與許可權持久化
域控制器白銀票證
如果攻擊者已經轉儲了Active Directory資料庫或者是已經獲得了域控制器計算機帳戶密碼的一些知識,那麼攻擊者就可以使用Silver Tickets(銀票)針對域控制器的服務拿到管理員許可權,並在Active Directory中拿到完整的管理員許可權。
一旦攻擊者獲得域控制器計算機帳戶的知識,這些信息就可以用於創建一個Silver Tickets(銀票),從而在該DC中拿到長久的管理員許可權。
計算機主機服務,最常見的一個是利用「cif」服務的Windows文件共享。由於計算機本身承載此服務,創建銀票所需的密碼數據是相關聯的計算機帳戶的密碼哈希。當計算機加入Active Directory時,將創建一個新的計算機帳戶對象並將其鏈接到計算機。密碼和關聯的哈希存儲在擁有該帳戶的計算機上,並且NTLM密碼哈希存儲在該域的域控制器上的Active Directory資料庫中。
如果攻擊者可以獲得計算機的管理員許可權(主要是為了獲得調試訪問許可權)或者能夠以本地SYSTEM許可權運行代碼,則攻擊者可以使用Mimikatz從系統中轉儲AD計算機帳戶密碼哈希(NTLM密碼哈希用於加密RC4 Kerberos票證):Mimikatz「privilege :: debug」「sekurlsa :: logonpasswords」exit
為DC創建一個Silver Ticket就可以通過PowerShell遠程連接以管理員許可權訪問域控制器了為「 Active Directory Security 」服務和「 wsman 」服務創建銀票,以獲得目標系統上的WinRM和或PowerShell Remoting的管理員許可權。
注入兩個Silver Tickets(Active Directory Security&wsman) 後,我們可以使用PowerShell Remoting(或WinRM)連接目標系統打開一個shell(假設配置了PowerShell Remoting和/或WinRM)。New-PSSession是PowerShell的一個 cmdlet,用於使用PowerShell創建一個遠程系統的會話,Enter-PSSession可以進入遠程shell。
創建DC的銀票可以使用管理員訪問許可權連接到域控制器的LDAP並運行DCSYNC。
為「 ldap 」服務創建銀票,以獲得目標系統(包括Active Directory)上的LDAP服務的管理員許可權。
憑藉LDAP銀票,我們可以使用Mimikatz並運行DCSync 從 DC 「複製」憑據。
通過計算機帳戶實現許可權持久控制
假設一個攻擊者能夠拿下該域,一個保持域許可權的方法是添加一個計算機帳戶(或包含計算機的組),以便能有許可權對Active Directory進行持久控制。
這種方法是雙交叉的:
1. 在允許訪問該系統的環境中拿下管理員或備份伺服器上的計算機帳戶密碼(禁用計算機帳戶密碼更新以確保持續訪問)。
2. 從該伺服器的計算機帳戶委派許可權(或含有計算機賬戶的組)到重要的AD組件。
利用計算機帳戶進行AD持續控制的另一種方法是將計算機帳戶放在具有其他帳戶的特權組中。這是一個常見的例子:有一個名為「AD備份」的組,其中有一個名為「svc-backup」的服務帳戶。
當枚舉域管理員組的組成員身份(其具有完整的AD管理員許可權以及域中的域控制器的完整管理員許可權)時,我們看到包含「AD備份」組。這是一個很常見的配置,儘管作為域管理員的成員會有些糟糕。理想情況下,備份組或服務帳戶只能是域中的「備份操作組」的成員,以備份AD域的數據。
攻擊者將拿到的計算機帳戶添加到「AD備份」組中,不執行任何操作。ADSAP01計算機帳戶現在為攻擊者提供了域和所有域控制器的完整管理員許可權,並可以隨意運行Mimikatz的DCSync,以便能夠抓取任何帳戶的密碼數據。
緩解措施
緩解此問題的最簡單的方法是確保沒有計算機帳戶是屬於管理組的成員。制定此策略並通過定期檢查計算機帳戶的管理員組來執行此策略。
使用PowerShell進行掃描是非常簡單的,因為需要完成的所有操作都是使用名稱(或類似於你的環境中定製的關鍵字)中的「admin」關鍵字搜索所有組,並標記objecttype =computer的任何成員。這是一個快速實現的PowerShell腳本(需要Active Directory PowerShell模塊),將查找「管理員」組,並將為具有計算機帳戶成員的組做標記。
Import-Module ActiveDirectoryn$AdminGroupsWithComputersAsMembersCountHashTable = @{}n[array]$DomAdminGroups = get-adgroup -filter {Name -like 「*admin*」}n[int]$DomAdminGroupsCount = $DomAdminGroups.CountnWrite-Output 「Scanning the $DomAdminGroupsCount Admin Groups in $ForestDomainItem for computer accounts as members」nForEach ($DomAdminGroupsItem in $DomAdminGroups)n{n[array]$GroupContainsComputerMembers = Get-ADGroupMember $DomAdminGroupsItem.DistinguishedName -Recursive | Where {$_.objectClass -eq 『computer』} $AdminGroupsWithComputersAsMembersCountHashTable.Set_Item($DomAdminGroupsItem.DistinguishedName,$GroupContainsComputerMembers.Count)n[int]$DomainAdminGroupsWithComputersCount = $DomainAdminGroupsWithComputersCount + $GroupContainsComputerMembersCountn}nWrite-Output 「$DomainAdminGroupsWithComputersCount Forest Admin groups contain computer accounts」n$AdminGroupsWithComputersAsMembersCountHashTablen
PowerView現已集成到了PowerSploit中,包括幫助識別管理員組中的計算機賬戶的功能:
Get-NetGroup -AdminCount | Get-NetGroupMember -Recurse | ?{$_.MemberName -like 『*$』}n
另一個緩解措施是確保所有計算機帳戶的密碼每30 – 60天更改一次,特別是伺服器(域控制器!)。
參考資源
域成員:禁用計算機帳戶密碼更改域成員:計算機帳戶密碼的最長過期時間如何檢測和刪除不活躍的計算機帳戶如何禁用計算機帳戶密碼自動更改Microsoft Blog AskDS:計算機帳戶密碼流程關於Active Directory中的加入域的計算機賬戶密碼的一些其他事實…Microsoft KB 327825:如何禁用計算機帳戶密碼自動更改計算機帳戶複製對域的影響帳戶密碼和策略計算機帳戶(AD計算機對象)密碼更新攻擊者如何使用Kerberos Silver Ticket來攻擊系統活動目錄許可權持久控制技巧Mimikatz非官方指南和命令參考
本文翻譯自:Sneaky Active Directory Persistence #16: Computer Accounts & Domain Controller Silver Tickets,如若轉載,請註明來源於嘶吼:tActive Directory域滲透之白銀票證後門 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀: