ต่อจากตอนที่ 1 ที่ว่าด้วยเรื่องการทำงานของ LM กับตัวอย่างของ Application สำหรับการ crack LM hash กันไปแล้ว มาวันนี้เป็น NTLM และ NTLMv2 กันบ้างครับ

NTLM และ NTLMv2

NTHash

สำหรับ LM นั้นเป็น Format ของการเก็บ password ใน Windows ก่อนรุ่น Windows Me แต่หลังจากนั้นก็เป็น NTLM โดยเก็บใน SAM Database file ใน Windows ทั่วไป ซึ่งสามารถถูกดึงออกมาได้ด้วย Mimikatz ซึ่งบน Domain Controller (Windows Active Directory Server) ที่มีการเก็บ username, password ใน NTDS file ก็ใช้ NTLM เช่นกัน โดยปกติ Microsoft จะเรียกมันว่า “NTHash” โดย Algorithm ในการสร้าง hash คือ

โดยการ crack NTHash นั้นจะใช้คำสั่งเป็น

NTLMv1

ส่วน NTLM นั้นจะแตกต่างกับ NTHash ตรงที่ NTLM นั้นเป็น protocol ที่ใช้ NTHash ในการติดต่อคุยกัน (challenge/response) ระหว่าง server และ client โดย หากเป็น NTLMv1 จะใช้ได้ทั้ง NTHash และ LM Hash ขึ้นอยู่กับ configuration ของ Windows Server

โดยการทำ Challenge จะเป็นการ random ค่า 8 ตัวอักษรจาก Server แล้วส่งไปให้กับทาง Client

โดยการทำ Response ฝั่ง Client จะเป็นดังนี้

  1. Pad ส่วนของ LM Hash หรือ NTHash ด้วย NULL byte (0,\0) ให้เป็น 21 bytes
  2. แบ่ง 21 bytes ให้เป็น string 3 ชุด ชุดละ 7 byte
  3. แปลงแต่ละชุดให้กลายเป็น 64bit DES key โดยการ add parity bit เข้าไปต่อท้าย  (เหมือนๆกับตอนที่เราทำของ LMHash)
  4. ทำการเข้ารหัส 8 byte ที่เป็น Challenge จาก Server ด้วย key แต่ละอัน ทำให้มี encrypt string 3 ชุด โดยชุดละ 8 byte
  5. เอาทั้งหมดมาต่อกันกลายเป็น 24 byte แล้วส่งกลับไปให้ Server

พอ Server ได้รับก็จะเอา password ที่มีในการถอดรหัสด้วยกระบวนการที่คล้ายๆกัน

โดยหากเป็นการ crack ตัว Hash ที่เราอาจจะดักจับมาได้ด้วยกระบวนต่างๆเช่น การใช้ Responsder ในการปลอมเป็น Server เป็นต้น สามารถทำได้โดย

NTLMv2

พอเป็น NTLMv2 ก็จะคล้ายคลึงกับ NTLMv1 ซึ่งตัว NTLMv2 นั้นสร้างมาเพื่อการเพิ่มความแข็งแกร่งของกระบวนการแลกเปลี่ยนให้มันมั่นคงมากขึ้น 

โดย NTLMv2 จะคล้ายคลึงกับ NTLMv1 แต่แตกต่างกันที่

  • NTLMv2 จะมีการส่ง response 2 แบบกลับไปยัง Server
  • เปลี่ยนจาก DES กลายเป็นใช้ HMAC-MD5 แทน
  • 1 ใน response กลับไปยัง Server มีชื่อเรียกว่า variable length client challenge ซึ่งสร้างจาก (1) เวลาขณะนั้นในลักษณะ NT Time format, (2) 8-byte random value, (3) domain name และ (4) ค่ามาตรฐานบางอย่าง

โดยเขียนสรุป Algorithm ของ NTLMv2 ได้เป็น

หากเราได้ hash ของ NTLMv2 มาจะ crack ได้โดยการใช้คำสั่งเป็น

Source::