แนวคิดการทำ sandbox เพื่อจำกัดขอบเขตความเสียหายกรณีโปรแกรมโดนแฮ็ก กำลังได้รับความนิยมมากขึ้นเรื่อยๆ แต่หลายกรณีก็มีข้อจำกัด เช่น การเรียกใช้ไลบรารีที่มีขนาดเล็กจนไม่สามารถแยกโพรเซสได้ แต่ไลบรารีก็ไม่ได้เขียนเองทำให้ควบคุมคุณภาพโค้ดไม่ได้
Mozilla ร่วมกับทีมวิจัยจากมหาวิทยาลัย 3 แห่งคือ University of California San Diego, University of Texas Austin, Stanford University พัฒนาเทคนิคใหม่ชื่อ RLBox แก้ปัญหานี้ด้วยการแปลงโค้ด C/C++ เป็น WebAssembly ก่อน เพื่อรันใน sandbox ของ WebAssembly แทน
WebAssembly เป็นเทคนิคการแปลง C/C++ เป็นไบนารีรันในเบราว์เซอร์ เพื่อให้ประสิทธิภาพที่ดีกว่า JavaScript ส่วนเรื่องความปลอดภัย จะรันใน VM แยกเฉพาะอยู่แล้ว ปัจจุบัน WebAssembly เป็นมาตรฐานของ W3C เรียบร้อย และรองรับโดยเบราว์เซอร์ทุกตัว
ที่ผ่านมา WebAssembly ถูกใช้งานใน "เว็บเพจ" เพียงอย่างเดียว เทคนิค RLBox คือการนำโค้ดบางส่วนของตัวเบราว์เซอร์ (ในที่นี้คือ Firefox) ที่เขียนด้วย C/C++ มาแปลงเป็น WebAssembly (wasm) เพื่อใช้ประโยชน์จากฟีเจอร์ความปลอดภัย sandbox/VM นั่นเอง
ตอนนี้ RLBox ถูกนำมาใช้แล้วกับไลบรารีบางตัวที่ Firefox นำมาใช้งาน เช่น Graphite ไลบรารีสำหรับแสดงผลฟอนต์บางภาษาที่มีความซับซ้อนสูง ไลบรารีตัวนี้มีขนาดเล็ก ไม่คุ้มกับการแยกโพรเซสออกมา แต่เป็นโค้ดที่ Mozilla ไม่ได้ดูแลเอง จึงเหมาะกับการล้อมกรอบด้วย RLBox แทน
Mozilla ระบุว่าพยายามนำโค้ดจาก WebAssembly มาใช้กับ RLBox ให้มากที่สุด แต่ในรายละเอียดก็ยังมีความต่างกันอยู่บ้าง เพราะโค้ดของเบราว์เซอร์ต้องคอมไพล์ล่วงหน้า (ahead-of-time) ตั้งแต่แรก และคอมไพล์เป็นไบนารีแล้วใช้ครั้งเดียว ไม่ต้องคอมไพล์ใหม่ทุกครั้งเหมือน WebAssembly บนเว็บเพจ
เทคนิค RLBox จะเริ่มใช้งานใน Firefox 74 (เฉพาะลินุกซ์) และ Firefox 75 (แมค) ส่วนเวอร์ชันวินโดวส์จะตามมาในระยะถัดไป
ที่มา - Mozilla
Comments
และคอมไพล์เป็นไบนารีแล้วใช้ครั้งเดียว -> และคอมไพล์เป็นไบนารีพร้อมใช้เพียงครั้งเดียว ?
edit - อ่านที่มาแล้วเหมือนว่าต้องคอมไพล์ทุกครั้งที่เปิด Firefox ใหม่หรือเปล่าครับ? เห็นบอกว่า compile แล้วแชร์ระหว่าง sandbox แทนที่จะ compile ทุกครั้งที่เปิด sandbox ใหม่
จริง ๆ ก็ไม่ค่อยเห็นคนใช้ Graphite เท่าไหร่แฮะ ส่วนใหญ่จะใช้ FreeType กัน