【翻译】xz 供应链投毒你需要知道的一切
字数 1429 2025-08-22 12:22:48

XZ Utils 供应链投毒事件全面分析

事件概述

2024年3月29日,微软工程师Andres Freund在调查SSH性能问题时发现XZ Utils压缩库中存在后门,该后门可能允许攻击者通过SSH非授权获取系统访问权限。这一供应链攻击影响了XZ Utils 5.6.0和5.6.1版本,涉及多个Linux发行版和嵌入式设备。

XZ Utils简介

XZ是一种通用的数据压缩格式,几乎存在于每个Linux发行版中:

  • XZ是类Unix操作系统上的无损数据压缩格式
  • XZ Utils是包含XZ文件和liblzma压缩/解压缩功能的命令行工具
  • liblzma是用于数据压缩的类似zlib的API,支持XZ和旧版.lzma格式

后门技术分析

攻击手法

  1. 供应链污染:攻击者通过成为XZ项目的维护者,在官方发布的tarball中植入恶意代码
  2. 混淆技术:恶意代码被隐藏在构建脚本和测试文件中,使用多层混淆
  3. 条件触发:后门仅在特定环境下激活(x86-64 Linux、使用gcc和GNU链接器、作为Debian/RPM包构建时)

后门实现机制

  1. 注入点:修改了build-to-host.m4脚本,在配置阶段执行混淆脚本
  2. 代码加载:通过tests/files/目录中的特殊文件加载恶意代码
  3. 函数劫持
    • 替换crc32_resolve()crc64_resolve()等ifunc解析器
    • 安装动态链接器审计钩子,拦截符号解析过程
    • 重定向RSA_public_decrypt@...plt到恶意代码
  4. 环境检测:检查TERM、LD_DEBUG、LD_PROFILE等环境变量,避免在分析环境中触发

攻击影响

  1. SSH服务:后门可能允许绕过SSH认证机制
  2. 系统性能:受感染系统SSH登录会变慢(这是发现后门的关键线索)
  3. 隐蔽性:精心设计的触发条件使后门难以在常规测试中发现

受影响范围

受影响版本

  • XZ Utils 5.6.0
  • XZ Utils 5.6.1

受影响系统

  • 使用glibc的x86-64 Linux系统
  • 部分Linux发行版的预发布版本(如Fedora Rawhide和Debian sid)

检测方法

快速检测

xz -V  # 检查版本是否为5.6.0或5.6.1

详细检测脚本

#!/bin/bash
set -eu

# 查找sshd使用的liblzma路径
path=$(ldd $(which sshd) | grep liblzma | grep -o '/[^ ]*')

# 检查是否存在
if [ "$path" == "" ]; then
    echo "probably not vulnerable"
    exit
fi

# 检查函数签名
if hexdump -ve '1/1 "%.2x"' "$path" | grep -q f30f1efa554889f54c89ce5389fb81e7000000804883ec28488954241848894c2410; then
    echo "probably vulnerable"
else
    echo "probably not vulnerable"
fi

其他检测指标

  • SSH登录异常缓慢
  • valgrind报告异常错误
  • 系统存在可疑的liblzma相关活动

缓解措施

  1. 立即升级:降级到5.4.x稳定版本或升级到已修复的安全版本
  2. 系统检查:使用上述检测方法确认系统是否受影响
  3. 监控措施:加强SSH登录监控,关注异常访问
  4. 供应链安全:审查所有依赖项的维护者和提交历史

攻击者分析

攻击时间线

  • 2021年10月:攻击者账号"jia tan"首次出现并开始贡献
  • 2022-2023年:逐步获得项目维护权限
  • 2024年2月:引入后门代码
  • 2024年3月:推动各发行版采用受污染版本

攻击特征

  • 长期潜伏(约2年)
  • 精心策划的社交工程(施压原维护者交出版本控制权)
  • 专业级的代码混淆和反检测技术
  • 工作时段规律(周一至周五,部分周六),暗示可能是职业行为

