ทุกสิ่งที่คุณต้องรู้เกี่ยวกับช่องโหว่ CoronaBlue/SMBGhost (CVE-2020-0796)

อัปเดตล่าสุด: 16 March 2020, Afternoon
การเปลี่ยนแปลง: เพิ่มรายละเอียดกับการวิเคราะห์แบบ Post-mortem analysis

สืบเนื่องจากการเปิดเผยรายละเอียดของช่องโหว่โดย Cisco Talos เมื่อวันอังคารที่ผ่านมา ในวันที่ 10 มีนาคม 2020 Microsoft ได้เผยแพร่ ADV200005 คำแนะนำสำหรับช่องโหว่ RCE (Remote Code Execution) ใน Microsoft Server Message Block 3.1.1 (SMBv3) ซึ่งให้รายละเอียดและข้อมูลที่มากขึ้นเกี่ยวกับช่องโหว่ (CVE-2020-0796) ที่มีลักษณะ “Wormable” ในโปรโตคอล SMB โดยผู้โจมตีสามารถใช้ช่องโหว่เพื่อโจมตีจากระยะไกลและสามารถเเพร่กระจายเช่นเดียวกับกรณีของ CVE-2017-0143/0144 ที่ WannaCry Ransomware ใช้

ทีม Intelligent Response จาก บริษัทไอ-ซีเคียว จำกัด จะมาติดตามรายละเอียดของช่องโหว่นี้ พร้อมทั้งอธิบายที่มาการตรวจจับและการป้องกันการโจมตีช่องโหว่นี้ โดยในบล็อกนี้นั้นเราจะทำการติดตามและอัปเดตข้อมูลรายวันเพื่อให้ผู้ใช้บริการได้รับข้อมูลที่ทันสมัยที่สุด

รายละเอียดช่องโหว่โดยย่อ

CVE-2020-0796 หรือที่ถูกเรียกในอีกชื่อหนึ่งว่า Corona Blue และ SMB Ghost ช่องโหว่เป็นการโจมตีจากระยะไกลใช้ประโยชน์จากข้อผิดพลาดโดยการส่งแพ็คเก็ตที่ออกแบบมาเป็นพิเศษไปยังเซิร์ฟเวอร์ SMBv3 ที่เป็นเป้าหมายซึ่งเหยื่อจะต้องเชื่อมต่อด้วย โดยจากข้อมูลเบื้องต้นนั้น ช่องโหว่นี้เกิดจากปัญหา Buffer overflow ในส่วนที่มีการบีบอัดข้อมูล นอกจากนี้ช่องโหว่จะทำให้การโจมตีแบบ “Wormable” หรือมัลแวร์ชนิดต่างๆ สามารถแผ่กระจายไปบนคอมพิวเตอร์ไคลเอนต์ของเหยื่อได้ง่ายและยากต่อการป้องกัน

อ้างอิงจาก CERT/CC ช่องโหว่นี้ถูกประเมินด้วยคะแนน CVSSv2 แบบ Base score 10 คะแนนเต็ม โดยมีคะแนน Temporal score ซึ่งเกี่ยวข้องกับความเป็นไปได้ในการโจมตีและการลดผลกระทบ 8.1 คะแนน เช่นเดียวกับ Environmental score

