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

相关文章

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本