delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

21 Jun 2025

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 后门的存在,并立即通知了主流发行版的安全团队。

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

Read more...
21 May 2025

再见, 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。

在今年折腾新机器的时候,这台机器上的三块硬盘突然无预警暴毙了一块。我于是加快了迁移的速度。 5月20日在这台机器上线15周年的时候,所有的服务都已经迁移到了新的机器上, 于是我去大河最后一次关机,把它拉了回来。

过去十五年中,这台机器除了2015年有一块硬盘坏过一次(当时采用的是整体替换)之外基本上没有出过其他问题。 我去机房的间隔基本上是以年为单位的。

再见。

Read more...
25 Apr 2025

购买二手硬件的一些人生经验

以往我是不直接在 eBay 上购买二手硬件(这不包括美国比较常见的「翻新refurbished」硬件, 这类卖家往往是比较专业的回收处理机构)的,原因是购买此类硬件多少有点像拆盲盒: 二手硬件的质量往往缺乏统一且一致的标准,并且通常只提供较短的退货窗口。

不过 上回书 说到我收了一台二手的 Dell R740 服务器,既然选择了消费降级索性一降到底试试看买二手内存和存储。

Read more...
26 Mar 2025

Debrand Dell Vxrail E560

最近从张师傅那里获得了一台来自政府换新时拍卖的二手 Dell VxRail E560, 这是 Dell/EMC 「超融合」概念的机器,实际硬件和 Dell PowerEdge R640 是一样的。

由于我并不需要使用 VxRail E560 系列增加的一系列 VMWare 功能, 将其变回 PowerEdge R640 可以让管理员获得更多的对于固件的控制。 这里记录一下过程。

首先是在 Dell 下载 4XHVW,找到其中的 Flash BIOS executable (目前版本是 4XHVW_14G_DBE_CustBSU_3_00.exe )。

这个 exe 文件是一个 7zip 的自解压文件。 FreeBSD 里可以用 7z 解压得到一个 4XHVW_14G_DBE_CustBSU_3_00.pm 的文件。在 iDRAC 中把它作为系统更新安装上去。之后,对 iDRAC 做回厂复位,然后重新对机器做 power cycle 即可。

全部操作可以在远程完成。

Read more...
12 Feb 2025

C++ 中的 main 定义

新的 C++ 标准中 不允许给 main 指定 linkage-specification 了。

当然,考虑到原本 main() 也是 C 运行环境在开始运行程序的时候调用的, 而 C 运行环境自然也预期 C linkage,即不按照 C++ 的习惯对符号根据参数增加名字前缀, 因此大部分编译器在遇到 C++ 程序定义全局 main() 的时候也会按照习惯采取 C linkage 方式去翻译。这一规则首先被 GCC 采纳,随后 LLVM 也跟进了。

Read more...
13 Jan 2025

【公告】关于 woodpecker.org.cn 网站已经停止维护的说明

转载自 khsing 今天在 python-cn 发表的公告。 我本人早年也曾经参与过啄木鸟社区的维护,在此特别声明,我与现在的这个 woodpecker.org.cn 没有任何关系。 除此之外,本人之前在啄木鸟社区发表的内容采用的是 CC BY-NC-SA 1.0 许可,从未授权商业使用, 本人保留在法律许可范围内向目前域名的所有者,以及在美国境内为其提供网络服务的供应商进行追索的权力。


大家好,

因多种原因,原啄木鸟社区网站 (woodpecker.org.cn) 已于2021年5月停止运营。然而,我们近期注意到有人重新注册了该域名,并使用网站原有的内容继续冒充啄木鸟社区名义继续运行,及使用 Google Ads 牟利。

我们此前已经尝试过多次试图联系此人均未得到回应,在此特别提醒大家:

  1. 原啄木鸟社区网站早已经停止运营,原管理团队、豆瓣与目前的域名持有人无任何关联。

  2. 鉴于目前的域名持有人对我们的联系尝试做出任何回应,我们无法排除该网站以冒充原网站的手法采用钓鱼的方式,从而试图获取此前用户登录凭证的可能性。因此,请大家不要再登录该网站。如果此前登录过网站,并且密码在其他网站使用过,请假定密码已经失窃,并立即修改在其他地方使用的密码。

  3. 目前的域名持有人使用了无效的网站原备案信息,这有可能涉嫌违反中华人民共和国有关法律法规。

  4. 原啄木鸟社区团队强烈谴责其冒充行为以及通过冒充牟利,并保留依法追究其法律责任的权力。

感谢各位蟒友多年来的支持与厚爱


Read more...
30 Dec 2024

新的 arc4random_uniform 实现

本月初, Robert Clausecker 替换了 FreeBSD 的 arc4random_uniform(3)

arc4random_uniform(3)arc4random(3) 之上封装的一个生成一个较小范围伪随机数的函数。 arc4random(3) 采用密码学安全的伪随机数生成一个在 32-bit 范围,即 \([0,\ 2^{32}-1] \) 内均匀分布的伪随机整数, 此处的随机分布是依靠对称加密算法(目前采用的是 Chacha20)中用于实现加密的伪随机置换(Pseudorandom Permutation)来保证的。

Read more...
30 Nov 2024

数据的长期保存

我们每个人每天都在产生各种数据。包括个人笔记、照片等等在内的许多数据, 许多可能不太容易再次获得或制造。今年夏天,我整理了一些自己二十年前刻录的光盘, 这里记录一下长期保存数据的一些原则、需要避免的陷阱,以及确保数据在数十年后仍然可用的最佳实践。

Read more...
30 Oct 2024

统计

统计,是让不同的专家能够从同样的数据中总结出截然相反结论的不二法门。

在这里也发一遍免得哪天 X上发表的原版 没了。

Read more...
24 Sep 2024

个人票务系统

今年二月的时候,我发过一个段子

「你是什么时候意识到自己可能需要休假了?」

「有一天我临睡前在家里的票务系统里给自己开了票,要求在家里的DNS域上添加 staging,preprod 等几个子域来符合最佳实践,然后在第二天醒来以后看到系统发出的今日待办事宜邮件的时候。」

段子归段子,我认为搭起票务系统是我在疫情期间干的最改善生活品质的一件事了。这里分享一下我的一些个人经验。

为什么你有可能会需要一套票务系统?或者说,票务系统能帮我干什么?

事务追踪系统,或者,由于其中的事务往往也被称作「票」(ticket),我个人也常戏称为票务系统, 在成规模的团队软件开发中是经常使用的一种工具。票务系统可以记录开发期间的各类任务, 将任务分解成多个可操作的子任务、为这些任务排列优先级,并将其分配给具体的人。 对任何工作而言,将工作拆解到较为具体的、可以由一个人完成,并且具有优先级和依赖关系属性的子任务, 都有助于帮助人们迅速、高效地完成工作。

在工作中我个人也很喜欢使用事务追踪系统来跟踪一些开发以外的事务性活动,并且将事务追踪系统作为一种类似笔记的工具使用, 在「票」中关联一系列相关文档,这有助于在事后总结经验或将重复性的事务性工作整理成更容易使用的形式(例如作弊条文档, 或是将常用的重复部分变成程序等等)。

Read more...