在两年多的时间里,一名名为“Jia Tan”的攻击者作为 xz 压缩库的勤奋、有效的贡献者,最终获得了提交访问和维护的权限。利用该访问权限,他们在 liblzma 中安装了一个非常微妙的、精心隐藏的后门,liblzma 是 xz 的一部分,也恰好是 Debian、Ubuntu、Fedora 和其他基于 systemd 的 Linux 系统上 OpenSSH sshd 的依赖项。该后门监视攻击者在 SSH 会话开始时发送隐藏命令,使攻击者能够在不登录的情况下在目标系统上运行任意命令:未经身份验证的、有针对性的远程代码执行。
该攻击于 2024 年 3 月 29 日公开披露,似乎是针对广泛使用的开源软件的首次已知严重供应链攻击。无论好坏,这都标志着开源供应链安全的一个分水岭。
这篇文章是我为这次攻击的社会工程方面构建的详细时间表,该时间表似乎可以追溯到 2021 年底。关键事件有大胆的时刻。
欢迎通过Bluesky、Mastodon或电子邮件进行更正或补充。
一、序幕
2005–2008:Lasse Collin 在其他人的帮助下,使用 LZMA 压缩算法设计了 .xz 文件格式,该算法将文件压缩到 gzip 压缩率的约 70% [1]。随着时间的推移,这种格式广泛用于压缩 tar 文件、Linux 内核映像和许多其他用途。
二、Jia Tan配角抵达现场
2021-10-29:Jia Tan向 xz-devel 邮件列表 发送了第一个无害补丁,添加了“.editorconfig”文件。
2021-11-29:Jia Tan向 xz-devel 邮件列表发送第二个无害补丁,修复了明显的可重现构建问题。随后出现了更多似乎(即使现在回想起来)都不错的补丁。
2022-04-19:Jia Tan向 xz-devel 邮件列表 发送了另一个无害补丁。
2022-04-22:“Jigar Kumar”发送了几封电子邮件中的第一封,抱怨贾坦的补丁未登陆。(“补丁在这个邮件列表上花费了数年时间。没有理由认为很快就会有任何事情。”)此时,Lasse Collin 已经发布了 Jia Tan 的四个补丁,并在提交消息中标有“感谢 Jia Tan” 。
2022-05-19:“Dennis Ens”向 xz-devel 发送邮件询问是否维护 XZ for Java。
2022-05-19:Lasse Collin回复,为迟缓道歉,并补充道:“Jia Tan 帮助我从 XZ Utils 的名单中删除,他至少在 XZ Utils 的未来可能会扮演更重要的角色。很明显,我的资源太有限(因此有许多电子邮件等待回复),因此从长远来看,必须做出一些改变。”
2022-05-27:Jigar Kumar向补丁线程发送压力电子邮件。“1个多月了,距离合并还差得远。不足为奇。”
2022-06-07:Jigar Kumar向 Java 线程发送压力电子邮件。“除非有新的维护者,否则不会取得进展。C 的 XZ 也有稀疏的提交日志。丹尼斯,你最好等到新的维护者出现或者自己分叉。现在在这里提交补丁已经没有任何意义了。当前的维护者失去了兴趣或者不再愿意维护。看到这样的回购协议真是令人难过。”
2022-06-08:Lasse Collin反击。“我并没有失去兴趣,但我的护理能力相当有限,主要是由于长期的心理健康问题,但也有其他一些原因。最近我在 XZ Utils 上与 Jia Tan 进行了一些私下合作,也许他将来会扮演更重要的角色,我们拭目以待。最好记住这是一个无偿的爱好项目。”
2022-06-10:Lasse Collin 合并了与 Jia Tan 作为 git 元数据作者的首次提交(“测试:为硬件功能创建测试”)。
2022-06-14:Jugar Kumar 发送压力电子邮件。“按照你们目前的速度,我非常怀疑今年是否会发布 5.4.0。自四月份以来唯一的进展是测试代码的小改动。您忽略了这个邮件列表中许多已经腐烂的补丁。现在你扼杀了你的回购协议。为什么要等到5.4.0才更换维护者?为什么要延迟你的回购需求呢?”
2022-06-21:丹尼斯·恩斯发送压力电子邮件。“我对你的心理健康问题感到抱歉,但了解自己的极限很重要。我知道这是所有贡献者的业余爱好项目,但社区想要更多。为什么不将 XZ for C 的维护权移交给 XZ for C,这样您就可以给予 XZ for Java 更多的关注?或者将 XZ for Java 交给其他人来专注于 XZ for C?试图同时维护两者就意味着两者都没有得到很好的维护。”
2022-06-22:Jigar Kumar向 C 补丁线程发送压力电子邮件。“这件事有进展了吗?贾 我看到你最近有提交。为什么你不能自己做这件事呢?”
2022-06-29 : Lasse Collin回复:“正如我在之前的电子邮件中暗示的那样,Jia Tan 未来可能会在该项目中发挥更大的作用。他在名单外提供了很多帮助,实际上已经是一名共同维护者了。:-) 我知道 git 存储库中还没有发生太多事情,但事情是一小步一小步地发生的。无论如何,至少对于 XZ Utils 来说,维护方面的一些变化已经在进行中。”
三、Jia Tan成为维护者
此时,拉塞似乎开始与贾坦更加密切地合作。Evan Boehs观察到 Jigar Kumar 和 Dennis Ens 都拥有 nameNNN@mailhost 电子邮件地址,这些地址从未出现在互联网其他地方,也没有再次出现在 xz-devel 中。它们很可能是为了迫使拉塞给予贾更多控制权而制造的假货。有效。在接下来的几个月里,Jia 开始在 xz-devel 上权威地回复有关即将发布的 5.4.0 版本的帖子。
2022-09-27 : Jia Tan 给出5.4.0 的发布摘要。(“计划于 12 月发布包含多线程解码器的 5.4.0 版本。我正在跟踪的与 5..4.0 [原文如此] 相关的未解决问题列表一般是......”)
2022-11-30:Lasse Collin将错误报告电子邮件从他的个人地址更改为发给他和 Jia Tan 的别名,并在自述文件中指出“可以通过[email protected]联系项目维护者 Lasse Collin 和 Jia Tan ” 。
2022 年 12 月 30 日:Jia Tan 将第一次提交直接合并到 xz 存储库中(“CMake:从源构建中更新 .gitignore for CMake 工件”)。此时我们知道他们具有提交访问权限。
2023-01-11:Lasse Collin标记并构建了他的最终版本v5.4.1。
2023-03-18:Jia Tan标记并构建了他们的第一个版本v5.4.2。
2023-03-20:Jia Tan更新了 Google oss-fuzz 配置以向他们发送错误。
2023-06-22:Hans Jansen 发送了一对由 Lasse Collin 合并的补丁,它们使用“ GNU 间接函数”功能在启动时选择快速 CRC 函数。最终提交由 Lasse Collin 修改并由 Jia Tan 合并。此更改很重要,因为它提供了一个钩子,后门代码可以通过该钩子在将全局函数表重新映射为只读之前对其进行修改。虽然这一变化本身可能是无害的性能优化,但 Hans Jansen 于 2024 年回归,推广互联网上不存在的后门 xz 等。
2023-07-07:Jia Tan在 oss-fuzz 构建期间禁用 ifunc 支持,声称 ifunc 与地址清理程序不兼容。这本身可能是无害的,尽管它也是以后使用 ifunc 的更多基础。
2024-01-19:Jia Tan将网站移至 GitHub 页面,使他们能够控制 XZ Utils 网页。Lasse Collin 可能为指向 GitHub 页面的 xz.tukaani.org 子域创建了 DNS 记录。攻击被发现后,Lasse Collin 删除了该 DNS 记录,移回他控制的 tukaani.org 。
四、攻击开始
_get_cpuid
。在 Linux 发行版深入研究之前解决这个问题的竞赛已经开始。五、检测到攻击
2024-03-28:Andres Freund 发现 bug,私下通知 Debian 和 distros@openwall。RedHat 分配了 CVE-2024-3094。
2024-03-28:Debian回滚 5.6.1,引入 5.6.1+really5.4.5-1。
2024-03-29:Andres Freund向公共 oss-security@openwall 列表发布后门警告,称他“在过去几周”发现了该后门。
2024-03-29:RedHat宣布Fedora Rawhide 和 Fedora Linux 40 beta 中附带了后门 xz。
2024-03-30:Debian关闭构建以使用 Debian stable 重建其构建机器(以防恶意软件 xz 逃脱其沙箱?)。
原文地址:
https://research.swtch.com/xz-timeline
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...