脏牛提权复现CVE-2016-5195

Linux官方爆出了“脏牛”漏洞(代号:Dirty COW,编号:CVE-2016-5195),攻击者可利用该漏洞本地以低权限提升到root权限。该漏洞又称为 Dirty COW。Dirty COW 是一个特权升级漏洞,可以在每个Linux发行版中找到。这个漏洞的特别之处在于,防病毒和安全软件无法检测,一旦被利用,用户根本无从知晓。


为避免服务器受影响,请尽快检查其上的内核版本是否受影响,并及时关注漏洞修复通告信息。Linux Kernel维护者已经释出补丁修复该漏洞,而Linux发行版也正在释出更新。

红帽官网表示,Dirty COW漏洞利用Linux内核的内存子系统处理和只读存储器映射写入时的竞争条件,黑客可以使用这个缺陷来获得对其它只读存储器映射的写入访问,从而增加它们在系统上的特权。

安全研究员Dan Rosenberg认为它可能是至今最严重的Linux本地提权漏洞。该漏洞允许拥有部分访问权限的攻击者提权获取更大的访问权限,它能被用于攻击提供shell访问的Web托管商,它的客户可以攻击其它客户甚至系统管理员。


【漏洞详情】:Linux内核的内存子系统在处理写入时复制(copy-on-write, COW)时产生了竞争条件(race condition)。恶意用户可利用此漏洞以欺骗系统修改可读的用户空间代码然后执行,一个低权限的本地用户能够利用此漏洞获取其他只读内存映射的写权限,比如攻击者修改存在的**id文件去提升权限。

【漏洞风险】:高,可实现本地提权

【影响版本】:该漏洞在全版本Linux系统(Linux kernel >= 2.6.22)均可以实现提权,受影响的镜像版本为:
CentOS 5.x  32位/64位 
CentOS 6.x  32位/64位  
CentOS 7.x  32位/64位  
CoreOS 717.3.0 64位
Debian 6.x  32位(Debian官方已停止更新,建议使用Debian7、Debian8版本)
Debian 7.x  32位/64位
Debian 8.x  32位/64位
openSUSE 12.3 32位/64位
openSUSE 13.2 64位
SUSE Linux Enterprise Server 11 SP3 64位
SUSE Linux Enterprise Server 12 64位
Ubuntu Server 10.04.1 LTS 32位/64位(Ubuntu官方已停止更新,建议使用Ubuntu 14.04版本)
Ubuntu Server 12.04.1 LTS 32位/64位
Ubuntu Server 14.04.1 LTS 32位/64位
  
【修复建议】:
1)、提前做好数据备份工作,避免内核修复后意外情况。

2)、使用uname –a查看Linux系统的内核版本,或比照【影响版本】确认是否在受影响版本范围,如果在受影响版本,则可按照如下修复建议进行修复:

CentOS用户:由于CentOS系列官方尚未发布官方修复版本,待发布后请及时更新修复。

Ubuntu用户:运行sudo apt-get update;sudo apt-get upgrade进行系统更新,更新后重启系统生效

Debian用户:运行apt-get update;apt-get upgrade进行系统更新,更新后重启系统生效

SUSE Linux Enterprise Server用户及OpenSUSE用户:openSUSE 13.2 64位官方暂未发布补丁,其他版本可运行zypper refresh;zypper update kernel-default进行系统更新,更新后重启系统生效

CoreOS用户:运行update_engine_client -update,更新后重启系统生效

该漏洞的存在时间已经长达9年,事实上影响所有的Linux操作系统,Linux开发者Phil Oester发现它正被积极利用,安全人员建议用户应该尽快修补漏洞。


脏牛内核漏洞修复补丁存在缺陷-大脏牛漏洞来袭

Bindecy研究人员指出,2016年在Linux系统中发现的“脏奶牛”漏洞(CVE-2016-5195)并未得到完全修复。


不完整的“脏奶牛”修复补丁