经验教训

  1. 维护者疲劳:关键基础设施项目维护不足的风险
  2. 供应链信任:开源项目维护者身份验证的脆弱性
  3. 间接依赖:通过systemd等间接依赖引入的安全风险
  4. 监测困难:高度混淆的供应链攻击难以通过常规审计发现

参考资源

  1. CISA安全警报
  2. Red Hat安全公告
  3. 技术深度分析
  4. Hacker News讨论
XZ Utils 供应链投毒事件全面分析 事件概述 2024年3月29日,微软工程师Andres Freund在调查SSH性能问题时发现XZ Utils压缩库中存在后门,该后门可能允许攻击者通过SSH非授权获取系统访问权限。这一供应链攻击影响了XZ Utils 5.6.0和5.6.1版本,涉及多个Linux发行版和嵌入式设备。 XZ Utils简介 XZ是一种通用的数据压缩格式,几乎存在于每个Linux发行版中: XZ是类Unix操作系统上的无损数据压缩格式 XZ Utils是包含XZ文件和liblzma压缩/解压缩功能的命令行工具 liblzma是用于数据压缩的类似zlib的API,支持XZ和旧版.lzma格式 后门技术分析 攻击手法 供应链污染 :攻击者通过成为XZ项目的维护者,在官方发布的tarball中植入恶意代码 混淆技术 :恶意代码被隐藏在构建脚本和测试文件中,使用多层混淆 条件触发 :后门仅在特定环境下激活(x86-64 Linux、使用gcc和GNU链接器、作为Debian/RPM包构建时) 后门实现机制 注入点 :修改了 build-to-host.m4 脚本,在配置阶段执行混淆脚本 代码加载 :通过 tests/files/ 目录中的特殊文件加载恶意代码 函数劫持 : 替换 crc32_resolve() 和 crc64_resolve() 等ifunc解析器 安装动态链接器审计钩子,拦截符号解析过程 重定向 RSA_public_decrypt@...plt 到恶意代码 环境检测 :检查TERM、LD_ DEBUG、LD_ PROFILE等环境变量,避免在分析环境中触发 攻击影响 SSH服务 :后门可能允许绕过SSH认证机制 系统性能 :受感染系统SSH登录会变慢(这是发现后门的关键线索) 隐蔽性 :精心设计的触发条件使后门难以在常规测试中发现 受影响范围 受影响版本 XZ Utils 5.6.0 XZ Utils 5.6.1 受影响系统 使用glibc的x86-64 Linux系统 部分Linux发行版的预发布版本(如Fedora Rawhide和Debian sid) 检测方法 快速检测 详细检测脚本 其他检测指标 SSH登录异常缓慢 valgrind报告异常错误 系统存在可疑的liblzma相关活动 缓解措施 立即升级 :降级到5.4.x稳定版本或升级到已修复的安全版本 系统检查 :使用上述检测方法确认系统是否受影响 监控措施 :加强SSH登录监控,关注异常访问 供应链安全 :审查所有依赖项的维护者和提交历史 攻击者分析 攻击时间线 2021年10月:攻击者账号"jia tan"首次出现并开始贡献 2022-2023年:逐步获得项目维护权限 2024年2月:引入后门代码 2024年3月:推动各发行版采用受污染版本 攻击特征 长期潜伏(约2年) 精心策划的社交工程(施压原维护者交出版本控制权) 专业级的代码混淆和反检测技术 工作时段规律(周一至周五,部分周六),暗示可能是职业行为 经验教训 维护者疲劳 :关键基础设施项目维护不足的风险 供应链信任 :开源项目维护者身份验证的脆弱性 间接依赖 :通过systemd等间接依赖引入的安全风险 监测困难 :高度混淆的供应链攻击难以通过常规审计发现 参考资源 CISA安全警报 Red Hat安全公告 技术深度分析 Hacker News讨论