[Topic DIscussion] Google 给Linux内核提交了一个可以致使内核溢出崩溃的漏洞代码
Tofloor
poster avatar
流浪的加菲
deepin
2024-08-09 18:42
Author

距离「719 微软蓝屏事件」刚过去 20 天,诸多企业还没有从这场“史上最大规模 IT 故障”的影响中彻底走出,如今又有一个核弹级的 Linux 内核重大安全漏洞(暂且称为“indler漏洞”)被著名系统内核专家张银奎老师曝出来,目前该漏洞尚处于 0day 阶段。

该漏洞有三大关键特征:

  1. 该漏洞至少在 2012 年就已经存在,且至今仍在 Linux 内核主代码树,即从 2012 年至今的所有 Linux 内核中都有这个漏洞,从终端到云数以亿计的计算机系统都存在这个漏洞代码,所有的云上服务器也都是易感的。
  2. 该漏洞可在用户空间通过 Linux 的虚文件机制触发,即黑客可以通过用户空间的某个应用做跳板,进而攻击内核。
  3. 该漏洞可能导致的溢出可以非常大,甚至长达数千字节。

通过这个漏洞,黑客能实施多种攻击,包括向内核空间注入代码实现远程代码执行(RCE),进行 DOS 攻击促发溢出,从而让内核崩溃、停止工作。

这个漏洞是怎么被发现的

这个漏洞最初能被注意到,是因为在将内核升级到 6 + Ubuntu 24.04 进行测试的时候,出现了一个随机的内核 oops(指 Linux 内核发生不正确的行为并生成错误报告),这个 “oops” 一旦发生,就会导致声音无法播放、reboot 失败等一系列问题。

本质上来说,这个 oops 与造成 719 蓝屏事件的原因类似,也是非法访问内存,即越界。但它的奇怪之处在于,这个越界访问的内存地址很长:003a72656c646e69。

企业微信截图_17231994226509.png

为了搞清楚其中到底发生了什么,张银奎用 windbg 的 .formats 命令转换后,得到了以下结果:错误地址刚好对应的是「 :reldni」这 8 个字符。将这 8 个字符的顺序调整后,就是"indler: "(注意冒号后面还有一个空格)——为了方便描述,暂且把该漏洞称为 indler 漏洞。


