มาลองแฮก Windows ด้วยเทคนิค LLMNR/NBNS Poisoning

20 กันยายน 2019

พิชญะ โมริโมโต
พิชญะ โมริโมโตหัวหน้าทีมทดสอบเจาะแฮกระบบ (lead penetration tester) ของบริษัท สยามถนัดแฮก, เป็นที่ปรึกษาด้านความปลอดภัยให้หน่วยงานเอกชน, เป็นที่รู้จักกันในฐานะ หนึ่งในแอดมินกลุ่ม 2600 Thailand และเป็นหนึ่งในคนเขียนบทความลงเพจ สอนแฮกเว็บแบบแมว ๆ

เคยสงสัยไหมว่า เวลาเรากดคลิกลิงก์เข้าเว็บ https://www.cyfence.com เกิดอะไรขึ้น?

ถ้าเป็นคนทำงานสายไอที หลายคนก็คงรู้และตอบขึ้นมาได้ทันทีว่า สิ่งที่เกิดขึ้นคือ web browser จะทำการหาว่าชื่อเว็บ www.cyfence.com อยู่ที่ IP address ไหน เพื่อที่จะดึงหน้าเว็บมาเปิดให้คนเข้าเว็บดูได้ จากรูปด้านบนจะพบว่าเมื่อใช้โปรแกรมดักข้อมูล network ที่รับ-ส่งกัน (Wireshark) เราจะเจอ DNS query จากเครื่อง client ที่เข้าเว็บ (192.168.15.149) ส่งไปถาม DNS server (192.168.15.2) และได้คำตอบกลับมาว่าเว็บ www.cyfence.com อยู่ที่ IP address 61.19.99.20 ซึ่งกระบวนการนี้มีชื่อเรียกว่าการทำ name resolution

คราวนี้ถามใหม่ ว่าถ้าอยู่ภายในบริษัทแห่งหนึ่ง ในสภาพแวดล้อม Windows แล้วจะเข้าเครื่องเซิร์ฟเวอร์ที่เป็นระบบภายในบริษัทชื่อเครื่องว่า sthtest จะเกิดอะไรขึ้น?

(เข้าผ่าน UNC path \\<ชื่อเครื่อง>\<ชื่อโฟลเดอร์>)

ขอเดาว่า หลายคนที่ตอบคำถามแรกได้ ว่าใช้ DNS ทำ name resolution อาจจะตอบคำถามนี้ไม่ได้ เพราะว่าจะเอะใจว่า เอ๊ะ แล้วชื่อ sthtest ที่ว่า ถ้าไปถาม DNS server มันจะรู้เหรอว่าอยู่ IP address ไหน เนื่องจากเป็นเครื่องภายในองค์กรเรา (หลาย ๆ องค์กรอาจจะมีชื่อเครื่องว่า sthtest ซ้ำกันก็เป็นได้) แล้วถ้า DNS server ไม่รู้แล้วจะเกิดอะไรขึ้นต่อ?

มาวิเคราะห์ผลจากการลองเข้าเครื่องชื่อ sthtest กัน

สิ่งที่เห็นคร่าว ๆ จากการดักจับข้อมูลคือ มีการใช้ DNS query ไปถามว่าเครื่อง sthtest อยู่ที่ไหน? สิ่งที่น่าสนใจก็คือ ถัดจากนั้น จะมีการใช้ protocol ชื่อว่า LLMNR กับ NBNS เพื่อทำการ query ค้นหาต่อว่าเครื่อง sthtest อยู่ที่ไหน ? เพราะว่า DNS ไม่สามารถหาเจอได้ว่าเครื่อง sthtest อยู่ที่ IP address อะไรนั้นเอง

มาดูเฉลยจริง ๆ กัน

วิธีการที่ Windows จะหาว่าชื่อ sthtest อยู่ที่ IP address อะไร จะทำตามลำดับดังนี้ครับ

