Binarly 最新研究发现:潜伏一年的后门仍在扩散

Binarly 安全研究团队在 2025 年 8 月发布的《Persistent Risk: XZ Utils Backdoor Still Lurking in Docker Images》报告敲响警钟:尽管 XZ Utils 后门漏洞(CVE-2024-3094)早在 2024 年 3 月就已公开披露,引发全球安全社区高度警觉,但该漏洞的威胁仍在持续蔓延。通过对 Docker Hub 镜像仓库展开大规模扫描与深度溯源分析,研究人员发现至少 12 个 Debian 基础镜像仍暗藏恶意代码,由此衍生的 "二阶" 受感染镜像数量更是突破 35 个。更值得警惕的是,部分仓库的 "latest" 标签仍指向受污染版本,这意味着即便遵循最佳实践、使用最新标签拉取镜像的用户,也可能在毫无察觉的情况下引入安全隐患。

研究团队发现这些受影响镜像均呈现出明确的时间特征 —— 标签集中在 2024 年 3 月 11 日前后,这与攻击者完成上游软件包篡改并进入分发渠道的时间线高度吻合。进一步的溯源分析显示,这些镜像通过 Docker 生态的依赖传递机制持续扩散,形成了一个复杂的感染网络,使得安全团队难以全面追踪所有受影响的终端系统。报告特别强调,由于 Docker 镜像的分层存储特性,受污染的基础层被多个上层镜像共享,导致污染范围呈指数级扩大,这也是后门能够长期潜伏的关键原因之一。

当前受影响的 Docker 镜像图谱

一级受感染镜像清单(直接包含恶意组件)

标签

清单摘要

Blob 哈希
rc-buggy-20240311a702c7f4bb57a17762e258871f45f8273ae49bec5515452d5133e66450c95ba53a737ad8ab65fe5ad068d6094fbf99ce9ed2b5beff9c86daceee8c2c50182bde
experimental-2024031181992d9d8eb99b5cde98ba557a38a171e047b222a767dc7ec0ffe0a194b1c469cd5a0401cc26824227d6ffe1f921e91657dc46666e0f20f408d8d154ca49f5c0
unstable-20240311-slim7a3332fbf100a0ef9762ead20a4224665768b237c5bfedfe0f86bf88e0c13b7a40f436db82f2316ccced5a0deef57fac6eb766b073d7e64d5dfe93e6782482b1
unstable-202403118690225da3ca369e9be720446f73e0aa06f290776fdf2605b6ec80c2b229b9f6cd5a0401cc26824227d6ffe1f921e91657dc46666e0f20f408d8d154ca49f5c0
trixie-20240311-slimd4e306f14b8b7389b36be8fb0eadab638cb7744546a33a74f0fc27bb9037dc14b94224647092fbfb1fa9ceb18cf55a60f5a00183971516dd46f1f72f5f7b26df
trixie-2024031185068c773f7fcc9c9acd8f244759cb2131e7a1775c5bf8d6710f76e7467fa3f193e647bfd891e82156d7a13e0f0b194003855008967ec51e962ea0d70fc59ff6
testing-20240311-slimc2e15dd5788b20f360ab3f2d8b60111b6e8b011c5c4960e0129551c743f5cd30243521c5a6cd930662c078eec5f83156663f3197cf12158ce60e0a0f9d0a3eb6
testing-202403110746d89c588160d0470beaae7a55e38305ede06cb5717d132bd6a795610234d8522a6d12a8a3032c984d93fd141274f1cb7cc1e9a6942e3b36cbf803bbe36a12
sid-20240311-slim94596b0770714bac6e8adef7e1d3dbc16245ad2978f94006587e44850343cb88554b70c8b9ed0854851a55e915cefa47cdc18fed201b4aba87193d575410b53d
sid-202403110aff2113f50451631f0f8c22d85c97aad855d73545b6018fcbe9f0a78ae265833a737ad8ab65fe5ad068d6094fbf99ce9ed2b5beff9c86daceee8c2c50182bde
untaggedfa2016c58b4df666286dfa14b2402c05d60c556ecfd4c60635b64ad21380edba93e647bfd891e82156d7a13e0f0b194003855008967ec51e962ea0d70fc59ff6
untaggede24f4205978e6c0f98697e2075439825f86df56457d2d1ea9e0f8593cf5b5236522a6d12a8a3032c984d93fd141274f1cb7cc1e9a6942e3b36cbf803bbe36a12

上述镜像均为 amd64 架构,通过静态分析可检测到liblzma.so中包含的恶意初始化例程。Blob 哈希的重复出现表明这些镜像共享受污染的基础层,进一步验证了污染扩散的路径。

二级衍生镜像(基于受感染基础镜像构建)

除了直接受感染的基础镜像外,后门通过镜像构建过程进一步扩散,形成了数量更多的二级衍生镜像,这些镜像同样构成严重威胁。

仓库

标签

最新标签状态

清单摘要

buildpack-deps

多版本

未标记

5e4438a4660fff39ff4671bc5ecfaea3e639dafe61d5c19c735335c96d61c1e4
neurodebian

多版本

未标记

388d46f65da097cd9371385d9c2f3f3fe04d4bc88b529b52125b9f94d74edaff
r-base

未标记

未标记

3b5c502ccd9d4a6c0937a6bfc51e02741bdc7c520fe458ce4d9c136553df42b0
georchestra/jenkins-buildersid-jdk-8

d7ad7c3386a874e81006bc6fab0ce7eb5cf227f4a1c2d3dff7850e17ff7a5f48
makepad/opencvtrixie-4.9.0