ในวันที่ 13 มีนาคม 2020 หลังจากที่ไมโครซอฟต์ได้มีการปล่อยแพตช์ของช่องโหว่นี้ออกมา นักวิจัยด้านความปลอดภัยจาก Synacktiv ก็ได้เปิดเผยบล็อกการวิเคราะห์ช่องโหว่ตามไปทันที ทีมตอบสนองการโจมตีและภัยคุกคามได้ทำการวิเคราะห์แพตช์ที่เกิดขึ้นในไฟล์ srv2.sys และยืนยันตามประเด็นที่ Synacktiv เสนอได้แก่

  • ฟังก์ชันที่มีค่า Similarity ต่ำหรือทุก Change ไปเยอะมากในไฟล์ srv2.sys คือฟังก์ชัน SmbDecompressData
  • ในฟังก์ชันดังกล่าว จุดที่เปลี่ยนไปมากที่สุดคือการเพิ่มกระบวนการตรวจสอบก่อนการเรียกใช้ฟังก์ชัน SrvNetAllocateBuffer ซึ่งจะถูกเรียกขึ้นมาไว้ในการจองพื้นที่หน่วยความจำเพื่อรองรับการ decompress ข้อมูล
  • ในรูปทางด้านซ้ายซึ่งเป็นซอร์สโค้ดของไฟล์ srv2.sys ที่ยังไม่ถูกแพตช์ ฟังก์ชัน SrvNetAllocateBuffer จะทำการนำค่า OriginalCompressedSegmentSize และ OffsetOrLength มาใช้เพื่อประเมินหน่วยของความจำที่จะจอง
  • เนื่องจากสองค่านี้เป็นค่าที่ผู้ใช้งานสามารถควบคุมได้ ผู้ใช้งานสามารถควบคุมทั้งสองค่าให้เกิด Integer overflow เมื่อมีการหาส่วนต่าง และทำให้ SrvNetAllocateBuffer ต้องจอง buffer ขนาดใหญ่เกินจริงจนกลายเป็น BSOD "PAGE_FAULT_IN_NON_PAGED_AREA" ได้
  • ช่องโหว่ Integer overflow สามารถนำไปใช้ในการพัฒนาต่อเป็น Remote code execution ได้ ทั้งนี้ผู้โจมตีจะต้องทำการพัฒนาโค้ดเพื่อ bypass ฟีเจอร์ Exploit mitigation อีกมากมายในทำให้ได้มาซึ่ง RCE ด้วย

บริษัทรักษาความปลอดภัยทางไซเบอร์ Kryptos Logic ได้กล่าวว่ามีโฮสต์ประมาณ 48,000 รายทั่วอินเทอร์เน็ตที่มี Port เปิดการเชื่อมต่อผ่านอินเทอร์เน็ตผ่านโปรโตคอล SMB และมีความเสี่ยงต่อการถูกโจมตีโดยใช้จุดบกพร่องนี้ และได้ทำการเเชร์คลิปการการทดสอบโจมตีนี้ด้วย

การโจมตีช่องโหว่

ในขณะนี้ยังไม่พบการใช้ช่องโหว่นี้การโจมตี หรือการปรากฎของโค้ดสำหรับโจมตีและโค้ด POC ใดๆ ทั้งนี้เราตรวจพบสคริปต์สำหรับการใช้ระบุหาช่องโหว่แล้ว โดยในเบื้องต้นนั้นสคริปต์เหล่านี้ดำเนินการตรวจสอบเพียงแค่รุ่นของเซิร์ฟเวอร์ตามรายละเอียดในเบื้องต้นของช่องโหว่เท่านั้น

ระบบที่ได้รับผลกระทบ

รุ่นของระบบที่ได้รับผลกระทบจากช่องโหว่มีตามรายการดังต่อไปนี้

  • Windows 10 Version 1903 for 32-bit Systems
  • Windows 10 Version 1903 for ARM64-based Systems
  • Windows 10 Version 1903 for x64-based Systems
  • Windows 10 Version 1909 for 32-bit Systems
  • Windows 10 Version 1909 for ARM64-based Systems
  • Windows 10 Version 1909 for x64-based Systems
  • Windows Server, version 1903 (Server Core installation)
  • Windows Server, version 1909 (Server Core installation)

อ้างอิงจากการทดสอบโดย Secure D ซึ่งได้ทำการทดสอบโดยใช้สคริปต์ในการระบุหาช่องโหว่กับอิมเมจที่มีอยู่ในระบบคลาวด์ต่างๆ เราแนะนำให้ดูผลการทดสอบได้ที่เพจของ Secure D เพิ่มเติม อย่างไรก็ตามสคริปต์ดังกล่าวทำการตรวจสอบด้วยปัจจัยที่ค่อนข้างกว้าง และไม่ระบุเฉพาะเจาะจงเนื่องจากยังขาดรายละเอียดของช่องโหว่ การแสดงผลลัพธ์อาจจะยังไม่สามารถเชื่อถือได้ในขณะนี้

การตรวจจับและป้องกันการโจมตี

เนื่องจากจนถึงตอนนี้เรายังไม่มีข้อมูลรายละเอียดช่องโหว่ในเชิงลึกใดๆ การตรวจจับและป้องกันการโจมตีจึงทำได้โดยมองปัจจัยกว้างๆ อาทิ เวอร์ชันของโปรโตคอลที่ถูกรายงานว่าได้รับผลกระทบ และฟีเจอร์ของโปรโตคอลที่อาจเกี่ยวข้องกับช่องโหว่ ดังนั้นการตรวจจับและป้องกันในขณะนี้อาจมีโอกาสสร้างการแจ้งเตือนที่ผิด (False positive) ได้มากกว่า