1. ค้นหาที่ไฟล์ hosts

จะตรวจสอบการตั้งค่าของไฟล์ hosts ที่ %systemroot%\system32\drivers\etc\ (ปกติแล้วจะอยู่ที่ C:\Windows\System32\drivers\etc\hosts) ว่ามีการกำหนดเอาไว้ในเครื่องรึเปล่าว่าชื่อ sthtest อยู่ที่ IP address อะไร

ถ้าหาในไฟล์ hosts แล้วไม่เจอ สิ่งที่จะทำต่อคือ

2. ค้นหาใน DNS cache

จะหาใน DNS cache ว่าเคยทำ DNS resolution กับชื่อนี้แล้วหรือยัง สมมุติถ้าเคย resolve ชื่อเว็บ www.cyfence.com แล้วจะมีการจดจำชื่อนั้น ๆ ไว้ชั่วคราว (cache) ดูได้จากคำสั่ง ipconfig /displaydns

ถ้าหากหาใน hosts ไฟล์แล้วยังไม่เจอ หาใน DNS cache แล้วก็ยังไม่เจอ สิ่งที่จะทำต่อ คือ

3. ใช้ DNS ค้นหา

ตามที่เราเห็นในผลการดักจับข้อมูลด้วย Wireshark ก็คือมีการใช้ DNS query ไปถาม DNS server ว่าชื่อ sthtest อยู่ที่ IP address อะไร DNS จะมีรายละเอียดปลีกย่อยอีกขอละไว้ น่าจะเคยผ่านตากันมาบ้างแล้ว ใครสนใจไปอ่านต่อที่ https://howdns.works/

ภาพต้นฉบับจาก: https://en.wikipedia.org/wiki/Domain_Name_System

ถ้า DNS หาเจอแบบ www.cyfence.com คือ 61.19.99.20 ก็คงจบ ต่อเข้าเว็บหรือเครื่องนั้น ๆ ได้เลย แต่ถ้ายังหาไม่เจออีกสิ่งที่จะทำต่อคือ

4. ใช้ LLMNR (Link-Local Multicast Name Resolution) ค้นหา

LLMNR เป็น protocol เฉพาะของฝั่ง Windows ทำงานผ่าน port TCP/UDP 5355, 137 ที่ใช้ในการหาว่าชื่อเครื่อง ชื่อ domain อยู่ที่ IP address อะไรเมื่อ DNS หาไม่เจอ โดยจะทำการหาใน local subnetwork ผ่านการส่งคำถาม (เหมือน DNS query) ไปที่ multicast IP address ที่ 224.0.0.252 (สำหรับ IPv4) โดยเป็นการถามแบบกลุ่มไปหาเครื่องอื่น ๆ เฉพาะในวง local subnetwork เดียวกัน จากนั้นเมื่อเครื่อง Windows ปลายทางที่รองรับ LLMNR ได้รับคำถามว่า sthtest อยู่ที่ไหน และ รู้ว่า sthtest อยู่ที่ไหน หรือคือตัวเอง เครื่องปลายทางนั้นก็จะตอบ IP address ตัวเองกลับไป ทำให้คนถามรู้ได้ว่าเครื่อง sthtest อยู่ที่ IP address ไหน จะได้เชื่อมต่อเข้าไปได้

5. ใช้ NBNS (NetBIOS Name Server) ค้นหา

NBNS ก็คล้าย ๆ LLMNR เป็น protocol เฉพาะของฝั่ง Windows ที่ใช้ในการหาชื่อเครื่องว่าอยู่ที่ไหน จะหาใน cache สำหรับ NBNS ก่อนจากนั้นจะใช้เครื่องที่ถูกตั้งเป็น Windows Internet Name Service (WINS) ไว้ (ถ้ามี) ถ้าไม่มีจะ หาว่ามีเครื่องที่เป็น NBNS เฉพาะตั้งค่าระบุไว้ในไฟล์ lmhosts ไหม ถ้าหาหมดแล้วยังไม่มีจะส่งคำถาม (เหมือน DNS query แต่เป็นของ NetBIOS) ไปหา broadcast address เพื่อไปถามต่อกับทุก ๆ เครื่องใน local subnetwork เดียวกันว่ามีใครคือ หรือรู้จักชื่อ sthtest ที่กำลังหาไหม

