針對 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。