การเปิดตัว Bubblewrap 0.8 ซึ่งเป็นเลเยอร์สำหรับสร้างสภาพแวดล้อมที่แยกออกจากกัน

มีการเปิดตัวเครื่องมือสำหรับจัดระเบียบการทำงานของสภาพแวดล้อมแบบแยก Bubblewrap 0.8 ซึ่งโดยปกติจะใช้เพื่อจำกัดแอปพลิเคชันแต่ละรายการของผู้ใช้ที่ไม่มีสิทธิ์ ในทางปฏิบัติ โครงการ Flatpak จะใช้ Bubblewrap เป็นเลเยอร์เพื่อแยกแอปพลิเคชันที่เรียกใช้จากแพ็คเกจ รหัสโครงการเขียนด้วยภาษา C และเผยแพร่ภายใต้ใบอนุญาต LGPLv2+

สำหรับการแยกออกจากกัน จะใช้เทคโนโลยีการจำลองเสมือนคอนเทนเนอร์ Linux แบบดั้งเดิม โดยอิงตามการใช้ cgroups, เนมสเปซ, Seccomp และ SELinux ในการดำเนินการที่มีสิทธิ์พิเศษในการกำหนดค่าคอนเทนเนอร์ Bubblewrap จะถูกเปิดใช้งานด้วยสิทธิ์รูท (ไฟล์ปฏิบัติการที่มีแฟล็ก suid) จากนั้นจะรีเซ็ตสิทธิ์พิเศษหลังจากเตรียมใช้งานคอนเทนเนอร์แล้ว

การเปิดใช้งานเนมสเปซผู้ใช้ในระบบเนมสเปซ ซึ่งอนุญาตให้คุณใช้ชุดตัวระบุแยกต่างหากในคอนเทนเนอร์นั้นไม่จำเป็นสำหรับการดำเนินการ เนื่องจากมันจะไม่ทำงานตามค่าเริ่มต้นในการแจกแจงหลายๆ แบบ (Bubblewrap อยู่ในตำแหน่งที่จำกัดการใช้งาน suid ของ ชุดย่อยของความสามารถของเนมสเปซผู้ใช้ - เพื่อแยกผู้ใช้และตัวระบุกระบวนการทั้งหมดออกจากสภาพแวดล้อม ยกเว้นอันปัจจุบัน จะใช้โหมด CLONE_NEWUSER และ CLONE_NEWPID) สำหรับการป้องกันเพิ่มเติม โปรแกรมที่ทำงานภายใต้ Bubblewrap จะเปิดตัวในโหมด PR_SET_NO_NEW_PRIVS ซึ่งห้ามไม่ให้ได้รับสิทธิพิเศษใหม่ เช่น หากมีการตั้งค่าสถานะ setuid

การแยกในระดับระบบไฟล์ทำได้สำเร็จโดยการสร้างเนมสเปซการเมาท์ใหม่ตามค่าเริ่มต้น ซึ่งพาร์ติชันรูทว่างจะถูกสร้างขึ้นโดยใช้ tmpfs หากจำเป็น พาร์ติชัน FS ภายนอกจะถูกแนบเข้ากับพาร์ติชันนี้ในโหมด "mount —bind" (ตัวอย่างเช่น เมื่อเปิดใช้งานด้วยตัวเลือก "bwrap —ro-bind /usr /usr" พาร์ติชัน /usr จะถูกส่งต่อจากระบบหลัก ในโหมดอ่านอย่างเดียว) ความสามารถของเครือข่ายถูกจำกัดไว้เพียงการเข้าถึงอินเทอร์เฟซแบบย้อนกลับที่มีการแยกสแต็กเครือข่ายผ่านแฟล็ก CLONE_NEWNET และ CLONE_NEWUTS

ข้อแตกต่างที่สำคัญจากโปรเจ็กต์ Firejail ที่คล้ายกันซึ่งใช้โมเดลการเปิดตัว setuid ก็คือใน Bubblewrap เลเยอร์การสร้างคอนเทนเนอร์จะรวมเฉพาะความสามารถขั้นต่ำที่จำเป็นเท่านั้น และฟังก์ชันขั้นสูงทั้งหมดที่จำเป็นสำหรับการรันแอปพลิเคชันกราฟิก การโต้ตอบกับเดสก์ท็อป และการกรองคำขอ ไปยัง Pulseaudio ถ่ายโอนไปยังฝั่ง Flatpak และดำเนินการหลังจากรีเซ็ตสิทธิ์แล้ว ในทางกลับกัน Firejail จะรวมฟังก์ชันที่เกี่ยวข้องทั้งหมดไว้ในไฟล์ปฏิบัติการไฟล์เดียว ซึ่งทำให้ยากต่อการตรวจสอบและรักษาความปลอดภัยในระดับที่เหมาะสม

ในรุ่นใหม่:

  • เพิ่มตัวเลือก “--disable-userns” เพื่อปิดใช้งานการสร้างเนมสเปซผู้ใช้ที่ซ้อนกันของตัวเองในสภาพแวดล้อมแซนด์บ็อกซ์
  • เพิ่มตัวเลือก "--assert-userns-disabled" เพื่อตรวจสอบว่ามีการใช้พื้นที่ ID ผู้ใช้ที่มีอยู่เมื่อใช้ตัวเลือก "--disable-userns"
  • เนื้อหาข้อมูลของข้อความแสดงข้อผิดพลาดที่เกี่ยวข้องกับการปิดใช้งานการตั้งค่า CONFIG_SECOMP และ CONFIG_SECCOP_FILTER ในเคอร์เนลเพิ่มขึ้น

ที่มา: opennet.ru

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