Linux ที่ปรับปรุงความปลอดภัยใน Android

ในฐานะส่วนหนึ่งของ โมเดลความปลอดภัย ของ Android Android ใช้ Linux ที่เสริมความปลอดภัย (SELinux) เพื่อบังคับใช้การควบคุมการเข้าถึงแบบบังคับ (MAC) กับกระบวนการทั้งหมด แม้แต่กระบวนการที่ทำงานด้วยสิทธิ์ root/superuser (ความสามารถของ Linux) บริษัทและองค์กรหลายแห่งได้สนับสนุน การใช้งาน SELinux ของ Android ด้วย SELinux ทำให้ Android สามารถป้องกันและจำกัดบริการระบบได้ดีขึ้น ควบคุมการเข้าถึงข้อมูลแอปพลิเคชันและบันทึกระบบ ลดผลกระทบของซอฟต์แวร์ที่เป็นอันตราย และปกป้องผู้ใช้จากข้อบกพร่องที่อาจเกิดขึ้นในโค้ดบนอุปกรณ์พกพา

SELinux ทำงานบนหลักการของการปฏิเสธโดยปริยาย: อะไรก็ตามที่ไม่ได้รับอนุญาตอย่างชัดแจ้งจะถูกปฏิเสธ SELinux สามารถทำงานในสองโหมดทั่วโลก:

  • โหมด อนุญาต ซึ่งบันทึกการปฏิเสธการอนุญาตแต่ไม่มีการบังคับใช้
  • โหมด บังคับใช้ ซึ่งการปฏิเสธสิทธิ์จะถูกบันทึก และ บังคับใช้

Android รวม SELinux ในโหมดการบังคับใช้และนโยบายความปลอดภัยที่สอดคล้องกัน ซึ่งทำงานโดยค่าเริ่มต้นทั่วทั้ง AOSP ในโหมดบังคับใช้ การกระทำที่ไม่ได้รับอนุญาตจะถูกป้องกัน และการละเมิดที่พยายามทั้งหมดจะถูกบันทึกโดยเคอร์เนลไปยัง dmesg และ logcat เมื่อทำการพัฒนา คุณควรใช้ข้อผิดพลาดเหล่านี้เพื่อปรับแต่งซอฟต์แวร์และนโยบาย SELinux ของคุณก่อนที่จะบังคับใช้ สำหรับรายละเอียดเพิ่มเติม โปรดดูที่ Implementing SELinux

SELinux ยังรองรับโหมด การอนุญาตต่อโดเมน ซึ่งโดเมน (กระบวนการ) เฉพาะสามารถทำให้อนุญาตได้ ในขณะที่วางส่วนที่เหลือของระบบในโหมดการบังคับใช้ส่วนกลาง โดเมนเป็นเพียงป้ายกำกับที่ระบุกระบวนการหรือชุดของกระบวนการในนโยบายความปลอดภัย โดยที่กระบวนการทั้งหมดที่มีป้ายกำกับด้วยโดเมนเดียวกันจะได้รับการปฏิบัติเหมือนกันโดยนโยบายความปลอดภัย โหมดอนุญาตตามโดเมนช่วยให้สามารถประยุกต์ใช้ SELinux ที่เพิ่มขึ้นกับส่วนที่เพิ่มมากขึ้นของระบบและการพัฒนานโยบายสำหรับบริการใหม่ (ในขณะที่ยังคงบังคับใช้ส่วนที่เหลือของระบบ)

พื้นหลัง

แบบจำลองความปลอดภัยของ Android ส่วนหนึ่งมาจากแนวคิดของ แอปพลิเคชันแซนด์บ็อกซ์ แต่ละแอปพลิเคชันทำงานในแซนด์บ็อกซ์ของตัวเอง ก่อน Android 4.3 แซนด์บ็อกซ์เหล่านี้ถูกกำหนดโดยการสร้าง Linux UID เฉพาะสำหรับแต่ละแอปพลิเคชัน ณ เวลาที่ทำการติดตั้ง Android 4.3 และใหม่กว่าใช้ SELinux เพื่อกำหนดขอบเขตเพิ่มเติมของแซนด์บ็อกซ์แอปพลิเคชัน Android

