內核強化

Android 8.0 增加了核心強化功能,以協助緩解核心漏洞並尋找核心驅動程式中的錯誤。這些功能位於 android-3.18、android-4.4 和 android-4.9 分支的kernel/common

執行

為了獲得這些功能,設備製造商和 SOC 應將kernel/common中的所有強化補丁合併到其內核樹中,並啟用以下內核配置選項:

  • 強化使用者複製: CONFIG_HARDENED_USERCOPY=y
  • PAN 模擬 - arm64: CONFIG_ARM64_SW_TTBR0_PAN=y
  • PAN 模擬 - 手臂: CONFIG_CPU_SW_DOMAIN_PAN=y
  • KASLR - 4.4 及更高版本核心: CONFIG_RANDOMIZE_BASE=y

KASLR 也需要引導程式支援透過裝置樹節點/chosen/kaslr-seed或透過實現EFI_RNG_PROTOCOL傳遞硬體熵。

也要確保啟用現有的強化功能:

  • 堆疊緩衝區溢位緩解: CONFIG_CC_STACKPROTECTOR_STRONG=y
  • 內部記憶體保護: CONFIG_DEBUG_RODATA=yCONFIG_STRICT_KERNEL_RWX=y
  • 限制來自核心的使用者空間存取 - x86(預設啟用): CONFIG_X86_SMAP=y

測試

若要測試您的實現,請將CONFIG_LKDTM=y新增至核心配置中,並確認以下每個命令都會導致核心崩潰:

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

對於 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

常見問題

這些變更可能會暴露核心驅動程式中的錯誤,這些錯誤需要由裝置製造商或核心驅動程式的擁有者修復。

  • 當資料複製到使用者空間或從使用者空間複製資料時,強化的使用者複製會暴露出不正確的邊界檢查。這些應該像任何其他記憶體損壞錯誤一樣得到修復。
  • PAN 模擬公開了來自核心的直接用戶空間訪問,這是不允許的。嘗試存取使用者空間記憶體的驅動程式需要變更為使用標準copy_to_user() / copy_from_user()函數。
,

Android 8.0 增加了核心強化功能,以協助緩解核心漏洞並尋找核心驅動程式中的錯誤。這些功能位於 android-3.18、android-4.4 和 android-4.9 分支的kernel/common

執行

為了獲得這些功能,設備製造商和 SOC 應將kernel/common中的所有強化補丁合併到其內核樹中,並啟用以下內核配置選項:

  • 強化使用者複製: CONFIG_HARDENED_USERCOPY=y
  • PAN 模擬 - arm64: CONFIG_ARM64_SW_TTBR0_PAN=y
  • PAN 模擬 - 手臂: CONFIG_CPU_SW_DOMAIN_PAN=y
  • KASLR - 4.4 及更高版本核心: CONFIG_RANDOMIZE_BASE=y

KASLR 也需要引導程式支援透過裝置樹節點/chosen/kaslr-seed或透過實現EFI_RNG_PROTOCOL傳遞硬體熵。

也要確保啟用現有的強化功能:

  • 堆疊緩衝區溢位緩解: CONFIG_CC_STACKPROTECTOR_STRONG=y
  • 內部記憶體保護: CONFIG_DEBUG_RODATA=yCONFIG_STRICT_KERNEL_RWX=y
  • 限制來自核心的使用者空間存取 - x86(預設啟用): CONFIG_X86_SMAP=y

測試

若要測試您的實現,請將CONFIG_LKDTM=y新增至核心配置中,並確認以下每個命令都會導致核心崩潰:

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

對於 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

常見問題

這些變更可能會暴露核心驅動程式中的錯誤,這些錯誤需要由裝置製造商或核心驅動程式的擁有者修復。

  • 當資料複製到使用者空間或從使用者空間複製資料時,強化的使用者複製會暴露出不正確的邊界檢查。這些應該像任何其他記憶體損壞錯誤一樣得到修復。
  • PAN 模擬公開了來自核心的直接用戶空間訪問,這是不允許的。嘗試存取使用者空間記憶體的驅動程式需要變更為使用標準copy_to_user() / copy_from_user()函數。
,

Android 8.0 增加了核心強化功能,以協助緩解核心漏洞並尋找核心驅動程式中的錯誤。這些功能位於 android-3.18、android-4.4 和 android-4.9 分支的kernel/common

執行

為了獲得這些功能,設備製造商和 SOC 應將kernel/common中的所有強化補丁合併到其內核樹中,並啟用以下內核配置選項:

  • 強化使用者複製: CONFIG_HARDENED_USERCOPY=y
  • PAN 模擬 - arm64: CONFIG_ARM64_SW_TTBR0_PAN=y
  • PAN 模擬 - 手臂: CONFIG_CPU_SW_DOMAIN_PAN=y
  • KASLR - 4.4 及更高版本核心: CONFIG_RANDOMIZE_BASE=y

KASLR 也需要引導程式支援透過裝置樹節點/chosen/kaslr-seed或透過實現EFI_RNG_PROTOCOL傳遞硬體熵。

也要確保啟用現有的強化功能:

  • 堆疊緩衝區溢位緩解: CONFIG_CC_STACKPROTECTOR_STRONG=y
  • 內部記憶體保護: CONFIG_DEBUG_RODATA=yCONFIG_STRICT_KERNEL_RWX=y
  • 限制來自核心的使用者空間存取 - x86(預設啟用): CONFIG_X86_SMAP=y

測試

若要測試您的實現,請將CONFIG_LKDTM=y新增至核心配置中,並確認以下每個命令都會導致核心崩潰:

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

對於 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

常見問題

這些變更可能會暴露核心驅動程式中的錯誤,這些錯誤需要由裝置製造商或核心驅動程式的擁有者修復。

  • 當資料複製到使用者空間或從使用者空間複製資料時,強化的使用者複製會暴露出不正確的邊界檢查。這些應該像任何其他記憶體損壞錯誤一樣得到修復。
  • PAN 模擬公開了來自核心的直接用戶空間訪問,這是不允許的。嘗試存取使用者空間記憶體的驅動程式需要變更為使用標準copy_to_user() / copy_from_user()函數。