ในเบื้องต้นทีมตอบสนองการโจมตีและภัยคุกคามขอแนะนำให้พิจารณาวิธีการในการตรวจจับและป้องกันตามขั้นตอนดังนี้

  • อัปเดตวันที่ 13 มีนาคม 2563: ไมโครซอฟต์ได้ดำเนินการปล่อยแพตช์รหัส KB 4551762 เพื่อปิดช่องโหว่นี้แล้ว โดยแพตช์จะเพิ่มกระบวนการตรวจสอบค่าในส่วนของโปรแกรมที่มีช่องโหว่ นี่คือวิธีที่ดีที่สุดในการป้องกันการถูกโจมตีโดยช่องโหว่นี้และเราแนะนำเป็นอย่างยิ่งให้ดำเนินการแพตช์โดยทันที (ดาวโหลดแพตช์ได้จากที่นี่)
  • ในมุมของการ Hardening มีการปล่อยไฟล์ ADMX ซึ่งจะเพิ่มตัวเลือกใน Group Policy ให้สามารถปิดฟีเจอร์ SMB Compression ได้ (ดูเพิ่มเติม)
  • คำแนะนำของ Microsoft คือให้ทำการติดตั้งการปรับปรุงช่องโหว่นี้ทันทีที่ออก Patch ป้องกัน เบื้องต้นเราสามารถปิดใช้งานกระบวนการบีบอัดซึ่งคาดว่าจะเกี่ยวข้องกับช่องโหว่เพื่อ Block ผู้โจมตีที่ไม่ได้รับอนุญาตจากการโจมตีช่องโหว่จากเซิร์ฟเวอร์ SMBv3 ด้วยคำสั่ง PowerShell ด้านล่าง

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" DisableCompression -Type DWORD -Value 1 -Force

  • เนื่องจาก SMB เป็นโปรโตคอลที่ส่วนใหญ่จะใช้กันในองค์กร ทาง Microsoft จึงแนะนำให้ Block Traffic ขาเข้าและขาออกสำหรับเครือข่ายภายนอกบน Port TCP 445 บน Firewall ในองค์กรเพื่อป้องกันเครือข่ายและจะช่วยปกป้องระบบที่อยู่หลัง Firewall จากความพยายามโจมตีช่องโหว่นี้ เป็นวิธีการป้องกันที่ดีที่สุดเพื่อช่วยหลีกเลี่ยงการโจมตีทางอินเทอร์เน็ต อย่างไรก็ตามระบบยังอาจเสี่ยงต่อการถูกโจมตีจากภายในองค์กรอยู่ (ดูเพิ่มเติมวิธีการ Block Port TCP 445 ออกจากเครื่องเซิร์ฟเวอร์องค์กร)

การวิเคราะห์ระบบที่คาดว่าถูกโจมตีโดยช่องโหว่

หลังจากที่ไมโครซอฟต์ได้มีการปล่อยแพตช์สำหรับช่องโหว่นี้ออกมา พร้อมกับรายงานการวิเคราะห์ช่องโหว่จากผู้เชี่ยวชาญด้านความปลอดภัย ในวันที่ 14 มีนาคม 2020 นักวิจัยด้านความปลอดภัย eerykitty ได้มีการเปิดเผยโค้ดสำหรับโจมตีช่องโหว่ดังกล่าวซึ่งส่งผลให้ระบบเกิดการ Crash และเหตุการณ์ Blue Screen of Death (BSOD) ในมุมมองของทีมตอบสนองการโจมตีและภัยคุกคาม แม้ว่าผลกระทบจากช่องโหว่ในเวลานี้จะทำให้ระบบสูญเสียได้เพียงความพร้อมในการใช้งาน (Availability) แต่การสูญเสียเพียงความพร้อมในการใช้งานหรือให้บริการก็ส่งผลให้คุณลักษณะที่ทำให้เกิดความมั่นคงปลอดภัยของระบบนั้นไม่สมบูรณ์ได้

ในประเด็นนี้ทีมตอบสนองการโจมตีและภัยคุกคามจะมาสรุปสิ่งที่เราค้นพบในรูปแบบของ Post-mortem analysis ซึ่งสามารถใช้ในการประเมินความปลอดภัยระบบในลักษณะของ Compromised assessment และการช่วยระบุหาต้นตอความผิดปกติหากสงสัยว่าระบบอาจถูกโจมตีด้วยช่องโหว่ CVE-2020-0796 ได้

