我使用的是 Linux 内核 v4.14。我已经为我的定制板构建了 AARCH64 架构的内核。我已经启用了KASLR
该CONFIG_RANDOMIZE_BASE=y
标志。
然而,每次启动时,我发现内核代码和数据的物理地址是相同的。 (我检查了这个/proc/iomem
)。
KASLR 不会随机化内核代码段的物理地址吗?
答案1
看Aarch64 上Kconfig
的描述RANDOMIZE_BASE
:
随机化加载内核映像的虚拟地址,作为一项安全功能,可以阻止依赖于内核内部位置知识的利用尝试。
引导加载程序的工作是通过在
/chosen/kaslr-seed
内核入口处传递随机的 u64 值来提供熵。当通过 UEFI 存根启动时,它将调用固件的
EFI_RNG_PROTOCOL
实现(如果可用)来为内核提供熵。此外,它还会随机化内核映像的物理位置。
就其本身而言,RANDOMIZE_BASE
仅随机化内核映像的虚拟地址;为了随机化映像的物理地址,内核需要来自 booloader 的帮助(当它启动时,它本身就是UEFI 存根)。
其他架构也支持随机化物理地址(例如x86)。