毫无疑问 XZ实用程序中检测到的后门案例是Linux历史上载入史册的案例之一 而且这一切都不是白费的,都是贾坦所做的一切 它是应用社会工程的最佳例子之一, 因为所开展的工作无疑值得钦佩所投入的时间,因为我们谈论的不是几周或几个月,至少是两年。
这个案例引起了很多人的关注 逆向工程分析已经开始, 根据他们的初步结果 揭示 liblzma 中嵌入后门的存在 作为渗透 XZ 包的活动的一部分。该后门专门设计用于影响具有 Linux 内核和 Glibc C 库的 x86_64 系统,其中对 sshd 应用了附加补丁以将其与 libsystemd 链接。
研究人员提到 最初认为该后门可以绕过sshd身份验证 并通过SSH访问系统,但进一步分析发现该后门 允许在系统上执行任意代码,而不会在 sshd 日志中留下痕迹。
RSA_public_decrypt函数被后门拦截,使用固定密钥Ed448验证主机的签名。如果验证成功,则在 sshd 重置权限之前使用 system() 函数执行外部主机传输的代码。要执行的代码数据是从传递给 RSA_public_decrypt 函数的“N”参数中提取的,并使用预定义密钥 ChaCha20 进行验证和解密。
激活后门 在 sshd 中, 使用标准的主机密钥交换机制,仅响应攻击者准备的密钥 对应预定义的固定密钥Ed448。如果公钥签名验证失败或者未确认执行数据的完整性,后门会将控制权返回给标准 SSH 功能。
攻击者的私钥仍然未知,因此无法实现验证码以从外部源激活后门,也无法开发检测网络上受损主机的扫描器。然而,研究人员开发了一个脚本,展示了如何在 SSH 客户端传输的 OpenSSH 证书中替换公钥,该脚本由后门拦截的 RSA_public_decrypt 函数处理
此外, 研究人员发现存在一种消除后门的机制 (killswitch
)在本地系统上通过在启动 sshd 之前设置环境变量来实现。还详细分析了用于混淆提取带有后门的目标文件并在库中替换它的过程的 shell 构建 liblzma.
在编译XZ包的过程中,执行了一些代码 来自脚本 «build-to-host.m4
» 操作了一个测试文件并且 对人物进行了一定的改动 并将其转换为完整的文件,从中提取 shell 脚本。生成的 shell 脚本能够逐渐从内容中提取另一个 shell 脚本,使用命令跳过某些序列并替换字符。
这个过程的结果是,创建了一个相当复杂和广泛的shell脚本,它直接从good-large_compressed.lzma文件中提取带有后门的文件,对其进行解密,然后将其插入liblzma中。该脚本还包括插件机制的实现,该机制允许稍后通过使用签名查找放置新的测试文件来交付其他可执行组件,而无需更改 good-large_compressed.lzma 和 bad-3-corrupt_lzma2.xz。该代码还包含一个基于 RC4 算法的解密器,以 AWK 语言实现。
另一方面,值得一提的是,根据该事件, 开发了一套名为 xzbot 的工具, 包括:
- 一个蜜罐,用于创建虚构的服务器,假装容易检测攻击者的连接尝试。
- 一个补丁,用于将 liblzma.so 内后门上的公钥替换为您自己的公钥(以使用相应的私钥连接到后门)。
- 使用相应的私钥在修改后的后门上启动代码执行的演示。
如果您有兴趣了解 更多相关信息,您可以在中查看详细信息 以下链接。