xz back door原理
在xz压缩命令从5.6.0版本开始,里面被发现了一些恶意代码。这些恶意代码在源码层面进行了一系列的混淆 ,导致难以辨认。在liblzma的构建过程中从源码中包含的 测试文件进行有条件的编译,用于修改liblzma库中特定的函数,这样就会产生一个被修改了的liblzma库文件,当所有使用 liblzma库 的软件与修改了的liblzma库进行数据交互的时候,用户数据就会被遭到拦截和窃取。
大致的流程图如下:
避免
实际上这个后门的运行极为严苛,可以多方面避免它。xz的5.6.0和5.6.1库恶意代码只有toolbar下载包中才有,所以尽量避免用toolbar下载即可。Git目前的发行版并没有M4这个build恶意代码的宏,所以Git第二阶段的项目不合并到构建中,也会避开这个恶意代码。另外xz后门还影响了OpenSSH守护进程。原理是OpenSSH与systemd通 信, 而systemd 链接到 liblzma,这是通过一个中间手段产生的恶意代码。
受影响的系统
因为后门是在xz Utils的恶意版本被添加到Linux的生产版本之前发现的。
目前的 情况表明,只有Redhat生态系统中的Fedora41和Fedora Rawhide 存在这些包。Red Hat Enterprise Linux不受任何影响。Debian测试 表 明,最近发布的测试版至少使用了其中一个有后门的版本。 Arch Linux 的稳定版本也会受到影响。 但是,该发行版未用于生产系统
恶意更改是由 JiaT75 提交的,JiaT75 是 xz Utils 的两个主要开发人员之一,多年来一直为该项目做出贡献。
xz压缩
此次xz压缩软件爆出后门,对于xz压缩和二进制补丁属于比较熟悉的范畴。比如linux内核压缩包和qemu用的就是xz压 缩,二进制补丁用于安全方面大量案例。本篇尝试综合网上的各种分析,简要概述下此次后门的发现过程。
大部分人可能听过zip,rar,7z等压缩,对于xz压缩可能不太熟悉。但其实这个压缩是通过LZMA2算法,比 gzip,bzip2 压缩算法体积更小,性能更快。广泛应用于各种开源软件中,比如上面提到的linux内核压缩包等,它一般是用于二次压缩。比如tar压缩包再次进行压缩,即可形成xz格式。一般的用xz -d解压成tar。
起因
此
次后门的
起因发现其实非常简单,一位测试人员(Andres Freund)发现登陆SSH CPU占用率比较高。
他尝试着分析是哪个程序导致这种情况,一般的来说。
通过源码Debug定位是最快速的方式,结果这个测试人员通过定位的过程中,发现一些二进制运行的数据不能对应上源码的调试符号。
这种情况其实也很好理解,一般的对于恶意注入代码的程序来说,二进制补丁是最直观和隐藏较深的操作。
测试人员不明白这段二进制代码是干嘛用的,可能是责任心作祟,也可能是对于代码的执着。然后这位测试人员把这个事情给暴了出来,经过验证,提取分析。这后门最终定位在了xz-utils压缩软件上。通过分析,xz最近提的几个pr以及issuse,commit 等轨迹,判断和还原出了真正的植入这个后门的幕后黑手。过程就比较复杂。简单点来说,就是攻击者注册两到三个账号,用不同身份切换。一个提交pr,一个取得xz-units信任,可能还有一个用于编译脚本里面的特殊模块编译。简单来说,就是当触发到某个编译条件, 当编译 链 接到xz-utils的时候。 上面说的那段二进制代码就会被植入到 libl zma5里面去 。让SSH不需要有密码即可进入,性质极为恶劣。
可以看见攻击者的良苦用心,但它后门造成的CPU超高,最终也导致了他的精心攻击被一朝击破。
目前为止,据悉Debian已经把xz并入了testing,xz-utils版本号是5.6.0和5.6.1,需要注意这两个版本。漏洞编号CVE-2024-3094,CVSS v3分数是10分,什么级别的呢?也即是满分木马。
题外话
题外话,据悉此次事情的始作俑者的时区是UTC+8 。这个时区在蒙古,中国,新加坡这一带。
参考如下:
https://access.redhat.com/security/cve/CVE-2024-3094.
https://arstechnica.com/security/2024/03/backdoor-found-in-widely-used-linux-utility-breaks-encrypted-ssh-connections/