xkcd 网络漫画有一幅插图(2347 号)经常在工程论坛和企业 Slack 频道中流传。乍一看,它是关于软件依赖的视觉笑话。实际上,它是现代数字经济最准确的架构图。
图片展示了一座巨大的积木城堡,标注为_“现代数字基础设施的全部”. 这个结构——从全球金融系统到云基础设施——摇摇欲坠地建立在一个微小无比的基础上:“一个来自内布拉斯加州的某人在 2003 年以来一直无偿维护的项目”_.
多年来,工程师们带着某种不安笑着这幅漫画。我们知道它是真的。然而,直到最近,整个行业在看到这个预测几乎引发互联网历史上最大的网络安全崩溃之一时,才感到一阵寒意。
兰德尔·门罗的原始插图 (xkcd.com/2347)
目录
开源中的公地悲剧
当前的开发生态系统是人类协作的胜利。当我们初始化一个项目时,我们不会从头开始编写数据压缩算法或加密协议;我们将这些责任委托给开源库。
这个模式民主化并加速了创新,但掩盖了一个严重的结构性问题:被提取的价值与回报的价值之间的不对称。价值数十亿美元的公司将他们的商业产品构建在数千名独立开发者的无偿工作之上——这些开发者利用自己的空闲时间维护代码。
当那个”内布拉斯加州的人”筋疲力尽、遭受倦怠,或者简单地改变兴趣时,城堡地基的那块积木就开始开裂。而现代威胁正是从这些裂缝中运作的。
xz-utils 案例:噩梦成真
要理解这种结构脆弱性的严重性,我们必须分析 xz-utils (CVE-2024-3094) 事件——这一事件重新定义了我们对供应链攻击的理解。
目标:一根看不见的支柱
xz-utils 是基于 Linux 和 Unix 操作系统中无处不在的数据压缩工具。这是一个如此底层的组件,以至于绝大多数开发者从未直接与它交互,但操作系统的重要进程都依赖它。
创建者和主要维护者 Lasse Collin 多年来一直在维护这个项目。像许多独自工作的维护者一样,Collin 面临着持续的压力、心理健康问题,以及应对全球用户群无偿需求的自然损耗。
长期的社交工程攻击
2021 年底,一个使用” Jia Tan “假名的用户开始为项目做出贡献。与暴力攻击不同,这是一次持续数年的精心情报行动。
Jia Tan 开始发送有用且合法的补丁。同时,其他虚假账户(或 sockpuppets)开始在公开论坛上向 Collin 施压,抱怨代码审查速度太慢,并要求给其他开发者更多控制权。脆弱且疲惫的 Collin 妥协了。渐渐地,Jia Tan 获得了共同维护者的权限,最终几乎完全控制了这个仓库。
有效载荷(The Payload)
一旦获得控制权,Jia Tan 引入了一个技术 sophistication 令人恐惧的 backdoor(后门)。恶意代码并非在 GitHub 主仓库中明显存在,而是隐藏在看似无害的二进制测试文件中。在编译过程中,一个高度混淆的脚本提取并执行恶意代码,直接注入到 OpenSSH(标准远程访问服务器协议)中。
最终目标是允许攻击者在全球几乎任何现代 Linux 服务器上以管理员权限执行任意代码,且不在日志中留下痕迹。
被 500 毫秒拯救
这次攻击险些被整合到 Debian 和 Red Hat 等主要发行版的稳定版本中。一场全球灾难因纯粹的偶然而被避免。
Andres Freund 是 Microsoft 的一位工程师,当时正在对 Debian 系统进行微性能优化,他注意到 SSH 进程消耗了异常多的 CPU,且完成时间比正常情况多出大约 500 毫秒。
他的职业好奇心促使他调查这半秒的延迟。顺着线索,Freund 揭开了这个阴谋,发现了 backdoor,并在恶意更新全球分发前几周向世界发出警告。
结构性的教训
xz-utils 案例表明,我们数字基础设施面临的最紧迫威胁不一定是密码学漏洞,而是对开源中人类因素的系统性利用。
我们不能依赖一位细心的工程师注意到 500 毫秒的延迟来拯救互联网。解决方案需要在企业和社会层面进行范式转变:
- 供应链审计(SBOM): 组织必须实施严格的软件物料清单(Software Bill of Materials),精确知道他们依赖哪些项目以及谁在维护它们。
- 机构资助: 数百万美元的公司必须将开源项目的赞助视为关键基础设施的运营支出,而非慈善。为基础库维护付费与支付 AWS 账单同样重要。
- 维护者支持: 我们必须重新定义关键项目的管理方式,确保关键基础设施组件不依赖于单个无偿的个人。
我们居住的数字塔是现代工程的奇迹,但它仍然是一个玻璃结构。直到业界承认并回报支撑基础的无形努力,否则我们将继续受制于内布拉斯加州支柱的脆弱性。