Xz

改善大量重复内容文件的 tarball 压缩效率

有时,我们会希望分发包含大量重复文件的 tarball。绝大多数情况下,tarball 都会进行压缩, 进行适当的预处理有助于显著地提高压缩效率。

数据压缩的基本原理是利用数据中的冗余,通过更短的编码或规则表示重复或可预测的内容, 从而减少存储或传输所需的空间。简单的例子中,比如连续重复的字符「AAAAAA」可以表达为「6A」, 然而,当重复数据分布在较长范围内时,压缩算法很难直接发现和利用这些远距离的关联, 因为需要额外记录位置或匹配信息,这种匹配开销很大,做的话会严重影响压缩速度并且可能收益不高。 对于文本文件来说,其中的许多内容会高频率地出现,而如果一个 tarball 中包括数个内容一样的大型二进制文件,压缩算法很难有效地检测并对他们进行正确的处理。

阅读全文…( 本文约 658 字,阅读大致需要 2 分钟 )

Postmortem: 关于 xzutil 后门事件的一些事后复盘

说明:这是关于北美时间2024年3月28日披露的 xzutil 后门事件的一些事后复盘。 关于漏洞本身的一些更为详细的背景和细节以及其发现过程, 在 Bryan CantrillAndres Freund 的这次 访谈 中有相当详尽的说明。由于漏洞并非我们发现,在此便不再赘述漏洞本身的细节。

值得庆幸的是,我们有足够的理由认为这次事件中 FreeBSD 并没有受到影响,但这里有相当大的运气的成分, 整体而言,我们的流程并非无懈可击,因此有必要进行一些总结。

背景

自称叫「Jia Tan」的开发者花费了两年的时间逐渐取得了上游社区的信任,并最终成为了 xzutils 的维护者。

攻击者在 2024 年 2 月 23 日在源代码中的一处二进制文件中放置了后门,并随后发布了 xz 5.6.0。 攻击者发布的源代码包中,以巧妙地方式增加了激活后门的脚本。值得注意的是,这些脚本从未进入过 xzutils 的 Git 代码库,因此躲过了包括 FreeBSD 在内的开发者进行的日常代码审计(值得说明的是,由于这些脚本通常是自动生成的, 体积庞大且随 autoconf 等工具的版本变化很大,因此其内容审计难度较大。比较稳妥的做法是从人类易读的 autoconf 文件中重新生成这些脚本)。

由于后门代码最初版本的 bug,攻击者在接下来的两周时间进一步对后门进行了修补以增加其发现的难度。

主要的 Linux 发行版,包括 Debian 和 RedHat,均在其开发版本中跟进了这些变动。 由于 systemd 的插件设计,这些变动导致后门被插入到了这些 Linux 发行版中的 sshd 服务中。 由于后门引入了一系列计算密集的代码,人们逐渐注意到了一些奇怪的性能问题。

最终,PostgreSQL 开发者,就职于微软公司的 Andres Freund 在经过了一段时间的性能追踪之后, 正式确认了 xzutils 后门的存在,并立即通知了主流发行版的安全团队。

我本人也在第一时间收到了通知。当时是太平洋时间的中午,我没有携带解密所需的密钥, 但由于这一讨论相当热烈,加上邮件标题并不加密,因此我大概知道了发生了什么事。

阅读全文…( 本文约 1525 字,阅读大致需要 4 分钟 )