จากในตัวอย่าง packet [5] นี้จะเห็นว่า broadcast address คือ 192.168.15.255 มีการไปถามว่าเครื่อง sthtest อยู่ที่ IP address อะไร หลังจาก hosts ไฟล์ไม่รู้ DNS cache ไม่มี DNS ไม่รู้ LLMNR ไม่รู้

จบ 5 ขั้นตอนพื้นฐานว่า Windows รู้ได้อย่างไร ว่าชื่อเว็บอยู่ที่ไหน (ถ้า DNS หาไม่เจอ)

คราวนี้เรามามองในมุมแฮกเกอร์ กันบ้างว่า เมื่อแฮกเกอร์ทำความเข้าใจ 5 ขั้นตอนว่า Windows ทำการหาชื่อเครื่องยังไงแล้ว จะใช้ประโยชน์จากเรื่องนี้ ทำการแฮกเจาะเข้าระบบได้ยังไง

รู้จักกับเทคนิค LLMNR/NBNS Poisoning

ถ้าเราใช้วิชาสังเกตแบบโจร ๆ เลเวล 99 กับกระบวนการถามแบบ multicast ของ LLMNR หรือแบบ broadcast ของ NBNS เราจะรู้ได้ทันทีว่า การทำแบบนี้ไม่ปลอดภัยมาก ๆ ด้วยเหตุผลว่า ถ้าเครื่อง Windows ของเหยื่อไปถามเครื่องอื่น ใน local subnetwork เดียวกัน สมมุติถามว่าเครื่อง sthtest อยู่ที่ IP address อะไร ก็มีโอกาสจะเป็นไปได้ว่า จะมีเครื่องของแฮกเกอร์ ที่จะคอยตอบทุก ๆ คำถาม ทุก ๆ คน ว่าเครื่องอะไรก็ตาม ที่มีใครก็ได้ถามมา อยู่ที่ IP address ของแฮกเกอร์เอง (เช่น 1.3.3.7) จากนั้น เมื่อชื่อที่มีคนมาถาม ถูก resolve เป็น IP address แฮกเกอร์เมื่อไร เวลาเหยื่อเชื่อมต่อเข้ามา เพื่อจะ รับ-ส่ง ข้อมูล ก็จะโดนดักข้อมูลผ่านเครื่องแฮกเกอร์ได้ทันทีนั้นเอง

การโจมตีแบบนี้ทำได้ก็ต่อเมื่อแฮกเกอร์ได้เข้าไปอยู่ใน local subnetwork เดียวกับเหยื่อแล้ว หรือสามารถแฮกเข้าไปในเครื่องใด ๆ ใน local subnetwork เดียวกับเหยื่อได้ และเครื่องเหยื่อมีการถามหาชื่อเครื่องที่ DNS หาไม่เจอ ซึ่งอาจเกิดได้จากหลายสาเหตุเช่น การพิมพ์ผิด อย่างจะพิมพ์ webserver1 ไปพิมพ์ websever1 แทน (ตัว r หาย) หรือการพิมพ์ชื่อเครื่องที่เพิ่งโดนลบออกจาก DNS ก็จะเกิดการไปใช้ LLMNR/NBNS ไปตามหาเครื่องปลายทางที่ไม่มีอยู่จริงหรือที่คล้ายชื่อจริงแต่สะกดไม่เหมือนกัน ซึ่งสิ่งเหล่านี้เมื่อตรงตามเงื่อนไข แฮกเกอร์ก็สามารถตอบ LLMNR/NBNS เป็น IP address ของตัวเองกลับไป เพื่อทำการดักข้อมูลเหยื่อได้