2fdc5fa0c19fe4e04d3117477f49b8b7e0e4124290d9f4270f215f8e7c5b9078
makepad/opencvtrixie-slim-4.9.0

7a4e5b592b318a38542dd21f87a810263d39a3b4caf9d85bb973594264a38fca
controlplane/sectoolslatest

86090b316ad096e53c81f91e94ac2ae95c2f28feee10ce8ec32aa573d8263021

特别需要注意的是,标为 "最新标签状态" 的镜像仍受影响,这意味着即使遵循最佳实践使用latest标签的用户也可能受到影响。Binarly 的透明度平台数据显示,这些衍生镜像主要集中在开发工具链和 CI/CD 环境,可能导致攻击面向上游开发流程扩散。

XZ Utils 后门事件溯源与技术解析

要全面理解当前仍在扩散的威胁,我们必须回溯 XZ Utils 后门事件的源头,深入剖析其技术实现细节,这不仅有助于理解其持久影响的原因,也为有效的防御策略提供了技术依据。

初始攻击链构建

攻击者以 "jia tan" 名义长期渗透 XZ Utils 项目供应链,通过以下步骤完成后门植入:

  • 代码仓库篡改:在 XZ Utils 5.6.0 和 5.6.1 版本的源代码 tarball 中植入恶意组件,通过修改build-to-host.m4文件引入异常构建流程。

  • 多层载荷隐藏:将第一阶段脚本隐藏于测试用例bad-3-corrupt_lzma2.xz中,该脚本进一步从good-large_compressed.lzma提取二进制恶意代码。

  • 编译时注入:在构建过程中,恶意代码被链接到liblzma.so,形成包含后门的共享库文件。

这种植入方式规避了常规代码审查,通过测试文件传递恶意载荷的手法具有极强的隐蔽性。

后门技术实现细节

动态链接库劫持机制

受污染的liblzma.so包含特制的初始化例程,在被sshd进程加载时触发:

  • 通过__init_array段注册的函数在库加载阶段自动执行

  • 检测进程上下文是否为sshd,避免在非目标进程中激活

  • 通过dlopen和dlsym获取目标函数地址,为后续挂钩做准备

IFUNC 钩子实现

后门利用 GNU C 库的 IFUNC(间接函数)机制实现持久化挂钩:

  • 篡改lzma_crc32和lzma_crc64的 IFUNC 解析器

  • 在动态链接过程中优先执行恶意解析器,完成对RSA_public_decrypt、RSA_get0_key和EVP_PKEY_set1_RSA的挂钩

  • 通过 PLT(过程链接表)重定向实现函数调用拦截

这种技术允许恶意代码在不修改函数本身的情况下改变其行为,且难以通过常规内存扫描检测。

加密验证绕过逻辑

挂钩函数实现了特定条件下的身份验证绕过:

  • 监控RSA_public_decrypt的输入数据,检测特定 ED448 私钥特征

  • 当匹配预设条件时,伪造验证通过结果,允许攻击者无需合法凭证登录

  • 保持正常加密流程外观,避免触发异常检测

触发与攻击流程

  • 环境检测:初始化例程检查进程名称、环境变量等特征,确认在 Docker 容器内运行时才完全激活

  • 钩子安装:分阶段完成三个目标函数的挂钩,每个阶段都包含完整性校验

  • 凭证验证劫持:当攻击者使用特定私钥连接时,挂钩函数介入验证流程,返回伪造的成功结果

  • 持久化控制:建立隐蔽通信通道,支持后续命令执行和权限维持

防御策略与检测方案

基于对后门技术细节和当前传播状态的深入理解,我们可以制定出更具针对性的防御策略和检测方案,以应对这一持续存在的威胁。

即时检测手段

  • 静态分析:使用 Binarly 提供的 xz.fail 工具对镜像进行二进制扫描,该工具通过检测 IFUNC 解析器异常模式实现近零误报

  • 运行时监控:部署基于 eBPF 的行为检测,监控sshd进程中异常的dlopen调用和函数地址变化

  • 包完整性校验:通过包管理器验证xz-utils版本,确保低于 5.6.0 或高于 5.6.1,且来自官方源

长期防御架构

  • 供应链安全强化:

  1. 实施镜像签名验证机制,拒绝未签名或签名异常的镜像

  2. 建立内部镜像缓存,对外部镜像进行安全扫描后再引入

  3. 采用最小基础镜像,减少潜在攻击面

  • 二进制透明验证:

  1. 部署 Binarly Transparency Platform 等工具进行持续二进制监控

  2. 建立基线比对机制,检测异常的库文件修改

  • 应急响应流程:

  1. 制定针对供应链污染的隔离预案,明确受影响组件替换流程

  2. 定期演练镜像回溯和系统重建流程,确保在攻击发生时可快速恢复

结论

XZ Utils 后门事件揭示了供应链攻击的长期性和隐蔽性特征。Binarly 的最新研究表明,即使在事件披露一年多后,受污染的镜像仍在 Docker 生态中传播,这反映出开源供应链安全治理的复杂性。

对于安全团队而言,仅依赖版本号和发布日期进行风险评估已不再足够,必须实施二进制级别的持续验证。IFUNC 钩子等高级技术的应用,也要求防御体系从传统的特征检测向行为分析和环境感知演进。

该事件为开源生态敲响警钟:在追求开发效率的同时,必须建立更严格的贡献者身份验证、代码审查和构建流程审计机制,才能从根本上抵御此类高级供应链攻击。

声明:本文来自奇安信威胁情报中心,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。