【翻译】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格式
后门技术分析
攻击手法
- 供应链污染:攻击者通过成为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)
检测方法
快速检测
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相关活动
缓解措施
- 立即升级:降级到5.4.x稳定版本或升级到已修复的安全版本
- 系统检查:使用上述检测方法确认系统是否受影响
- 监控措施:加强SSH登录监控,关注异常访问
- 供应链安全:审查所有依赖项的维护者和提交历史
攻击者分析
攻击时间线
- 2021年10月:攻击者账号"jia tan"首次出现并开始贡献
- 2022-2023年:逐步获得项目维护权限
- 2024年2月:引入后门代码
- 2024年3月:推动各发行版采用受污染版本
攻击特征
- 长期潜伏(约2年)
- 精心策划的社交工程(施压原维护者交出版本控制权)
- 专业级的代码混淆和反检测技术
- 工作时段规律(周一至周五,部分周六),暗示可能是职业行为
经验教训
- 维护者疲劳:关键基础设施项目维护不足的风险
- 供应链信任:开源项目维护者身份验证的脆弱性
- 间接依赖:通过systemd等间接依赖引入的安全风险
- 监测困难:高度混淆的供应链攻击难以通过常规审计发现