吃瓜,xz 供应链攻击事件
概况说明
事故发生于一个叫 XZ Utils 的库,它是一组用于压缩和解压缩 .xz 格式文件的工具和库,被广泛用作基础库。3 月 29 日,微软 PostgreSQL 开发人员 Andres Freund 在 开源安全邮件列表 上发帖称,他在调查 SSH 性能问题时发现了 XZ 包中的恶意代码。随后,人们发现写入恶意代码的人处心积虑,在 2021 年就着手准备这次计划。这个漏洞在 Freund 观察下发现在某些情况下允许恶意攻击者破坏「SSHD 身份认证」,最终攻击系统。
详情
- 攻击者 JiaT75 (Jia Tan) 于 2021 年注册了 GitHub 账号;
- 这家伙做的 第一个提交 并不是针对 xz,但现在看来非常可疑。
- JiaT75 在最近几个月的一次 commit 中,悄悄加入了 bad-3-corrupt_lzma2.xz 和 good-large_compressed.lzma 两个看起来人畜无害的测试用二进制数据。然而在编译脚本中,在特定条件下会从这两个文件中读取内容对编译结果进行修改,致使编译结果和公开的源代码不一致。
- 目前初步的研究显示,注入的代码会使用 glibc 的 IFUNC 去 Hook OpenSSH 的 RSA_public_decrypt 函数,致使攻击者可以通过构造特定的验证数据绕过 RSA 签名验证。(具体细节还在分析中)
- 只要是同时使用了 liblzma 和 OpenSSH 的程序就会受到影响,最直接的目标就是 sshd,使得攻击者可以构造特定请求,绕过密钥验证远程访问。
- 受影响的 xz-utils 包已经被并入 Debian testing 中进行测试,攻击者同时也在尝试并入 fedora 和 ubuntu。
被发现
After observing a few odd symptoms around liblzma (part of the xz package) on Debian sid installations over the last weeks (logins with ssh taking a lot of CPU, valgrind errors) I figured out the answer:
The upstream xz repository and the xz tarballs have been backdoored.
Freund 发现使用 ssh 登录时 CPU 占用很高,去寻找原因的时候发现了这个后门植入。
I was doing some micro-benchmarking at the time, needed to quiesce the system to reduce noise. Saw sshd processes were using a surprising amount of CPU, despite immediately failing because of wrong usernames etc. Profiled sshd, showing lots of cpu time in liblzma, with perf unable to attribute it to a symbol. Got suspicious. Recalled that I had seen an odd valgrind complaint in automated testing of postgres, a few weeks earlier, after package updates.
Really required a lot of coincidences.
当时 Freund 正在做一些微基准测试,需要使系统静止以减少噪音(就是测试性能时关闭其它消耗)。尽管由于用户名错误等原因立即失败,但 Freund 看到 sshd 进程使用了惊人数量的 CPU,分析了 sshd 时,发现 liblzma 用了大量的 cpu 时间,perf 无法定位到对应的方法,于是产生了怀疑。Freund 回想起几周前,在软件包更新后,他在 postgres 的自动化测试中看到了一个奇怪的 valgrind 报告。
如果不是因为这个 Bug,那么这个后门有很高的概率被并入主流发行版的 stable 版本,恐怕会是一件前所未有的重大安全事件。
另外从一些细节能看出来攻击者非常用心:
- 攻击者抢在 ubuntu beta freeze 的几天前才尝试让新版本并入,以期望减少在测试期间被发现的时间。
- xz-utils 项目的原维护者 Lasse Collin (Larhzu),有着定期进行 internet breaks 的习惯,而且最近正在进行,导致这些变动他并没有 review 的机会,即使到现在也没能联系上他本人。这可能也是攻击者选定 xz-utils 项目的原因之一。
吃瓜后记
后来开源社区很多人都对 Freund 表示感谢。
我觉得这像有政府背景资助的攻击行为。很难想象如果是一个普通的黑客,花费 3 年时间去做这一件事情,却没有其它收益,例如某些组织的奖金等,能有足够的动力去做这件事。
由于攻击者的名称像个华人,而且据说 commit 时间也符合东八区(由于 Github 已经封掉了仓库,我就没深入吃瓜了),现在有中国开发者发帖在切割关系。
We should take all these information provided by Jia Tan himself as fake ones. fake name, fake ip address, fake country, fake timezone, etc.