什么是 Stack Clash,我该怎么办?

mur*_*uru 28 security

我听说过一个名为 Stack Clash 的新漏洞,它显然影响了多个类 Unix 系统(不仅是 Linux,还有 BSD、Solaris)。

  • 它是什么?多操作系统错误是如何发生的?
  • 如何保护我的系统?

mur*_*uru 30

Stack Clash 是一种基于相当古老技术的漏洞利用。进程使用的内存分为两个区域——栈和堆。人们通常将堆栈想象为向下增长,而将堆想象为向上增长。当其中一个增长到足以与另一个发生冲突时会发生什么?更一般地说,当堆栈增长到足以侵占不相关的内存空间时会发生什么?最初的漏洞已有 12 年历史,Linux 内核开发人员通过使用保护页临时修复了它。然而,尽管有保护页面,Qualys 的研究人员还是设法利用了这一点。

Ars Technica 报道

Stack Clash 漏洞逐渐得到广泛关注,首先是在 2005 年安全研究员 Gaël Delalleau发现,五年后研究员 Rafal Wojtczuk发布了一个 Linux 漏洞。Linux 开发人员 引入了旨在防止堆栈冲突的保护措施,但今天的研究表明,攻击者相对容易绕过该措施。

Qualys 开发的主要概念验证攻击利用了索引为 CVE-2017-1000364 的漏洞。Qualys 研究人员还开发了使用 Stack Clash 来利用单独漏洞的攻击,包括 CVE-2017-1000365 和 CVE-2017-1000367。例如,当结合 Qualys 最近修复的 Sudo 漏洞 CVE-2017-1000367 时,本地用户可以利用 Sudo 在更广泛的操作系统上获得完整的 root 权限。Qualys 迄今无法使漏洞利用远程执行代码。他们调查的唯一远程应用程序是 Exim 邮件服务器,结果巧合的是它无法利用。Qualys 表示不排除存在此类远程代码执行漏洞的可能性。Qualys 表示将在稍后发布概念验证漏洞,

[...] Qualys 的详细技术咨询grsecurity 的技术分析中提供了更多信息。

引用关于 2010 年原始修复的 LWN 文章

由于 Linux 没有将进程堆栈和堆页面分开,因此可以将堆栈页面溢出到相邻的堆页面中。这意味着足够深的堆栈(例如来自递归调用)最终可能会使用堆中的内存。可以写入该堆页面的程序(例如 X 客户端)然后可以操纵其中一个调用的返回地址以跳转到其选择的位置。这意味着客户端可以让服务器运行它选择的代码——任意代码执行——可以利用这些代码来获得 root 权限。

以上描述适用于各种类 Unix 内核。

虽然Ars Technica的确实注意到在Qualys公司报告中提到的临时解决方法(“设置 硬RLIMIT STACK和RLIMIT_AS 的 本地用户 和 远程服务 到低价值”),它应该指出的是,这并不一定防范此漏洞。目前唯一安全的出路是升级。根据grsecurity分析:

应该清楚的是,仅内核尝试解决这个问题必然总是不完整的,因为真正的问题在于缺乏堆栈探测。由于替代的实际解决方案依赖于重建所有用户空间,因此在可预见的未来,这可能是唯一可行的解​​决方案。

我们现在能做的最好的事情就是将内核升级到打过补丁的版本。

2010 年的漏洞利用使用了 X 服务器,这个使用了 sudo,下一个可能是众多用户级程序中的任何一个,这些程序在某些时候以提升的权限运行。

Qualys 尚未发布任何用于漏洞利用的概念验证代码(他们计划稍后发布)。


有多个与 CVE-2017-1000364 相关的 Ubuntu 安全声明:

另请注意,CVE 跟踪器多个版本/内核组合列为待定修复程序。

通常,最简单的修复方法是尽快将系统更新到最新的内核包。