เราทำการจำลองระบบที่ใช้ในการทดสอบโดยทำการติดตั้งระบบ Windows 10 Enterprise รุ่น 1903 ที่ยังไม่ถูกแพตช์ โดยระบบไม่มีการตั้งค่าหรือติดตั้งโปรแกรมใดๆ เพิ่มเติม การระบุหาตัวบ่งชี้ภัยคุกคาม (Indicator of compromise) จะดำเนินการบนข้อมูลที่ระบบสร้างหรือบันทึกเป็นค่าเริ่มต้นเท่านั้น เพื่อให้ข้อมูลที่สามารถใช้ยืนยันการโจมตีได้ครอบคลุมกับระบบที่มีอยู่ทั่วไปในโลกมากที่สุด

โครงการ eerykitty/CVE-2020-0796-PoC มีการนำแก้ไขการทำงานของไลบรารี smbprotocol เพื่อให้รองรับการทำงานกับฟีเจอร์ compression ใน SMB รุ่น 3.1.1 โดยเพื่อทำการ overflow พื้นที่ในหน่วยความจำ ผู้พัฒนาได้มีการกำหนดค่า OffsetOrLength ในเฮดเดอร์ให้มีค่าเป็น 0xffffffff ไว้ในโค้ดของ smbprotocol อยู่แล้ว

เมื่อระบบที่มีช่องโหว่รับแพ็คเกตจากสคริปต์ที่ใช้โจมตี ระบบจะเกิดการ Crash และจะแสดงอาการ Blue screen of death ด้วย Stop code คือ PAGE_FAULT_IN_NON_PAGED_AREA โดย Stop code มักเกิดจากปัญหาการอ้างอิงข้อมูลในหน่วยความจำที่ไม่ถูกต้องจนทำให้ระบบไม่สามารถทำงานได้

การยืนยันว่ามีการใช้สคริปต์ดังกล่าวหรือสคริปต์ที่มีลักษณะใกล้เคียงกันในการทำ DoS กับระบบที่มีช่องโหว่สามารถตรวจสอบได้ตามประเด็นดังต่อไปนี้

  • ตรวจสอบ Event log ของระบบโดยให้ระบุหา EID41 Kernel-Power ใน System log ซึ่งระบุการรีสตาร์ทของระบบแบบผิดปกติและ EID1001 BugCheck ใน System log ที่ช่วงเวลาใกล้เคียงซึ่งจะระบุว่าระบบเกิดปัญหาจาก "บั๊ก" ของโปรแกรมบางอย่างจนต้องมีการรีสตาร์ท ในกรณีทั่วไประบบจะมีการบันทึกข้อมูลในหน่วยความจำไว้ในลักษณะ Memory dump ซึ่งสามารถใช้ในการระบุหาที่มาของข้อผิดพลาดได้อีกด้วย
  • ทำการตรวจสอบไฟล์ MEMORY.DMP ด้วย Dumpchk หรือ Windbg โดยในกรณีที่ระบบถูกโจมตีด้วย CVE-2020-0796 นั้น ลักษณะของ Call stack จะปรากฎตามรูปด้านบนซึ่งมีสาเหตุมาจากการพยายามใช้พื้นที่ของหน่วยความจำที่ถูกจองขึ้นมาผิดพลาด
    • เนื่องจากข้อจำกัดที่จำเป็นต้องใช้ private symbol ในการวิเคราะห์ ข้อมูลที่เกี่ยวข้องกับฟังก์ชัน srvnet!SmbCompressionDecompress เช่น พารามิเตอร์หรือตัวแปรของฟังก์ชันจึงไม่สามารถระบุได้ยอย่างชัดเจน
  • ระบุหาข้อมูลเครือข่ายที่เกี่ยวข้องกับพอร์ต 445 และมีเป้าหมายมายังระบบที่เกิดความผิดปกติในช่วงเวลาใกล้เคียงกัน เราพบว่าหลังจากที่มีการสั่งโจมตี ระบบจะใช้เวลา 1-2 วินาทีก่อนจะมีการ Crash เกิดขึ้น
  • ยืนยันว่าระบบที่เกิดความผิดปกตินั้นขาดซึ่งการติดตั้งแพตช์และมีการเปิดใช้งานฟีเจอร์ที่เกี่ยวข้องกับการเกิดขึ้นของช่องโหว่จริง

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

อ้างอิง