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