针对 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”添加到内核 cmdline。