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 后门常见问题解答 攻击事件总结,链接到更多 深入分析 攻击载荷。 这些分析在技术上非常有意思,有助于我们更好地理解这种经过精心设计的注入:- xz/liblzma:Bash 阶段混淆详解。对注入脚本反混淆的很好的分析,分为四个“阶段”。
- Filippo Valsorda 的蓝天线程 对 RSA_public_decrypt 中的后门本身进行分析,可以看出其本质:RCE,不是身份验证绕过,并且是门控(接受作者的私钥,如果不接受,则恢复正常行为)/无法偿还。作者打算低调行事,以避免被发现!
- @smx-smx 的 XZ 后门分析(正在进行中) – 对后门的额外分析(一开始我差点就迷路了😀)
- xz 后门文档 wiki,再对5.6.1注入脚本进行分析。
事件处理方式
Andreas Freund 的披露非常谨慎,因为用他自己的话说:“鉴于上游似乎已经介入,我没有向上游提交错误报告。由于我最初认为这是一个 Debian 特有的问题,所以我向 security@...ian.org 发送了一份初步报告。随后,我向 distros@ 报告了该问题。” CISA 已通过分发收到通知。”
谁遭受了攻击?
GitHub JiaT75 帐户要么被盗用(请记住,GitHub 最近强制使用 2FA),要么该帐户的实际用户已转向黑暗势力。但是,由于攻击的技术复杂性,有充分理由认为这是高级持续性威胁 (APT),也许是国家支持的。网络安全机构和执法部门的进一步调查将揭示…… 这个条目 YCombinator Hacker News 中关于贾坦的报道 揭示了“谁”和他的活动。推荐!它提供了大量关于坏人如何利用社会工程学欺骗其他用户的信息。“非常烦人——这个后门的作者(rwmj)与我联系了好几周,试图把 xz 5.6.x 添加到 Fedora 40 和 41 中,理由是它有‘很棒的新功能’。我们甚至还和他一起修复了 valgrind 的问题(现在看来,这个问题正是他添加的后门造成的)。昨晚,由于不小心违反了禁令,我们不得不争分夺秒地修复这个问题。他参与 xz 项目已经两年了,添加过各种各样的二进制测试文件。说实话,以他这种水平,即使是 xz 的旧版本,在找到证据之前,我也会心存疑虑。”
XZ 后门攻击可以预防吗?
相当困难。 首先,注入后门的一部分进入了测试中未使用的压缩测试文件。事后看来,这可能会引发一些(嘈杂的)警报,但谁会在乎检查所有测试文件是否在现实世界中被实际测试使用呢?其次,注入后门的一部分以宏文件的形式进入了发布tar包,手动检查与预期tar包的差异非常困难。自动化也很复杂,因为构建本身的预期结果(对于任何了解automake/autoconf工作原理的人来说)很难建模,从而无法分析真实的tar包是否符合预期。 有人提出 as “tarball 与 git 树不匹配是一个特性,而不是一个 bug”. 二进制 tarball 从其源代码的出处是一个尚未解决的问题。 用户信誉?嗯,根据以往的经验,JiaTan75 的 GitHub 账户并没有做过什么流氓事 commits。它只是在证据积累之后才被暂停,但截至 29 月 XNUMX 日,这是一个正常用户,从事着正常的业务。嗯,不太正常。后来 commitS(Free Introduction, Free Introduction, Free Introduction和 Free 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 闭源监控软件的软件更新。”





