博主呓语:

NetBSD 和 OpenBSD 使用随机的方式提升内核安全性

Posted by 破冰 on 2017-10-23 9:22 Monday

问:“你在哪内存哪里存放内核?” 答:“对不起,我不知道”

NetBSD 的团队发布了他们的第一个代码片段来实现 64 位 AMD 处理器的内核 ASLR - 地址空间布局随机化。

KASLR 版本随机将 NetBSD 内核加载到内存中,为内核提供与 ASLR 提供给应用程序相同的安全保护。

随机代码的内存位置使得诸如缓冲区溢出之类的错误类更难利用,因为攻击者不能轻易预测(并访问)错误所暴露的内存位置。

开发人员 Maxime Villard 解释说,目前的实现在引导程序和内核之间放置了一个专门的内核“prekern”。

“内核被编译为具有 GENERIC_KASLR 配置文件的原始库,而 prekern 被编译为静态二进制文件。当机器启动时,引导程序将跳入 prekern。prekern 将内核以随机虚拟地址(VA)重新定位,然后跳转到其中。最后,内核执行一些清理,并正常执行。”

Villard 补充说,实现还不够完整。例如,内核放在 prekern 的地方,它都位于连续的内存块中。

这也确立未来的发展方向,主要是:

  • 独立的内核部分

  • 修改几个内核入口点,不会将内核地址泄露给用户界面

  • 随机内核堆(现在仍然是静态的)

OpenBSD 项目在6月份首次提供了类似的方法,称为内核随机化地址链接(kernel address randomised link 或 KARL),用于加固内核,防止内核级的缓冲溢出。类似地址空间布局随机化 (ASLR) 应用于随机应用程序的内存地址,KARL 随机化了内核加载,使得攻击者无法预测出一个内核缓冲溢出的内存分配地址。OpenBSD 创始人 Theo de Raadt 称,以前的内核二进制总是在相同的物理内存和相同的虚拟地址空间。

这将在 OpenBSD 6.2 版本成为 mainstream 特性。

来自:The Register

发表评论: