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

Android ใช้ Security-Enhanced Linux (SELinux) ที่เป็นส่วนหนึ่งของ โมเดลความปลอดภัย ของ Android เพื่อบังคับใช้การควบคุมการเข้าถึงที่จำเป็น (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 ที่จำกัดอย่างมาก

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

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

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

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

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