来自 USN 的相关内核版本(使用 剔除for i in {24..35}; curl -s https://www.ubuntu.com/usn/usn-33$i-1/ | pup 'dl:nth-last-of-type(1)'):

Ubuntu 17.04:
linux-image-4.10.0-24-lowlatency 4.10.0-24.28
linux-image-generic-lpae 4.10.0.24.26
linux-image-generic 4.10.0.24.26
linux-image-4.10.0-24-generic-lpae 4.10.0-24.28
linux-image-4.10.0-24-generic 4.10.0-24.28
linux-image-lowlatency 4.10.0.24.26
Ubuntu 17.04:
linux-image-4.10.0-1008-raspi2 4.10.0-1008.11
linux-image-raspi2 4.10.0.1008.10
Ubuntu 16.10:
linux-image-powerpc-smp 4.8.0.56.69
linux-image-powerpc-e500mc 4.8.0.56.69
linux-image-4.8.0-56-powerpc-smp 4.8.0-56.61
linux-image-4.8.0-56-powerpc-e500mc 4.8.0-56.61
linux-image-4.8.0-56-lowlatency 4.8.0-56.61
linux-image-generic 4.8.0.56.69
linux-image-4.8.0-56-generic 4.8.0-56.61
linux-image-powerpc64-emb 4.8.0.56.69
linux-image-virtual 4.8.0.56.69
linux-image-powerpc64-smp 4.8.0.56.69
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61
linux-image-generic-lpae 4.8.0.56.69
linux-image-lowlatency 4.8.0.56.69
linux-image-4.8.0-56-powerpc64-emb 4.8.0-56.61
Ubuntu 16.10:
linux-image-4.8.0-1040-raspi2 4.8.0-1040.44
linux-image-raspi2 4.8.0.1040.44
Ubuntu 16.04 LTS:
linux-image-powerpc64-smp- lts -utopic 4.4.0.81.87
linux-image-generic- lts - wily 4.4.0.81.87
linux-image-generic- lts -utopic 4.4.0.81.87
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104
linux-image-powerpc64-emb- lts -vivid 4.4.0.81.87
linux-image-powerpc-e500mc 4.4.0.81.87
linux-image-generic-lpae- lts -xenial 4.4.0.81.87
linux-image-generic-lpae- lts -utopic 4.4.0.81.87
linux-image-powerpc-e500mc- lts -xenial 4.4.0.81.87
linux-image-4.4.0-81-powerpc64-emb 4.4.0-81.104
linux-image-powerpc-e500mc- lts - wily 4.4.0.81.87
linux-image-4.4.0-81-powerpc-e500mc 4.4.0-81.104
linux-image-generic-lpae-lts- wily 4.4.0.81.87
linux-image-virtual- lts -vivid 4.4.0.81.87
linux-image-virtual- lts -utopic 4.4.0.81.87
linux-image-virtual 4.4.0.81.87
linux-image-powerpc64-emb-lts- wily 4.4.0.81.87
linux-image-lowlatency- lts -vivid 4.4.0.81.87
linux-image-powerpc-e500mc- lts -vivid 4.4.0.81.87
linux-image-powerpc64-emb 4.4.0.81.87
linux-image-powerpc-smp- lts -xenial 4.4.0.81.87
linux-image-4.4.0-81-generic 4.4.0-81.104
linux-image-powerpc64-smp- lts -vivid 4.4.0.81.87
linux-image-lowlatency-lts- wily 4.4.0.81.87
linux-image-4.4.0-81-lowlatency 4.4.0-81.104
linux-image-generic 4.4.0.81.87
linux-image-lowlatency- lts -xenial 4.4.0.81.87
linux-image-powerpc64-smp- lts -xenial 4.4.0.81.87
linux-image-powerpc64-emb- lts -utopic 4.4.0.81.87
linux-image-generic- lts -xenial 4.4.0.81.87
linux-image-generic- lts -vivid 4.4.0.81.87
linux-image-powerpc-e500mc- lts -utopic 4.4.0.81.87
linux-image-powerpc-smp 4.4.0.81.87
linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104
linux-image-generic-lpae- lts -vivid 4.4.0.81.87
linux-image-generic-lpae 4.4.0.81.87
linux-image-powerpc64-smp-lts- wily 4.4.0.81.87
linux-image-powerpc64-emb- lts -xenial 4.4.0.81.87
linux-image-powerpc-smp- lts - wily 4.4.0.81.87
linux-image-virtual- lts - wily 4.4.0.81.87
linux-图像-powerpc64-smp 4.4.0.81.87
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104
linux-image-powerpc-smp- lts -utopic 4.4.0.81.87
linux-image-powerpc-smp- lts -vivid 4.4.0.81.87
linux-image-lowlatency 4.4.0.81.87
linux-image-virtual- lts -xenial 4.4.0.81.87
linux-image-lowlatency- lts -utopic 4.4.0.81.87
Ubuntu 16.04 LTS:
linux-image-4.4.0-1016-gke 4.4.0-1016.16
Ubuntu 16.04 LTS:
linux-image-snapdragon 4.4.0.1061.54
linux-image-4.4.0-1061-snapdragon 4.4.0-1061.66
Ubuntu 16.04 LTS:
linux-image-4.4.0-1020-aws 4.4.0-1020.29
Ubuntu 16.04 LTS:
linux-image-raspi2 4.4.0.1059.60
linux-image-4.4.0-1059-raspi2 4.4.0-1059.67
Ubuntu 16.04 LTS:
linux-image-4.8.0-56-powerpc-smp 4.8.0-56.61~16.04.1
linux-image-4.8.0-56-powerpc-e500mc 4.8.0-56.61~16.04.1
linux-image-4.8.0-56-lowlatency 4.8.0-56.61~16.04.1
linux-image-4.8.0-56-generic 4.8.0-56.61~16.04.1
linux-image-generic-hwe-16.04 4.8.0.56.27
linux-image-lowlatency-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61~16.04.1
linux-image-virtual-hwe-16.04 4.8.0.56.27
linux-image-gener

  • 但是,是的,更新应该足够了,不需要额外的配置。 (4认同)