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

มีการเปิดตัวเครื่องมือสำหรับจัดระเบียบการทำงานของสภาพแวดล้อมแบบแยก Bubblewrap 0.6 ซึ่งโดยปกติจะใช้เพื่อจำกัดแอปพลิเคชันแต่ละรายการของผู้ใช้ที่ไม่มีสิทธิ์ ในทางปฏิบัติ โครงการ 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 จะรวมฟังก์ชันที่เกี่ยวข้องทั้งหมดไว้ในไฟล์ปฏิบัติการไฟล์เดียว ซึ่งทำให้ยากต่อการตรวจสอบและรักษาความปลอดภัยในระดับที่เหมาะสม

ในรุ่นใหม่:

  • เพิ่มการรองรับระบบประกอบ Meson การสนับสนุนการสร้างด้วย Autotools ยังคงอยู่ในขณะนี้ แต่จะถูกลบออกในรุ่นต่อๆ ไป
  • ใช้ตัวเลือก "--add-seccomp" เพื่อเพิ่มโปรแกรม seccomp มากกว่าหนึ่งโปรแกรม เพิ่มคำเตือนว่าหากคุณระบุตัวเลือก "--seccomp" อีกครั้ง ระบบจะใช้เฉพาะพารามิเตอร์ตัวสุดท้ายเท่านั้น
  • สาขาหลักในที่เก็บ git ถูกเปลี่ยนชื่อเป็นสาขาหลัก
  • เพิ่มการรองรับบางส่วนสำหรับข้อกำหนด REUSE ซึ่งรวมกระบวนการระบุใบอนุญาตและข้อมูลลิขสิทธิ์เข้าด้วยกัน ไฟล์โค้ดจำนวนมากมีการเพิ่มส่วนหัว SPDX-License-Identifier การปฏิบัติตามหลักเกณฑ์ REUSE ช่วยให้ระบุใบอนุญาตโดยอัตโนมัติว่าใช้กับส่วนใดของรหัสแอปพลิเคชันได้ง่ายขึ้น
  • เพิ่มการตรวจสอบค่าของตัวนับอาร์กิวเมนต์บรรทัดคำสั่ง (argc) และดำเนินการออกฉุกเฉินหากตัวนับเป็นศูนย์ การเปลี่ยนแปลงนี้ช่วยป้องกันปัญหาด้านความปลอดภัยที่เกิดจากการจัดการอาร์กิวเมนต์บรรทัดคำสั่งที่ไม่ถูกต้อง เช่น CVE-2021-4034 ใน Polkit

ที่มา: opennet.ru

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