0:000> .formats 203a72656c646e69
Evaluate expression:
 Hex: 203a7265`6c646e69
 Decimal: 2322294337798696553
 Octal: 0200723446255431067151
 Binary: 00100000 00111010 01110010 01100101 01101100 01100100 01101110 01101001
 Chars: :reldni
 Time: Wed Jan 23 00:02:59.869 8960 (UTC + 8:00)
 Float: low 1.10463e+027 high 1.57927e-019
 Double: 1.9725e-153

据张银奎介绍,这个 oops 是随机的,而根据 oops 提供的函数地址,发生崩溃的内核函数名叫 sysfs_file_ops,源代码如下:


static const struct sysfs_ops *sysfs_file_ops(struct kernfs_node *kn)
{
 struct kobject *kobj = kn->parent->priv;


 if (kn->flags & KERNFS_LOCKDEP)
 lockdep_assert_held(kn);
 return kobj->ktype ? kobj->ktype->sysfs_ops : ;
}

对此,张银奎笃定:“对于这样的内存溢出问题,这肯定不是第一现场。”

为了找到这个“第一现场”,即造成内存溢出的元凶,张银奎及其内部团队试了很多办法都不能有效定位,张银奎决定采用最直接的方式:用集成在 Linux 内核中的内存错误检测工具 KASAN(Kernel Address Sanitizer),这款工具由 Google 工程师开发。

团队成员把启用了 KASAN 的内核成功运行后,很快就找到了一个内存越界写(又称为缓冲区溢出)。张银奎仔细查看了内核消息:

  • 内核时间戳 25 秒时,KASAN 报告初始化完毕。
[ 25.146063] kasan: KernelAddressSanitizer initialized (generic)
  • 到了 33 秒时,KASAN 抓到越界写。
[ 33.918201] ==================================================================
[ 33.918234] BUG: KASAN: slab-out-of-bounds in __memcpy_fromio+0x8c/0x100
[ 33.918259] Write of size 8 at addr ffffff8101838afc by task systemd/1


[ 33.918283] CPU: 5 PID: 1 Comm: systemd Not tainted 6.1.43-rockchip-rk3588-taiyi #1.0.8
[ 33.918300] Hardware name: YourLand CodeBook (DT)
[ 33.918312] Call trace:
[ 33.918324] dump_backtrace+0xd0/0x130
[ 33.918338] show_stack+0x20/0x30
[ 33.918350] dump_stack_lvl+0xac/0xe0
[ 33.918368] print_report+0x164/0x464
[ 33.918384] kasan_report+0xc8/0x1a0
[ 33.918400] __asan_store8+0x80/0xa4

由于涉及到敏感的安全问题,张银奎省略了代码中很多的调用栈。在关于这次非法方法的详细细节中,他也省略了一些具体函数名:

[ 33.919049] The buggy address belongs to the object at ffffff8101838000
 which belongs to the cache kmalloc-4k of size 4096
[ 33.919061] The buggy address is located 2812 bytes inside of
 4096-byte region [ffffff8101838000, ffffff8101839000)


[ 33.919082] The buggy address belongs to the physical page:
[ 33.919094] page:00000000663e5886 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x101838
[ 33.919109] head:00000000663e5886 order:3 compound_mapcount:0 compound_pincount:0
[ 33.919123] flags: 0x8000000000010200(slab|head|zone=2)
[ 33.919146] raw: 8000000000010200 0000000000000000 dead000000000122 ffffff8100002a80
[ 33.919159] raw: 0000000000000000 0000000000040004 00000001ffffffff 0000000000000000
[ 33.919172] page dumped because: kasan: bad access detected


[ 33.919192] Memory state around the buggy address:
[ 33.919205] ffffff8101838a00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 33.919218] ffffff8101838a80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 33.919234] >ffffff8101838b00: 01 fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[ 33.919246] ^
[ 33.919255] ffffff8101838b80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[ 33.919270] ffffff8101838c00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[ 33.919282] ==================================================================


张银奎及其团队查看了这个 indler 漏洞代码的来源:它来自 Google。虽然 Linux 是知名的开源项目,但现实应用中这些开源软件并非完全不受安全漏洞的影响。

瞎掰扯下:前些天看到vivo蓝河操作系统(BlueOS)的开发者活动,原来蓝河OS一开始就从性能和安全两个维度选择了 Rust 语言作为系统开发语言,蓝河也是行业首个系统框架由 Rust 语言编写的操作系统,Rust 语言的所有权模型、生命周期等一系列安全特性,保障了在编译阶段就可以发现内存使用不当导致的安全漏洞,从源头保障了内存安全和并发安全。


原文链接:堪比Windows蓝屏危机!Linux被曝12年史诗级漏洞,“投毒者”是谷歌?

Reply Favorite View the author
All Replies
流星追月
deepin
2024-08-09 19:10
#1

我记得这几个月来,有人说我喜欢用360浏览器,不知道哪里下载时,求帮助;下面一大群人起哄你怎么还用360浏览器?我们都是用谷歌的,国内没有,就是爬墙也要下载一个,它是开发的标准,它自由,它没有暗门...等等,就是你上网不用谷歌就不配用电脑,我现在就对这群人说:你们这帮人不是蠢就是坏。

用脚趾头都知道谷歌浏览器不可能安全,它不是白莲花,它一定会作恶!

以前说谷歌没有问题的出来走2步,自己分析一下:你属于蠢的一类,还是坏的一类?

用360丢人吗?

Reply View the author
神末shenmo
deepin
Spark-App
2024-08-09 19:19
#2

如无明确证据不应揣测投毒

写bug是很常见的,如果只是因为写出来的代码不够完美就被质疑投毒,那开源社区就不要做了

Reply View the author
神末shenmo
deepin
Spark-App
2024-08-09 19:26
#3
流星追月

我记得这几个月来,有人说我喜欢用360浏览器,不知道哪里下载时,求帮助;下面一大群人起哄你怎么还用360浏览器?我们都是用谷歌的,国内没有,就是爬墙也要下载一个,它是开发的标准,它自由,它没有暗门...等等,就是你上网不用谷歌就不配用电脑,我现在就对这群人说:你们这帮人不是蠢就是坏。

用脚趾头都知道谷歌浏览器不可能安全,它不是白莲花,它一定会作恶!

以前说谷歌没有问题的出来走2步,自己分析一下:你属于蠢的一类,还是坏的一类?

用360丢人吗?

如无明确证据不应揣测投毒

写bug是很常见的,如果只是因为写出来的代码不够完美就被质疑投毒,那开源社区就不要做了

当然不能完全信任开源软件,但360会根据网址黑名单拦截网站且闭源,考虑到360的劣迹斑斑,显然360的隐私性非常不值得信任

如果想要一个安全且迅捷的浏览器,如果没有特殊需求,跟随最新的Chromium/Firefox仍然是最好的选择。但是并非所有人都那么需要安全和迅捷,用什么浏览器是个人的选择,360有别的优势(本地化更好,对于特定的国产机型有针对性优化)。如果对安全和隐私没有很高的要求,能够忍受一定的广告,也不需要频繁访问外国网站,用360浏览器是更好的选择——相比于原版Chrome,它界面友好,适合国人习惯,能够同步记录,而这些用chrome是无法做到的。使用360浏览器没有原罪

同样的,使用其他浏览器也没有原罪,非蠢即坏这样的恶意揣测是没有道理的,只是不同人的需求不同,选择不同。

Reply View the author
流星追月
deepin
2024-08-09 19:39
#4
神末shenmo

如无明确证据不应揣测投毒

写bug是很常见的,如果只是因为写出来的代码不够完美就被质疑投毒,那开源社区就不要做了

当然不能完全信任开源软件,但360会根据网址黑名单拦截网站且闭源,考虑到360的劣迹斑斑,显然360的隐私性非常不值得信任

如果想要一个安全且迅捷的浏览器,如果没有特殊需求,跟随最新的Chromium/Firefox仍然是最好的选择。但是并非所有人都那么需要安全和迅捷,用什么浏览器是个人的选择,360有别的优势(本地化更好,对于特定的国产机型有针对性优化)。如果对安全和隐私没有很高的要求,能够忍受一定的广告,也不需要频繁访问外国网站,用360浏览器是更好的选择——相比于原版Chrome,它界面友好,适合国人习惯,能够同步记录,而这些用chrome是无法做到的。使用360浏览器没有原罪

同样的,使用其他浏览器也没有原罪,非蠢即坏这样的恶意揣测是没有道理的,只是不同人的需求不同,选择不同。

这都能洗地,厉害,360是有心的,谷歌是无心的?

你怎么能保证谷歌浏览器没有其他暗门了?你不知道芯片,内存,硬盘,浏览器还可以互相配合?各自保留一段代码,只要接到一个字符,拼完成暗门指令,立刻就瘫痪电脑。

你不会说:我不懂,我不知道,不可能。

云南飞机真的事故摔了?不是发动机被关?

为什么中国要普及全国产电脑?为了好玩?是为了国家安全。

Reply View the author
fallingstar-ten
deepin
2024-08-09 19:43
#5

你怎么能保证谷歌浏览器没有其他暗门了?你不知道芯片,内存,硬盘,浏览器还可以互相配合?各自保留一段代码,只要接到一个字符,拼完成暗门指令,立刻就瘫痪电脑。

你不会说:我不懂,我不知道,不可能。

云南飞机真的事故摔了?不是发动机被关?

为什么中国要普及全过程电脑?为了好玩?是为了国家安全。

没有具体的证据前,不应该说是投毒吧。都这么多年了。

开源的基础设施有bug这是正常的事,闭源有闭源的好处,但是windows漏洞也不少。

360浏览器,本质上也是基于chromium的工作(来自Google),使用上没有特定的限制,每个人有自己选择的自由,如果默认老外参与/主导的开源工作都是有毒的话,那目前的电脑可以都别开机了,因为编程语言也是老外搞的。

TIPs:RUST也有漏洞。

Reply View the author
流星追月
deepin
2024-08-09 19:44
#6

开源软件最大好处不是自由使用,是bug全世界码农帮你找,靠良心是靠不住的。

Reply View the author
风月相知
deepin
2024-08-09 21:46
#7
流星追月

开源软件最大好处不是自由使用,是bug全世界码农帮你找,靠良心是靠不住的。

全世界码农凭什么帮你找bug,自己利用不好么?开源是靠不住的,闭源才是唯一的出路。

Reply View the author
2023开始学习
deepin
2024-08-09 22:58
#8

能root吗?

Reply View the author
MMHMM
deepin
2024-08-10 00:18
#9

这都能吵成一锅粥,发现问题及时反馈这是正确的,我们应该考虑的是这个漏洞如何修复?何时修复?是否会影响到个人?至于争论是不是投毒或者哪家安全性更高?一点意义都没有!

Reply View the author
神末shenmo
deepin
Spark-App
2024-08-10 00:22
#10
流星追月

这都能洗地,厉害,360是有心的,谷歌是无心的?

你怎么能保证谷歌浏览器没有其他暗门了?你不知道芯片,内存,硬盘,浏览器还可以互相配合?各自保留一段代码,只要接到一个字符,拼完成暗门指令,立刻就瘫痪电脑。

你不会说:我不懂,我不知道,不可能。

云南飞机真的事故摔了?不是发动机被关?

为什么中国要普及全国产电脑?为了好玩?是为了国家安全。

360没有公开源代码,而且内置黑名单的事实是板上钉钉的,是任何人可以验证的,这就是有意的

除开360板上钉钉的有意审查之外,如果出了安全问题,作为没有公开源码的闭源应用他没有资格谈无心失误,他无法证明自己不是有意的

你对作为闭源软件,无法审查源代码的360的恶意行为视而不见,却指责一个开源软件的漏洞,并通过恶意揣测的方式逼迫他人认同你

如果你想强调开源投毒的可能性,你应该知道360浏览器一样是用同一套代码构建的(甚至更老,这意味着更有可能包含已经被新版本修复的安全漏洞),如果有投毒,那么360一样会中招,甚至会因为版本落后而更容易中招,他不是自主可控,美帝投毒阴谋不会因为使用360浏览器而失效,你的观点是立不住的

如果你所说的链条成立,那么只有自主研发的浏览器可以避免——360不是

在这个前提下仍然认为360浏览器会更安全,我不能认同

Reply View the author
流星追月
deepin
2024-08-10 19:46
#11
神末shenmo

360没有公开源代码,而且内置黑名单的事实是板上钉钉的,是任何人可以验证的,这就是有意的

除开360板上钉钉的有意审查之外,如果出了安全问题,作为没有公开源码的闭源应用他没有资格谈无心失误,他无法证明自己不是有意的

你对作为闭源软件,无法审查源代码的360的恶意行为视而不见,却指责一个开源软件的漏洞,并通过恶意揣测的方式逼迫他人认同你

如果你想强调开源投毒的可能性,你应该知道360浏览器一样是用同一套代码构建的(甚至更老,这意味着更有可能包含已经被新版本修复的安全漏洞),如果有投毒,那么360一样会中招,甚至会因为版本落后而更容易中招,他不是自主可控,美帝投毒阴谋不会因为使用360浏览器而失效,你的观点是立不住的

如果你所说的链条成立,那么只有自主研发的浏览器可以避免——360不是

在这个前提下仍然认为360浏览器会更安全,我不能认同

谈问题自己不要先设立场:要自主研发才算,360用谷歌大部分代码不算的,那deepin算什么?好像什么都不是,那UOS也好意思收费的?

我记得deepin在谈论操作系统的时候,不要重复造轮子,浪费资源,没有必要,操作系统开源才算好的。怎么到了360浏览器就必须自主开发才是好浏览器?现在到了我说你好就是好,说你坏就是坏的地步了?

我不是说360浏览器是完美的,一部分闭源是必须的,你自己喜欢谷歌浏览器可以,但请你们不要推荐小白去使用谷歌浏览器,很容易被误导进诈骗网站和钓鱼网站,起码360还有一点保护。

Reply View the author
花雨落逝
deepin
2024-08-12 16:06
#12
流星追月

谈问题自己不要先设立场:要自主研发才算,360用谷歌大部分代码不算的,那deepin算什么?好像什么都不是,那UOS也好意思收费的?

我记得deepin在谈论操作系统的时候,不要重复造轮子,浪费资源,没有必要,操作系统开源才算好的。怎么到了360浏览器就必须自主开发才是好浏览器?现在到了我说你好就是好,说你坏就是坏的地步了?

我不是说360浏览器是完美的,一部分闭源是必须的,你自己喜欢谷歌浏览器可以,但请你们不要推荐小白去使用谷歌浏览器,很容易被误导进诈骗网站和钓鱼网站,起码360还有一点保护。

怎么到了360浏览器就必须自主开发才是好浏览器 这句话是有条件的,并不是刚一上来就这么说的

Reply View the author
198******86
deepin
2024-08-12 16:12
#13
神末shenmo

如无明确证据不应揣测投毒

写bug是很常见的,如果只是因为写出来的代码不够完美就被质疑投毒,那开源社区就不要做了

这玩意就不要洗地了

这不明摆着的事情,很显然是美国nsa借助谷歌这个身份去投毒而已,美国各大it公司配合美国nsa又不是什么新鲜事

攻击开源最大方法是通过类似于供应链投毒的方法,关于openssl我没记错的话这个上面历史上有人投毒了好几次被人发现,我记得最早2000年初的时候就出现过这类新闻,借助各种开发者身份投毒是美国nsa的一项必要技能,你永远不会看见NSA以官方身份赤裸裸的去提交代码投毒

尽管如此,我还是强调,开源依然是最安全的系统,那些闭源的windows,根本就用不着隐藏自己身份,直接内核入住官方恶意程序都没问题,因为根本不用怕人看到你的代码,开源还得想方设法假装是正常bug

Reply View the author
wendy17615848429
deepin
2024-08-13 11:27
#14

笑死,emmm

我觉得更多的是程序错误

多学学linus,不要搞什么歧视,只搞技术

在技术层面,如果有人拿全世界开玩笑,那大可新建立一个分支,自己单干

Reply View the author