保护内核栈
Linux 内核栈是一个诱人的攻击目标。这是因为内核需要跟踪它的位置。如果一个函数被调用,然后调用另一个函数,再调用另一个函数,内核需要记住所有这些函数被调用的顺序,以便每个函数都可以返回到调用它的函数。为此,内核会维护一个“栈”,其中包含表示其当前上下文历史的值。
如果攻击者设法欺骗内核,让它认为应该将执行转移到错误的位置,那么攻击者就有可能以 root 权限运行任意代码。一旦发生这种情况,攻击者就获胜了,计算机就被完全攻破了。而欺骗内核的一种方法是以某种方式修改栈,或者预测栈,或者接管栈所指向位置的程序。
保护内核栈至关重要,这是许多持续工作的主题。有很多方法可以使攻击者难以进行这种或那种会使内核受到损害的小事情。
Elena Reshetova 正在研究其中一种方法。她希望在每次系统调用后随机化内核栈偏移量。本质上,她想掩盖栈留下的痕迹,以便攻击者无法跟踪或预测它。而且,她最近发布了一些补丁来实现这一点。
在她发布文章时,还没有已知的攻击会利用栈中缺乏随机性的漏洞。因此,Elena 并不是试图修复任何特定的安全漏洞。相反,她说,她想消除任何可能依赖于了解栈元素的顺序和位置的攻击向量。
通常情况就是这样——当漏洞出现时进行修补是很好的,但更好的是覆盖整个区域,这样就无法再挖掘出更多的漏洞。
人们对 Elena 的补丁非常感兴趣,许多开发人员提出了关于她需要多少随机性,以及她应该在哪里找到该随机性的熵等建议。
一般来说,Linus Torvalds 更喜欢安全补丁来修复特定的安全问题。他对在没有漏洞的区域添加安全性不太热情。但在这种情况下,他可能认为 Elena 的补丁增加了一个以前没有的安全级别。
安全始终是一场噩梦。通常,一个非常理想的功能可能不得不被放弃,不是因为它没有用,而是因为它会产生固有的不安全性。微软的操作系统和应用程序经常在这些情况下做出错误的决定——选择实现一个很酷的功能,尽管它无法安全地完成。另一方面,Linux 和其他开源系统(如 FreeBSD)永远不会犯这个错误。
注意:如果您在上面被提及并希望在评论部分上方发布回复,请将包含您的回复文本的消息发送至 ljeditor@linuxjournal.com。