วิธีการที่ให้แฮกเกอร์ มาตอบทุก ๆ การ query ถามชื่อด้วย protocol ของ LLMNR/NBNS นี้แหละเรียกว่าการทำ LLMNR/NBNS Poisoning นั้นเอง ง่ายไหม?

รู้จักกับ Net-NTLMv2

ทีนี้เนี่ย ปัญหาที่น่ากลัวกว่านั้นอีกคือ ถ้าหากถูกโจมตีด้วยเทคนิค LLMNR/NBNS Poisoning อาจถูกขโมยรหัสผ่านในหลายช่องทาง หนึ่งในนั้นเกิดขึ้นได้เพราะเครื่อง Windows โดยเฉพาะในองค์กรที่มีการใช้ Active Directory กับ domain user เวลามีการเชื่อมต่อเข้าเครื่องอื่น ๆ จะมีการส่งค่าเรียกว่า Net-NTLM แนบไปด้วยผ่าน protocol ชื่อว่า NTLM authentication ทำการ รับ-ส่งค่า challenge/response เพื่อใช้ในการยืนยันสิทธิ์เข้าถึง network resource อื่น ๆ ด้วยสิทธิ์ของ Windows user ที่เราล็อคอินอยู่ เอาแบบคร่าว ๆ เลยนะเรื่องมันมีอยู่ว่าคือ

1. Windows จะเก็บรหัสผ่านในรูปแบบที่มีการแปลงเป็นค่าที่แปลงกลับได้ยาก (hash) โดยใช้ algorithm ชื่อว่า NTLM (บางทีก็เรียกว่า NT หรือ NT hash แทน, ตัวเก่าจะชื่อ LM เฉย ๆ) โดยถ้าเป็น local user จะเก็บใน c:\windows\system32\config\SAM ถ้าเป็น domain user จะเก็บอยู่ในเครื่อง domain controller ที่ไฟล์ ntds.dit (ปกติแล้วอยู่ที่ c:\windows\ntds\ntds.dit) เป็นการลดความเสี่ยงแทนการเก็บรหัสผ่านเป็นค่าต้นฉบับ (plaintext)

เช่นสมมุติรหัสผ่านคือ P@ssw0rd ใน Windows ก็จะเก็บค่านี้เป็นในรูปแบบ NTLM hash คือค่า DE26CCE0356891A4A020E7C4957AFC72 แทน เวลามีการล็อคอินก็จะแปลงค่าที่ user พิมพ์มาสมมุติพิมพ์รหัสผ่านถูกคือ P@ssw0rd ในรูปแบบ NTLM hash เหมือนเดิม แล้วเอาค่าที่แปลงได้มาเทียบกับค่า NTLM hash ที่เก็บไว้ใน SAM หรือ ntds.dit เพื่อตรวจสอบว่า user ใส่รหัสผ่านถูกหรือเปล่าได้ และทำให้สามารถเก็บรหัสผ่านอย่างปลอดภัยมากขึ้น (กว่าการเก็บค่าต้นฉบับเป็น P@ssw0rd) ได้

2. ทีนี้เนี่ยใน Windows เพื่อความปลอดภัยอีก 1 ชั้นเวลาจะต่อเข้าเครื่องอื่นใน network แล้วมีการล็อคอิน จะนำค่า NTLM hash จากข้อแรก มาเข้ารหัสและแปลงเป็นค่าอีกค่าเรียกว่า Net-NTLM จะมี 2 รุ่นคือ Net-NTLMv1 กับ Net-NTLMv2 (บางที่ก็เรียกว่า NTLMv1 NTLMv2 เฉย ๆ คนเลยมักจะสับสนกัน เนื่องจากมันคนละค่ากับ NTLM hash ในข้อแรก) เพื่อใช้ในการล็อคอินที่เครื่องปลายทางกับ Active Directory เพื่อขอสิทธิ์เข้าถึงเครื่องปลายทางนั้นเอง โดยกระบวนการที่เกิดขึ้นนี้ทำผ่าน authentication protocol ที่เรียกว่า NTLM authentication ที่เกริ่นมาในข้างต้น

