70% ของปัญหาด้านความปลอดภัยใน Chromium เกิดจากข้อผิดพลาดของหน่วยความจำ

ผู้พัฒนาโครงการ Chromium วิเคราะห์ ช่องโหว่ที่มีความเสี่ยงสูงและร้ายแรง 912 ที่ระบุใน Chrome รุ่นเสถียรตั้งแต่ปี 2015 และสรุปว่า 70% มีสาเหตุมาจากความไม่ปลอดภัยของหน่วยความจำ (ข้อผิดพลาดเมื่อทำงานกับพอยน์เตอร์ในโค้ด C/C++) ครึ่งหนึ่งของปัญหาเหล่านี้ (36.1%) เกิดจากการเข้าถึงบัฟเฟอร์หลังจากเพิ่มหน่วยความจำที่เกี่ยวข้องแล้ว (ใช้งานหลังเลิกใช้งาน)

70% ของปัญหาด้านความปลอดภัยใน Chromium เกิดจากข้อผิดพลาดของหน่วยความจำ

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

เพื่อรักษาความปลอดภัยของโค้ดเบส Google ยังบังคับใช้ "กฎสองข้อ“ ตามที่โค้ดที่เพิ่มเข้ามาจะต้องตรงตามเงื่อนไขไม่เกินสองในสามเงื่อนไข: การทำงานกับข้อมูลอินพุตที่ไม่ได้รับการตรวจสอบ การใช้ภาษาการเขียนโปรแกรมที่ไม่ปลอดภัย (C/C++) และการทำงานด้วยสิทธิ์ระดับสูง กฎนี้บอกเป็นนัยว่าโค้ดสำหรับการประมวลผลข้อมูลภายนอกจะต้องถูกลดให้เหลือสิทธิ์ขั้นต่ำ (แยกกัน) หรือเขียนในภาษาการเขียนโปรแกรมที่ปลอดภัย

เพื่อเพิ่มความปลอดภัยของฐานรหัส ได้มีการเปิดตัวโครงการเพื่อป้องกันข้อผิดพลาดของหน่วยความจำไม่ให้ปรากฏในฐานรหัส มีสามวิธีหลัก: การสร้างไลบรารี C ++ พร้อมฟังก์ชันสำหรับการทำงานของหน่วยความจำอย่างปลอดภัยและการขยายขอบเขตของตัวรวบรวมขยะโดยใช้กลไกการป้องกันฮาร์ดแวร์ MTE (ส่วนขยายการแท็กหน่วยความจำ) และการเขียนส่วนประกอบในภาษาที่ช่วยให้มั่นใจในการทำงานกับหน่วยความจำอย่างปลอดภัย (Java, Kotlin, JavaScript, Rust, Swift)

คาดว่างานจะเน้นใน 2 ด้าน คือ

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

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

70% ของปัญหาด้านความปลอดภัยใน Chromium เกิดจากข้อผิดพลาดของหน่วยความจำ

ที่มา: opennet.ru

เพิ่มความคิดเห็น