จากบทความก่อนหน้าที่กล่าวอธิบายว่าใน Windows Domain Environment เมื่อเครื่องที่อยู่ใน domain ต้องการสื่อสารกันจะใช้ Kerberos เป็น Protocol หลักในการทำ Authentication หากไม่สามารถใช้ได้จะหนีไปใช้ NTLMv2 แทน ซึ่งเงื่อนไขการไม่ใช้ Kerberos นั้นมีอยู่ 2 ข้อ
เมื่อมีเงื่อนไขดังกล่าว Net-NTLMv2 หรือ NTLMv2 จะถูกนำมาใช้เป็น Protocol หลักในการทำ Authentication ซึ่งข้อดีคือ Windows Environment ส่วนใหญ่ไม่มีการ Disable Protocol ดังกล่าวเลย
ในปัจจุบันเรามีเทคนิคในการทำ NTLMv2 Attack อยู่ 2 รูปแบบ
การจะเอาค่า NTLMv2 challenge-response มาได้นั้น ต้องอาศัยการทำ Man-in-the-middle attack ซึ่งถ้าใช้ท่าแบบปกติคือ arp spoofing ก็จะไม่ค่อยสะดวกมากนักเนื่องด้วยเรื่องของ performance และความไม่สะดวกในการ response หากจะทำ SMB relay
Responder เป็น tool พัฒนาโดย SpiderLabs (https://github.com/lgandx/Responder) ทำขึ้นเพื่อเน้นการโจมตีไปยัง NTLM authentication โดยเฉพาะ โดย concept คือทำการหลอกให้ victim คิดว่าเราคือ target ที่ victim อยากจะคุยด้วยทำให้ NTLMv2 Challenge-Response ถูกเก็บไปใช้ประโยชน์ต่อ
ก่อนที่จะดูวิธีการโจมตี ผู้อ่านต้องทราบว่า sequence การทำ Name Resolution ของ Windows Environment มีลำดับดังนี้
1) host file — C:\Windows\System32\drivers\etc\hosts
2) cache ของ dns — สามารถดูได้จาก คำสั่ง ipconfig /displaydns
3) DNS หากเป็น Windows Domain Environment ก็จะเป็น Server ที่ทำ DNS Service ด้วยเช่น Domain Controller Server
4) LLMNR (Link Local Multicast Name Resolution; เริ่มใช้งานตั้งแต่ Windows Vista) และ NBT-NS (NetBIOS Name Server) เป็น protocol ที่ให้ host ที่อยู่ใน subnet เดียวกันสามารถ resolve name ผ่าน multicast address ได้
IPv4–224.0.0.252
IPv6 — FF02:0:0:0:0:0:1:3
หากเครื่องของ victim พยายาม resolve name ตามลำดับ sequence#1,2 และ 3 และสุดท้ายหาไม่เจอ LLMNR หรือ NBT-NS จะถูกใช้งาน ซึ่ง Responder จะคอย listening อยู่เพื่อรอการดักจับและโจมตี NTLM Authentication
> NTLMv2 challenge-response offline brute force
# ./Responder.py -I eth0 -A |
2. หากจะทำการโจมตีแบบ targeted attack เฉพาะเครื่องให้ทำการ configure ระบุ target ใน Responder.conf ในที่นี้จะโจมตีไปยังเครื่องเดียวคือ 192.168.10.31 แต่หากต้องการ respond ให้กับทุกเครื่องที่มีการ request ให้ปล่อยว่างไว้
; Specific IP Addresses to respond to (default = All) ; Example: RespondTo = 10.20.1.100–150, 10.20.3.10 RespondTo = 192.168.10.31 |
3. ทำการ run Responder
root@kali:~/Responder# ./Responder.py -I eth0 NBT-NS, LLMNR & MDNS Responder 3.0.0.0 Author: Laurent Gaffie (laurent.gaffie@gmail.com) To kill this script hit CTRL-C [+] Poisoners: |
4. ลำดับถัดไปให้ทำ offline crack ด้วย hashcat ตาม style, dictionary และเทคนิคตามสะดวก หากเป็น NTLMv2 ใช้ hashtype ที่ 5600 ส่วนกรณีผลที่ได้ในขั้นตอนก่อนหน้าสามารถใช้ NTLMv1 Multitool ช่วยได้ https://github.com/evilmog/ntlmv1-multi
> ท่า SMB Relay
หากทำ offline crack ไม่สำเร็จ เราก็ยังมีอีกตัวเลือกคือการทำ SMB Relaying Attack ที่ผสมผสาน Responder และ tool ที่อยู่ใน repository เดียวกัน
root@kali:~/Responder# tools/RunFinger.py -i 192.168.10.0/24 -g | |
2. ให้หยุดการทำ SMB และ HTTP poisoning ของ Responder ใน Responder.conf
[Responder Core] |
3. run Multirelay เพื่อ route traffic ไปยังเครื่องที่เป็น target ที่ไม่ได้ใช้ SMB Signing โดยให้ใช้ hash ที่ถูก capture มาได้ทั้งหมด relay ไปยังเครื่อง target
#./MultiRelay.py -t 192.168.10.133 -u ALL CTRL-C |
หากทำได้สำเร็จจะสามารถ access ไปยังเครื่อง target ได้ด้วยสิทธ์ของ challenge-response ที่ capture มา หากมีสิทธิ์ระดับ local admin จะสามารถ run คำสั่งที่มีการ bundle mimikatz มาได้อีกด้วย
#mimi sekurlsa::logonpasswords |
หากได้สิทธิ์ระดับ admin แต่ไม่สามารถ run คำสั่งดังกล่าวได้ อาจมีความเป็นไปได้หลายกรณี เช่นเจอ Endpoint Security ปลายทางจัดการอยู่ ต้องระวังจุดนี้ด้วย
วิธีการป้องกันคือการไม่ respond ตามช่องทางที่ Responder เล่นงานได้แก่
จากนั้นให้ตั้งค่า Enabled ให้กับ (settings ในกรอบสีแดง) Microsoft network client: Digitally sign communications (always) และ Microsoft network server: Digitally sign communications (always)
4. เนื่องจาก Responder มี Built-in WPAD Proxy Server สามารถ capture HTTP request ที่มีการ enable “Auto-detect settings” เพื่อค้นหา web proxy setting จาก DHCP และทำการ respond กลับได้ ดังนั้น ถ้าหากมีการ set ค่า web proxy บน browser เรียบร้อยแล้ว ไม่ควร enable การตั้งค่า Auto-detect settings
https://dirkjanm.io/abusing-exchange-one-api-call-away-from-domain-admin/