Mozilla เริ่มใช้เทคโนโลยีการแยกไลบรารี RLBox

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

บริษัท มอซิลลา แผน ใช้ RLBox ใน Linux builds ของ Firefox 74 และ macOS builds ของ Firefox 75 เพื่อแยกการทำงานของไลบรารี กราไฟท์รับผิดชอบในการเรนเดอร์ฟอนต์ อย่างไรก็ตาม RLBox ไม่ได้เฉพาะเจาะจงกับ Firefox และสามารถใช้เพื่อแยกไลบรารีใดๆ ในโครงการที่กำหนดเองได้ การพัฒนา RLBox การแพร่กระจาย ภายใต้ใบอนุญาต MIT ปัจจุบัน RLBox รองรับแพลตฟอร์ม Linux และ macOS โดยคาดว่าจะรองรับ Windows ในภายหลัง

กลไก งานของ RLBox มาจากการรวบรวมโค้ด C/C++ ของไลบรารีที่แยกออกมาเป็นโค้ด WebAssembly ระดับกลางระดับต่ำ ซึ่งจากนั้นได้รับการออกแบบให้เป็นโมดูล WebAssembly ซึ่งการอนุญาตจะถูกตั้งค่าให้สัมพันธ์กับโมดูลนี้เท่านั้น (ตัวอย่างเช่น ไลบรารี สำหรับการประมวลผลสตริงจะไม่สามารถเปิดซ็อกเก็ตเครือข่ายหรือไฟล์ได้) การแปลงโค้ด C/C++ เป็น WebAssembly เสร็จสิ้นแล้ว wasi-sdk.

สำหรับการดำเนินการโดยตรง โมดูล WebAssembly จะถูกคอมไพล์เป็นรหัสเครื่องโดยใช้คอมไพเลอร์ ลูเซท และทำงานใน "กระบวนการนาโน" ที่แยกจากหน่วยความจำที่เหลือของแอปพลิเคชัน คอมไพเลอร์ Lucet ใช้โค้ดเดียวกันกับเอ็นจิ้น JIT เครนใช้ใน Firefox เพื่อรัน WebAssembly

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

Mozilla เริ่มใช้เทคโนโลยีการแยกไลบรารี RLBox

ข้อมูลระดับสูงมีให้สำหรับนักพัฒนา APIซึ่งช่วยให้คุณสามารถเรียกใช้ฟังก์ชันไลบรารีในโหมดแยกได้ ตัวจัดการ WebAssembly แทบไม่ต้องใช้ทรัพยากรเพิ่มเติมและการโต้ตอบกับพวกมันก็ไม่ได้ช้ากว่าการเรียกใช้ฟังก์ชันทั่วไปมากนัก (ฟังก์ชันไลบรารีจะดำเนินการในรูปแบบของโค้ดเนทีฟและต้นทุนค่าโสหุ้ยจะเกิดขึ้นเฉพาะเมื่อคัดลอกและตรวจสอบข้อมูลระหว่างการโต้ตอบกับสภาพแวดล้อมที่แยก) ฟังก์ชันไลบรารีแบบแยกไม่สามารถเรียกใช้ได้โดยตรง และต้องเข้าถึงได้โดยใช้
เลเยอร์ involve_sandbox_function()

ในทางกลับกัน หากจำเป็นต้องเรียกใช้ฟังก์ชันภายนอกจากไลบรารี ฟังก์ชันเหล่านี้จะต้องถูกกำหนดไว้อย่างชัดเจนโดยใช้เมธอด register_callback (โดยค่าเริ่มต้น RLBox จะให้การเข้าถึงฟังก์ชันต่างๆ ห้องสมุดมาตรฐาน). เพื่อให้มั่นใจถึงความปลอดภัยของหน่วยความจำ การแยกการเรียกใช้โค้ดยังไม่เพียงพอ และจำเป็นต้องตรวจสอบสตรีมข้อมูลที่ส่งคืนด้วย

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

ที่มา: opennet.ru

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