XZ后门攻击

XZ 后门:“太危险了”

SSH 后门

恶意或被入侵的维护者在名为 自由主义,是 xz 压缩工具和库的一部分,导致 SSH 中出现后门。这是一种高级软件供应链攻击,因为该库被故意修改为后门,并使用混淆和隐身技术来隐藏攻击负载,不让审查者发现。 它是最近发现并披露的(29 月 86 日),攻击处理仍在进行中。然而,它很快就被控制住了,因为它似乎只影响有限环境集(DEB 和 RPM 包,用于 x64_XNUMX 架构,并使用 GCC 构建)的预发布版本。无论如何, CVE 被给予 CVSS 基本分数 10,这是为最严重的网络安全漏洞保留的。一旦它进入稳定发行版,其影响将是巨大的。  对此次攻击的技术分析,包括 xz 后门深入解释,在其他地方已有分析。这篇文章将重点介绍这次攻击的时间线、如何检测它、迄今为止如何处理该事件,以及可以从这次攻击中吸取哪些教训。

XZ 后门是如何注入的

注意:git 存储库位于 git.tukaani.org。 然而, 还有 GitHub 托管存储库 (目前已被阻止)其中 GitHub 帐户发布了后来集成到 Git 存储库中的更改。 后门的一部分似乎只存在于 5.6.0 和 5.6.1 版本的分布式 tarball 中,而不是在 git 存储库中,并且依赖于 build-tohost.m4 中的一行 autoconf 使用的宏文件。其他部分位于两个假定的测试文件中 bad-3-corrupt_lzma2.xz 以及 良好的大型_压缩.lzma commit特德 作者:GitHub 账号“Jia Tan”(佳T75在) xz 存储库 23 月 4 日。这是一个无害的更改,添加了测试文件(据称是 .lzma 和 .xz 压缩块)。有趣的是,测试文件并未被测试使用!.mXNUMX 文件中的行注入了一个模糊脚本(包含在 tarball 中),如果某些条件匹配,则在 configure 结束时执行。它修改了 Makefile 自由主义 库中包含从 .xz 文件中提取数据的代码,在反混淆结束后 在这个脚本中,在 configure 的末尾调用。它决定是否修改构建过程以注入代码:仅在 GCC 和 GCC 链接器下、在 Debian 或 rpm 下,并且仅适用于 x86_64 Linux。匹配时,注入的代码通过替换两个来拦截执行 函数 解析器,因此某些调用被替换。这会导致符号表在内存中被解析(这需要时间,这导致了检测,稍后会解释)。 然后事情变得有趣起来:后门在动态链接器中安装了一个审计钩子,等待 RSA_public_decrypt 函数符号到达,然后将其重定向到后门代码中的某个点,然后回调 库密码,大概是为了执行正常的身份验证。如果正在运行的程序具有进程名称,则有效载荷将激活 /usr/sbin/sshd很明显,SSH 服务器是目标。传统上, sshd的 OpenSSH 等服务器没有与 自由主义,但 sshd 是 经常修补 支持 systemd-notify,以便其他服务可以在 sshd 运行时启动。然后 liblzma 由 systemd,闭合圆圈。 该后门尚未完全分析,但似乎 允许远程命令执行 (RCE) 使用 sshd 守护进程的权限,在预认证环境中运行。当后门匹配到远程证书时,会使用 ChaCha20 进行解密,解密成功后,会将其传递给 系统()。所以这本质上是一个门控 RCE,比单纯的公钥绕过要糟糕得多。  后来的 5.6.1 tarball 显示了隐藏痕迹的额外努力,进一步混淆了符号名称,并尝试修复看到的错误。 扩展机制 还建立了额外的测试文件来寻找某些特征以添加到后门。 这种相当复杂的攻击可能在 Linux 稳定发行版发布之前不会被察觉。幸运的是,有些人喜欢检查异常情况发生的原因。  

XZ后门攻击的发现

