วิธีการทำ Post-Exploitation เบื้องต้นบน Windows Platform
บทนำ (Overviews)
ในการทดสอบเจาะระบบ หรือในการเล่น Capture-the-Flag (ขออนุญาตใช้คำย่อที่ติดปากกันว่า CTF) เมื่อ pentester มีการเข้าถึงระดับระบบปฏิบัติการของเครื่องเหยื่อแล้ว มักมีการมองหาวิธีต่างๆในการทำ post-exploitation เพื่อยกระดับสิทธิ์ (privilege escalation) ให้เป็นสิทธิ์สูงสุด ที่เป็น privilege account ซึ่งพบว่าองค์กรส่วนมาก มักจะไม่ได้ทำการ update security patch สำหรับระบบปฏิบัติการของ server หรือ client จนครบถ้วน ทำให้ pentester สามารถโจมตีเพื่อยกระดับสิทธิ์จากการมองหา security patch ที่ไม่ได้ลงไว้ได้ ทางผู้เขียนจึงได้เล็งเห็นวิธีการทำ post-exploitation เบื้องต้น จากการโจมตีไปยัง patch ที่ไม่ได้ลง แล้วยกระดับสิทธิ์เพื่อทำ full-compromise ต่อไป
Scenario ที่ใช้ในการทดสอบ:
1. Pentester สามารถเรียก reverse shell จากเครื่องเหยื่อได้
2. เรียกใช้ Exploit Suggester เพื่อตรวจสอบว่าระบบปฏิบัติการเครื่องเหยื่อ สามารถโจมตีด้วย patch number ใดได้บ้าง
3. โจมตีด้วย patchnumber ที่ไม่ได้ติดตั้ง แล้วยกระดับเป็นสิทธิ์สูงสุด
4. ทำการ dump credential ออกมา และนำไป crack ให้ได้ plain-text password
5. นำ credential ที่ได้มาจากข้อ 4 ไปใช้งาน remote log-in ผ่านวิธี Pass-the-Hash
อุปกรณ์/product ที่ใช้ในการทดสอบ:
1. Windows 7 (64 bits) Service Pack 1 (Assigned IP : 192.168.23.133)
2. Kali-Linux (Assigned IP : 192.168.23.128)
บทความโดย
Vanitas
Cyber Security Researcher
ขั้นตอน (Steps)
- Pentester เรียก meterpreter session ผ่าน reverse shell ได้ ซึ่งใน scenario ที่ใช้ทดสอบนี้ เป็น Meterpreter 64 bits สำหรับ Windows 64 bits architecture
- ทำการตรวจสอบ privilege ว่าสามารถเรียกสิทธิ์สูงสุด (NT SYSTEM) ได้หรือไม่ ด้วยการใช้ command : getsystem จะพบว่าไม่สามารถยกระดับสิทธิ์ได้
getsystem
- ทำการ shell เข้า command prompt แล้วดูเรียกดูว่ามี patch ใดที่มีการ install อยู่บนเครื่องเหยื่อแล้วบ้าง ดัง command ต่อไปนี้
shell systeminfo | more
- จากรูป จะได้ข้อมูลเบื้องต้นจากเครื่องเหยื่อแล้วว่า มี hostname = WIN7VICTIM โดยเป็น Windows 7 (64 bits) ที่เป็น Service Pack 1โดยมีการติดตั้ง patch ไว้ 2 KB
- ให้ออกจาก meterpreter session แรก ให้คงbackground process เดิมไว้ ตาม command ดังนี้
^Z (Ctrl + Z) แล้ว confirm Y background session -l
- ใช้ metasploit module ที่ใช้ในการหา local exploit จาก patch ที่ขาดหายไป ซึ่งใน scenario นี้เราจะใช้ Local Exploit Suggester แล้วระบุ session id ที่ได้มาจากข้อ 4 ด้วย command ดังนี้
use post/multi/recon/local_exploit_suggester set SESSION [session_id]
- ทำการ run ขึ้นมา จะได้ผลลัพธ์ว่าหมายเลข patch exploit ใดที่สามารถยกระดับสิทธิ์ (Privilege Escalation) เป็นสิทธิ์สูงสุดได้
- โดยหลักการในการเลือกexplotนั้น ให้พยายามเลือก exploit จาก patchnumber ใหม่สุดเป็นหลัก ใน scenario นี้เราจึงเลือกใช้ MS16-014เป็นตัวเลือกแรกในการทำ Privilege Escalation ซึ่งหากกลับไปดูข้อมูลของ MS16-014 จะพบว่าเครื่องเหยื่อไม่ได้มีการ install patch KB ที่ใช้ป้องกันช่องโหว่นี้อยู่ จึงมีความเป็นไปได้ว่าจะสามารถยกระดับสิทธิ์ได้จาก exploit นี้(สามารถอ่านข้อมูลอ้างอิงเพิ่มเติมได้ที่ https://docs.microsoft.com/en-us/security-updates/securitybulletins/2016/ms16-014)
- ใช้ metasploit module ดังกล่าว ซึ่งเป็น exploit module ที่ใช้ในการทำ local exploitเพื่อทำ privilege escalation ให้เป็นระดับสิทธิ์สูงสุดของเครื่อง โดยระบุ session id เป็น session ที่เราได้ meterpresession มาก่อนหน้านี้ สามารถทำได้โดยเรียกผ่าน command ดังนี้
use exploit/windows/local/ms16_014_wmi_recv_notif set SESSION [session_id]
- หมายเหตุ: กรณีนี้ควรดู target ในการ exploit ให้ดี เนื่องจาก exploit module ที่เลือกนั้น ในบางตัวจะต้องมีการเจาะจง Windows version ให้ตรงกับเป้าหมาย ซึ่งใน scenario นี้ใช้งานเป็น Windows 7 Service Pack 1 ตรงตามเป้าหมาย จึงไม่ต้องเปลี่ยน target id แต่อย่างใด
^Z (Ctrl+Z) session -l
- ซึ่งในขั้นตอนนี้เราจะได้ process id (pid) ของ sessionที่ได้รับสิทธิ์สูงมาด้วย (ณ ที่นี้ คือ pid : 2288)
- ให้เรากลับไปสู่ meterpreter session เดิม แล้วทำการ migrade จาก session ปัจจุบันไปเป็น pid ที่ระบุสิทธิ์สูงสุด จะพบว่าหลัง migrate นี้ เราจะควบคุมเครื่องได้สมบูรณ์แบบแล้ว ซึ่งทดสอบได้ด้วย command ดังนี้
^Z (Ctrl + Z) migrate [pid] getuid
- ต่อจากนี้จะเริ่มทำการขโมย credential ต่างๆออกมาได้แล้ว โดยในขั้นตอนนี้ผู้เขียนอนุญาตแบ่งเป็น 2 วิธี ซึ่งแล้วแต่ว่าผู้ใช้จะสะดวกใช้แบบไหน
- โดยวิธี hashdump
- ใช้วิธีการทำ hashdump ผ่าน meterpreter sessionออกมาเป็น NTLM hash
- ใช้ hashdump ออกมา ด้วย command : hashdump
hashdump
- ซึ่งจากรูป hashdump จะอยู่ใน formatดังนี้
[Username]:[RID]:[LM-Hash-Value]:[NTLM-Hash-Value]:::
- นำ hash value ที่ได้ไปใส่ใน text file เป็นชื่ออะไรก็ได้ ตาม format ดังนี้
$NT$[NTLM-Hash-Value]
- จากรูปจะเป็นการเตรียมhash ของ user : Administrator ที่เป็น local admin ของเครื่องเหยื่อ
- ใช้ John-the-ripper ซึ่งเป็น toolในการ crack password ที่มากับ Kali-Linuxไป crack NTLM hash ออกมา ดัง command นี้
john --wordlist=[wordlist file] --format=nt [hashfile] john –show [hashfile]
- จะพบว่าได้ password ออกมาเป็น plain-textเรียบร้อยแล้ว
- หมายเหตุ: โดยปกติแล้วเราควรใช้ wordlist file ที่มี wordlistในการ crack ให้มากที่สุด เนื่องจากตัว toolจะไปดึง wordlist ในไฟล์นั้นมาไล่เทียบว่าตรงกับ hash ที่จะ crack หรือไม่ ดังนั้น wordlistจึงเป็น keypoint หนึ่งในการทำ password cracking
- โดยวิธี Mimikatz tool
- ใช้ Mimikatz tool ในการดึง credentialออกมาเป็น NTLM hash/plain-text
- ทำการ load mimikatz extension ขึ้นมาด้วย meterperter session
load mimikatz
- กรณีที่เครื่องเหยื่อไม่ได้ install patch เพื่อป้องกัน WDigest ไว้ จะสามารถใช้ wdigest module เพื่อดู plain-text password ได้เลย ด้วย command
wdigest
- กรณที่เครื่องเหยื่อมีการ install patch เพื่อป้องกันWDigest plain-text password ไว้แล้ว สามารถใช้ msv module เพื่อ dump NTLM หรือ LM hash value ได้ ด้วย command
msv
- จากขั้นตอนนี้ จะเห็นว่า hashing ที่ได้จาก NTLM hash value เป็นตัวเดียวกันกับขั้นตอนที่10จึงทำให้สามารถนำไป crack password ต่อได้ด้วย John-the-ripper
- โดยวิธี hashdump
- ในกรณีที่ pentester ที่ไม่สามารถ crack password ออกมาเป็น plain-text ได้ ก็ยังมีอีกวิธีที่สามารถทำ replay remote session ได้ โดยการใช้งานผ่านวิธีที่เรียกว่า Pass-the-Hash ซึ่งเป็นวิธีที่ผู้โจมตีสามารถดึงNTLM hash value ที่ได้มา ไปเป็น password ในการ remote log-in ได้เลย โดย format การใช้งานเป็นดังนี้
Example : ตัวอย่างการทำ Pass-the-Hash ด้วย User : Administrator ไปยังเครื่องเหยื่อ ด้วย NTLM hash value pth-winexe –U [User]%[NTLM-Hash-Value] //[IP or hostname] [command]
- ซึ่งหลังจากนี้ก็จะสามารถเข้าไปเครื่องเหยื่อเพื่อหาข้อมูลอื่นๆต่อไปได้แล้ว ดังนั้น จึงเป็นเรื่องสำคัญมากที่ผู้ดูแลระบบจำเป็นจะต้องติดตั้ง security patch ให้ครบถ้วน ไม่เพียงแต่เพื่อป้องกันการทำ Remote Exploit เท่านั้น แต่เพื่อเป็นการลดความเสี่ยงจากการถูกทำ Privilege Escalation อีกด้วย
References:
- https://null-byte.wonderhowto.com/how-to/hack-like-pro-metasploit-for-aspiring-hacker-part-11-post-exploitation-with-mimikatz-0168208/
- https://www.offensive-security.com/metasploit-unleashed/mimikatz/
- https://blog.rapid7.com/2015/08/11/metasploit-local-exploit-suggester-do-less-get-more/
- https://www.kali.org/penetration-testing/passing-hash-remote-desktop/