抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

突发安全事件!!!

xz-utils 的 5.6.0 和 5.6.1 版本被维护者 Jia Tan 注入了后门。在 2024 年 3 月 29 日,后门被发现并迅速引起了各大发行版的注意。

xz-utils 分为 liblzma 和 xz 两部分。xz 是一个单文件压缩软件,采用了压缩率高的 LZMA 算法,在 Linux 中被广泛使用。liblzma 是 LZMA 算法的实现,被应用于 systemd 等多个 Linux 系统和应用软件。

目前,Fedora,Arch Linux 和 openSUSE 等多个发行版向用户发出了警告,要求用户立即降级或升级到不存在后门或已经去除后门的 xz-utils 版本。

事件报道

转自知乎

作者:DBinary
链接:https://www.zhihu.com/question/650826484/answer/3448806357
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在安全圈有一种叫做APT攻击的攻击模式,专业的解释如下:APT是黑客以窃取核心资料为目的,针对客户所发动的网络攻击和侵袭行为,是一种蓄谋已久的“恶意商业间谍威胁”。

这种行为往往经过长期的经营与策划,并具备高度的隐蔽性

APT的攻击手法,在于隐匿自己,针对特定对象,长期、有计划性和组织性地窃取数据,这种发生在数字空间的偷窃资料、搜集情报的行为,就是一种“网络间谍”的行为。

简单来说就是不怕贼上门就怕贼惦记

而我们这次的主角儿,JiaT75 (Jia Tan),完美诠释了这一持久惦记的理念,充分展示了一个蓄谋已久,放长线钓大鱼的攻击理念,而且几乎就差那么一点点,就能撬开保险库的大门,并在金库里为所欲为.

在此之前,我们先来简简单单了解一下xz包,你可以将它理解成一个压缩程序包,如果你不在圈内,你可能会说,我没啥印象啊,诶,我先放一张图上来

screenshot

如果你不干这行,看不懂也无所谓,但简单来说,上到网上冲浪看网页,下到图片,音乐,小电影都多多少少和它有关,为啥?比如你看养活了80%音视频从业人员的ffmpeg,也得依赖xz的压缩包支持.但这些,都不是我们主角JiaT75的终极目标:他还可以通过Hook OpenSSH的RSA_public_decrypt函数,绕过RSA签名验证,这将会导致最著名也是应用最广泛的的远程控制服务sshd,不用输入密钥也可以访问.

打个比方就像在你家的大门旁边直接敲开了一个小门,根本不需要你家的门钥匙,就可以进到你家里去为所欲为.你可能说对我也没啥影响啊,我也不用linux,就算进来了,电脑上最值钱的就是那几个G的种子,爱要就拿去好了,但企业,银行,军事机构,医院,政务系统可不这么想,你想想如果某天你做牛做马当帕鲁好不容易赚的几十个w突然变0了,是不是挺恐怖的.

为了达成这个终极目标,我们来看看JiaT75到底干了啥:

  • 2021年:JiaT75(Jia Tan)创建了GitHub账户,并在libarchive项目中提交了一个看似无害但实际可疑的补丁。这个补丁替换了一个安全的函数变体,可能引入了另一个漏洞。
  • 2022年:Jia Tan通过邮件列表提交了一个补丁,随后一个新角色Jigar Kumar出现并开始施压要求合并这个补丁。不久之后,Jigar Kumar开始施压Lasse Collin增加XZ项目的另一位维护者。然后Jigar Kumar便人间消失了。
  • 2023年:JiaT75在XZ项目中的地位逐渐提升,成为了第二活跃的贡献者。同年,JiaT75合并了第一个提交,这个时候我们主角已经获得了足够的信任。此外,Google的oss-fuzz项目的主要联系邮箱也被更新为Jia的邮箱。
  • 终于JiaT75在2024年最近几个月的commit中露出了鸡脚

他提交了bad-3-corrupt_lzma2.xz和good-large_compressed.lzma两个看上去人畜无害的测试文件实际上存在恶意代码的文件,然后他精细构造了编译脚本,以在特定的情况下释放恶意代码,改变编译结果,使得使用其编译出的程序存在后门.

直到一个非常非常偶然的情况,一个测试人员察觉到些许不对劲

screenshot

大意如是一个做测试的老哥因为服务器的风扇很吵,然后去检查发现sshd服务占用了大量的CPU资源(CPU发热多嘛),然后他发现在liblzma(就是xz的部分)占用了大量的CPU,然后他就想去查查到底哪部分代码跑的那么慢,结果调试时发现,这部分居然没有对应符号表。

啥是符号表呢,简单来说源代码到编译成程序时,会将源码和二进制程序做个对应,当程序出问题时,就能方便你查找到对应源码,因为这个恶意后门代码本身就是以二进制程序的方式插入进来的,没有经过这个源码到程序的编译过程,自然就没有符号表咯,那这个插入的部分,到底在隐藏什么?

测试老哥越想越不对劲,于是就有了上面这个邮件,可以说要不是这老哥的敬业水平和技术水平之高如此可见一斑,换其它任何一个草台班子,这个鸡脚都不会漏出来。

除了以上这个巧合,我们主角对这个攻击可谓是非常用心,根据@Yachen Liu 的爆料内容

  1. 攻击者抢在ubuntu beta freeze的几天前才尝试让新版本并入,以期望减少在测试期间被发现的时间。
  2. xz-utils项目的原维护者Lasse Collin (L arhzu),有着定期进行internetbreaks的习惯,而且最近正在进行,导致这些变动他并没有review的机会,即使到现在也没能联系上他本人。这可能也是攻击者选定xz-utils项目的原因之一。

