须藤

须藤

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

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

答案1

Stack Clash 是一种基于相当古老的技术的漏洞。进程使用的内存分为两个区域 -栈和堆。人们通常认为栈是向下增长的,堆是向上增长的。当栈或堆增长到足以冲突另一个漏洞又如何?更一般地讲,当堆栈增长到足以侵占不相关的内存空间时会发生什么?最初的漏洞已有 12 年历史,Linux 内核开发人员使用保护页面。然而,Qualys 的研究人员尽管设置了防护页面,还是成功利用了这一漏洞。

Ars Technica 报道

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

Qualys 开发的主要概念验证攻击利用了编号为 CVE-2017-1000364 的漏洞。Qualys 研究人员还开发了使用 Stack Clash 来利用单独漏洞的攻击,包括 CVE-2017-1000365 和 CVE-2017-1000367。例如,当与 CVE-2017-1000367(也是 Qualys 发现的 Sudo 中最近修复的漏洞)结合使用时,本地用户可以利用 Sudo 在更广泛的操作系统上获得完全 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-低延迟 4.10.0-24.28
Linux 映像通用 lpae 4.10.0.24.26
linux-image-通用 4.10.0.24.26
Linux-映像-4.10.0-24-通用-lpae 4.10.0-24.28
Linux-映像-4.10.0-24-通用 4.10.0-24.28
Linux 镜像低延迟 4.10.0.24.26
Ubuntu 17.04:
Linux 镜像-4.10.0-1008-raspi2 4.10.0-1008.11
Linux 镜像-raspi2 4.10.0.1008.10
Ubuntu 16.10:
Linux 映像-powerpc-smp 4.8.0.56.69
Linux-镜像-powerpc-e500mc 4.8.0.56.69
Linux-映像-4.8.0-56-powerpc-smp 4.8.0-56.61
Linux-映像-4.8.0-56-powerpc-e500mc 4.8.0-56.61
Linux-image-4.8.0-56-低延迟 4.8.0-56.61
linux-image-通用 4.8.0.56.69
Linux-映像-4.8.0-56-通用 4.8.0-56.61
Linux 映像-powerpc64-emb 4.8.0.56.69
Linux 映像虚拟 4.8.0.56.69
Linux 映像-powerpc64-smp 4.8.0.56.69
Linux-映像-4.8.0-56-通用-lpae 4.8.0-56.61
Linux 映像通用 lpae 4.8.0.56.69
Linux 镜像低延迟 4.8.0.56.69
Linux-映像-4.8.0-56-powerpc64-emb 4.8.0-56.61
Ubuntu 16.10:
Linux-镜像-4.8.0-1040-raspi2 4.8.0-1040.44
Linux 镜像-raspi2 4.8.0.1040.44
Ubuntu 16.04 LTS:
Linux-镜像-powerpc64-smp-lts-utopic 4.4.0.81.87
Linux 映像通用 lts-wily 4.4.0.81.87
linux-image-generic-lts-utopic 4.4.0.81.87
Linux-映像-4.4.0-81-通用-lpae 4.4.0-81.104
Linux-图像-powerpc64-emb-lts-生动 4.4.0.81.87
Linux-镜像-powerpc-e500mc 4.4.0.81.87
Linux 映像通用 lpae-lts-xenial 4.4.0.81.87
Linux 映像通用 lpae-lts-utopic 4.4.0.81.87
Linux-映像-powerpc-e500mc-lts-xenial 4.4.0.81.87
Linux-映像-4.4.0-81-powerpc64-emb 4.4.0-81.104
Linux-映像-powerpc-e500mc-lts-wily 4.4.0.81.87
Linux-映像-4.4.0-81-powerpc-e500mc 4.4.0-81.104
Linux 映像通用 lpae-lts-wily 4.4.0.81.87
Linux 映像虚拟 lts 生动 4.4.0.81.87
Linux 映像虚拟 lts utopic 4.4.0.81.87
Linux 映像虚拟 4.4.0.81.87
Linux-映像-powerpc64-emb-lts-wily 4.4.0.81.87
Linux 图像低延迟 lts 生动 4.4.0.81.87
Linux-图像-powerpc-e500mc-lts-生动 4.4.0.81.87
Linux 映像-powerpc64-emb 4.4.0.81.87
Linux-镜像-powerpc-smp-lts-xenial 4.4.0.81.87
Linux-image-4.4.0-81-通用 4.4.0-81.104
Linux-图像-powerpc64-smp-lts-生动 4.4.0.81.87
Linux 镜像低延迟 lts-wily 4.4.0.81.87
Linux-image-4.4.0-81-低延迟 4.4.0-81.104
linux-image-通用 4.4.0.81.87
Linux 镜像低延迟 lts xenial 4.4.0.81.87
Linux-映像-powerpc64-smp-lts-xenial 4.4.0.81.87
Linux-映像-powerpc64-emb-lts-utopic 4.4.0.81.87
Linux 映像通用 lts xenial 4.4.0.81.87
Linux 图像通用 lts 生动 4.4.0.81.87
Linux-镜像-powerpc-e500mc-lts-utopic 4.4.0.81.87
Linux 映像-powerpc-smp 4.4.0.81.87
Linux-映像-4.4.0-81-powerpc-smp 4.4.0-81.104
Linux 图像通用 lpae-lts-生动 4.4.0.81.87
Linux 映像通用 lpae 4.4.0.81.87
Linux-镜像-powerpc64-smp-lts-wily 4.4.0.81.87
Linux-映像-powerpc64-emb-lts-xenial 4.4.0.81.87
Linux 映像-powerpc-smp-lts-wily 4.4.0.81.87
Linux 映像虚拟 lts-wily 4.4.0.81.87
Linux 映像-powerpc64-smp 4.4.0.81.87
Linux-映像-4.4.0-81-powerpc64-smp 4.4.0-81.104
Linux-镜像-powerpc-smp-lts-utopic 4.4.0.81.87
Linux-图像-powerpc-smp-lts-生动 4.4.0.81.87
Linux 镜像低延迟 4.4.0.81.87
Linux 映像虚拟 lts 4.4.0.81.87
Linux 镜像低延迟 lts utopic 4.4.0.81.87
Ubuntu 16.04 LTS:
Linux-镜像-4.4.0-1016-gke 4.4.0-1016.16
Ubuntu 16.04 LTS:
Linux 镜像-Snapdragon 4.4.0.1061.54
Linux-镜像-4.4.0-1061-snapdragon 4.4.0-1061.66
Ubuntu 16.04 LTS:
Linux-映像-4.4.0-1020-aws 4.4.0-1020.29
Ubuntu 16.04 LTS:
Linux 镜像-raspi2 4.4.0.1059.60
Linux-镜像-4.4.0-1059-raspi2 4.4.0-1059.67
Ubuntu 16.04 LTS:
Linux-映像-4.8.0-56-powerpc-smp 4.8.0-56.61~16.04.1
Linux-映像-4.8.0-56-powerpc-e500mc 4.8.0-56.61~16.04.1
Linux-image-4.8.0-56-低延迟 4.8.0-56.61~16.04.1
Linux-映像-4.8.0-56-通用 4.8.0-56.61~16.04.1
Linux-映像-通用-hwe-16.04 4.8.0.56.27
Linux-镜像-低延迟-hwe-16.04 4.8.0.56.27
Linux-映像-4.8.0-56-通用-lpae 4.8.0-56.61~16.04.1
Linux-映像-虚拟-hwe-16.04 4.8.0.56.27
Linux-映像-通用-lpae-hwe-16.04 4.8.0.56.27
Linux-映像-4.8.0-56-powerpc64-emb 4.8.0-56.61~16.04.1
Ubuntu 14.04 LTS:
Linux-镜像-powerpc-smp-lts-xenial 4.4.0.81.66
Linux 镜像低延迟 lts xenial 4.4.0.81.66
Linux-映像-4.4.0-81-powerpc-smp 4.4.0-81.104~14.04.1
Linux-映像-4.4.0-81-powerpc-e500mc 4.4.0-81.104~14.04.1
Linux-image-4.4.0-81-低延迟 4.4.0-81.104~14.04.1
Linux-映像-4.4.0-81-通用-lpae 4.4.0-81.104~14.04.1
Linux 映像通用 lpae-lts-xenial 4.4.0.81.66
Linux-映像-powerpc64-smp-lts-xenial 4.4.0.81.66
Linux-image-4.4.0-81-通用 4.4.0-81.104~14.04.1
Linux-映像-4.4.0-81-powerpc64-smp 4.4.0-81.104~14.04.1
Linux 映像通用 lts xenial 4.4.0.81.66
Linux-映像-powerpc64-emb-lts-xenial 4.4.0.81.66
Linux-映像-powerpc-e500mc-lts-xenial 4.4.0.81.66
Linux 映像虚拟 lts 4.4.0.81.66
Linux-映像-4.4.0-81-powerpc64-emb 4.4.0-81.104~14.04.1
Ubuntu 14.04 LTS:
Linux-镜像-powerpc-e500mc 3.13.0.121.131
Linux 镜像低延迟 pae 3.13.0.121.131
Linux-映像-3.13.0-121-powerpc64-emb 3.13.0-121.170
Linux 映像通用 pae 3.13.0.121.131
Linux-映像-3.13.0-121-powerpc-smp 3.13.0-121.170
Linux-映像-3.13.0-121-powerpc-e500mc 3.13.0-121.170
Linux-映像-3.13.0-121-powerpc-e500 3.13.0-121.170
Linux-映像-3.13.0-121-通用-lpae 3.13.0-121.170
Linux 图像通用 lts 量子 3.13.0.121.131
Linux 映像虚拟 3.13.0.121.131
Linux-镜像-powerpc-e500 3.13.0.121.131
Linux 映像通用 lts-trusty 3.13.0.121.131
Linux-image-3.13.0-121-通用 3.13.0-121.170
Linux 映像 OMAP 3.13.0.121.131
Linux 映像-powerpc64-emb 3.13.0.121.131
Linux-映像-3.13.0-121-powerpc64-smp 3.13.0-121.170
linux-image-通用 3.13.0.121.131
linux-图像-highbank 3.13.0.121.131
linux-image-generic-lts-saucy 3.13.0.121.131
Linux 映像-powerpc-smp 3.13.0.121.131
Linux-image-3.13.0-121-低延迟 3.13.0-121.170
Linux 映像通用 lpae-lts-saucy 3.13.0.121.131
linux-image-generic-lts-raring 3.13.0.121.131
Linux 映像-powerpc64-smp 3.13.0.121.131
Linux 映像通用 lpae-lts-trusty 3.13.0.121.131
Linux 映像通用 lpae 3.13.0.121.131
Linux 镜像低延迟 3.13.0.121.131
Ubuntu 12.04 ESM:
Linux 映像-powerpc-smp 3.2.0.128.142
Linux-映像-3.2.0-128-虚拟 3.2.0-128.173
Linux-image-3.2.0-128-通用-pae 3.2.0-128.173
linux-image-通用 3.2.0.128.142
Linux 映像通用 pae 3.2.0.128.142
linux-图像-highbank 3.2.0.128.142
Linux-image-3.2.0-128-highbank 3.2.0-128.173
Linux-映像-3.2.0-128-powerpc-smp 3.2.0-128.173
Linux 映像虚拟 3.2.0.128.142
Linux 映像-powerpc64-smp 3.2.0.128.142
Linux-映像-3.2.0-128-omap 3.2.0-128.173
Linux-映像-3.2.0-128-powerpc64-smp 3.2.0-128.173
Linux 映像 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-通用 3.13.0-121.170~精确1
Linux 映像通用 lpae-lts-trusty 3.13.0.121.112
Linux 映像通用 lts-trusty 3.13.0.121.112
Linux-映像-3.13.0-121-通用-lpae 3.13.0-121.170~精确1

须藤

上述 sudo 漏洞由USN-3304-1,自2017年5月30日起:

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:
sudo-ldap 1.8.9p5-1 Ubuntu1.4
须藤 1.8.9p5-1 Ubuntu1.4

答案2

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

为了具体回答你的问题的这一部分:

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

这种设计在许多系统中很常见,因此许多系统都容易受到同一类漏洞的攻击。

相关内容