การโจมตีด้วย "รหัสล่องหน" เผยช่องโหว่ร้ายแรงในความปลอดภัยของซอฟต์แวร์

ทีมชุมชน BigGo
การโจมตีด้วย "รหัสล่องหน" เผยช่องโหว่ร้ายแรงในความปลอดภัยของซอฟต์แวร์

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

อันตรายที่มองไม่เห็นในที่โจ่งแจ้ง

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

เทคนิคนี้ทำลายการตรวจสอบโค้ดแบบดั้งเดิมโดยสิ้นเชิง คุณไม่สามารถพบเห็นสิ่งที่มองไม่ได้ diff view ของ GitHub? ไม่แสดงสิ่งน่าสงสัย การเน้นไวยากรณ์ของ IDE คุณ? เรียบร้อยทั้งหมด

ความสงสัยของชุมชนและความเป็นจริงในทางปฏิบัติ

แม้จะมีลักษณะที่น่าตกใจของเทคนิคนี้ ผู้เชี่ยวชาญด้านความปลอดภัยหลายคนยังคงสงสัยที่จะเรียกมันว่าเป็นการเปลี่ยนแปลงเกมโดยสมบูรณ์ ชุมชนได้ชี้ให้เห็นว่าในขณะที่พาโลดที่ถูกเข้ารหัสอาจจะมองไม่เห็น แต่กลไกการถอดรหัสนั้นเอง—ซึ่งโดยทั่วไปเกี่ยวข้องกับฟังก์ชันเช่น eval(atob(decodedString))—ยังคงมองเห็นได้อย่างชัดเจนระหว่างการตรวจสอบโค้ด ดังที่ผู้แสดงความคิดเห็นหนึ่งคนระบุ หากผู้ตรวจสอบโค้ดพลาดสัญญาณเตือนสีแดงที่ชัดเจนเช่นนั้น ความไม่สามารถมองเห็นของพาโลดก็กลายเป็นเรื่องรองไปเสียหมด ผู้เชี่ยวชาญหลายคนแนะนำว่าการปฏิบัติด้านความปลอดภัยที่เหมาะสมและการตรวจสอบโค้ดพื้นฐานควรจะตรวจจับฟังก์ชันการถอดรหัสที่มองเห็นได้นั้น ไม่ว่าพวกมันจะกำลังถอดรหัสอะไรก็ตาม

การป้องกันแบบง่ายๆ ต่อการโจมตีที่ซับซ้อน

ชุมชนด้านความปลอดภัยได้ระบุมาตรการตอบโต้ที่ตรงไปตรงมาอย่างรวดเร็ว เครื่องมือแก้ไขโค้ดสมัยใหม่หลายตัวมีปลั๊กอินที่เปิดเผยอักขระที่มองไม่เห็นอยู่แล้ว และนักพัฒนาบางคนสนับสนุนกฎการลินต์ที่ทำเครื่องหมายหรือลบอักขระที่ไม่แสดงผลออกจากฐานโค้ดโดยอัตโนมัติ ความจริงที่ว่าอักขระที่มองไม่เห็นแทบไม่มีจุดประสงค์ที่ถูกต้องตามกฎหมายในบริบทการเขียนโปรแกรมส่วนใหญ่ ทำให้ง่ายต่อการปฏิบัติต่อพวกมันว่าเป็นสิ่งน่าสงสัย ผู้แสดงความคิดเห็นหลายคนระบุว่าการกำหนดมาตรฐานการเขียนโค้ดที่ห้ามใช้อักขระยูนิโคดที่ไม่จำเป็น สามารถทำให้การโจมตีประเภทนี้ทั้งหมดเป็นกลางได้อย่างมีประสิทธิภาพ โดยไม่ต้องใช้โครงสร้างพื้นฐานด้านความปลอดภัยใหม่ที่ซับซ้อน

วิธีการตรวจจับแบบง่าย:

  • ส่วนขยาย VSCode: "Show Invisible Characters" โดย YusufDane
  • VIM: คำสั่ง :set list เพื่อแสดงอักขระที่มองไม่เห็น
  • กฎ linting แบบกำหนดเองเพื่อทำเครื่องหมายอักขระ Unicode ที่ไม่สามารถพิมพ์ได้
  • Git hooks เพื่อตรวจจับและป้องกันการ commit ที่มีอักขระที่น่าสงสัย
รายงานการวิเคราะห์ที่เน้นผลการค้นพบที่สำคัญเกี่ยวกับมัลแวร์และความจำเป็นในการพัฒนาความสามารถในการตรวจจับที่ดีขึ้นในโค้ดเบส
รายงานการวิเคราะห์ที่เน้นผลการค้นพบที่สำคัญเกี่ยวกับมัลแวร์และความจำเป็นในการพัฒนาความสามารถในการตรวจจับที่ดีขึ้นในโค้ดเบส

เหนือกว่าคำโฆษณา: สิ่งที่สำคัญจริงๆ

การอภิปรายในวงกว้างเผยให้เห็นว่าในขณะที่แง่มุมของโค้ดล่องหนนั้นดึงดูดความสนใจได้ดี แต่ปัญหาที่สำคัญกว่าอาจเป็นการพึ่งพาการตรวจสอบโค้ดด้วยสายตามากเกินไปโดยไม่มีเครื่องมือตรวจสอบความปลอดภัยอัตโนมัติที่เพียงพอ การโจมตีครั้งนี้ได้บุกรุกเครื่องมือการพัฒนาและแอปพลิเคชันบล็อกเชนยอดนิยมหลายรายการได้สำเร็จ ก่อให้เกิดความเสียหายประมาณ 3 ล้านดอลลาร์สหรัฐ แต่ช่องโหว่พื้นฐานไม่ใช่เทคนิคการล่องหน—แต่เป็นการมีอยู่ของฟังก์ชัน eval ที่ดำเนินการกับเนื้อหาที่ถูกถอดรหัส เหตุการณ์นี้ทำหน้าที่เป็นเครื่องเตือนใจว่าหลักสุขอนามัยความปลอดภัยพื้นฐาน ซึ่งรวมถึงการตรวจสอบความถูกต้องของอินพุตที่เหมาะสมและการหลีกเลี่ยงฟังก์ชันอันตรายเช่น eval ยังคงมีความสำคัญอย่างยิ่ง ไม่ว่าการโจมตีจะดูซับซ้อนเพียงใด

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

อ้างอิง: GlassWorm: หนอนไส้เดือนตัวแรกที่ใช้โค้ดล่องหนโจมตี OpenSea Marketplace