您现在的位置是:综合 >>正文

内核级漏洞

综合9人已围观

简介2017年5月,一个叫Shadow Brokers的组织把一份NSA的漏洞利用工具包扔到了网上。里面有个叫EternalBlue的东西,两个月后就被拿去做了WannaCry。全球二十多万台机器被锁死, ...

2017年5月,内核一个叫Shadow Brokers的内核组织把一份NSA的漏洞利用工具包扔到了网上。里面有个叫EternalBlue的内核东西,两个月后就被拿去做了WannaCry。内核全球二十多万台机器被锁死,内核医院挂号系统瘫痪,内核加油站排不了队。内核这事儿的内核根源,是内核一个Windows内核里的缓冲区溢出——代码写得太信任输入数据了,该检查的内核地方没检查。

内核级漏洞跟普通软件漏洞压根不是内核一个量级的东西。浏览器崩了,内核你顶多丢几个没保存的内核标签页。内核崩了,内核整台机器直接蓝屏,内核或者更糟——攻击者拿到Ring 0权限,想干什么干什么。杀毒软件?那是Ring 3跑的用户态程序,内核里的事它根本看不见。

说个具体的。Linux内核的io_uring子系统,2021年前后被频繁爆出提权漏洞。这东西本意是加速异步I/O,结果因为共享内存环的设计太复杂,边界检查出了岔子。CVE-2021-41073,一个本地用户就能通过它拿到root。修复补丁倒是不长,但问题的根子在于:内核开发者也是人,面对几百万行C代码,指针满天飞,内存管理全靠手动,出错几乎是必然的。

我观察到一个挺讽刺的现象。大家天天盯着浏览器沙箱逃逸,觉得那玩意儿危险。可沙箱本身就是靠内核提供的隔离机制在撑着。内核要是漏了,沙箱就是纸糊的墙。Android的Binder驱动出过多少回提权漏洞了?数都数不过来。每次都是补丁追着利用跑,累不累。

为什么内核漏洞这么难防?一个原因是攻击面太大。系统调用几百个,每个都接受用户态传进来的参数。这些参数里只要有一个没验证好,比如整数溢出导致实际分配的内存比预期小,后面就是经典的堆溢出。另一个原因是性能压力。内核开发者不敢随便加锁,加了锁吞吐就掉。于是无锁数据结构流行起来,但无锁编程的正确性证明,学术界都还在吵。

Rust进内核这事,我觉得方向对,但别指望它能解决所有问题。Rust能挡住内存安全类漏洞,可逻辑漏洞呢?权限检查写反了,Rust编译器可管不着。而且现有内核里几千万行C代码,不可能一夜之间重写。Linux 6.1开始合入Rust支持,到现在真正用Rust写的驱动也没几个。生态迁移是以十年为单位的。

普通用户能做什么?说实话,不多。及时打补丁是最实在的。别关自动更新,别用那些停止维护的老系统。企业那边,内核热补丁技术像kpatch、livepatch算是缓解方案,但热补丁本身也可能引入新bug。我见过一个案例,某云厂商热补丁打上去之后,特定型号的网卡直接不工作了。内核这东西,牵一发动全身。

最后说个真事。有个安全研究员跟我聊过,他挖到一个Linux内核的UAF漏洞,写了利用,能稳定提权。提交给厂商,厂商修了。过了三个月,他在另一个子系统里发现了几乎一模一样的模式。同一个错误,换了个地方又犯一遍。内核代码审查的压力太大了,维护者就那么些人,补丁像雪片一样飞过来。这事儿短期内无解。

Tags:

相关文章

  • 拼多多漏洞教程

    综合

    拼多多没有漏洞。至少没有那种能让你一夜之间白嫖几十万的漏洞。 但我猜你点进来,想看的不是这个。你想看的是那种“用了这招,全场免单”的野路子。行,我讲几个真实的“漏洞”,它们不是代码层面的bug,是规则 ...

    【综合】

    阅读更多
  • pokemon pikachu

    综合

    《Pokemon Pikachu》不是一款真实存在的游戏。任天堂从没发售过叫这个名字的宝可梦正统作品。但如果你在搜索引擎里敲下这几个词,会翻出一堆模拟器ROM、粉丝自制页游,还有大量把《宝可梦 黄》误 ...

    【综合】

    阅读更多
  • 西宁智谷人力网官网

    综合

    打开西宁智谷人力网官网,最先撞进眼里的不是那种花哨的轮播图,而是左侧一栏滚动极快的招聘列表——某新能源电池厂招设备维护员,薪资写的是6500到8200,下面紧跟着一条“藏药炮制工,限本地户籍”。这网站 ...

    【综合】

    阅读更多


友情链接