Android 8.0 bổ sung các tính năng làm cứng nhân hệ điều hành để giúp giảm thiểu nhân hệ điều hành lỗ hổng bảo mật và tìm lỗi trong trình điều khiển nhân. Các tính năng này nằm trong hạt nhân/phổ biến trong các nhánh android-3.18, android-4.4 và android-4.9.
Triển khai
Để có được những tính năng này, nhà sản xuất thiết bị và SOC phải hợp nhất tất cả
đang tăng cường các bản vá từ kernel/common
vào cây nhân và
bật các tuỳ chọn cấu hình nhân sau đây:
- Bản sao người dùng được cố định giá trị:
CONFIG_HARDENED_USERCOPY=y
- Mô phỏng PAN – arm64:
CONFIG_ARM64_SW_TTBR0_PAN=y
- Mô phỏng PAN – nhóm thử nghiệm:
CONFIG_CPU_SW_DOMAIN_PAN=y
- KASLR – hạt nhân 4.4 trở lên:
CONFIG_RANDOMIZE_BASE=y
KASLR cũng yêu cầu hỗ trợ trình tải khởi động để truyền entropy phần cứng qua
nút cây thiết bị /chosen/kaslr-seed
hoặc bằng cách triển khai
EFI_RNG_PROTOCOL
Ngoài ra, hãy đảm bảo bạn đã bật các tính năng làm cứng hiện có:
- Giảm thiểu tình trạng tràn vùng đệm ngăn xếp:
CONFIG_CC_STACKPROTECTOR_STRONG=y
- Bảo vệ bộ nhớ trong:
CONFIG_DEBUG_RODATA=y
hoặcCONFIG_STRICT_KERNEL_RWX=y
- Hạn chế quyền truy cập vào không gian của người dùng từ kernel – x86 (được bật theo mặc định):
CONFIG_X86_SMAP=y
Thử nghiệm
Để kiểm thử kết quả triển khai, hãy thêm CONFIG_LKDTM=y
vào nhân
và xác nhận rằng mỗi lệnh sau đây dẫn đến một nhân
hoảng loạn:
echo ACCESS_USERSPACE > /sys/kernel/debug/provoke-crash/DIRECT
echo EXEC_USERSPACE > /sys/kernel/debug/provoke-crash/DIRECT
echo WRITE_RO > /sys/kernel/debug/provoke-crash/DIRECT
echo WRITE_RO_AFTER_INIT > /sys/kernel/debug/provoke-crash/DIRECT
echo WRITE_KERN > /sys/kernel/debug/provoke-crash/DIRECT
echo EXEC_STACK > /sys/kernel/debug/provoke-crash/DIRECT
echo EXEC_RODATA > /sys/kernel/debug/provoke-crash/DIRECT
echo EXEC_KMALLOC > /sys/kernel/debug/provoke-crash/DIRECT
echo EXEC_VMALLOC > /sys/kernel/debug/provoke-crash/DIRECT
echo CORRUPT_STACK > /sys/kernel/debug/provoke-crash/DIRECT
Đối với Android-4.9:
echo USERCOPY_HEAP_SIZE_TO > /sys/kernel/debug/provoke-crash/DIRECT
echo USERCOPY_HEAP_SIZE_FROM > /sys/kernel/debug/provoke-crash/DIRECT
Các vấn đề thường gặp
Những thay đổi này có thể làm lộ lỗi trong trình điều khiển nhân, vì vậy, đã được khắc phục bởi nhà sản xuất thiết bị hoặc chủ sở hữu của trình điều khiển nhân.
- Bản sao người dùng được cứng cho thấy việc kiểm tra giới hạn không chính xác khi sao chép dữ liệu đến/từ không gian của người dùng. Bạn cần khắc phục những lỗi này giống như mọi lỗi hỏng bộ nhớ khác.
- Quá trình mô phỏng PAN cho thấy quyền truy cập trực tiếp vào không gian của người dùng từ nhân hệ điều hành này,
được phép. Cần thay đổi các trình điều khiển cố gắng truy cập bộ nhớ của dung lượng người dùng thành
sử dụng
copy_to_user()
/copy_from_user()
tiêu chuẩn thay thế.