Kees Cook推出了新补丁来提高Linux内核堆栈的安全性

Linux

Kees Cook,kernel.org的前首席系统管理员 是Ubuntu安全小组的负责人,现在在Google工作,以保护Android和ChromeOS, 发布了一组补丁,可将内核堆栈偏移随机化 处理系统调用时。 修补程序通过更改堆栈位置来提高内核安全性,否则会使堆栈攻击变得更加困难而失败

修补程序的最初想法属于PaX RANDKSTACK项目。 在2019年,英特尔工程师Elena Reshetova尝试创建该想法的实现,以适合包含在Linux内核的主要组成部分中。

随后,基斯·库克(Kees Cook)采取了主动行动 他为内核的主版本提供了合适的实现,并且针对Linux 5.13版计划了其补丁。

默认情况下将禁用该模式,要启用它,将提供内核命令行参数 “ Randomize_kstack_offset =开/关»和设置 CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT, 另外,启用该模式的开销估计约为性能损失1%。

提议的保护措施的实质是在每个系统调用上选择一个随机的堆栈偏移量,即使接收到地址信息,也会使确定堆栈在内存中的布局变得复杂,因为堆栈的基地址将在下一次调用时更改。

与执行不同 PaX RANDKStack在提议包含在内核中的补丁中, 初始阶段不进行随机化, 但是设置了pt_regs结构之后,这使得在长时间运行的系统调用期间无法使用基于ptrace的方法来确定随机偏移量。

随着Linux内核堆栈保护的不断改进(带有保护页面的基于vmap的堆栈映射,删除了thread_info,STACKLEAK),攻击者不得不寻找新的方法来利用其漏洞。

在以下情况下,它们已经并且继续依赖内核堆栈确定性 VMAP_STACK和THREAD_INFO_IN_TASK_STRUCT 它们不相关。 例如,如果在系统调用之间不能确定堆栈偏移量,那么以下最近的攻击将受到阻碍

randomize_kstack_offset函数的目的是添加一个随机偏移量 在将pt_regs推入堆栈之后,以及在系统调用处理期间使用其余线程堆栈之前,并在每次进程发出系统调用时都对其进行更改。 当前,随机性的源由体系结构定义(但是x86使用rdtsc()的低字节)。

对于不同的熵源,将来可能会进行增强,但不在此补丁程序的范围之内。 此外,为了增加不可预测性,在系统调用结束时选择新的偏移量(从用户空间开始测量偏移的时间应比进入系统调用时更不容易测量),并在每个CPU中存储在一个变量中,因此,值的生存期不会显式地与单个任务相关联。

在x86上,此操作没有可见的更改,因为已为编译单元无条件地禁用了堆栈保护程序,但是arm64中需要进行更改。 不幸的是,没有可用于禁用特定功能的堆栈保护程序的属性。 与PaX RANDKSTACK函数的比较:RANDKSTACK函数将堆栈起始位置(cpu_current_top_of_stack)随机化,也就是说,它包括pt_regs结构在堆栈上的位置。

最初, 这个补丁采用了相同的方法, 但是在最近的讨论中,已经确定这几乎没有什么价值,好像攻击者可以使用ptrace功能一样,您可以使用PTRACE_PEEKUSR来向pt_regs结构读取/写入不同的偏移量,观察访问pt_regs的缓存行为并找出随机堆栈偏移量。

最后提到 初始实现支持ARM64和x86 / x86_64处理器.


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责资料:AB Internet Networks 2008 SL
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。