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 โปรดดูส่วนความ จำเพาะ เมื่อพิจารณาเอกสารภายนอก
- SELinux Notebook ข้อมูลอ้างอิงล่าสุดสำหรับ SELinux ประกอบด้วยรายละเอียดเพิ่มเติมเกี่ยวกับภาษาของนโยบาย ความหมายของคำหลักแต่ละคำ และวิธีคำนวณบริบทความปลอดภัย
- คำแนะนำวิธีใช้ภาพของคุณสำหรับการบังคับใช้นโยบาย SELinux
- การปรับปรุงความปลอดภัยสำหรับ Linux
- Security Enhanced (SE) Android: นำ MAC ที่ยืดหยุ่นมาสู่ Android
- การใช้ SELinux เป็น Linux Security Module
- การกำหนดค่านโยบาย SELinux