XZ-Utils后门事件过程及启示

2024-04-19 01:28

本文主要是介绍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后门事件过程及启示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/916292

相关文章

Linux部署jar包过程

《Linux部署jar包过程》文章介绍了在Linux系统上部署Java(jar)包时需要注意的几个关键点,包括统一JDK版本、添加打包插件、修改数据库密码以及正确执行jar包的方法... 目录linux部署jar包1.统一jdk版本2.打包插件依赖3.修改密码4.执行jar包总结Linux部署jar包部署

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

springboot整合gateway的详细过程

《springboot整合gateway的详细过程》本文介绍了如何配置和使用SpringCloudGateway构建一个API网关,通过实例代码介绍了springboot整合gateway的过程,需要... 目录1. 添加依赖2. 配置网关路由3. 启用Eureka客户端(可选)4. 创建主应用类5. 自定

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to

SpringBoot集成SOL链的详细过程

《SpringBoot集成SOL链的详细过程》Solanaj是一个用于与Solana区块链交互的Java库,它为Java开发者提供了一套功能丰富的API,使得在Java环境中可以轻松构建与Solana... 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2 Public

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SpringBoot整合kaptcha验证码过程(复制粘贴即可用)

《SpringBoot整合kaptcha验证码过程(复制粘贴即可用)》本文介绍了如何在SpringBoot项目中整合Kaptcha验证码实现,通过配置和编写相应的Controller、工具类以及前端页... 目录SpringBoot整合kaptcha验证码程序目录参考有两种方式在springboot中使用k

SpringBoot整合InfluxDB的详细过程

《SpringBoot整合InfluxDB的详细过程》InfluxDB是一个开源的时间序列数据库,由Go语言编写,适用于存储和查询按时间顺序产生的数据,它具有高效的数据存储和查询机制,支持高并发写入和... 目录一、简单介绍InfluxDB是什么?1、主要特点2、应用场景二、使用步骤1、集成原生的Influ

SpringBoot实现websocket服务端及客户端的详细过程

《SpringBoot实现websocket服务端及客户端的详细过程》文章介绍了WebSocket通信过程、服务端和客户端的实现,以及可能遇到的问题及解决方案,感兴趣的朋友一起看看吧... 目录一、WebSocket通信过程二、服务端实现1.pom文件添加依赖2.启用Springboot对WebSocket