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 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à giới hạn 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: Mọi thứ 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 đó việc từ chối quyền được ghi lại nhưng không được thực thi.
- Chế độ thực thi , trong đó cả việc từ chối quyền đều được ghi lại và thực thi.
Android bao gồm SELinux trong 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 cố gắng vi phạm đều được hạt nhân ghi lại vào dmesg
và logcat
. Khi phát triển, bạn nên sử dụng các 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 trên mỗi miền trong đó các miền (quy trình) cụ thể có thể được cho 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 đượ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 áp dụng gia tăng SELinux vào 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 giữ cho phần còn lại của hệ thống thực thi).
Lý lịch
Mô hình bảo mật của 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 thêm 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 sự thay đổi này, Android đã chuyển từ thực thi trên một nhóm miền quan trọng hạn chế ( 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ó quy trình nào 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 dễ dãi trong chính sách của chúng tôi để bao gồm cách ly tốt hơn giữa những người dùng, lọc IOCTL, giảm mối đe dọa của 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 thêm 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ủ đa phương tiện 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 , giúp 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 đó độc lập với nền tảng hoặc ngược lại.
Mặc dù có thể chạy phiên bản nền tảng (khung) cao hơn/mới hơn trên thiết bị, trường hợp ngược lại không được hỗ trợ; hình ảnh của 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, một phiên bản nền tảng mới hơn có thể gây ra các sự cố tương thích với SELinux vì chính sách SELinux của nền tảng ở phiên bản mới hơn so với các phần SELinux của nhà cung cấp trong chính sách. Mô hình Android 8.0 cung cấp một phương pháp để duy trì khả năng tương thích để ngă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.
- SELinux Notebook , tài liệu tham khảo cập nhật cho 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
- Tăng cường bảo mật (SE) Android: Đưa MAC linh hoạt lên Android
- Triển khai SELinux dưới dạng Mô-đun bảo mật Linux
- Định cấu hình Chính sách SELinux