可以说这次供应链投毒案,持续时间之久,之巧妙,之隐蔽实在是叹为观止,发现的是非常之巧合了,我甚至怀疑其背后应该是一个团队或组织甚至**的安全或间谍部门策划的。而受影响的xz-utils包已经被并入Debian testing中进行测试,可以说,jiat45同学距离撬开保险裤仅仅一步之遥。东窗事发不知道该说是运气不好还是运气太好。有句话叫当你在厨房里看到一只蟑螂时,背后可能已经有了一个蟑螂窝了,就像外卖你吃的很香,但你知道怎么做的之后可能就吃不下去了。而安全一直以来是一个系统工程,其横跨软件工程,社会工程,甚至意识型太,从来也不是靠换门编程语言,换个系统框架,买买防火墙就能解决的。

我们享受了包管理的便利时,也得承担其风险,没有那么多我既要我又要的选项。

检查与解决

很可怜的是,截至本文写作时,我的电脑也运行着这一有后门的版本:

screenshot

一周好不容易滚动更新这么一次就中招了。

好在,本次攻击archlinux免受其害(据archlinux官网),但是,我建议你还是尽早更新。目前国内源大部分还没来得及和上游同步,可以明天再试。

更新:目前基本上各发行版都推送了修复版本,版本号5.6.1-2

debian/ubuntu 用户

你们是本次攻击最主要的受害人群,因为这两个系统跑在服务器上的很多,因此成为黑客的靶子也很正常我说错了,这个后门存在于比较新的版本中,发现的及时,没有进入发行版的稳定版仓库,多数人应该接触不到,你要做的是:

  1. 运行xz --version
  2. 若为5.6.05.6.1 ,请用apt指定安装较旧的版本: sudo apt install xz-utils=5.4.1

Docker用户

你们才是最主要的受灾人群,因为不少docker选择内置一个archlinux或alpinelinux,而这两个系统都是滚动发行版本,最有可能接触到问题代码。

alpinelinux尚未作出回应,archlinux已经发了新闻:

运行如下命令以检查有无使用archlinux:

1
docker image history archlinux/archlinux

如果有,运行如下命令升级:

1
docker image pull archlinux/archlinux

建议在2024-02-24 和 2024-03-28 之间创建的容器内部都要进行检查

其他滚动发行版用户

出了这种事,你要么降级,要么升级,事情比较突然,不少发行版还没有反应过来,还是暂时降级吧。

不过别担心,因为我知道你大概不会在服务器上用滚动发行版本的,而本地的机子没有公网ip,即使存在漏洞,人家也连不进来。

反思

本次攻击,令人心有余悸,虽然本次攻击没有成功,但确实是一起令人震惊的供应链攻击。开源很好,但也很脆弱。世界上有不少好心人,可也有不少笑面虎。如何防范这类攻击,是一个困难的社会工程学问题,因为限于时间和水平因素,我们往往会选择信任一部分人,开源社区需要信任,但是近年来社区内部的欺骗屡见不鲜(core-js,还有crDroid群组的恶意刷机包),这些,好比是污染了水源,开源的口碑,是社区建立起来的,但是偏偏有几粒老鼠屎混了进来。眼下我们能做的,只能是开发者不松懈,用户多留心异常状况,与开发者保持畅通关系。另外企业也可以参与进来,像github之前要求所有开发者都要用多因素验证,虽然一开始觉得有点烦,但后来也就习惯了。谷歌这类互联网巨头更应牵头采取行动,共同维护开源软件的健康。

另外,github目前已经封禁了相关作者与仓库,响应还算及时

有点担心,如果这个账号真的这样谋划了两三年,那么现在看到的身份会不会也是假的,

再次感慨,不知道,这样的攻击,是否还在进行着……

开源软件代码人人可见,尚有人敢这么作,那么商业软件内藏了多少后门?尚未可知。

今天有人提到 Lasse Collin 对于 xz 项目早就疲惫不堪,Jia Tan 是极少数愿意真正贡献代码的“开发者”,这都是这场悲剧不可或缺的背景条件。

在无人关心的角落,Florian Westphal 最近辞去了内核 netfilter co-maintainer,所以现在 nf 只剩 Pablo Neira Ayuso 一人维护。这可是无数人每天使用的 netfilter。

在无人关心的角落,调试最常用的工具之一 strace 依然只由一个捷克人 Dmitry V. Levin 默默维护。

在无人关心的角落,tcpdump/libpcap 在由 the-tcpdump-group 持续更新,其中一位 Denis Ovsienko 的自我介绍是 sometimes I work jobs for living, sometimes I contribute pro bono to free and open source software projects, often I do both,给人一种很孤独的感觉。

在无人关心的角落,bash group 只有三位 active members,其中一位 Bob Proulx 有个古典博客,里面有记录他和妻子的平静生活。

我以前赞美人月神话,但我现在更关心默默无闻的开发者们,就像 vim 作者 Bram Moolenaar 一生没有和任何人建立亲密关系,我只想问,你这一生过得开心吗?

你们这些伟大的开发者们过得开心吗?

开源,在这个风起云涌的后互联网时代,到底能走多远?

评论

留下神评妙论