什么是堆栈冲突,我该怎么办?


27

我听说过一个名为Stack Clash的新漏洞,该漏洞显然会影响多个类似Unix的系统(不仅是Linux,还包括BSD,Solaris)。

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

Answers:


29

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

Ars Technica报告

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

Qualys开发的主要概念验证攻击利用索引为CVE-2017-1000364的漏洞。Qualys研究人员还开发了使用Stack Clash来利用单独漏洞的攻击,包括CVE-2017-1000365和CVE-2017-1000367。例如,当与Qualys在Sudo中修复的最近修复的漏洞CVE-2017-1000367结合使用时,本地用户可以利用Sudo在更广泛的OS上获取完整的root特权。到目前为止,Qualys无法使漏洞利用程序远程执行代码。他们调查的唯一远程应用程序是Exim邮件服务器,巧合的是,该服务器无法被利用。Qualys表示,不能排除存在这种远程代码执行漏洞的可能性。Qualys表示将在以后发布概念验证漏洞,

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

引用LWN文章中有关2010年以来的原始修补程序的内容:

由于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-通用 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-通用 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-通用 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-image-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-generic-lpae-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-powerpc64-emb 4.8.0-56.61〜16.04.1
Ubuntu 14.04 LTS:
linux-image-powerpc-smp- lts -xenial 4.4.0.81.66
linux-image-lowlatency- lts -xenial 4.4.0.81.66
linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104〜14.04.1
linux-image-4.4.0-81-powerpc-e500mc 4.4.0-81.104〜14.04.1
linux-image-4.4.0-81-lowlatency 4.4.0-81.104〜14.04.1
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104〜14.04.1
linux-image-generic-lpae- lts -xenial 4.4.0.81.66
linux-image-powerpc64-smp- lts -xenial 4.4.0.81.66
linux-image-4.4.0-81-generic 4.4.0-81.104〜14.04.1
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104〜14.04.1
linux-image-generic- lts -xenial 4.4.0.81.66
linux-image-powerpc64-emb- lts -xenial 4.4.0.81.66
linux-image-powerpc-e500mc- lts -xenial 4.4.0.81.66
linux-image-virtual- lts -xenial 4.4.0.81.66
linux-image-4.4.0-81-powerpc64-emb 4.4.0-81.104〜14.04.1
Ubuntu 14.04 LTS:
linux-image-powerpc-e500mc 3.13.0.121.131
linux-image-lowlatency-pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc64-emb 3.13.0-121.170
linux-image-generic-pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc-smp 3.13.0-121.170
linux-image-3.13.0-121-powerpc-e500mc 3.13.0-121.170
linux-image-3.13.0-121-powerpc-e500 3.13.0-121.170
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170
linux-image-generic- lts -quantal 3.13.0.121.131
linux-image-virtual 3.13.0.121.131
linux-image-powerpc-e500 3.13.0.121.131
linux-image-generic- lts - trusty 3.13.0.121.131
linux-image-3.13.0-121-通用 3.13.0-121.170
linux-image-omap 3.13.0.121.131
linux-image-powerpc64-emb 3.13.0.121.131
linux-image-3.13.0-121-powerpc64-smp 3.13.0-121.170
linux-image-generic 3.13.0.121.131
linux-image-highbank 3.13.0.121.131
linux-image-generic- lts - saucy 3.13.0.121.131
linux-image-powerpc-smp 3.13.0.121.131
linux-image-3.13.0-121-lowlatency 3.13.0-121.170
linux-image-generic-lpae-lts- saucy 3.13.0.121.131
linux-image-generic- lts - raring 3.13.0.121.131
linux-image-powerpc64-smp 3.13.0.121.131
linux-image-generic-lpae-lts- trusty 3.13.0.121.131
linux-image-generic-lpae 3.13.0.121.131
linux-image-lowlatency 3.13.0.121.131
Ubuntu 12.04 ESM:
linux-image-powerpc-smp 3.2.0.128.142
linux-image-3.2.0-128-virtual 3.2.0-128.173
linux-image-3.2.0-128-generic-pae 3.2.0-128.173
linux-image-generic 3.2.0.128.142
linux-image-generic-pae 3.2.0.128.142
linux-image-highbank 3.2.0.128.142
linux-image-3.2.0-128-highbank 3.2.0-128.173
linux-image-3.2.0-128-powerpc-smp 3.2.0-128.173
linux-image-virtual 3.2.0.128.142
linux-image-powerpc64-smp 3.2.0.128.142
linux-image-3.2.0-128-omap 3.2.0-128.173
linux-image-3.2.0-128-powerpc64-smp 3.2.0-128.173
linux-image-omap 3.2.0.128.142
linux-image-3.2.0-128-通用 3.2.0-128.173
Ubuntu 12.04 LTS:
linux-image-3.13.0-121-generic 3.13.0-121.170〜precise1
linux-image-generic-lpae-lts- trusty 3.13.0.121.112
linux-image-generic- lts - trusty 3.13.0.121.112
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170〜precise1

须藤

自2017年5月30日起,USN-3304-1涵盖了上述sudo bug :

Ubuntu 17.04:
sudo-ldap 1.8.19p1-1ubuntu1.1
须藤 1.8.19p1-1ubuntu1.1
Ubuntu 16.10:
sudo-ldap 1.8.16-0ubuntu3.2
须藤 1.8.16-0ubuntu3.2
Ubuntu 16.04 LTS:
sudo-ldap 1.8.16-0ubuntu1.4
须藤 1.8.16-0ubuntu1.4
Ubuntu 14.04 LTS:
须藤 -ldap 1.8.9p5-1ubuntu1.4
须藤 1.8.9p5-1ubuntu1.4

因此,总而言之,它应该已经在大多数仍受支持的Ubuntu版本中得到修复,只需更新其中一个?
CJCombrink '17

正如CVE跟踪器所指出的,@ TheBadger否,某些组合仍列为待发布版本。我想随着修补程序的发布,将会发布更多的USN。
muru

4
但是,是的,更新应该足够了,不需要其他配置。
muru

如果有影响,如何验证?
雏菊

1
@immibis根据下面的文章提供,但是现有的实现方式无法正常工作:Qualys Research Labs的Stackguard错误说明
Igor B,

1

多操作系统错误是如何发生的?

要具体解决您问题的这一部分:

出现此问题的原因是,堆(向上增长)和堆栈(向下增长)使用了共享地址空间。

这种设计在许多系统之间是通用的,因此为什么许多系统容易受到同一类漏洞的影响。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.