引入补丁以随机化系统调用的 Linux 内核堆栈地址

Kees Cook 是 kernel.org 的前首席系统管理员,也是 Ubuntu 安全团队的负责人,现在在 Google 工作,负责 Android 和 ChromeOS 的安全,他发布了一组补丁,用于在处理系统调用时随机化内核堆栈中的偏移量。 补丁通过改变堆栈位置来提高内核安全性,从而使对堆栈的攻击变得更加困难且不太成功。 初始实现支持 ARM64 和 x86/x86_64 处理器。

该补丁的最初想法属于 PaX RANDKSTACK 项目。 2019 年,英特尔工程师 Elena Reshetova 尝试创建适合包含在主 Linux 内核中的这一想法的实现。 后来,Kees Cook 采取了这一举措,他提出了一个适合内核主版本的实现。 这些补丁计划作为 5.13 版本的一部分包含在内。 默认情况下该模式将被禁用。 为了启用它,建议使用内核命令行参数“randomize_kstack_offset=on/off”和 CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT 设置。 启用该模式的开销估计约为 1% 的性能损失。

所提出的保护的本质是为每个系统调用选择一个随机堆栈偏移量,这使得即使在接收地址数据之后也很难确定内存中的堆栈布局,因为下一个系统调用将更改堆栈的基地址。 与 PaX RANDKSTACK 实现不同,在建议包含在内核中的补丁中,随机化不是在初始阶段(cpu_current_top_of_stack)执行的,而是在设置 pt_regs 结构之后执行的,这使得无法使用基于 ptrace 的方法来确定随机偏移量在长时间运行的系统调用期间。

来源: opennet.ru

添加评论