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-20240311 | a702c7f4bb57a17762e258871f45f8273ae49bec5515452d5133e66450c95ba5 | 3a737ad8ab65fe5ad068d6094fbf99ce9ed2b5beff9c86daceee8c2c50182bde |
experimental-20240311 | 81992d9d8eb99b5cde98ba557a38a171e047b222a767dc7ec0ffe0a194b1c469 | cd5a0401cc26824227d6ffe1f921e91657dc46666e0f20f408d8d154ca49f5c0 |
unstable-20240311-slim | 7a3332fbf100a0ef9762ead20a4224665768b237c5bfedfe0f86bf88e0c13b7a | 40f436db82f2316ccced5a0deef57fac6eb766b073d7e64d5dfe93e6782482b1 |
unstable-20240311 | 8690225da3ca369e9be720446f73e0aa06f290776fdf2605b6ec80c2b229b9f6 | cd5a0401cc26824227d6ffe1f921e91657dc46666e0f20f408d8d154ca49f5c0 |
trixie-20240311-slim | d4e306f14b8b7389b36be8fb0eadab638cb7744546a33a74f0fc27bb9037dc14 | b94224647092fbfb1fa9ceb18cf55a60f5a00183971516dd46f1f72f5f7b26df |
trixie-20240311 | 85068c773f7fcc9c9acd8f244759cb2131e7a1775c5bf8d6710f76e7467fa3f1 | 93e647bfd891e82156d7a13e0f0b194003855008967ec51e962ea0d70fc59ff6 |
testing-20240311-slim | c2e15dd5788b20f360ab3f2d8b60111b6e8b011c5c4960e0129551c743f5cd30 | 243521c5a6cd930662c078eec5f83156663f3197cf12158ce60e0a0f9d0a3eb6 |
testing-20240311 | 0746d89c588160d0470beaae7a55e38305ede06cb5717d132bd6a795610234d8 | 522a6d12a8a3032c984d93fd141274f1cb7cc1e9a6942e3b36cbf803bbe36a12 |
sid-20240311-slim | 94596b0770714bac6e8adef7e1d3dbc16245ad2978f94006587e44850343cb88 | 554b70c8b9ed0854851a55e915cefa47cdc18fed201b4aba87193d575410b53d |
sid-20240311 | 0aff2113f50451631f0f8c22d85c97aad855d73545b6018fcbe9f0a78ae26583 | 3a737ad8ab65fe5ad068d6094fbf99ce9ed2b5beff9c86daceee8c2c50182bde |
untagged | fa2016c58b4df666286dfa14b2402c05d60c556ecfd4c60635b64ad21380edba | 93e647bfd891e82156d7a13e0f0b194003855008967ec51e962ea0d70fc59ff6 |
untagged | e24f4205978e6c0f98697e2075439825f86df56457d2d1ea9e0f8593cf5b5236 | 522a6d12a8a3032c984d93fd141274f1cb7cc1e9a6942e3b36cbf803bbe36a12 |
上述镜像均为 amd64 架构,通过静态分析可检测到liblzma.so中包含的恶意初始化例程。Blob 哈希的重复出现表明这些镜像共享受污染的基础层,进一步验证了污染扩散的路径。
二级衍生镜像(基于受感染基础镜像构建)
除了直接受感染的基础镜像外,后门通过镜像构建过程进一步扩散,形成了数量更多的二级衍生镜像,这些镜像同样构成严重威胁。
仓库 | 标签 | 最新标签状态 | 清单摘要 |
buildpack-deps | 多版本 | 未标记 | 5e4438a4660fff39ff4671bc5ecfaea3e639dafe61d5c19c735335c96d61c1e4 |
neurodebian | 多版本 | 未标记 | 388d46f65da097cd9371385d9c2f3f3fe04d4bc88b529b52125b9f94d74edaff |
r-base | 未标记 | 未标记 | 3b5c502ccd9d4a6c0937a6bfc51e02741bdc7c520fe458ce4d9c136553df42b0 |
georchestra/jenkins-builder | sid-jdk-8 | 是 | d7ad7c3386a874e81006bc6fab0ce7eb5cf227f4a1c2d3dff7850e17ff7a5f48 |
makepad/opencv | trixie-4.9.0 | 是 | 2fdc5fa0c19fe4e04d3117477f49b8b7e0e4124290d9f4270f215f8e7c5b9078 |
makepad/opencv | trixie-slim-4.9.0 | 是 | 7a4e5b592b318a38542dd21f87a810263d39a3b4caf9d85bb973594264a38fca |
controlplane/sectools | latest | 是 | 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,且来自官方源
长期防御架构
供应链安全强化:
实施镜像签名验证机制,拒绝未签名或签名异常的镜像
建立内部镜像缓存,对外部镜像进行安全扫描后再引入
采用最小基础镜像,减少潜在攻击面
二进制透明验证:
部署 Binarly Transparency Platform 等工具进行持续二进制监控
建立基线比对机制,检测异常的库文件修改
应急响应流程:
制定针对供应链污染的隔离预案,明确受影响组件替换流程
定期演练镜像回溯和系统重建流程,确保在攻击发生时可快速恢复
结论
XZ Utils 后门事件揭示了供应链攻击的长期性和隐蔽性特征。Binarly 的最新研究表明,即使在事件披露一年多后,受污染的镜像仍在 Docker 生态中传播,这反映出开源供应链安全治理的复杂性。
对于安全团队而言,仅依赖版本号和发布日期进行风险评估已不再足够,必须实施二进制级别的持续验证。IFUNC 钩子等高级技术的应用,也要求防御体系从传统的特征检测向行为分析和环境感知演进。
该事件为开源生态敲响警钟:在追求开发效率的同时,必须建立更严格的贡献者身份验证、代码审查和构建流程审计机制,才能从根本上抵御此类高级供应链攻击。
声明:本文来自奇安信威胁情报中心,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。