适用于 Freescale BookE32 的 KASLR¶
KASLR 一词代表内核地址空间布局随机化。
本文档试图解释 Freescale BookE32 的 KASLR 的实现。KASLR 是一种安全特性,可以阻止利用内核内部位置知识的攻击尝试。
由于已经支持 CONFIG_RELOCATABLE,我们需要做的是将内核映射或复制到适当的位置并进行重定位。Freescale Book-E 部分希望将低内存映射到固定的 TLB 条目(TLB1)。TLB1 条目不适合直接将内核映射到随机区域,因此我们选择将内核复制到适当的位置并重新开始重定位。
熵来自 banner 和定时器基址,它们会在每次构建和启动时发生变化。这并不是很安全,因此启动加载程序可能会通过设备树中的 /chosen/kaslr-seed 节点传递熵。
我们将使用低内存的前 512M 来随机化内核镜像。内存将被分成 64M 的区域。我们将使用熵的低 8 位来决定 64M 区域的索引。然后,我们在 64M 区域内选择一个 16K 对齐的偏移量来放置内核。
KERNELBASE
|--> 64M <--|
| |
+---------------+ +----------------+---------------+
| |....| |kernel| | |
+---------------+ +----------------+---------------+
| |
|-----> offset <-----|
kernstart_virt_addr
要启用 KASLR,请设置 CONFIG_RANDOMIZE_BASE = y。如果启用了 KASLR 并且您想在运行时禁用它,请将 “nokaslr” 添加到内核命令行。