บางวันที่ผ่านมา Google ประกาศเปิดโครงการ Sandboxed APIที่ ช่วยให้คุณสามารถสร้างกระบวนการสร้างแซนด์บ็อกซ์โดยอัตโนมัติสำหรับการดำเนินการแยกไลบรารีตามอำเภอใจใน C และ C ++
การแยกรหัสของคุณจากไลบรารี อนุญาตให้ป้องกันการโจมตีที่อาจเกิดขึ้นบนแฮนเดิลที่จัดเตรียมโดยไลบรารีการสร้างอุปสรรคเพิ่มเติมในกรณีที่มีช่องโหว่ในโค้ดของคุณที่สามารถใช้ประโยชน์ได้ผ่านการปรับแต่งกับข้อมูลภายนอกที่เข้าสู่ไลบรารี รหัสเปิดอยู่ภายใต้ใบอนุญาต Apache 2.0
ความโดดเดี่ยวหรือทำได้โดยใช้ภายในรันไทม์ Sandbox2ซึ่งใช้เนมสเปซ cgroups และ seccomp-bpf
รหัสที่ส่งไปยังแซนด์บ็อกซ์ที่ทำงานในกระบวนการแยกต่างหากซึ่งจะเข้าถึงการโทรและทรัพยากรของระบบเช่นเดียวกับไฟล์และการเชื่อมต่อเครือข่ายมีข้อ จำกัด
โปรเซสเข้าถึงได้เฉพาะความสามารถของระบบที่จำเป็นโดยตรงในการรันโค้ดแยก
Sandbox2 กำหนดส่วนประกอบเพื่อเรียกใช้กระบวนการหรือใช้กฎการแยกและสนับสนุนการดำเนินการในภายหลัง
แซนด์บ็อกซ์ 2 สามารถใช้แยกจาก Sandbox API เพื่อแยกไม่เพียง แต่ไลบรารีเท่านั้น แต่ยังรวมถึงกระบวนการโดยพลการด้วย
นอกเหนือจากการเพิ่มการป้องกันแล้วจุดบวกในการกำจัดรหัสในกระบวนการที่แยกจากกันคือความเป็นไปได้ของการควบคุมการ จำกัด การใช้หน่วยความจำของไลบรารีและซีพียูแยกต่างหากรวมถึงการป้องกันความล้มเหลว: ความล้มเหลวใน ไลบรารีไม่ทำให้แอปพลิเคชันทั้งหมดเกิดปัญหา
เกี่ยวกับ Sandboxed API
Sandboxed API คือปลั๊กอิน Sandbox2 ซึ่งช่วยลดความยุ่งยากในการขนส่งไลบรารีที่มีอยู่เพื่อรันในโหมดแยก
API แซนด์บ็อกซ์ มีอินเทอร์เฟซซอฟต์แวร์ระดับกลางที่อนุญาตให้คุณรันโค้ดไลบรารีในสภาพแวดล้อมแซนด์บ็อกซ์เช่นเดียวกับการจัดการการโทรไปยังไลบรารีในสภาพแวดล้อมแซนด์บ็อกซ์และทำให้มั่นใจได้ว่าจะส่งผลลัพธ์ไลบรารีไปยังโปรแกรมหลัก
Se เข้าถึงไลบรารีที่แยกได้ผ่าน RPC เฉพาะตามโปรโตคอล ProtoBuffs
A นักพัฒนาห้องสมุดจะได้รับชุดตัวเลือกที่อนุญาตให้เข้าถึงตัวแปรตัวอธิบายไฟล์บัฟเฟอร์และฟังก์ชันไลบรารีที่แยกออกจากแอปพลิเคชันพื้นฐานรวมถึงเครื่องมือสำหรับการซิงโครไนซ์หน่วยความจำอัตโนมัติและควบคุมสำหรับการแชร์อาร์เรย์และโครงสร้าง
เมื่อไลบรารีซอฟต์แวร์ที่วิเคราะห์ข้อมูลดังกล่าวมีความซับซ้อนเพียงพออาจตกเป็นเหยื่อของช่องโหว่ด้านความปลอดภัยบางประเภท: ข้อผิดพลาดหน่วยความจำเสียหายหรือปัญหาประเภทอื่น ๆ ที่เกี่ยวข้องกับตรรกะการวิเคราะห์ (ตัวอย่างเช่นปัญหาการข้ามเส้นทาง) ช่องโหว่เหล่านั้นอาจมีผลกระทบด้านความปลอดภัยที่ร้ายแรง
นอกจากนี้ API มีไว้เพื่อตรวจสอบการทำงานของกระบวนการที่แยกและเริ่มต้นใหม่ในกรณีที่เกิดความล้มเหลว
สำหรับไลบรารีที่แยกรหัสคำอธิบายประกอบของฟังก์ชันที่แยกจะถูกสร้างขึ้นโดยอัตโนมัติสำหรับระบบแอสเซมบลีของ Bazel และอินเตอร์เฟสโปรแกรม (SAPI) สำหรับการโต้ตอบระหว่างกระบวนการพื้นฐานและกระบวนการแยก
นักพัฒนาต้องสร้างไฟล์ส่วนหัวที่มีกฎการแยกซึ่งกำหนดการเรียกและการดำเนินการของระบบที่อนุญาตทั้งหมด (อ่านเขียนเปิดไฟล์เข้าถึงเวลาความสามารถในการติดตั้งตัวจัดการสัญญาณรองรับการจัดสรรหน่วยความจำผ่าน malloc ฯลฯ )
ไฟล์และไดเร็กทอรีที่ไลบรารีควรเข้าถึงจะถูกกำหนดแยกกัน
การติดตั้ง
ปัจจุบันโครงการนี้มีให้บริการสำหรับ Linux เท่านั้น แต่ในอนาคตพวกเขาสัญญาว่าจะเพิ่มการรองรับสำหรับระบบ macOS และ BSD และในระยะยาวและสำหรับ Windows ใช่ คุณต้องการติดตั้ง API แบบแซนด์บ็อกซ์คุณสามารถทำตามคำแนะนำที่กำหนด ในลิงค์นี้
นอกจากนี้ยังมีการบันทึกแผนไว้ด้วย ความสามารถในการแยกไลบรารีในภาษาอื่นที่ไม่ใช่ C และ C ++ การสนับสนุนรันไทม์เพิ่มเติมสำหรับการแยก (เช่นขึ้นอยู่กับการจำลองเสมือนของฮาร์ดแวร์) และความสามารถในการใช้ CMake และระบบประกอบอื่น ๆ (ขณะนี้การสนับสนุน จำกัด อยู่ที่ระบบบิลด์ Bazel)
Fuente: https://security.googleblog.com