潜伏三年,核弹级危机一触即发,亚信安全深度分析XZ Utils后门事件

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”机制禁用恶意后门功能,此处提供两种检测方式:

  1. xz --version(不推荐)

  2. 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赋能威胁情报生产、运营全流程,在挖矿治理、网络钓鱼检测、黑客工具检测、勒索治理、勒索泄密点检测等方面处于国内领先地位。威胁情报中心首创威胁情报云端联动小时级响应机制,为客户提供“一点触达、全网免疫”的体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/797301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣25. K 个一组翻转链表

Problem: 25. K 个一组翻转链表 文章目录 题目描述思路复杂度Code 题目描述 思路 1.创建虚拟头节点dummy并将其next指针指向head,创建指针pre、end均指向dummy; 2.编写反转单链表的函数reverse 3.当end -> next 不为空时: 3.1.每次k个一组…

Bigtable [OSDI‘06] 论文阅读笔记

原论文:Bigtable: A Distributed Storage System for Structured Data (OSDI’06) 1. Introduction Bigtable 是一种用于管理结构化数据的分布式存储系统,可扩展到非常大的规模:数千台服务器上的数据量可达 PB 级别,同时保证可靠…

阿里巴巴拍立淘API新功能揭秘:图片秒搜商品,实现智能化个性化购物新体验

在数字化快速发展的今天,智能化和个性化已经成为购物体验中不可或缺的元素。为了满足消费者日益增长的购物需求,阿里巴巴中国站不断推陈出新,其中拍立淘API的新功能——图片秒搜商品,无疑为智能化个性化购物体验开创了新的篇章。 …

【机器学习入门】使用YOLO模型进行物体检测

系列文章目录 第1章 专家系统 第2章 决策树 第3章 神经元和感知机 识别手写数字——感知机 第4章 线性回归 第5章 逻辑斯蒂回归和分类 第5章 支持向量机 第6章 人工神经网络(一) 第6章 人工神经网络(二) 卷积和池化 第6章 使用pytorch进行手写数字识别 文章目录 系列文章目录前…

八股面试速成—计算机网络部分

暑期实习面试在即,这几天八股和算法轮扁我>_ 八股部分打算先找学习视屏跟着画下思维导图,然后看详细的面试知识点,最后刷题 其中导图包含的是常考的题,按照思维导图形式整理,会在复盘后更新 细节研究侧重补全&a…

基于单片机冬季供暖室温调节控制系统

**单片机设计介绍,基于单片机冬季供暖室温调节控制系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的冬季供暖室温调节控制系统是一种集温度检测、控制和显示功能于一体的智能化系统。该系统以单片机为…

C++ 指针与结构

三种存取结构成员的方式: ① 通过结构变量名; ②通过指向结构的指针和间接运算符(*); ③通过指向结构的指针和指向成员运算符(->);

【已解决】ZIP压缩文件如何设置密码?

ZIP是常用的压缩格式之一,对于重要的ZIP文件,我们还可设置密码保护,那ZIP压缩文件怎么设置密码呢?不清楚的小伙伴一起来看看吧! 给ZIP文件设置密码,我们需要用到支持ZIP格式的解压缩软件,比如7…

2024HW-->Wireshark攻击流量分析

在HW中,最离不开的,肯定是看监控了,那么就要去了解一些wireshark的基础用法以及攻击的流量!!!! 1.Wireshark的基本用法 比如人家面试官给你一段流量包,你要会用 1.分组详情 对于我…

UE4_如果快速做出毛玻璃效果_假景深

UE4_如果快速做出毛玻璃效果_假景深 2022-08-20 15:02 一个SpiralBlur-SceneTexture材质节点完成效果,启用半透明材质通过修改BlurAmount数值大小调整效果spiralBlur-SceneTexture custom节点,HLSL语言float3 CurColor 0;float2 BaseUV MaterialFloa…

pytest的时候输出一个F后面跟很多绿色的点解读

使用pytest来测试pyramid和kotti项目,在kotti项目测试的时候,输出一个F后面跟很多绿色的点,是什么意思呢? 原来在使用pytest进行测试时,输出中的“F”代表一个失败的测试(Failed),而…

隧道风速风向检测器的工作原理

TH-SQX1隧道风速风向检测器是一种专门用于隧道内部风速和风向监测的设备。它基于超声波技术进行测量,通过发射和接收超声波信号,利用信号传输时间差来精确测量风速和风向。这种检测器具有测量准确、响应速度快、稳定性好等优点,适用于隧道内部…

技术再度取得优势,人工智能兴起推动需求,美芯涨价收割市场,收割中国制造?...

独家首发 ------------- 分析机构指出一季度全球存储芯片涨价了15%左右,而近期三星半导体预测全球存储芯片的价格还将继续上涨,预计二季度至少上涨两成,显示出美系芯片在忍受了一年多的亏损之后再度联手涨价。 2022年中国存储芯片取得了重大进…

08 Python进阶:XML 解析

什么是 XML? XML(可扩展标记语言,Extensible Markup Language)是一种用于表示和传输数据的标记语言。它被设计用来以一种结构化的形式描述文档的内容,并且具有良好的跨平台和跨语言的特性。XML使用标签来定义数据的结构…

免费https详细教程

简单叙述一下https的定义和实现https的一些基本作用,然后会给到申请SSL证书的方式以及安装部署流程,最终实现网站的https访问。 随着互联网的快速发展,网络安全问题日益凸显。在互联网上传输敏感信息、进行在线交易和共享个人数据时&#xf…

Spring boot微服务分布式框架Rouyi Cloud权限认证

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏…

Go 程序的启动流程【1/2】

Go 程序的启动流程 本文将以一个简单的 HelloWorld 程序为例,探究 Go 程序的启动流程 package mainfunc main() {_ "Hello World" }入口 我们先通过 go build . 将代码编译成可执行文件,众所周知,我们在一个 shell 中执行可执行…

CLoVe:在对比视觉语言模型中编码组合语言

CLoVe:在对比视觉语言模型中编码组合语言 摘要引言相关工作CLoVe: A Framework to Increase Compositionality in Contrastive VLMsSynthetic CaptionsHard NegativesModel Patching CLoVe: Encoding Compositional Language inContrastive Vision-Language Models 摘要 近年来…

记一次安服薅洞实战

记一次为数不多但还算有点收获的一次实战(平时摸鱼来着...),大致任务是对某某市某*院进行次漏洞收集和外网资产梳理且是有授权的(其实是甲方不大清楚自己外网有多少资产),漏洞质量要求还挺高。emmm本来是打…

大米自动化生产线设备:现代粮食加工的核心力量

随着科技的不断进步和粮食加工行业的快速发展,大米自动化生产线设备在现代粮食加工中的地位愈发重要。这些设备不仅大大提高了生产效率,还保证了产品的质量和安全,成为了现代粮食加工行业不可或缺的核心力量。 一、自动化生产线设备助力效率提…