ใน Android 5.0 และใหม่กว่า มีการบังคับใช้ SELinux อย่างเต็มรูปแบบ โดยสร้างจาก Android 4.3 ที่ได้รับอนุญาตและการบังคับใช้บางส่วนของ Android 4.4 ด้วยการเปลี่ยนแปลงนี้ Android เปลี่ยนจากการบังคับใช้กับชุดโดเมนสำคัญที่จำกัด ( installd , netd , vold และ zygote ) เป็นทุกอย่าง (มากกว่า 60 โดเมน) โดยเฉพาะ:

  • ทุกอย่างอยู่ในโหมดบังคับใช้ใน Android 5.x และสูงกว่า
  • ไม่ควรรันโปรเซสอื่นนอกจาก init ในโดเมน init
  • การปฏิเสธทั่วไปใดๆ (สำหรับ block_device , socket_device , default_service ) แสดงว่าอุปกรณ์นั้นต้องการโดเมนพิเศษ

Android 6.0 ทำให้ระบบแข็งแกร่งขึ้นโดยลดการอนุญาตของนโยบายของเราเพื่อรวมการแยกระหว่างผู้ใช้ที่ดีขึ้น การกรอง IOCTL ลดการคุกคามของบริการที่เปิดเผย การเข้มงวดยิ่งขึ้นของโดเมน SELinux และการเข้าถึง /proc ที่จำกัดอย่างมาก

Android 7.0 อัปเดตการกำหนดค่า SELinux เพื่อล็อกแอปพลิเคชันแซนด์บ็อกซ์เพิ่มเติม และลดพื้นผิวการโจมตี รุ่นนี้ยังแบ่งกองเซิร์ฟเวอร์สื่อขนาดใหญ่ออกเป็นกระบวนการที่เล็กลงเพื่อลดขอบเขตการอนุญาต สำหรับรายละเอียดเพิ่มเติม โปรดดูที่ การปกป้อง Android ด้วยการป้องกันเคอร์เนลของ Linux ที่มากขึ้น และ การทำให้กองมีเดียแข็งแกร่งขึ้น

Android 8.0 อัปเดต SELinux ให้ทำงานร่วมกับ Treble ซึ่งแยกรหัสผู้ขายระดับล่างออกจากกรอบระบบ Android รุ่นนี้มีการอัปเดตนโยบาย SELinux เพื่อให้ผู้ผลิตอุปกรณ์และผู้จำหน่าย SOC สามารถอัปเดตส่วนต่าง ๆ ของนโยบาย สร้างอิมเมจ ( vendor.img , boot.img และอื่น ๆ ) จากนั้นอัปเดตอิมเมจเหล่านั้นโดยไม่ขึ้นกับแพลตฟอร์มหรือในทางกลับกัน

แม้ว่าจะเป็นไปได้ที่จะมีเวอร์ชันแพลตฟอร์ม (เฟรมเวิร์ก) ที่สูงกว่า/ใหม่กว่าที่ทำงานบนอุปกรณ์ แต่ก็ไม่รองรับกรณีตรงข้าม อิมเมจของผู้ขาย ( vendor.img/odm.img ) ไม่สามารถมีเวอร์ชันที่ใหม่กว่าแพลตฟอร์ม ( system.img ) ดังนั้น เวอร์ชันแพลตฟอร์มที่ใหม่กว่าอาจก่อให้เกิดปัญหาความเข้ากันได้ของ SELinux เนื่องจากนโยบาย SELinux ของแพลตฟอร์มเป็นเวอร์ชันที่ใหม่กว่าส่วนของผู้ขาย SELinux ของนโยบาย รุ่น Android 8.0 มีวิธีการ รักษาความเข้ากันได้ เพื่อป้องกัน OTA พร้อมกันโดยไม่จำเป็น

แหล่งข้อมูลเพิ่มเติม

สำหรับความช่วยเหลือในการสร้างนโยบาย SELinux ที่เป็นประโยชน์ โปรดดูแหล่งข้อมูลต่อไปนี้