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=y
或CONFIG_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=y
或CONFIG_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=y
或CONFIG_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()
函數。