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