您现在的位置是:焦点 >>正文

脏牛漏洞原理

焦点9855人已围观

简介脏牛漏洞,CVE-2016-5195,一个在Linux内核里躺了九年的竞态条件漏洞。它允许任何本地用户直接写入只读文件映射,从而获得root权限。这个漏洞之所以叫“脏牛”,是因为它和另一个旧漏洞“Di ...

脏牛漏洞,脏牛CVE-2016-5195,漏洞一个在Linux内核里躺了九年的原理竞态条件漏洞。它允许任何本地用户直接写入只读文件映射,脏牛从而获得root权限。漏洞这个漏洞之所以叫“脏牛”,原理是脏牛因为它和另一个旧漏洞“Dirty COW”的变体有关,但本质完全不同——它攻击的漏洞是内核内存管理的“写时复制”机制。

写时复制是原理Linux用来省内存的招数。当多个进程映射同一个文件时,脏牛内核不会真的漏洞给每个进程都复制一份物理内存,而是原理让它们共享同一页。只有当某个进程试图修改这一页时,脏牛内核才真正复制一份给它。漏洞问题就出在这个“复制”动作上——它并不是原理原子的。

攻击者要做的,就是利用这个非原子性。具体来说,他先通过`mmap`以只读方式映射一个文件,比如`/etc/passwd`。然后,他不断用`madvise`系统调用告诉内核“这个页面我不用了,可以丢弃”。与此同时,另一个线程疯狂地往这个只读映射里写数据。正常情况下,写操作会触发缺页异常,内核会检查权限,发现是只读映射,然后拒绝写入。但脏牛漏洞的关键在于:内核在检查权限和实际复制页面之间,存在一个时间窗口。攻击者利用`madvise`让页面失效,使得内核在错误的时间点认为页面可以被替换。

更直白点说,内核先检查了“这个映射是只读的,不允许写”,但紧接着,它又去处理`madvise`带来的页面失效。在那一瞬间,它把物理页从页表里摘掉了。攻击者的写操作此时再次触发缺页,内核重新分配一个新页,并且——由于检查已经做过一次了——它不再重复检查权限,直接就把内容写进去了。结果就是,一个只读文件映射,被成功修改了。攻击者往`/etc/passwd`里写入一个无密码的root用户,然后`su`进去,完事。

这个漏洞最狠的地方在于,它不需要任何特殊硬件,也不需要内核漏洞利用的传统手法——比如ROP或者堆喷射。你只需要两个线程,一个疯狂`madvise`,一个疯狂写,然后等。等待的时间可能从几秒到几分钟不等,取决于CPU速度和内存状态。我曾在虚拟机里复现过,大概三十秒就能搞定一个只读文件。

Linux内核维护者为什么没早点发现?因为写时复制路径太复杂了,而且这个竞态窗口极其微小,正常使用几乎不可能触发。但攻击者是有意为之的,他们可以无限次尝试,直到撞上那个窗口。这就是“确定性攻击”和“概率性利用”的区别——后者只需要足够的耐心。

红帽在2016年10月发布补丁,但讽刺的是,这个漏洞的修复方式很简单:在检查权限和复制页面之间加了一把锁,让整个操作变成原子的。就这么一个改动,堵死了九年的漏洞。而在这九年里,安卓、云服务器、路由器——几乎每台跑Linux的设备都暴露在这个漏洞之下。

脏牛漏洞给我们的教训不是“写时复制不好”,而是“任何性能优化都必须考虑并发安全”。内核开发者为了省几微秒的延迟,把一个检查步骤拆成了两步,结果付出了整整九年的安全代价。这种事儿在系统软件里太常见了——你永远不知道哪段看似无害的代码路径,会在极端并发条件下变成一扇后门。

Tags:

上一篇:蜘蛛软件

下一篇:速卖通下拉框词工具

相关文章

  • 网上相亲网站可靠吗

    焦点

    我有个朋友,上个月在某个号称“高端白领专属”的相亲平台充值了八千八。结果呢?匹配的“金融男”开口就问她借两万周转。她转头找平台客服,客服说:“亲,我们只负责牵线,不负责验货哦。” 这年头,网上相亲网站 ...

    【焦点】

    阅读更多
  • 射线源穿透能力测试

    焦点

    把一块20毫米厚的铅板竖在射线源和探测器之间,计数率从每秒五万直接掉到两百。这不是实验室里精心布置的演示,而是我上个月在工厂车间里亲眼看到的场景。射线源的穿透能力,从来不是说明书上那个标称的“最大穿透 ...

    【焦点】

    阅读更多
  • 桂林招聘网最新招聘

    焦点

    桂林招聘网今天挂出来的岗位,比上周多了两百多个。我盯着屏幕翻了几页,发现一个有意思的现象——招新媒体运营的公司,从三家变成了七家。这数字不算大,但放在桂林,足够说明问题。 前两天我刚去过七星区那场线下 ...

    【焦点】

    阅读更多


友情链接