หลักการของ NTLM authentication (challenge/response) ฉบับย่อ

ข้อดีของการใช้ Net-NTLMv2 ใน NTLM authentication ด้วยการรับ-ส่ง challenge/response คือ

  1. ผู้ใช้งานในระบบ (user) และเครื่องเซิร์ฟเวอร์ สามารถยืนยันตัวเอง-ตรวจสอบ ได้ว่า user ล็อคอินสำเร็จหรือเปล่า โดยไม่ต้องให้ user ส่งรหัสผ่าน (P@ssw0rd) ของจริงผ่าน network ซึ่งไม่ปลอดภัยมาก ๆ อาจถูกดักจับรหัสผ่านไปใช้ล็อคอินได้
  2. ป้องกันการถูก replay attack โดยต่อให้ถ้าหากส่งรหัสผ่านที่ถูก hash แล้วในรูปแบบ NTLM hash (DE26CCE0356891A4A020E7C4957AFC72) มาตรง ๆ ผ่านระบบ network อาจโดนดักและนำไปใช้ล็อคอินเครื่องอื่นได้อยู่ดี ภาษาแฮกเกอร์เรียกว่าการทำ Pass-the-Hash (PtH) การทำ Net-NTLMv2 จะมีการสร้างค่าสุ่มจากเซิร์ฟเวอร์ใหม่เสมอในขั้นตอนที่ 4,5 (เรียกว่า challenge หรือ salt หรือ nonce) ใส่เข้าไปทุก ๆ ครั้งที่มีการยืนยันตัวตน ทำให้ค่า Net-NTLMv2 (response) ที่ตอบกลับมา นำไปใช้ล็อคอินระบบอื่นไม่ได้ เพราะ challenge ที่สุ่มมาใหม่จากเครื่องอื่นจะไม่ตรงกันแล้ว (ถึง Replay ตรง ๆ ไม่ได้แต่ยังโดนโจมตีด้วยเทคนิค Relay ได้อยู่ คือการโดนดักระหว่างทางแฮกเกอร์ก็เอา Net-NTLMv2 ต่อเข้าเครื่องที่เหยื่อขอ challenge มานั้น ๆ ได้เรียกว่า SMB/NTLM Relay)

โดยตัวอย่างค่า Net-NTLMv2 จะหน้าตาประมาณนี้

ปัญหามีอยู่ว่าถ้าแฮกเกอร์ สามารถดักค่า Net-NTLMv2 ได้ ต่อให้ไม่สามารถนำไปใช้ได้ (replay) เพื่อล็อคอินได้โดยตรง ก็ยังสามารถนำไปลอง แครก เพื่อหารหัสผ่านได้อยู่ดี หลักการง่ายมากเราก็ใช้วิธีการ ลองเอาค่าที่น่าจะเป็นไปได้ว่าเป็นรหัสผ่าน (wordlist) มาเข้า NTLM hash แล้วเอาไปลองเข้ารหัส challenge หรือถอดรหัส response ด้วยโปรแกรม hashcat ถ้าสามารถทำได้สำเร็จ เราก็จะรู้ได้ว่า รหัสผ่านที่เราเอามาลองเดานั้นถูกต้อง จุดสำคัญคือการทำแบบนี้เรียกว่า offline password cracking ซึ่งรองรับการเอา GPU cluster แรง ๆ มาช่วยแกะรหัสผ่าน ต่างจากการทำ password brute forcing ผ่าน network ที่ยิงตรงส่งรหัสผ่านไปยัง เซิร์ฟเวอร์ซึ่งช้ากว่ามาก รวมถึงมีปัจจัยอื่น ๆ อีกมากที่อาจทำให้ลองเดารหัสผ่านไม่สำเร็จ เช่นเกิด log จำนวนมากถูกจับได้หรือมีการตั้ง account lockout ไว้, ดังนั้นการสามารถทำ offline password cracking ได้ถือเป็นจุดที่เป็นความเสี่ยงถ้าหากถูกดักเอาค่า Net-NTLMv2 ออกไปนั้นเอง

