午夜前500毫秒:XZ/liblzma 后门

Elastic 安全实验室发布了对 XZ 实用程序后门的初步分析,包括 YARA 规则、osquery 和 KQL 搜索,以识别潜在的入侵。

阅读时长 11 分钟安全研究漏洞更新
500ms to midnight: XZ / liblzma backdoor

关键要点

  • 2024年3月29日,Andres Freund 发现了对命令行实用程序 XZ 的恶意提交,影响了 Linux 版本 5.6.0 和 5.6.1,并在 oss-security 邮件列表中分享了此信息。
  • Andres 的发现是在开发系统发起的 SSH 登录尝试中观察到延迟增加了 *500ms* 以及其他异常现象后做出的。
  • 已识别的后门旨在绕过 SSH 中的身份验证控制以远程执行代码,从而可能获得对环境中其他系统的访问权限。
  • 代码提交由 JiaT75(现已停用)添加和签名,他多年来一直为这个流行的开源项目做出贡献。
  • 安全研究人员仍在对有效负载进行初步分析,解剖构建过程和后门。
  • Elastic 已经发布了 YARA 签名、检测规则和 osquery 查询,允许 Linux 系统维护人员了解影响并尽早阻止潜在的入侵。

XZ/liblzma 后门概览

2024年3月29日,许多 Linux 发行版中广泛使用的 XZ 包(作为系统与 SSH 客户端连接(以及许多其他系统实用程序)交互的库)因出现 *500ms* 的延迟和间歇性故障而备受关注。最初对该异常现象进行的常规调查却出现了令人惊讶和意想不到的转折:维护人员在该软件包中植入了恶意、混淆的代码——该代码还通过被污染的构建过程在几周内流传。

最初 识别恶意贡献 的开发人员 Andres Freund 观察到,这些更改已在 XZ Utils 软件包的 5.6.05.6.1 版本中实现,但尚未在所有 Linux 发行版中广泛采用,除了通常用于早期测试的一些最前沿版本之外。

初步分析 表明,该后门旨在通过 systemd 绕过 sshd 中的身份验证控制,并尝试在预身份验证上下文中执行代码。迄今为止的观察结果表明,恶意代码尚未处于其最终目标状态,并且可能是由于开发人员忽略的偶然错误而被提前发现,从而对合法的 SSH 使用案例造成影响。

除了在少量 Linux 发行版中传播恶意软件包外,还在流行的软件包管理软件 HomeBrew 中观察到了一些现象,这影响了一些 macOS 用户。Homebrew(以及包含此库的其他软件包)的维护人员目前正在回滚到不受这些恶意更改影响的先前版本,尽管主要是出于谨慎起见,因为受损的构建仅针对 deb 和 rpm 包。

在后门消息传出后不久,Tukaani 项目(XZ Utils Git 存储库 的项目所有者)在其主页上发布了以下通知。

鉴于发现阶段,妥协本身虽然风险很高,但在现实世界中的影响却相对较小。这种情况应提醒安全专业人员了解供应链妥协、监控 Linux 工作负载和审计系统控制的重要性。在这种情况下,防御者拥有时间优势。

后门分析

XZ 后门构建过程

CVE-2024-3094 解释了 liblzma 中的更改是如何通过对库的构建脚本进行恶意添加而创建的,并且直接影响受影响系统上链接该库的任何软件。

恶意修改的构建脚本分为三个阶段,从 m4/build-to-host.m4 中的添加开始,并逐步进行混淆和执行阶段。从高层次上讲,一些混淆技术包括通过 trhead 命令进行字符替换和选择性字节处理命令,以解码和执行测试文件中的恶意有效负载。有趣的是,许多受影响的工具是管理员出于合法目的通常使用的标准 Linux 系统工具。

构建过程如下所示 构建过程

  • **阶段 0:**初始恶意代码添加尝试通过更改特定测试文件的字节值(在正常情况下,这些文件看起来已损坏)来解码阶段 1 脚本(隐藏的代码段),以形成有效的 XZ 流。
  • **阶段 1:**此阶段利用一个 bash 文件,该文件包含特殊的检查(例如,脚本运行的 Linux 架构)和 Bash 命令来分析环境(例如 [ "$(uname)" = "Linux" ]),以确保满足后门的兼容条件。根据检查结果,可能会执行其他恶意脚本或有效负载。
  • **阶段 2:**此阶段涉及一个 infected.txt 文件,其中详细说明了更改的提取和编译代码修改,即
    • 重建数据:使用 sedawk 等命令对来自测试文件的混淆压缩数据进行字节操作和解码技术,以重建恶意有效负载
    • 混淆和提取:使用 tr 命令进行复杂的解密和混淆技术,以提取二进制后门,使其隐藏在典型的检测机制之外
    • 构建过程操作:这会更改构建和编译步骤,以将二进制后门嵌入到 Linux 系统进程中
    • 扩展机制:一种允许添加新脚本并更新后门而无需修改原始有效负载的设计
    • 未来阶段准备:为后续恶意活动(如传播后门)奠定基础

评估影响

鉴于受影响的测试版发行版和软件的使用有限,此妥协应该会影响很少的系统。但是,鼓励 Linux 系统维护人员通过利用以下 osquery 查询来确保系统未运行受影响版本的 xzutils / liblzma

Linux:

SELECT 'DEB Package' AS source, name, version,
  CASE
    WHEN version LIKE '5.6.0%' OR version LIKE '5.6.1%' THEN 'Potentially Vulnerable'
    ELSE 'Most likely not vulnerable'
  END AS status
