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

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

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

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

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

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

คาดว่างานจะมุ่งเน้นไปที่สองด้าน:

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

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

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

ที่มา: opennet.ru

ซื้อโฮสติ้งที่เชื่อถือได้สำหรับไซต์ที่มีการป้องกัน DDoS เซิร์ฟเวอร์ VPS VDS 🔥 ซื้อบริการเว็บโฮสติ้งที่เชื่อถือได้ พร้อมระบบป้องกัน DDoS และเซิร์ฟเวอร์ VPS/VDS | ProHoster