หลังจากเรารู้แล้วว่า LLMNR/NBNS Poisoning คืออะไร Net-NTLMv2 คืออะไร สามารถถูก แครก ได้ ต่อมาเราจะมาลองแฮกกันจริง ๆ ว่าในสถานการณ์จริง แฮกเกอร์จะสามารถโจมตีได้อย่างไร

การแฮก Windows ด้วยเทคนิค LLMNR/NBNS Poisoning

โปรแกรมที่นิยมมากที่สุดในการแฮกด้วยเทคนิค LLMNR/NBNS Poisoning ชื่อว่า Responder สามารถดาวโหลดได้จากลิงก์ https://github.com/lgandx/Responder

หรือใครที่ใช้ Kali Linux ก็จะมีติดตั้งไว้อยู่แล้วโดยในสถานการณ์นี้คือมีแฮกเกอร์ 1 คนกับเหยื่อ 2 คนอยู่ใน local subnetwork วงเดียวกัน 192.168.15.0/24

เครื่องแฮกเกอร์
ที่เครื่องแฮกเกอร์ (192.168.15.148) ก็ทำการเปิดโปรแกรม Responder ระบุ network interface ระบุ IP address ของตัวเองด้วยคำสั่งดังนี้

# responder -I eth0 -i 192.168.15.148

เครื่องเหยื่อ #1
จากนั้นเครื่องเหยื่อ #1 เป็น Windows 7 อยู่ที่ IP address 192.168.15.149 ก็ได้พยายามเข้าเซิร์ฟเวอร์ไฟล์ที่ พิมพ์ผิดหรือไม่มีอยู่จริงในกรณีนี้คือ \\sthfileshare\secret

สิ่งที่เกิดขึ้นคือเครื่อง Windows เหยื่อ (192.168.15.149) จะพยายามหาว่าเครื่อง sthfileshare อยู่ที่ไหน ผ่านทางไฟล์ hosts, DNS cache, DNS มาจนถึง LLMNR ปรากฏว่า Responder จะตอบคำถามของ LLMNR ว่าเครื่อง sthfileshare คือเครื่องของแฮกเกอร์ (192.168.15.148) ทำให้เครื่อง Windows เหยื่อ (192.168.15.149) ต่อเข้ามาหาเครื่องของแฮกเกอร์ (192.168.15.148) นั้นเอง

จากนั้นเครื่อง Windows เหยื่อ (192.168.15.149) จะพยายามใช้สิทธิ์ของตัวเองต่อเข้าไปยังเครื่อง sthfileshare ของแฮกเกอร์ (192.168.15.148) และส่ง Net-NTLMv2 ของผู้ใช้งานปกติออกไป จะพบว่าจะขึ้นหน้าต่างให้ใส่รหัสผ่าน เพราะค่าที่ส่งไปใช้ไม่ได้ ดังนั้นต่อให้เหยื่อ #1 ไม่พิมพ์รหัสผ่านใหม่ลงไป ณ ตอนนี้ แฮกเกอร์ก็ได้ขโมยค่า Net-NTLMv2 ได้เป็นที่เรียบร้อย (ถ้าเหยื่อลองพิมพ์รหัสผ่านอื่นไปด้วย ก็จะได้ค่า Net-NTLMv2 ของรหัสผ่านอื่นด้วย)

