Là một phần của mô hình bảo mật Android, Android sử dụng Linux được tăng cường bảo mật (SELinux) để thực thi kiểm soát truy cập bắt buộc (MAC) đối với tất cả các quy trình, ngay cả các quy trình chạy với đặc quyền root/siêu người dùng (khả năng của Linux). Nhiều công ty và tổ chức đã đóng góp vào việc triển khai SELinux của Android. Với SELinux, Android có thể bảo vệ và hạn chế các dịch vụ hệ thống tốt hơn, kiểm soát quyền truy cập vào dữ liệu ứng dụng và nhật ký hệ thống, giảm tác động của phần mềm độc hại và bảo vệ người dùng khỏi các lỗi tiềm ẩn trong mã trên thiết bị di động.
SELinux hoạt động theo nguyên tắc từ chối mặc định: Bất kỳ điều gì không được cho phép rõ ràng đều bị từ chối. SELinux có thể hoạt động ở hai chế độ toàn cầu:
- Chế độ cho phép , trong đó các từ chối cấp phép được ghi lại nhưng không được thực thi.
- Chế độ thực thi , trong đó các từ chối quyền đều được ghi lại và thực thi.
Android bao gồm SELinux ở chế độ thực thi và chính sách bảo mật tương ứng hoạt động theo mặc định trên AOSP. Trong chế độ thực thi, các hành động không được phép sẽ bị ngăn chặn và tất cả các hành vi vi phạm đã cố gắng đều được kernel ghi lại vào dmesg
và logcat
. Khi phát triển, bạn nên sử dụng những lỗi này để tinh chỉnh phần mềm và chính sách SELinux của mình trước khi thực thi chúng. Để biết thêm chi tiết, hãy xem Triển khai SELinux .
SELinux cũng hỗ trợ chế độ cho phép theo từng miền trong đó các miền (quy trình) cụ thể có thể được cấp phép trong khi đặt phần còn lại của hệ thống ở chế độ thực thi toàn cầu. Miền chỉ đơn giản là một nhãn xác định một quy trình hoặc tập hợp các quy trình trong chính sách bảo mật, trong đó tất cả các quy trình được gắn nhãn với cùng một miền đều được chính sách bảo mật xử lý giống hệt nhau. Chế độ cho phép trên mỗi miền cho phép ứng dụng SELinux tăng dần cho một phần ngày càng tăng của hệ thống và phát triển chính sách cho các dịch vụ mới (trong khi vẫn đảm bảo thực thi phần còn lại của hệ thống).
Lý lịch
Mô hình bảo mật Android một phần dựa trên khái niệm hộp cát ứng dụng . Mỗi ứng dụng chạy trong hộp cát riêng của nó. Trước Android 4.3, các hộp cát này được xác định bằng cách tạo UID Linux duy nhất cho mỗi ứng dụng tại thời điểm cài đặt. Android 4.3 trở lên sử dụng SELinux để xác định rõ hơn ranh giới của hộp cát ứng dụng Android.
Trong Android 5.0 trở lên, SELinux được thực thi đầy đủ, dựa trên bản phát hành cho phép của Android 4.3 và thực thi một phần của Android 4.4. Với thay đổi này, Android đã chuyển từ thực thi trên một nhóm giới hạn các miền quan trọng ( installd
, netd
, vold
và zygote
) sang mọi thứ (hơn 60 miền). Đặc biệt:
- Mọi thứ đều ở chế độ thực thi trong Android 5.x trở lên.
- Không có tiến trình nào khác ngoài
init
được chạy trong miềninit
. - Bất kỳ sự từ chối chung nào (đối với
block_device
,socket_device
,default_service
) đều cho biết rằng thiết bị cần một miền đặc biệt.
Android 6.0 đã củng cố hệ thống bằng cách giảm tính cho phép trong chính sách của chúng tôi để bao gồm cách ly tốt hơn giữa người dùng, lọc IOCTL, giảm mối đe dọa về các dịch vụ bị lộ, thắt chặt hơn nữa các miền SELinux và quyền truy cập /proc
cực kỳ hạn chế.
Android 7.0 đã cập nhật cấu hình SELinux để khóa chặt hơn hộp cát ứng dụng và giảm bề mặt tấn công. Bản phát hành này cũng chia ngăn xếp máy chủ trung gian nguyên khối thành các quy trình nhỏ hơn để giảm phạm vi quyền của chúng. Để biết thêm chi tiết, hãy xem Bảo vệ Android bằng nhiều biện pháp bảo vệ nhân Linux hơn và Tăng cường ngăn xếp phương tiện .
Android 8.0 đã cập nhật SELinux để hoạt động với Treble , tách mã nhà cung cấp cấp thấp hơn khỏi khung hệ thống Android. Bản phát hành này đã cập nhật chính sách SELinux để cho phép các nhà sản xuất thiết bị và nhà cung cấp SOC cập nhật các phần của chính sách, xây dựng hình ảnh của họ ( vendor.img
, boot.img
, v.v.), sau đó cập nhật những hình ảnh đó một cách độc lập với nền tảng hoặc ngược lại.
Mặc dù có thể có phiên bản nền tảng (khung) cao hơn/mới hơn đang chạy trên thiết bị, trường hợp ngược lại không được hỗ trợ; hình ảnh nhà cung cấp ( vendor.img/odm.img
) không thể có phiên bản mới hơn nền tảng ( system.img
). Vì vậy, phiên bản nền tảng mới hơn có thể gây ra các vấn đề tương thích SELinux vì chính sách SELinux nền tảng ở phiên bản mới hơn các phần chính sách SELinux của nhà cung cấp. Mô hình Android 8.0 cung cấp phương pháp duy trì khả năng tương thích nhằm ngăn chặn các OTA đồng thời không cần thiết.
Tài nguyên bổ sung
Để được trợ giúp xây dựng các chính sách SELinux hữu ích, hãy tham khảo các tài nguyên sau.
- Sổ tay SELinux , tài liệu tham khảo cập nhật về SELinux. Tài liệu này chứa thêm thông tin chi tiết về ngôn ngữ chính sách, ý nghĩa của từng từ khóa và cách tính toán bối cảnh bảo mật.
- Hướng dẫn cách thực hiện trực quan của bạn để thực thi chính sách SELinux
- Cải tiến bảo mật cho Linux
- Android được tăng cường bảo mật (SE): Đưa MAC linh hoạt lên Android
- Triển khai SELinux như một mô-đun bảo mật Linux
- Định cấu hình chính sách SELinux