Firefox เริ่มใช้ทำ Sandbox บางส่วนของโปรแกรม ด้วยวิธีแปลง C/C++ เป็น WebAssembly

by mk
9 March 2020 - 08:00

แนวคิดการทำ 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

Blognone Jobs Premium