Linux ที่เพิ่มความปลอดภัยใน Android

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 ที่มีประโยชน์ โปรดดูแหล่งข้อมูลต่อไปนี้