FROM deb_packages
WHERE name = 'xz-utils' OR name = 'liblzma' OR name LIKE 'liblzma%'
UNION
SELECT 'RPM Package' AS source, name, version,
  CASE
    WHEN version LIKE '5.6.0%' OR version LIKE '5.6.1%' THEN 'Potentially Vulnerable'
    ELSE 'Most likely not vulnerable'
  END AS status
FROM rpm_packages
WHERE name = 'xz-utils' OR name = 'liblzma' OR name LIKE 'liblzma%';

macOS:

SELECT 'Homebrew Package' AS source, name, version,
  CASE
    WHEN version LIKE '5.6.0%' OR version LIKE '5.6.1%' THEN 'Potentially Vulnerable'
    ELSE 'Most likely not vulnerable'
  END AS status
FROM homebrew_packages
WHERE name = 'xz' OR name = 'liblzma';

以下 KQL 查询可用于查询 Elastic Defend 文件事件

event.category : file and host.os.type : (macos or linux) and file.name : liblzma.so.5.6.*

或者,手动检查系统上运行的 XZ 版本就像运行以下命令(来自研究员Kostas)并检查输出版本一样简单。请记住,版本 5.6.0 和 5.6.1 受到影响,应回滚或更新到较新版本。

for xz_p in $(type -a xz | awk '{print $NF}' | uniq); do strings "$xz_p" | grep "xz (XZ Utils)" || echo "No match found for $xz_p"; done

恶意软件防护

以下YARA 签名(磁盘和内存)已部署在 Elastic Defend 中以阻止 XZ 后门。

rule Linux_Trojan_XZBackdoor {
    meta:
        author = "Elastic Security"
        fingerprint = "f1982d1db5aacd2d6b0b4c879f9f75d4413e0d43e58ea7de2b7dff66ec0f93ab"
        creation_date = "2024-03-30"
        last_modified = "2024-03-31"
        threat_name = "Linux.Trojan.XZBackdoor"
        reference_sample = "5448850cdc3a7ae41ff53b433c2adbd0ff492515012412ee63a40d2685db3049"
        severity = 100
        arch_context = "x86"
        scan_context = "file, memory"
        license = "Elastic License v2"
        os = "linux"
    strings:
        /* potential backdoor kill-switch as per https://gist.github.com/q3k/af3d93b6a1f399de28fe194add452d01?permalink_comment_id=5006558#file-hashes-txt-L115 */
        $a1 = "yolAbejyiejuvnup=Evjtgvsh5okmkAvj"
/* function signature in liblzma used by sshd */
        $a2 = { F3 0F 1E FA 55 48 89 F5 4C 89 CE 53 89 FB 81 E7 00 00 00 80 48 83 EC 28 48 89 54 24 18 48 89 4C 24 10 }
 /* unique byte patterns in backdoored liblzma */
        $b1 = { 48 8D 7C 24 08 F3 AB 48 8D 44 24 08 48 89 D1 4C 89 C7 48 89 C2 E8 ?? ?? ?? ?? 89 C2 }
        $b2 = { 31 C0 49 89 FF B9 16 00 00 00 4D 89 C5 48 8D 7C 24 48 4D 89 CE F3 AB 48 8D 44 24 48 }
        $b3 = { 4D 8B 6C 24 08 45 8B 3C 24 4C 8B 63 10 89 85 78 F1 FF FF 31 C0 83 BD 78 F1 FF FF 00 F3 AB 79 07 }
    condition:
        1 of ($a*) or all of ($b*)
}

此签名的检测将在 Elastic 中显示如下

行为检测

利用Elastic Defend的网络和进程事件,我们发布了一个新的 EQL 检测规则,以识别 SSHD 服务启动、生成 shell 进程并立即在非常短的时间内意外终止的实例。

sequence by host.id, user.id with maxspan=1s
 [process where host.os.type == "linux" and event.type == "start" and event.action == "exec" and process.name == "sshd" and
    process.args == "-D" and process.args == "-R"] by process.pid, process.entity_id
 [process where host.os.type == "linux" and event.type == "start" and event.action == "exec" and process.parent.name == "sshd" and 
  process.executable != "/usr/sbin/sshd"] by process.parent.pid, process.parent.entity_id
 [process where host.os.type == "linux" and event.action == "end" and process.name == "sshd" and process.exit_code != 0] by process.pid, process.entity_id
 [network where host.os.type == "linux" and event.type == "end" and event.action == "disconnect_received" and process.name == "sshd"] by process.pid, process.entity_id

Linux:最后的疆界

虽然基于供应链的攻击或漏洞利用的观察很少达到这种全球新闻报道的程度,但 Elastic 在2023 年全球威胁报告中描述的观察结果表明,基于 Linux 的签名事件在我们数据集中持续增长。这种增长部分与我们观察到的报告威胁行为的系统数量的增长有关,但它强烈表明攻击者越来越关注 Linux 系统。

Linux 现在并将继续是威胁团伙关注的目标,因为它在互联网上的广泛采用强化了其重要性。在这种情况下,敌对组织试图绕过现有的控制措施,以便通过其他方式进行未来的入侵。

虽然 XZ 后门背后的个人(或组织)的目标尚未明确,但对于许多专注于间谍活动、勒索、数据破坏、知识产权盗窃和侵犯人权的威胁实体来说,这在技术上是可行的。由于能够在受影响的互联网可访问系统上执行代码,因此可以合理地假设恶意行为者将进一步渗透受害者。Elastic 安全实验室观察到 Linux 可见性已得到显著改善,企业已开始有效地管理其 Linux 系统,但许多对这种供应链入侵做出反应的组织仍处于这一过程的初始阶段。