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

โลโก้ Firefox

นักวิจัยมหาวิทยาลัยสแตนฟอร์ดที่ มหาวิทยาลัยแคลิฟอร์เนีย ในซานดิเอโก y la มหาวิทยาลัยเท็กซัส ในออสติน พวกเขามีการพัฒนา ชุดเครื่องมือที่พวกเขาตั้งชื่อให้ « RLBox », นี้ สามารถใช้เป็นฉนวนเพิ่มเติมได้ เพื่อป้องกันช่องโหว่ในไลบรารีฟังก์ชัน

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

Mozilla วางแผนที่จะใช้ RLBox ใน Firefox 74 builds สำหรับ Linux และ การรวบรวมของ macOS ใน Firefox 75 เพื่อแยกการทำงานของไลบรารี Graphiteซึ่งมีหน้าที่ในการแสดงแหล่งที่มา

ในขณะเดียวกัน RLBox ไม่ได้เฉพาะเจาะจงสำหรับ Firefox และสามารถใช้เพื่อแยกไลบรารีใด ๆ ในโครงการโดยพลการ

เกี่ยวกับ RLBox

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

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

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

API ระดับสูงมีไว้สำหรับนักพัฒนาซึ่งช่วยให้คุณสามารถเรียกใช้ฟังก์ชันไลบรารีในโหมดแยกได้

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

ไม่สามารถเรียกใช้ฟังก์ชันของไลบรารีที่แยกได้โดยตรงและในการเข้าถึงคุณต้องใช้เลเยอร์ invoke_sandbox_function ()

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

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

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

หากไม่มีการทำความสะอาดความพยายามที่จะใช้ข้อมูลที่เป็นมลพิษในบริบทที่ต้องใช้ข้อมูลปกติ (และในทางกลับกัน) จะนำไปสู่การสร้างข้อผิดพลาดในขั้นตอนการรวบรวม

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

การพัฒนา RLBox จัดจำหน่ายภายใต้ใบอนุญาต MIT. ปัจจุบัน RLBox รองรับ Linux และ macOS และคาดว่าจะเข้ากันได้กับ Windows ในภายหลัง

หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับเทคโนโลยีใหม่นี้ที่ Mozilla มีแผนจะนำไปใช้ใน Firefox คุณสามารถปรึกษาการพัฒนาและทดสอบ API ได้ ในลิงค์ต่อไปนี้.


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา