本文主要是介绍XZ-Utils后门事件过程及启示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Part.01
背景
XZ-Utils(曾经叫做LZMA Utils)是一款开源的无损压缩命令行工具,是用C语言编写的跨平台工具,可以用于类Unix系统和Windows系统。在多数情况下,xz的压缩率要好过gzip和bzip2,解压速度也快过bzip2,尽管压缩速度要慢于gzip。这款工具目前是大多数Linux发行版本的默认工具之一。
XZ-Utils包含两个主要的组件,一个是用于压缩和解压的命令行工具xz(类似gzip),一个是API软件库liblzma(类似zlib)。使用方法也和gzip类似,只能针对单个文件进行压缩和解压,比如:
xz archive.tar
unxz archive.tar.xz
2024年3月29日,一名微软的PostgresSQL工程师Andres Freund在X上发出警告,称在做postgres的基准测试时发现sshd进程的CPU占用率异常的高,而其中的CPU时间大多都分配给了liblzma。之后,Freund向Openwall项目的开源安全邮件列表报告了他的发现,并引起多家软件厂商的注意,最终被确认是XZ的5.6.0和5.6.1版本中存在SSH后门。
这个SSH后门允许远程攻击者绕过系统的身份验证获得系统管理员的同等级别权限,因此,该后门分配的CVE编号CVE-2024-3094的CVSS评分达到了10分。
但是该后门也有一些利用条件,比如:受影响的服务器需要暴露SSH服务到公网,SSH服务需要以Systemd的守护进程运行。
Part.02
事件过程
2021年
一个叫Jia Tan的用户在GitHub创建自己的账户JiaT75。
11月16日,Jia Tan在libarchive项目中提交了自己的第一个PR(Pull Request),标题是Added error text to warning when untaring with bsdtar.(使用bsdtar解包时增加错误文本警告)
但实际PR的内容却比该标题声明的多,比如将safe_fprint替换为不安全的变量。而该项目的维护者直到XZ后门事件曝光后才迟迟拒绝了这次的PR。
2022年
3月10日,Jia Tan首次出现在了XZ项目的邮件列表中,称自己发现了一个bug,并在自己fork的项目中做了相关的测试代码,即没有提交PR,而是通过邮件列表积极参与项目沟通。
4月19日,Jia Tan通过邮件列表补充提交了一个补丁,这个补丁的提交得到另一个邮件列表成员Jigar Kumar(非项目维护人员)在精神上的支持,因为XZ项目开发和维护进度太慢了,而Jia Tan表现的相当积极。
5月19日,邮件列表成员Dennis Ens(非项目维护人员)在邮件列表中吐槽项目开发进度太慢,这封邮件得到Jigar Kumar的附和,希望向原维护者Lasse Collin施压增加一名项目维护者。
这次施压有了一定的效果,原维护者Lasse Collin在回复中称联合维护者者需要有技术、时间和足够的耐心投入XZ项目,而他在早前的邮件列表历史中发现Jia Tan或许可以担当重任。
2023年
1月7日,Jia Tan终于迎来了他提交的PR的第一次合并,这意味着他已经得到了XZ项目的信任。
3月20日,在Google的oss-fuzz项目(该项目是为开源项目做模糊测试,因Heartbleed漏洞的出现而于2016年发起)中,Jia Tan将XZ项目的主要联系人更换为了自己的邮箱。
6月27日,Jia Tan提交了由Hanz Jansen编写的漏洞利用测试框架。
2024年
2月11日,Jia Tan在oss-fuzz项目中将项目主页地址做了修改,说明Jia Tan已经彻底接管了XZ项目。
2月23日和3月9日,Jia Tan分别提交了Tests:Add a few test files和Tests:Update two test files两个commit,这两个commit也是XZ项目后门出现的两次提交。
3月25日,Hans Jansen、misoeater91、krygorin4545等用户开始推动在Debian等Linux发行版中加入后门版本XZ-Utils,Jia Tan也试图推动在Ubuntu的beta版本冻结前加入后门版本XZ-Utils,但没有成功。
3月29日,Andres Freund向开源项目安全邮件列表(https://www.openwall.com/lists/oss-security/2024/03/29/4)提醒XZ-Utils后门的发现。
Part.03
事件启示
如果不是微软的工程师Andres Freund这次意外的发现,XZ-Utils后门可能会在未来的很长一段事件里造成巨大的危害和影响。
由此事件可以看出,针对供应链的安全攻击已经衍生到了社区舆论和心理战范畴,虽然事件的主要角色是Jia Tan,但在事件一步一步演进的过程中可以看到疑似Jia Tan所在团队的其他成员的身影,包括Hans Jansen、misoeater91、krygorin4545等。
以往单一的通过PR植入后门或者通过制造恶意软件的第三方库或软件包,在XZ后门事件中已经变为针对开源项目维护者和社区的攻击。
对于开源项目而言,Jia Tan让各个项目的维护者更加清醒的认识到项目参与者对于项目安全的影响,以及对于每一位贡献者和贡献代码进行慎重审核的必要性。正如Linus定律所说:
With enough eyes,all bugs are shallow.(足够多的关注能让所有问题浮现)
Linus定律
好在Andres Freund发出警告的当天,XZ项目原维护者Lasse Collin立即更新了XZ项目补丁,各个软件供应商(包括oss-fuzz项目)分别做出了响应。
此外,后门版本的XZ-Utils也只影响到了各个Linux发行版本的unstable版本,而未影响stable版本,这也说明在生产环境中使用稳定版本的重要性。
类似事件的还包括Heartbleed漏洞、Log4j漏洞,它们的共性都在于项目维护者的精力不足,维护者需要如XZ原维护者Lasse Collin在邮件中所说:
Someone would need to have the skills, time, and enough long-term interest specifically for this.(一个有技术、有时间和有足够兴趣致力于此的人)
Lasse Collin
如果开源项目的维护仅局限在少数人的兴趣,那么基于此的各个基础系统会长期处于下图的状态。
作者:repoog
2024年4月18日
洞源实验室
这篇关于XZ-Utils后门事件过程及启示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!