事件名称:
XZ Utils供应链投毒事件
威胁类型:
后门病毒
简单描述:
微软PostgreSQL开发人员Andres Freund在调查SSH性能问题时,发现了XZ Utils软件包中存在着一个涉及混淆恶意代码的供应链攻击事件。
事件描述
攻击者 JiaT75 (Jia Tan) 于 2021 年注册了 GitHub 账号,之后积极参与 XZ Utils 项目的维护,并逐渐获取信任,获得了直接 commit 代码的权利。
JiaT75 在最近几个月的一次 commit 中,悄悄加入了 bad-3-corrupt_lzma2.xz 和 good-large_compressed.lzma 两个暗藏恶意代码的伪造二进制测试文件,然而在编译脚本中,在特定条件下会从这两个文件中读取内容对编译结果进行修改,致使编译结果和公开的源代码不一致。
2024年3月29日,微软PostgreSQL开发人员Andres Freund在调查SSH性能问题时,发现了这个问题并报告给 oss-security,致使此次软件供应链攻击事件被披露。
事件分析
阶段一
攻击链起始于被修改的m4\build-to-host.m4编译脚本。下图是从文件中提取出的与恶意行为相关的命令。
图1命令注释
1. 脚本会通过特定的模式串#{4}[[:alnum:]]{5}#{4}$来获取包含下阶段载荷的文件所在位置,即bad-3-corrupt_lzma2.xz的路径。匹配到的字符串为bad-3-corrupt_lzma2.xz中的####Hello####特征串。
2. 通过将上一步获取到的路径中.号以前的内容替换为空,得到文件后缀,即为后续命令解压文件的命令xz。
3. 通过特定的转化规则(tr "\t \-_" " \t_\-")修复bad-3-corrupt_lzma2文件,并通过xz命令解压,得到下阶段脚本。
4. 执行下阶段脚本命令。
阶段二
该阶段定义了下阶段的自定义转换过程i,并解密出下阶段命令执行。
图2 二阶段脚本
1.通过config.status文件定位xz源码的根路径,用于下面命令中使用。
2.修复good-large_compressed.lzma文件,解压并执行下阶段脚本命令。
阶段三
该阶段脚本包含了主要的恶意行为代码,包括环境检查,提取预编译的64位后门模块liblzma_la-crc64-fast.o,修改crc64_fast.c源代码文件内容,增加后门模块代码调用。
1.脚本通过特定的转换过程,解压得到64位的后门模块liblzma_la-crc64-fast.o并替换正常模块。
图3 三阶段脚本-释放后门模块
2.修改crc64_fast.c,crc32_fast.c文件中crc64_resolve,crc32_resolve函数的执行逻辑,替换函数中对函数is_arch_extension_supported的调用为新增的内联函数_is_arch_extension_supported,而_is_arch_extension_supported中增加了调用后门模块(liblzma_la-crc64-fast.o)导出的_get_cpuid函数调用逻辑。
图4 三阶段脚本-修改正常调用逻辑
下图是修改后的crc64_fast.c代码片段。
图5 修改后的代码
后门模块liblzma_la-crc64-fast.o
导出函数_get_cpuid中实现了后门功能的初始化逻辑,在初始化函数第二次被调用时(即crc64_resolve),才会进行后门的初始化过程,在初始化过程中,RSA_public_decrypt函数被劫持为Llzma_index_prealloc_0函数。RSA_public_decrypt是openssh中用于公钥认证的函数。
图6 初始化逻辑
Llzma_index_prealloc_0函数会通过检测参数是否是特殊的RSA密钥来根据参数执行对应的命令。
图7 hook逻辑
IOCs
HASH
D26CEFD934B33B174A795760FC79E6B5
212FFA0B24BB7D749532425A46764433
D302C6CB2FA1C03C710FA5285651530F
4F0CF1D2A2D44B75079B3EA5ED28FE54
53D82BB511B71A5D4794CF2D8A2072C1
解决方案
处置建议
通过在命令行输入 xz --version 来检查 XZ Utils 版本,如果输出为 5.6.0 或 5.6.1 ,说明您的系统可能已被植入后门。
如果相关版本在受影响范围内,利用如下自查脚本排查是否存在后门:
#! /bin/bash
set -eu
# find path to liblzma used by sshd
path="$(ldd $(which sshd) | grep liblzma | grep -o '/[^ ]*')"
# does it even exist?
if [ "$path" == "" ]
Then
echo probably not vulnerable
Exit
fi
# check for function signature
if hexdump -ve '1/1 "%.2x"' "$path" | grep -q f30f1efa554889f54c89ce5389fb81e7000000804883ec28488954241848894c2410
Then
echo probably vulnerableelseecho probably not vulnerable
fi
若确认受影响,请将XZ Utils降级至 5.4.6 版本,或者更新至最新版本5.6.4。命令如下:
sudo apt install xz-utils={要安装的目标版本}。
深信服解决方案
【深信服统一端点安全管理系统aES】已支持查杀拦截此次事件使用的后门文件。
【深信服安全托管服务MSS】以保障用户网络安全“持续有效”为目标,通过将用户安全设备接入安全运营中心,依托于XDR安全能力平台和MSSP安全服务平台实现有效协同的“人机共智”模式,围绕资产、脆弱性、威胁、事件四个要素为用户提供7*24H的安全运营服务,快速扩展持续有效的安全运营能力,保障可承诺的风险管控效果。
点击阅读原文可查看首次事件预警通告