Android ใช้ Security-Enhanced Linux (SELinux) เพื่อบังคับใช้การควบคุมการเข้าถึงที่จําเป็น (MAC) ในกระบวนการทั้งหมด ซึ่งรวมถึงกระบวนการที่ทํางานด้วยสิทธิ์รูท/ผู้ใช้ขั้นสูง (ความสามารถของ Linux) อันเป็นส่วนหนึ่งของ รูปแบบการรักษาความปลอดภัยของ Android บริษัทและองค์กรหลายแห่งได้มีส่วนร่วมในการใช้งาน SELinux ของ Android เมื่อใช้ SELinux จะช่วยให้ Android ปกป้องและจำกัดบริการของระบบได้ดียิ่งขึ้น ควบคุมการเข้าถึงข้อมูลแอปพลิเคชันและบันทึกของระบบ ลดผลกระทบของซอฟต์แวร์ที่เป็นอันตราย และปกป้องผู้ใช้จากข้อบกพร่องที่อาจเกิดขึ้นในโค้ดบนอุปกรณ์เคลื่อนที่
SELinux ทำงานตามหลักการปฏิเสธโดยค่าเริ่มต้น กล่าวคือ ระบบจะปฏิเสธทุกอย่างที่ไม่ได้อนุญาตอย่างชัดเจน SELinux ทำงานได้ในโหมดส่วนกลาง 2 โหมด ได้แก่
- โหมดอนุญาต ซึ่งระบบจะบันทึกการปฏิเสธสิทธิ์ไว้แต่ไม่บังคับใช้
- โหมดบังคับใช้ ซึ่งจะบันทึกการปฏิเสธสิทธิ์และบังคับใช้
Android มี SELinux ในโหมดบังคับใช้และนโยบายความปลอดภัยที่เกี่ยวข้องซึ่งทำงานโดยค่าเริ่มต้นใน AOSP ในโหมดบังคับใช้ ระบบจะป้องกันการดำเนินการที่ไม่อนุญาต และเคอร์เนลจะบันทึกการพยายามละเมิดทั้งหมดไว้ใน dmesg
และ logcat
ในระหว่างการพัฒนา คุณควรใช้ข้อผิดพลาดเหล่านี้เพื่อปรับแต่งซอฟต์แวร์และนโยบาย SELinux ก่อนบังคับใช้ โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อการติดตั้งใช้งาน SELinux
นอกจากนี้ SELinux ยังรองรับโหมดอนุญาตตามโดเมน ซึ่งสามารถทำให้โดเมน (กระบวนการ) บางรายการเป็นแบบอนุญาตได้ขณะที่ระบบส่วนที่เหลืออยู่ในโหมดบังคับใช้แบบรวม โดเมนเป็นเพียงป้ายกำกับที่ระบุกระบวนการหรือชุดกระบวนการในนโยบายความปลอดภัย ซึ่งนโยบายความปลอดภัยจะถือว่ากระบวนการทั้งหมดที่ติดป้ายกำกับด้วยโดเมนเดียวกันนั้นเหมือนกัน โหมดที่อนุญาตระดับโดเมนช่วยให้ใช้ SELinux กับส่วนต่างๆ ของระบบและการพัฒนานโยบายสำหรับบริการใหม่ๆ ได้มากขึ้นเรื่อยๆ (ขณะที่ยังคงบังคับใช้ส่วนที่เหลือของระบบ)
ฉากหลัง
โมเดลความปลอดภัยของ Android ส่วนหนึ่งอิงตามแนวคิดของแซนด์บ็อกซ์แอปพลิเคชัน แอปพลิเคชันแต่ละรายการจะทำงานในแซนด์บ็อกซ์ของตัวเอง ก่อนที่จะมี Android 4.3 ซานด์บ็อกซ์เหล่านี้จะกำหนดโดยการสร้าง UID ของ Linux ที่ไม่ซ้ำกันสำหรับแต่ละแอปพลิเคชัน ณ เวลาที่ติดตั้ง 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 เพื่อล็อกแซนด์บ็อกซ์ของแอปพลิเคชันเพิ่มเติมและลดพื้นที่การโจมตี นอกจากนี้ ยังได้แยกสแต็ก MediaServer แบบโมโนลิธิกออกเป็นกระบวนการเล็กๆ เพื่อลดขอบเขตของสิทธิ์ ดูรายละเอียดเพิ่มเติมได้ที่หัวข้อการปกป้อง 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
- Android ที่มีการปรับปรุงความปลอดภัย (SE): การนำ MAC แบบยืดหยุ่นมาสู่ Android
- การใช้ SELinux เป็นโมดูลความปลอดภัยของ Linux
- การกําหนดค่านโยบาย SELinux