“脏奶牛”漏洞源自Linux内核中的内存子系统在处理私有只读内存映射的写时拷贝(简称COW,即‘奶牛’的由来)时,会因争夺而引发破坏性结果。漏洞发现者菲尔·奥斯特(Phil Oester)意识到,黑客可以使用这个缺陷来获得对其它只读存储器映射的写入访问,从而增加它们在系统上的特权。

此项安全漏洞随后还被发现会影响到Android系统,甚至可能会脱离容器控制。而且在谷歌方面发布漏洞修复补丁后不久,攻击者就设计出了新的、能够利用Android缺陷的脏奶牛攻击手段。

2017年9月,研究人员们发现了利用该漏洞的最新恶意软件家族。

Bindecy方面指出,“脏奶牛”漏洞是目前公布的最具知名度的安全漏洞之一,且会对过去十年来包括Android在内的一切Linux版本造成影响,因此所对应的修复补丁一直受到高度关注。也正因为如此,在补丁发布的一年多之后,仍然鲜有人意识到其并不完整。

回顾“脏奶牛”漏洞

原本的安全漏洞会影响到get_user_page函数,其被用于获取用户进程内虚拟地址之后的物理页。基本上,该bug允许攻击者向只读权限页版本中写入内容。

此项安全漏洞的修复补丁并不会降低所请求的权限。相反,研究人员们解释称“get_user_page如今会记住我们通过了COW循环的事实。”

因此,在下一次迭代时,则只读页仅在指定有FOLL_FORCE 与FOLL_COW标记,且PTE被标记为dirty的情况下方可接受写入操作。

安全研究人员们指出,问题在于该补丁“设定某页的只读高受限复制永远不会被标记为dirty的PTE所指定。”


透明巨大页内存管理(THP)

Bindecy研究人员发现,该安全漏洞目前仍会影响到透明巨大页(Transparent Huge Pages,简称THP,是一种Linux内存管理系统,可以通过使用更大的内存页来减少对带有大量内存的机器Translation Lookaside Buffer (TLB)的开销。)与页中目录(简称PMD,属于PTE层上的一层)。

尽管Linux通常会使用4096字节长度的页,但THP的长度往往可以达到2 MB——不过后者会经过拆分以保持正常页长度。一般来讲,默认THP支持仅被用于匿名映射,并可以在系统运行时进行开启或关闭。

THP的实现源自启用PMD中的_PAGE_PS bit,如此一来PMD中的结果将会指向一个2 MB的物理页,而非PTE目录。研究人员们发现,脏奶牛补丁代码实际上处理的是包含有can_follow_write_pmd函数的THP,而其基本逻辑类似于指向巨大PMD的can_follow_write_pte。

但根据研究人员们的说法,对于巨大PMD,问题在于“未通过COW循环的页同样可以利用touch_pmd函数被标记为dirty。”每当get_user_page尝试获取一个巨大页,该页中的一条被调用函数结果就会被标记为dirty,而无需真正通过COW循环。因此,can_follow_write_pmd的逻辑将无法成立。

Bindecy研究人员指出,“在这种情况下,攻击者能够轻松利用这项bug——可以使用与原本脏奶牛攻击类似的手段。这一次,在回避目标页的复制版本后,需要对原始页进行两次处理——第一次使其存在,第二次启动其dirty bit。”

POC

安全研究人员们透露了几种漏洞利用场景,并发布了一项概念验证方案以展示利用方法。他们还于上周将此项安全漏洞(编号为CVE-2017-1000405)发送至内核与发行版邮件联系人列表,同时提交了由其开发的补丁。


研究人员们总结称,“此项bug再次重申了补丁审计在安全开发生命周期当中的重要性。由于脏奶牛以及其它以往案例的存在,可以发现即使是高关注度漏洞也可能得不到完善的补丁修复。这种情况不仅出现在闭源软件层面,开源软件也同样会受到影响。”

HugeDirtyCow POC地址:https://github.com/bindecy/HugeDirtyCowPOC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值