Postmortem: 关于 xzutil 后门事件的一些事后复盘
说明:这是关于北美时间2024年3月28日披露的 xzutil 后门事件的一些事后复盘。 关于漏洞本身的一些更为详细的背景和细节以及其发现过程, 在 Bryan Cantrill 和 Andres 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 后门的存在,并立即通知了主流发行版的安全团队。
我本人也在第一时间收到了通知。当时是太平洋时间的中午,我没有携带解密所需的密钥, 但由于这一讨论相当热烈,加上邮件标题并不加密,因此我大概知道了发生了什么事。
阅读全文…再见, sirius (2010-2025)
delphij.net 搬到美国之后,一直是在大河的 FMT-1 的 sirius.delphij.net 上运行的。 这台机器是 iXsystems 组装,于2010年5月20日上线的,采用 Intel Xeon L5630 处理器, Supermicro X8STi 主板,当时配了24GB内存,4块1.5TB硬盘,后将硬盘替换成了3块2TB+ 1个SSD。
阅读全文…购买二手硬件的一些人生经验
以往我是不直接在 eBay 上购买二手硬件(这不包括美国比较常见的「翻新refurbished」硬件, 这类卖家往往是比较专业的回收处理机构)的,原因是购买此类硬件多少有点像拆盲盒: 二手硬件的质量往往缺乏统一且一致的标准,并且通常只提供较短的退货窗口。
不过 上回书 说到我收了一台二手的 Dell R640 服务器,既然选择了消费降级索性一降到底试试看买二手内存和存储。
阅读全文…Debrand Dell Vxrail E560
最近从张师傅那里获得了一台来自政府换新时拍卖的二手 Dell VxRail E560, 这是 Dell/EMC 「超融合」概念的机器,实际硬件和 Dell PowerEdge R640 是一样的。
由于我并不需要使用 VxRail E560 系列增加的一系列 VMWare 功能, 将其变回 PowerEdge R640 可以让管理员获得更多的对于固件的控制。 这里记录一下过程。
阅读全文…C++ 中的 main 定义
新的 C++ 标准中 不允许给 main 指定 linkage-specification 了。
当然,考虑到原本 main() 也是 C 运行环境在开始运行程序的时候调用的, 而 C 运行环境自然也预期 C linkage,即不按照 C++ 的习惯对符号根据参数增加名字前缀, 因此大部分编译器在遇到 C++ 程序定义全局 main() 的时候也会按照习惯采取 C linkage 方式去翻译。这一规则首先被 GCC 采纳,随后 LLVM 也跟进了。
阅读全文…【公告】关于 woodpecker.org.cn 网站已经停止维护的说明
转载自 khsing 今天在 python-cn 发表的公告。
我本人早年也曾经参与过啄木鸟社区的维护,在此特别声明,我与现在的这个 woodpecker.org.cn 没有任何关系。
除此之外,本人之前在啄木鸟社区发表的内容采用的是 CC BY-NC-SA 1.0 许可,从未授权商业使用, 本人保留在法律许可范围内向目前域名的所有者,以及在美国境内为其提供网络服务的供应商进行追索的权力。
阅读全文…新的 arc4random_uniform 实现
本月初, Robert Clausecker 替换了 FreeBSD 的 arc4random_uniform(3)。
arc4random_uniform(3) 是 arc4random(3) 之上封装的一个生成一个较小范围伪随机数的函数。
arc4random(3) 采用密码学安全的伪随机数生成一个在 32-bit 范围,即 内均匀分布的伪随机整数,
此处的随机分布是依靠对称加密算法(目前采用的是 Chacha20)中用于实现加密的伪随机置换(Pseudorandom
Permutation)来保证的。
数据的长期保存
我们每个人每天都在产生各种数据。包括个人笔记、照片等等在内的许多数据, 许多可能不太容易再次获得或制造。今年夏天,我整理了一些自己二十年前刻录的光盘, 这里记录一下长期保存数据的一些原则、需要避免的陷阱,以及确保数据在数十年后仍然可用的最佳实践。
阅读全文…统计
统计,是让不同的专家能够从同样的数据中总结出截然相反结论的不二法门。
在这里也发一遍免得哪天 X上发表的原版 没了。
参与评论个人票务系统
今年二月的时候,我发过一个段子:
「你是什么时候意识到自己可能需要休假了?」
「有一天我临睡前在家里的票务系统里给自己开了票,要求在家里的DNS域上添加 staging,preprod 等几个子域来符合最佳实践,然后在第二天醒来以后看到系统发出的今日待办事宜邮件的时候。」
段子归段子,我认为搭起票务系统是我在疫情期间干的最改善生活品质的一件事了。这里分享一下我的一些个人经验。
为什么你有可能会需要一套票务系统?或者说,票务系统能帮我干什么?
事务追踪系统,或者,由于其中的事务往往也被称作「票」(ticket),我个人也常戏称为票务系统, 在成规模的团队软件开发中是经常使用的一种工具。票务系统可以记录开发期间的各类任务, 将任务分解成多个可操作的子任务、为这些任务排列优先级,并将其分配给具体的人。 对任何工作而言,将工作拆解到较为具体的、可以由一个人完成,并且具有优先级和依赖关系属性的子任务, 都有助于帮助人们迅速、高效地完成工作。
在工作中我个人也很喜欢使用事务追踪系统来跟踪一些开发以外的事务性活动,并且将事务追踪系统作为一种类似笔记的工具使用, 在「票」中关联一系列相关文档,这有助于在事后总结经验或将重复性的事务性工作整理成更容易使用的形式(例如作弊条文档, 或是将常用的重复部分变成程序等等)。
阅读全文…