3月29日,一位微软开发者揭露了一个令人震惊的供应链攻击,在开源软件社区掀起了轩然大波。攻击者在 XZ Utils 中植入了后门,XZ Utils 是一种开源数据压缩工具,几乎所有 Linux 和其他类 Unix 操作系统都安装了它。
什么是 XZ Utils?
XZ Utils 在 Linux 中几乎无处不在。它为几乎所有类 Unix 操作系统(包括 Linux)提供无损数据压缩。XZ Utils 在各种操作期间提供压缩和解压缩数据的关键功能。XZ Utils 还支持传统的 .lzma 格式,这使得该组件更加重要。
发生了什么?
Andres Freund 是微软 PostgreSQL 产品的开发人员和工程师,他最近在解决 Debian 系统在使用 SSH 时遇到的性能问题。SSH 是通过互联网远程登录设备最广泛使用的协议。具体来说,SSH 登录消耗了过多的 CPU 周期,并且在使用 valgrind(一种用于监控计算机内存的工具)时生成了错误。
通过纯粹的运气和 Freund 的仔细观察,他最终发现这些问题是 XZ Utils 更新的结果。上周五,Freund 在开源安全列表中披露,这些更新是有人故意在压缩软件中植入后门的结果。
后门做什么?
添加到 xz Utils 版本 5.6.0 和 5.6.1 中的恶意代码修改了软件的功能方式。后门操纵了 sshd,这是用于建立远程 SSH 连接的可执行文件。任何拥有预定加密密钥的人都可以将他们选择的任何代码存储在 SSH 登录证书中,上传它,并在被植入后门的设备上执行它。没有人真正看到过上传的代码,所以不知道攻击者计划运行什么代码。理论上,该代码几乎可以做任何事情,包括窃取加密密钥或安装恶意软件。
等等,压缩工具如何操纵像 SSH 这样对安全性敏感的进程?
任何库都可以篡改与其链接的任何可执行文件的内部工作原理。通常,可执行文件的开发者会建立一个指向其正常工作所需的库的链接。OpenSSH 是最流行的 sshd 实现,它没有链接 liblzma 库,但 Debian 和许多其他 Linux 发行版都添加了一个补丁,将 sshd 链接到 systemd,systemd 是一个在系统启动期间加载各种服务的程序。systemd 反过来链接到 liblzma,这使得 XZ Utils 可以控制 sshd。
这个后门是如何产生的?
看来这个后门已经酝酿多年了。2021 年,一位用户名为 JiaT75 的人首次提交了一个开源项目。事后看来,对 libarchive 项目的更改是可疑的,因为它用一个长期以来被认为不太安全的变体替换了 safe_fprint 函数。当时没有人注意到。
第二年,JiaT75 通过 XZ Utils 邮件列表提交了一个补丁,几乎立即,一位从未出现过的参与者 Jigar Kumar 加入讨论,并认为 Lasse Collin(XZ Utils 的长期维护者)没有足够频繁或快速地更新软件。Kumar 在 Dennis Ens 和其他几个从未出现在列表中的人的支持下,向 Collin 施压,要求他增加一名开发者来维护该项目。
2023 年 1 月,JiaT75 首次提交了 XZ Utils。在接下来的几个月中,JiaT75(使用 Jia Tan 这个名字)越来越多地参与 XZ Utils 的事务。例如,Tan 在 oss-fuzz(一个扫描开源软件中可利用漏洞的项目)上用自己的联系信息替换了 Collins 的联系信息。Tan 还要求 oss-fuzz 在测试期间禁用 ifunc 函数,这一更改阻止了它检测 Tan 即将对 XZ Utils 做出的恶意更改。
今年 2 月,Tan 发布了 XZ Utils 5.6.0 和 5.6.1 版本的提交。这些更新实现了后门。在接下来的几周里,Tan 或其他人呼吁 Ubuntu、Red Hat 和 Debian 的开发者将这些更新合并到他们的操作系统中。最终,根据安全公司 Tenable 的说法,这两个更新之一进入了多个版本。
关于这个后门,我们还能知道些什么?
简而言之,它允许拥有正确私钥的人劫持 sshd(负责建立 SSH 连接的可执行文件),并从那里执行恶意命令。后门是通过一个五阶段加载程序实现的,该加载程序使用一系列简单但巧妙的技术来隐藏自己。它还提供了在不需要进行重大更改的情况下交付新有效负载的方法。
多位对更新进行逆向工程的人对后门有更多要说的。开发者 Sam James 在这里提供了一个概述。
在一次在线采访中,开发者和逆向工程师 HD Moore 证实了 Sam James 的怀疑,即后门针对的是 Debian 或 Red Hat 发行版。
“这次攻击非常隐蔽,只有当你在 amd64(intel x86 64 位)上构建库并且构建 Debian 或 RPM 包(而不是将其用于本地安装)时,它才会执行后门的最后步骤,”他写道。
他继续解释研究人员的观察结果,这些研究人员共同花了周末分析恶意更新:
在验证 SSH 公钥时,如果公钥与某个指纹函数匹配,则在实际验证公钥之前,会使用预共享密钥解密密钥内容。然后将解密后的内容直接传递给系统。
如果指纹不匹配或解密后的内容不匹配某个格式,则会回退到常规密钥验证,没有人会更聪明。
后门非常隐蔽。它使用 glibc 的一个鲜为人知的功能来挂钩一个函数。它只在受影响的发行版上的 usr/bin/sshd 进程加载了被植入后门的 xz 库时才会触发。可能还有许多其他后门,但每个人都在谈论的那个使用了函数间接寻址的东西来添加钩子。有效负载被编码成假的 xz 测试文件,并有效地作为 shellcode 运行,更改了 SSH RSA 密钥验证代码,以便一个神奇的公钥(在正常身份验证期间发送)让攻击者获得访问权限。
他们的宏伟计划是:
•偷偷地对发布的 tarball 进行后门处理,但不对源代码进行后门处理
•使用傀儡账户说服各种 Linux 发行版拉取最新版本并打包
•一旦这些发行版发布了它,他们就可以接管任何下游用户/公司系统/等等
网络公司 Akamai 的研究人员也很好地解释了后门的工作原理。
关于 Jia Tan,我们还知道些什么?
目前,我们对 Jia Tan 知之甚少,尤其是对于一个被委托管理像 XZ Utils 这样无处不在且敏感的软件的人来说。这位开发者角色在过去几年中接触过数十种其他开源软件。目前,尚不清楚这个用户名背后是否曾经存在过一个真实世界的人,或者 Jia Tan 是否是一个完全虚构的人物。
是否有 CVE 跟踪编号?
是的,它是 CVE-2024-3094。
如何知道我的设备上是否存在后门?
有几种方法。一种是来自安全公司 Binarly 的这个页面。该工具检测 IFUNC 的实现,并基于行为分析。如果在其他地方植入了类似的后门,它可以自动检测不变量。
还有一个名为 xzbot 的项目。https://github.com/amlweems/xzbot 它提供以下内容:
•蜜罐:假的易受攻击的服务器,用于检测利用尝试
https://github.com/amlweems/xzbot#honeypot
•ed448 补丁:修补 liblzma.so 以使用我们自己的 ED448 公钥
https://github.com/amlweems/xzbot#ed448-patch
•后门格式:后门有效负载的格式
https://github.com/amlweems/xzbot#backdoor-format
•后门演示:假设知道 ED448 私钥,则触发 RCE 的 cli
https://github.com/amlweems/xzbot#backdoor-demo




