Làm cứng nhân

Android 8.0 đã thêm các tính năng tăng cường kernel để giúp giảm thiểu các lỗ hổng kernel và tìm lỗi trong trình điều khiển kernel. Các tính năng có trong kernel/chung trong các nhánh android-3.18, android-4.4 và android-4.9.

Thực hiện

Để có được những tính năng này, nhà sản xuất thiết bị và SOC nên hợp nhất tất cả các bản vá cứng từ kernel/common vào cây kernel của họ và bật các tùy chọn cấu hình kernel sau:

  • Bản sao người dùng cứng: CONFIG_HARDENED_USERCOPY=y
  • Mô phỏng PAN - arm64: CONFIG_ARM64_SW_TTBR0_PAN=y
  • Mô phỏng PAN - nhánh: 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ợ bộ nạp khởi động để truyền entropy phần cứng thông qua nút cây thiết bị /chosen/kaslr-seed hoặc bằng cách triển khai EFI_RNG_PROTOCOL .

Đồng thời đảm bảo các tính năng tăng cường hiện có được bật:

  • Giảm thiểu tràn bộ đệm ngăn xếp: CONFIG_CC_STACKPROTECTOR_STRONG=y
  • Bảo vệ bộ nhớ trong: CONFIG_DEBUG_RODATA=y hoặc CONFIG_STRICT_KERNEL_RWX=y
  • Hạn chế quyền truy cập không gian người dùng từ kernel - x86 (được bật theo mặc định): CONFIG_X86_SMAP=y

Kiểm tra

Để kiểm tra việc triển khai của bạn, hãy thêm CONFIG_LKDTM=y vào cấu hình kernel và xác nhận rằng mỗi lệnh sau đây đều dẫn đến sự cố kernel:

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 đề chung

Những thay đổi này có thể làm lộ ra lỗi trong trình điều khiển hạt nhân, cần được nhà sản xuất thiết bị hoặc chủ sở hữu trình điều khiển hạt nhân sửa lỗi.

  • Bản sao người dùng cứng sẽ hiển thị 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 người dùng. Những lỗi này cần được sửa giống như bất kỳ lỗi hỏng bộ nhớ nào khác.
  • Mô phỏng PAN cho thấy quyền truy cập không gian người dùng trực tiếp từ kernel, điều này không được phép. Thay vào đó, các trình điều khiển đang cố gắng truy cập vào bộ nhớ không gian người dùng cần phải được thay đổi để sử dụng các hàm copy_to_user() / copy_from_user() tiêu chuẩn.
,

Android 8.0 đã thêm các tính năng tăng cường kernel để giúp giảm thiểu các lỗ hổng kernel và tìm lỗi trong trình điều khiển kernel. Các tính năng có trong kernel/chung trong các nhánh android-3.18, android-4.4 và android-4.9.

Thực hiện

Để có được những tính năng này, nhà sản xuất thiết bị và SOC nên hợp nhất tất cả các bản vá cứng từ kernel/common vào cây kernel của họ và bật các tùy chọn cấu hình kernel sau:

  • Bản sao người dùng cứng: CONFIG_HARDENED_USERCOPY=y
  • Mô phỏng PAN - arm64: CONFIG_ARM64_SW_TTBR0_PAN=y
  • Mô phỏng PAN - nhánh: 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ợ bộ nạp khởi động để truyền entropy phần cứng thông qua nút cây thiết bị /chosen/kaslr-seed hoặc bằng cách triển khai EFI_RNG_PROTOCOL .

Đồng thời đảm bảo các tính năng tăng cường hiện có được bật:

  • Giảm thiểu tràn bộ đệm ngăn xếp: CONFIG_CC_STACKPROTECTOR_STRONG=y
  • Bảo vệ bộ nhớ trong: CONFIG_DEBUG_RODATA=y hoặc CONFIG_STRICT_KERNEL_RWX=y
  • Hạn chế quyền truy cập không gian người dùng từ kernel - x86 (được bật theo mặc định): CONFIG_X86_SMAP=y

Kiểm tra

Để kiểm tra việc triển khai của bạn, hãy thêm CONFIG_LKDTM=y vào cấu hình kernel và xác nhận rằng mỗi lệnh sau đây đều dẫn đến sự cố kernel:

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 đề chung

Những thay đổi này có thể làm lộ ra lỗi trong trình điều khiển hạt nhân, cần được nhà sản xuất thiết bị hoặc chủ sở hữu trình điều khiển hạt nhân sửa lỗi.

  • Bản sao người dùng cứng sẽ hiển thị 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 người dùng. Những lỗi này cần được sửa giống như bất kỳ lỗi hỏng bộ nhớ nào khác.
  • Mô phỏng PAN cho thấy quyền truy cập không gian người dùng trực tiếp từ kernel, điều này không được phép. Thay vào đó, các trình điều khiển đang cố gắng truy cập vào bộ nhớ không gian người dùng cần phải được thay đổi để sử dụng các hàm copy_to_user() / copy_from_user() tiêu chuẩn.
,

Android 8.0 đã thêm các tính năng tăng cường kernel để giúp giảm thiểu các lỗ hổng kernel và tìm lỗi trong trình điều khiển kernel. Các tính năng có trong kernel/chung trong các nhánh android-3.18, android-4.4 và android-4.9.

Thực hiện

Để có được những tính năng này, nhà sản xuất thiết bị và SOC nên hợp nhất tất cả các bản vá cứng từ kernel/common vào cây kernel của họ và bật các tùy chọn cấu hình kernel sau:

  • Bản sao người dùng cứng: CONFIG_HARDENED_USERCOPY=y
  • Mô phỏng PAN - arm64: CONFIG_ARM64_SW_TTBR0_PAN=y
  • Mô phỏng PAN - nhánh: 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ợ bộ nạp khởi động để truyền entropy phần cứng thông qua nút cây thiết bị /chosen/kaslr-seed hoặc bằng cách triển khai EFI_RNG_PROTOCOL .

Đồng thời đảm bảo các tính năng tăng cường hiện có được bật:

  • Giảm thiểu tràn bộ đệm ngăn xếp: CONFIG_CC_STACKPROTECTOR_STRONG=y
  • Bảo vệ bộ nhớ trong: CONFIG_DEBUG_RODATA=y hoặc CONFIG_STRICT_KERNEL_RWX=y
  • Hạn chế quyền truy cập không gian người dùng từ kernel - x86 (được bật theo mặc định): CONFIG_X86_SMAP=y

Kiểm tra

Để kiểm tra việc triển khai của bạn, hãy thêm CONFIG_LKDTM=y vào cấu hình kernel và xác nhận rằng mỗi lệnh sau đây đều dẫn đến sự cố kernel:

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 đề chung

Những thay đổi này có thể làm lộ ra lỗi trong trình điều khiển hạt nhân, cần được nhà sản xuất thiết bị hoặc chủ sở hữu trình điều khiển hạt nhân sửa lỗi.

  • Bản sao người dùng cứng sẽ hiển thị 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 người dùng. Những lỗi này cần được sửa giống như bất kỳ lỗi hỏng bộ nhớ nào khác.
  • Mô phỏng PAN cho thấy quyền truy cập không gian người dùng trực tiếp từ kernel, điều này không được phép. Thay vào đó, các trình điều khiển đang cố gắng truy cập vào bộ nhớ không gian người dùng cần phải được thay đổi để sử dụng các hàm copy_to_user() / copy_from_user() tiêu chuẩn.