很多时候,注入的恶意行为都是偶然或意外发现的。一个很好的例子是 弃用警告 (“谁在乎警告?”)导致了 事件流攻击 2018 年 XNUMX 月。另一位用户警告 编码病毒 2021 年 XNUMX 月,他们的 bash 上传器脚本未通过校验和(“谁用校验和来验证工件的完整性”?) ssh 的异常和奇怪症状 loginS(login占用大量 CPU 并增加运行时间,valgrind 错误)引起了 安德烈斯·弗罗因德,一名警惕的 PostgreSQL 开发人员,但不是安全分析师(正如他所说)。在对 Debian Sid 上的 OpenSSH 进行一些调查后,他得出结论,响应时间问题依赖于一个库, 自由主义,一部分的 xz-工具 压缩库。原因:“上游 xz 存储库和 xz tarball 已被植入后门”。这个诊断太准确了!   29 年 2024 月 XNUMX 日,安德烈斯在 Openwall 上发布了第一篇分析:“上游 xz/liblzma 中的后门导致 ssh 服务器受到攻击”事实:XZ Utils 5.6.0 和 5.6.1 tarball 包含后门。这些 tarball 是由上述 Jia Tan 帐户创建和签名的。  He 发表于 Mastodon 当天晚些时候,他意识到这一发现纯属偶然,需要很多巧合。其他用户的评论值得一读。 GitHub用户 相同 (又名 Sam James)发表了一篇很好的 Gist xz-utils 后门常见问题解答 攻击事件总结,链接到更多 深入分析 攻击载荷。 这些分析在技术上非常有意思,有助于我们更好地理解这种经过精心设计的注入: 这很好 托马斯·罗西亚(Thomas Roccia)的海报  显示了 JiaT75 在 GitHub 存储库上的部分活动,以及注入脚本如何插入二进制后门,进一步说明了 xz 后门详解.

事件处理方式

Andreas Freund 的披露非常谨慎,因为用他自己的话说:

“鉴于上游似乎已经介入,我没有向上游提交错误报告。由于我最初认为这是一个 Debian 特有的问题,所以我向 security@...ian.org 发送了一份初步报告。随后,我向 distros@ 报告了该问题。” CISA 已通过分发收到通知。”

Red Hat 将此问题标记为 CVE-2024-3094。随后,这个消息像野火一样流传开来。 XZ 的另一位维护者 Lasse Collin 添加了 新 commit 于 30 月 XNUMX 日星期六发表的题为“CMake:修复被破坏的 Landlock 沙盒检查”的文章。其中一个库沙盒 landlock 方法被破坏,至少在使用 CMake 构建时是这样。他立即在 XZ Utils 后门. Red Hat 分配了此问题 CVE-2024-3094 (另见 CVE, NVD, Ubuntu)被分配了高达 CVSS 基本评分为 10此类分数总是会在网上引起轰动。 CIS同一天,29 月 XNUMX 日发布了 警报,可能由于紧迫性而过于简单,建议用户降级到 5.4.6 稳定版本。 Tukaani 组织下的 GitHub 存储库被禁用(这是好事还是坏事?我认为是好事:许多发行版和组织仍在链接到 GitHub 版本以获取受感染的 tarball 进行构建。禁用存储库可以防止这种情况发生。无论如何,有一个副本或存储库位于 git.tukaani.org)。GitHub 帐户 JiaTan75 和 Lasse Collins(Larhzu)也被暂停。这是 遏制,即使这可能会影响到无辜的人。JiaT75 未禁用存储库中的活动 还无法看到。 业界迅速作出反应。许多供应商发布了检测易受攻击系统的规则,例如 Yara 规则或商业工具支持 系统数据, PAN等。安全专家如 詹姆斯·伯托蒂 发表了关于回顾我们如何处理开源软件的文章。  我们目前正处于事件的根除和恢复阶段。JiaTan75 维护的其他项目正在接受密切审查,尤其是 libarchive/libarchive (JiaTan75 是其中的定期贡献者)和模糊测试器 oss-fuzz (其中 commit JiaTan75 试图避免 oss-fuzz,但事实上 无法检测到后门)这些隐瞒行为进一步提供了证据。 

谁遭受了攻击?

GitHub JiaT75 帐户要么被盗用(请记住,GitHub 最近强制使用 2FA),要么该帐户的实际用户已转向黑暗势力。但是,由于攻击的技术复杂性,有充分理由认为这是高级持续性威胁 (APT),也许是国家支持的。网络安全机构和执法部门的进一步调查将揭示…… 这个条目 YCombinator Hacker News 中关于贾坦的报道 揭示了“谁”和他的活动。推荐!它提供了大量关于坏人如何利用社会工程学欺骗其他用户的信息。

“非常烦人——这个后门的作者(rwmj)与我联系了好几周,试图把 xz 5.6.x 添加到 Fedora 40 和 41 中,理由是它有‘很棒的新功能’。我们甚至还和他一起修复了 valgrind 的问题(现在看来,这个问题正是他添加的后门造成的)。昨晚,由于不小心违反了禁令,我们不得不争分夺秒地修复这个问题。他参与 xz 项目已经两年了,添加过各种各样的二进制测试文件。说实话,以他这种水平,即使是 xz 的旧版本,在找到证据之前,我也会心存疑虑。”

