Kernel Local Privilege Escalation "Dirty COW" - CVE-2016-5195

Public Date: October 26, 2016, 09:36
已更新 November 2, 2016, 14:36 - English(英语) French Japanese Korean
Resolved 状态
Important Impact

红帽产品安全团队发现一个 Linux 内核漏洞,并为其指定 CVE-2016-5195。 这个问题已于 2016 年 10 月 19 日公布,并评级为 Important。 这个问题在媒体中被称为“脏牛漏洞(Dirty COW)”。

背景资料

在Linux 内核子系统处理专用只读映射的复制时写入(COW)损坏的方法中找到一个竞争条件。非特权本地用户可以利用这个缺陷获取只读内存映射的写入访问,并因此提升其在该系统中的权限。

攻击者可以利用这个漏洞修改现有 setuid 文件提升权限。已发现利用这个技术进行攻击的案例。这个漏洞可影响大多数近期发布的 Linux 版本。

红帽产品安全团队已将这个问题评级为 Important。

受影响的产品

以下红帽产品版本会受到影响:

  • Red Hat Enterprise Linux 5
  • Red Hat Enterprise Linux 6
  • Red Hat Enterprise Linux 7
  • Red Hat Enterprise MRG 2
  • Red Hat Openshift Online v2
  • Red Hat Virtualization (RHEV-H/RHV-H)

攻击描述及影响

这个漏洞可让拥有本地系统帐户的攻击者,绕过防止使用不当权限设置进行修改的标准权限机制,修改磁盘中的二进制文件。可通过在内存中有可执行 mmapped 的页中竞争 madvise(MADV_DONTNEED) 系统调用达到此目的。

诊断漏洞

确定您的系统是否有漏洞

采取行动

强烈建议所有运行受影响内核版本的红帽客户在补丁可用后尽快更新其内核。有关受影响软件包的详情以及推荐的缓解操作如下。需重启系统方可应用内核更新。

更新受影响的产品

现可为运行 Red Hat Enterprise Linux 7.2 或更高版本的用户提供 kpatch。 请创建一个支持问题单以便获取 kpatch。

有关 kpatch 的详情: RHEL 7 是否支持实时提供内核补丁(kpatch)?


产品 软件包 建议/更新
Red Hat Enterprise Linux 7 内核 RHSA-2016:2098
Red Hat Enterprise Linux 7 kernel-rt RHSA-2016:2110
Red Hat Enterprise Linux 7.1 延长的更新支持* 内核 RHSA-2016:2118
Red Hat Enterprise Linux 6 内核 RHSA-2016:2105
Red Hat Enterprise Linux 6.7 延长的更新支持* 内核 RHSA-2016:2106
Red Hat Enterprise Linux 6.6 延长的更新支持* 内核 RHSA-2016:2128
Red Hat Enterprise Linux 6.5 高级更新支持** 内核 RHSA-2016:2120
Red Hat Enterprise Linux 6.4 高级更新支持** 内核 RHSA-2016:2133
Red Hat Enterprise Linux 6.2 高级更新支持** 内核 RHSA-2016:2132
Red Hat Enterprise Linux 5 内核 RHSA-2016:2124
Red Hat Enterprise Linux 5.9 长生命周期 内核 RHSA-2016:2126
Red Hat Enterprise Linux 5.6 长生命周期 内核 RHSA-2016:2127
RHEL Atomic Host 内核 待定
Red Hat Enterprise MRG 2 kernel-rt RHSA-2016:2107
Red Hat Virtualization (RHEV-H/RHV-H) 内核 待定

*需要活跃 EUS 订阅方可使用这个补丁。

如果您的帐户没有活跃 EUS 订阅,则请 联络 红帽销售团队或您的销售代表。

什么是 Red Hat Enterprise Linux 7.1 延长的更新支持订阅?

**您需要有活跃 AUS 订阅方可访问在 RHEL 6.X AUS 中使用这个补丁。

缓解操作

如何构建和使用 SYSTEMTAP 临时解决方案

Systemtap 策略包括使用拦截有漏洞系统调用的 systemtap 脚本创建内核模块(类似驱动程序)。在使用修复的内核引导受影响的机器前,这只是权宜之计。这个解决方案不需要重启,并适用于 RHEL 5、6 和 7。

不可能生成适用于所有内核的模块,甚至无法为产品系列生成模块(比如所有 RHEL5、6 或 7)。每个具体内核版本都需要为给定内核(uname -r)生成 .ko 文件。

要求

要构建 systemtap 模块,需要安装以下软件包:

  • systemtap-client
  • systemtap-devel
  • gcc(及相依性)
  • kernel-devel-`uname -r`
  • kernel-debuginfo-`uname -r`
  • kernel-debuginfo-common-`uname -r`

警告:'kernel' 软件包版本需要与运行的内核版本相同。下载最新版本可造成 systemtap 无法工作。请下载与运行版本相同的版本。

在哪里可以找到 DEBUGINFOS

请参考知识库文档 https://access.redhat.com/solutions/9907

如何构建模块

1. 安装这些软件包后,创建 dirtycow.stp 文件,其内容如下:

probe kernel.function("mem_write").call ? {
        $count = 0
}

probe syscall.ptrace {  // includes compat ptrace as well
        $request = 0xfff
}

probe begin {
        printk(0, "CVE-2016-5195 mitigation loaded")
}


probe end {
        printk(0, "CVE-2016-5195 mitigation unloaded")
}
										

2. 保存该文件,并使用以下命令编译:

# stap -g -p 4 -m dirtycow_`uname -r|tr -cd [:digit:]` dirtycow.stp
dirtycow_26183985.ko
											

在上述示例中,.ko 文件有识别其内核版本的数字。在该示例中,此数字为 2.6.18-398.el5。可以在其他使用这个内核版本的系统中使用这个模块,而无需安装 debugs/debuginfos/systemtap。只要将该文件复制到采用相同内核版本的服务器中,并执行下述步骤即可。

3. 要载入模块,请运行命令 insmod <.ko file>。例如:

# insmod dirtycow_26183985.ko
												

4. 检查是否已载入该模块:

# lsmod| grep dirty
dirtycow_26183985   101688  0
													

5. 使用rmmod 命令或重启系统卸载该模块。

重要

  • 引导后该模块会丢失:系统引导后不会重新载入该模块。
  • 重启后,必须再次手动载入该模块。
  • 如果更新或更改该内核,则不会在新内核栈载入这个模块。
  • 如果引导至不同的内核而没有修复,则会载入新的兼容模块。
  • 修正的内核不需要载入该模块。

缓解操作的具体步骤请参考程序错误 1384344

Comments