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

ในฐานะที่เป็นส่วนหนึ่งของ โมเดลความปลอดภัย ของ Android นั้น Android ใช้ Linux ที่ปรับปรุงความปลอดภัย (SELinux) เพื่อบังคับใช้การควบคุมการเข้าถึง (MAC) ที่จำเป็นกับกระบวนการทั้งหมด แม้แต่กระบวนการที่ทำงานด้วยสิทธิ์ root/superuser (ความสามารถของ Linux) บริษัทและองค์กรหลายแห่งได้มีส่วนร่วมใน การนำ SELinux ของ Android ไปใช้งาน ด้วย SELinux ทำให้ Android สามารถปกป้องและจำกัดบริการของระบบได้ดีขึ้น ควบคุมการเข้าถึงข้อมูลแอปพลิเคชันและบันทึกระบบ ลดผลกระทบของซอฟต์แวร์ที่เป็นอันตราย และปกป้องผู้ใช้จากข้อบกพร่องที่อาจเกิดขึ้นในโค้ดบนอุปกรณ์มือถือ

SELinux ทำงานบนหลักการของการปฏิเสธเริ่มต้น: สิ่งใดก็ตามที่ไม่ได้รับอนุญาตอย่างชัดเจนจะถูกปฏิเสธ SELinux สามารถทำงานในสองโหมดทั่วโลก:

  • โหมด อนุญาต ซึ่งมีการบันทึกการปฏิเสธสิทธิ์แต่ไม่ได้บังคับใช้
  • โหมด บังคับใช้ ซึ่งมีทั้งบันทึก และ บังคับใช้การปฏิเสธสิทธิ์

Android มี SELinux อยู่ในโหมดบังคับใช้และนโยบายความปลอดภัยที่เกี่ยวข้องซึ่งทำงานตามค่าเริ่มต้นทั่วทั้ง AOSP ในโหมดบังคับใช้ การกระทำที่ไม่ได้รับอนุญาตจะถูกป้องกัน และเคอร์เนลที่พยายามละเมิดทั้งหมดจะถูกบันทึกโดยเคอร์เนลไปที่ dmesg และ logcat เมื่อพัฒนา คุณควรใช้ข้อผิดพลาดเหล่านี้เพื่อปรับแต่งซอฟต์แวร์และนโยบาย SELinux ของคุณก่อนที่จะบังคับใช้ สำหรับรายละเอียดเพิ่มเติม โปรดดูที่ การนำ 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 ที่มากขึ้น และ การทำให้สแต็กสื่อแข็งแกร่งขึ้น

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