Jia Tan 采取了措施来防止被跟踪:它似乎使用了 VPN(vpn.singapore.witopia.net)进行连接——这本身是可以的。而且许多更改似乎都得到了临时的一次性电子邮件(在本例中来自 ProtonMail)的支持,敦促合并更改。 该参与者可能打算更深入地研究 Linux 内核,作为 xy 嵌入 项目。截至今日,初步分析未发现流产的证据。 注:另 低调的 XZ 贡献者“Hans Jansen” (GitHub 用户“hansjans162​​”)是 仔细审查. 其在 debian 上的帐户现在为 封锁他对 Debian Games 进行了许多更新,以隐藏他在 debian/xz-utils 上想要的更新,对上游 5.6.1 进行了更新,以加快后门的分发速度 debian/不稳定 目前,我们只能说,这是一个使用不同账户的(尚未确定的)APT,该活动至少进行了两年,并耐心地致力于在 SSH 中植入 RCE。

XZ 后门攻击可以预防吗?

相当困难。  首先,注入后门的一部分进入了测试中未使用的压缩测试文件。事后看来,这可能会引发一些(嘈杂的)警报,但谁会在乎检查所有测试文件是否在现实世界中被实际测试使用呢?其次,注入后门的一部分以宏文件的形式进入了发布tar包,手动检查与预期tar包的差异非常困难。自动化也很复杂,因为构建本身的预期结果(对于任何了解automake/autoconf工作原理的人来说)很难建模,从而无法分析真实的tar包是否符合预期。 有人提出 as “tarball 与 git 树不匹配是一个特性,而不是一个 bug”. 二进制 tarball 从其源代码的出处是一个尚未解决的问题。 用户信誉?嗯,根据以往的经验,JiaTan75 的 GitHub 账户并没有做过什么流氓事 commits。它只是在证据积累之后才被暂停,但截至 29 月 XNUMX 日,这是一个正常用户,从事着正常的业务。嗯,不太正常。后来 commitS(Free Introduction, Free Introduction, Free IntroductionFree Introduction 调整了漏洞代码后,研究人员尝试修复某些配置中 valgrind 的错误和崩溃,这是由于与后门所期望的堆栈布局不同造成的。 Commit 评论可以检测到这一点,但是谁有耐心去分析二进制测试文件中的变化或 C 源代码中 GCC 属性变化的真正动机? 当 SSH login 需要 800 毫秒而不是 300 毫秒?可能只有非常谨慎的人才会注意到。西塞罗说, “鲁莽属于年轻人,谨慎属于老年人。”   ifunc 基础设施由“Hans Jansen”和“Jia Tan”于 2023 年 XNUMX 月添加。这是第一个 commit 为 crc64_fast.c 添加 ifunc 支持(稍后用于注入后门)。在测试文件中注入后门二进制文件之前几个月!

注:作者和 committer 有所不同,但这很正常:Lasse Collin 是项目维护者,他合并了更改。他甚至感谢“Hans Jansen”……

在 Andres Freund 的帖子和 RedHat 创建的 CVE 之前,没有人提出担忧。如果你看到一系列可以捕获此问题的工具,它们现在就可以检测到受影响的组件, 事后

可能最好的预防措施来自于 Linux 发行版的性质,以及不稳定、前沿版本如何只能按照有节奏的过程传递到下游的稳定发行版。

从XZ bBackdoor攻击中吸取的教训

我们已经注意到检测的难度 故意 后门。后门应被视为内部威胁,因为它们是由内部员工或通过被盗的内部账户植入的。这些人大多是值得信赖的。当后门植入分布式工件中时,它更难被发现。

一些作者,如凯文·博蒙特 (Kevin Beaumont) 指着 系统,这为第三方服务的后门打开了巨大的攻击面。这就是坏人在这里滥用的。Systemd 有很多关注点,但 XZ 是链上一个鲜为人知的库。“当上游被污染时,每个人都会喝下游的毒水”。

系统中存在不相关的变更请求 动态加载压缩库可以删除后门的版本已合并到系统中,但尚未交付。 libsystemd 引入的额外依赖项可能是漏洞的根源,和昨天 此请求已打开

A 评论 在“xz: 禁用 ifunc 来修复问题” commit 如果我们想阻止此类活动,就应该把重点放在哪里,对此给出了深刻的见解(重点是我的):

“我们作为一个社区应该吸取的教训是, software supply chain security 全面地审计构建系统,而不仅仅是源代码。例如 SolarWinds 漏洞,攻击者修改了 SolarWinds 闭源监控软件的软件更新。”

早期发现和迅速反应极大地限制了影响。如果你还记得 结尾场景来自 男子在黑色三:“那真是一场险胜”。K 再次没有忘记留下提示。而且,没有 boglodite 进入 Linux 稳定发行版。
1. “我*不是*安全研究员,也不是逆向工程师。” 2. 贾是一个常见的中国名字。谭也是一个常见的姓氏,意思是“辉煌的”。很多没有血缘关系的人都叫这个名字,请不要因为这个名字而歧视任何人!
sca-tools-软件-成分分析工具
确定软件风险的优先级、进行补救并加以保护
7-day免费试用
无需信用卡

保护您的软件开发和交付

使用 Xygeni 产品套件