เครื่องเหยื่อ #2
จากนั้นเครื่องเหยื่อ #2 เป็น Windows 10 อยู่ที่ IP address 192.168.15.153 ก็ได้พยายามเข้าเว็บ sthbanking.com ด้วย Google Chrome แต่ดันพิมพ์ผิดลืมใส่จุด ไปเข้าเว็บ sthbankingcom แทน

ซึ่งเว็บ sthbankingcom ไม่มีอยู่จริง hosts ไฟล์ไม่รู้จักใน DNS cache ไม่มี DNS ไม่รู้ ดังนั้นเครื่อง Windows จึงใช้ LLMNR และ NBNS ไปถามหาเครื่องใน local subnetwork ว่าใครรู้จัก หรือใครคือ sthbankingcom รึเปล่า?

แฮกเกอร์ (192.168.15.148) ที่แฝงตัวอยู่ใน local subnetwork ก็ทำการตอบทันที ว่าฉันเองคือ sthbankingcom อยู่ที่ 192.168.15.148 จากนั้นเมื่อเป็นเครื่องภายใน ก็มีการทำ NTLM challenge/response เพื่อยืนยันว่า user ที่เข้าเว็บสิทธิ์เข้าไปดูหน้าเว็บที่เครื่องนี้ไหมอย่างอัตโนมัติ ทำให้แฮกเกอร์ สามารถดักเอาค่า Net-NTLMv2 ของเหยื่อ #2 ออกมาได้

ลองการ แครก ค่า Net-NTLMv2 เพื่อแกะรหัสผ่าน

จากนั้นแฮกเกอร์ก็นำค่า Net-NTLMv2 ที่ได้มาจากเหยื่อทั้งสองคนมาเก็บใส่ในไฟล์ชื่อ ntlmv2-demo.txt แล้วก็ทำการลอง แครก ด้วยโปรแกรม hashcat ดังนี้

# hashcat -m 5600 /tmp/ntlmv2-demo.txt /usr/share/wordlists/rockyou.txt --force

ใช้เวลาแค่ 7 วินาที แฮกเกอร์ก็สามารถแกะรหัสผ่านของเหยื่อทั้งสองคนออกมาได้

จากรูปโดยรหัสผ่านของเหยื่อคนแรกคือ P@ssw0rd และคนที่สองคือ 1234567890
โดนแฮกง่ายไหม? แล้วองค์กรของคุณตกอยู่ในความเสี่ยงนี้หรือเปล่า?

วิธีการป้องกันแก้ไข

1. ตั้งรหัสผ่านให้ปลอดภัย

จะเห็นว่าจากตัวอย่าง เหยื่อทั้งสองคนตั้งรหัสผ่านอย่างไม่ปลอดภัย แฮกเกอร์จึงสามารถแกะรหัสผ่านออกได้ โดยง่าย ดังนั้น ในฐานะผู้ใช้งานทั่วไป ควรตั้งรหัสผ่านให้มีความมั่นคงปลอดภัย เป็นค่าที่ยาวอย่างน้อย 12 ตัวอักษร และเป็นค่าที่เดาโดยผู้อื่นได้ยาก

ในระดับองค์กรควรจะกำหนด password policy ให้ domain user ด้วย Group Policy Object (GPO) อย่างปลอดภัย เพื่อบังคับให้พนักงานทุกคนตั้งรหัสผ่านที่ยาก และถ้าเป็นไปได้ควรมีการเปิดใช้งาน multi-factor authentication โดยเฉพาะในระบบที่ต้องการความปลอดภัยในระดับสูง

ในส่วน local admin เครื่องทั่วไป ควรเปลี่ยนชื่อและปิด Account ถาวร (ใน Windows 10 ปิดเป็นค่าเริ่มต้นอยู่แล้ว) หรือหากยังจำเป็นต้องมี ในสภาพแวดล้อม windows domain ควรใช้ LAPS (Local Administrator Password Solution) ในการสุ่มรหัสผ่านที่ปลอดภัยให้ local admin ทุกเครื่องอยู่เรื่อย ๆ

รวมถึงในระดับ network access และ physical access เราไม่ควรให้เครื่องบุคคลภายนอกที่ไม่น่าเชื่อถือเชื่อมต่อกับระบบสำคัญขององค์กรโดยตรง หากจำเป็นอาจมีการทำ network segmentation แยกเครื่องที่มีความเสี่ยงออกจากเครื่องที่มีความสำคัญสูงอย่าให้เข้าถึงกันได้

2. ปิด LLMNR และ NBNS

จากการโจมตีนี้ แฮกเกอร์ใช้ประโยชน์จาก protocol ของ Windows ชื่อว่า LLMNR และ NBNS ที่ใช้ในการ ค้นหาชื่อ จริง ๆ แล้ว ทั้งผู้ใช้งานทั่วไปตามบ้านและในระดับองค์กร อาจไม่มีความจำเป็นจะต้องใช้ความสามารถนี้ ควรจะปิดถาวร ถ้าหากต้องการแปลงชื่อเป็น IP address ภายใน ควรกำหนดที่ DNS server หรือใช้ไฟล์ hosts โดยตรง อย่าให้เกิดการถามผ่าน multicast หรือ broadcast เพราะมีความเสี่ยงจะถูกปลอมแปลงและดักข้อมูลได้

วิธีการปิด LLMNR สำหรับเครื่องผู้ใช้งานทั่วไปใช้ gpedit.msc เข้าไปเปิดการตั้งค่าชื่อ “Turn off Multicast Name Resolution” ให้เป็น Enabled

วิธีการปิด NBNS เปิด Network Properties เลือก IPv4 เลือก Advanced > Advanced และเลือก “Disable NetBIOS over TCP/IP” รวมถึงยังสามารถปิดได้ผ่านการตั้งค่า DHCP server ที่ใช้งาน

3. เปิดใช้งาน SMB Signing และบังคับ Network Level Authentication แบบปลอดภัย

ผู้ดูแลระบบยังสามารถเพิ่มเติมความปลอดภัยอีกระดับ โดยการตั้งค่าใน group policy ให้ “Network security: LAN Manager authentication level” เป็นค่า “Send NTLMv2 response only\refuse LM & NTLM” เพื่อป้องกันการโจมตีด้วย Net-NTLM downgrade (ทำให้เหยื่อส่งค่า Net-LM แทน Net-NTLM ซึ่งสามารถโดนแครกได้เร็วขึ้นด้วยการทำ rainbow table จาก challenge ที่แฮกเกอร์ตั้งไว้) รวมถึงเปิด SMB Signing เพื่อป้องกัน SMB Relay เป็นการโจมตีที่แฮกเกอร์ส่ง response ไปล็อคอินเครื่องปลายทางที่ส่ง challenge มาแทนเหยื่อ (แต่ใช้ replay เข้าเครื่องอื่นไม่ได้) โดยการตั้งค่าชื่อ “Microsoft network server: Digitally sign communications (always)” และ “Microsoft network client: Digitally sign communications (always)” ให้เป็น Enabled โดยการเปิด SMB Signing อาจทำให้การเชื่อมต่อช้าลงเล็กน้อย

สำหรับในระดับองค์กรควรทำการตรวจสอบการใช้งานจริงของ LLMNR/NBNS ในองค์กรก่อน หากมีย้ายไปใช้ DNS หรือ hosts ไฟล์ให้หมด ทดสอบให้เรียบร้อยว่าไม่มีผลกระทบ จากนั้นค่อยกำหนดการตั้งค่าผ่าน GPO เพื่อปิด LLMNR/NBNS

หวังว่าเมื่อได้รับความรู้เรื่องนี้แล้ว ท่านผู้อ่านจะสามารถนำไปปรับใช้ทำให้ระบบไอทีใกล้ตัวมีความมั่นคงปลอดภัยมากยิ่งขึ้นได้ครับ

 

บทความที่เกี่ยวข้อง