首页 › tech › 慢半秒才露馅:XZ后门差点攻陷全网

慢半秒才露馅:一个开源后门差点攻陷整个互联网

导语:差几周,世界的服务器就被人拿到了钥匙

如果你问一个安全工程师"互联网最危险的一刻"长什么样,答案大概率不是黑客电影里那种烟花四溅的攻防,而是——一个代码库的某个测试文件夹里,躺着一段没人会去读的二进制数据,里面藏着一把能开几百万台服务器的万能钥匙。

Veritasium这支54分钟的纪录片《The Internet Was Weeks Away From Disaster and No One Knew》讲的正是这件事:2024年被发现的 XZ Utils 后门(CVE-2024-3094)。一个化名"Jia Tan"的攻击者,花了两年半时间,慢慢渗透进一个由单个未领薪志愿者维护的压缩工具,在里面埋下了一个能劫持 SSH 认证的后门。当它被发现时,离进入 Red Hat Enterprise Linux 10、抵达全球数百万生产服务器,只剩下几周。

这支视频值得看的理由有三个:第一,它把一个极度硬核的供应链攻击(IFUNC、GOT、audit hook、RSA 劫持)讲成了悬疑片;第二,它没有止步于"黑客很厉害",而是挖到了真正的病灶——脆弱的不是代码,是那个累垮了的人;第三,它抛出了一个反直觉的结论:开源之所以"出事",恰恰因为它是公开的;而闭源系统里类似的国家级后门,可能永远不会被任何人发现。

视频背景卡片

项目 内容
视频标题 The Internet Was Weeks Away From Disaster and No One Knew
频道 Veritasium(Derek Muller + 安全研究员 Henry van Dyck)
订阅数 2090万
时长 约 54 分钟
播放量 1400万+(点赞 38.7万)
发布时间 2026年2月25日
核心主题 XZ Utils 供应链后门:一次差点成功的国家级网络攻击

一、一台卡住的打印机,催生了统治世界的开源帝国

视频没有一上来就讲后门,而是先倒带回到1980年代的 MIT AI Lab。Richard Stallman 遇到一台卡纸的 Xerox 9700 打印机,想写个小程序让它通知用户"纸卡了"——就像他几年前为另一台打印机做过的那样。但这次 Xerox 拒绝提供源代码,还要求签保密协议(NDA)。Stallman 后来说,那一刻他意识到"这是一种影响很多人的社会现象"。

于是他在1985年创立了 自由软件基金会(FSF),提出软件的四大自由:运行、研究、修改、分享的自由。为了从法律上锁死这些自由,他发明了 GPL(通用公共许可证),并启动 GNU 项目——一个从零重写的 Unix。1991年,芬兰学生 Linus Torvalds 补上了最后一块拼图:一个被改名叫 Linux 的内核。

视频原话定位:这是"为什么开源能赢"的叙事起点。

我的延伸:正因为代码公开免费,Linux 渗透进了吸尘器、摄像头、电视、全球全部500台顶级超算,以及绝大多数互联网服务器——安卓一台就算,全球跑在 Linux 内核上的设备超过30亿。整个生态建立在一个朴素假设上:代码安全,是因为有足够多的眼睛在盯着它看(Linus 定律)。这支视频要拆解的,就是这个假设在2024年差点崩塌的瞬间。

二、XKCD 漫画不是段子,是预言

视频引用了那幅著名的 XKCD 漫画(#2347):一整座现代数字基础设施的金字塔,最底下垫着一块小积木,上面写着"由内布拉斯加州某个随机的人维护"。过去大家都当笑话看。XZ 事件证明:这不是讽刺,是纪实。

视频给出了三个关键背景,也是我整篇文章认为最值得记住的认知升级:

这三点合起来,就是 XKCD 那块积木的现实版:系统的命脉,悬在一个累垮了、没人付钱、没人替补的人身上。(这是视频的核心论点之一。)

三、SSH 的护城河:先约暗号,再验身份

要理解后门有多狠,得先理解它要劫持什么。视频用"调色漆"的比喻拆解了 SSH 的两道锁:

  1. 安全通道(密钥协商)——Diffie–Hellman。双方各拿一种私有颜色,混入同一个公开颜色后互换,再各自混入自己的私有颜色,最终得到相同的密钥;窃听者只看到中间产物,还原不出私有颜色。这一步保证通信不被偷听。
  2. 身份认证(RSA)——服务器发布一个大数(两个秘密素数的乘积),客户端用它加密,只有知道素数因子的服务器能解密。这一步挡住中间人攻击。

Tatu Ylönen 在1995年一次密码嗅探攻击后发明了 SSH,OpenSSH 则成了事实标准,构成"整个互联网的维护骨干"——管理员远程登录、部署、运维,全靠它。

我的判断:后门选择的攻击点极其精准。它没有去硬碰 SSH 协议本身(那是数学上被反复审计过的),而是绕到 SSH 运行时调用的、藏在依赖链深处的一个压缩库里——那里没什么人看。

四、木马计:把毒药藏进没人会读的测试数据

Jia Tan 的计划分三步,视频分别命名为 Trojan Horse(特洛伊木马)、Goldilocks(金发姑娘区)、Cat Burglar(飞天大盗)。这一节拆第一步。

攻击者没有把恶意代码堂而皇之地写进源文件——那样过 code review 会被发现。他把恶意载荷藏进了 XZ 仓库里的二进制测试数据文件(test blobs)。这类文件包打包者基本不会去逐字节审,因为它们"只是测试用的"。然后他对 GitHub 上的构建脚本做了一个看起来无害的小改动:让构建过程把这些二进制 blob 解包、注入到 XZ 库里。

关键点(视频原话方向):恶意逻辑从未以人类可读的形式出现在 GitHub 的源码里。

我的延伸分析:这是供应链攻击最阴险的设计原则——把载荷藏在你信任却从不审查的"资产"里。同一个思路过去也曾出现在 npm、PyPI 包的安装脚本里。它揭示了一个被忽视的事实:code review 的盲区,往往不是"代码",而是"数据"——测试数据、配置文件、构建产物、压缩包。

五、Goldilocks 窗口:在写完和上锁之间偷天换日

这一步是整个攻击技术含量最高的部分,视频讲得相当清楚,我尽量用人话复述。

当一个程序启动、要调用共享库里的函数时,加载器会把函数的真实地址填进一张叫 GOT(Global Offset Table,全局偏移表) 的表里,程序运行时就去这张表查地址。出于安全,现代系统会用 RELRO 机制,在填完表后把它标记为只读。

Jia Tan 利用了三个底层机制:

视频把这个窗口叫 "Goldilocks zone"(金发姑娘区)——不能太早,不能太晚,必须刚刚好。

我的延伸:这个时间窗就是 RELRO "full" 保护下残留的窗口——它说明没有哪种防御是绝对密封的,攻击者总能找到两条机制接缝处的那道光缝。值得补充的是,正是这种"必须在极窄窗口里精准操作"的设计,迫使攻击者写了一大堆内存搜索、字节解码、自定义加密的逻辑——而这,恰好埋下了暴露的种子(见第七节)。

六、飞天大盗:自定义握手、主密钥、抹除痕迹

第三步是让后门"既管用又隐形"。掉包后的恶意函数做了几件事:

视频还在一个克隆的 Veritasium 网站上做了现场演示:被攻陷的服务器可以让攻击者拿到 root、篡改网页内容、窃取或篡改数据、装勒索软件。

视频原话方向:这套设计"谨慎、细致、几乎隐形"。

我的判断:从红队视角看,这是一个教科书级的"持久化后门"——平时潜伏、按需激活、不留痕迹。它最聪明的地方不是某一个技巧,而是把多个底层特性串成一条链,任何单点的代码审计都很难看出问题,因为每一段单独看都"合理"。

七、救命的半秒:Andres Freund 和那 400–500 毫秒

故事在这里迎来转折,也是视频标题"差点没人知道"的核心。

Andres Freund,Microsoft 的工程师(也是 PostgreSQL 核心贡献者),根本不是在找安全漏洞。他在 Debian 的不稳定分支上测试一个 Postgres 更新,偶然发现 SSH 连接比平时慢了大约 400–500 毫秒。这点延迟微不足道,却让他如鲠在喉——他在几个会议里都没法集中注意力。更早之前,他还注意到 Valgrind(内存调试工具)在跑 XZ 时报过奇怪的错误。

他往下挖,一路追到那些"从不被实际使用的二进制测试文件",最终看清了真相:一个细致到会遍历内存、解码原始字节、套上自定义加密、还把自己字符串打乱的后门。

视频里一位专家说:"如果他们少做一点混淆,我大概根本不会注意到任何异常。"

这句话是整支视频的点睛,也是我想安利这支视频的最大理由。它意味着一个反直觉的结论:打败这个攻击者的,恰恰是攻击者自己的"过于谨慎"。 混淆越多、代码越复杂、运行时间越长,就越容易在性能曲线上露出一道毛刺。Andres 后来直接绕过已被渗透的 XZ 联系人,把问题报给了 Debian 安全团队;Red Hat 立即回滚了 Fedora;整个开源社区开始解剖这个项目。Andres 因此收到了微软 CEO 的公开致谢。

我的延伸思考:这给了安全工程一个重要启示——性能异常(延迟、抖动、内存脚印)本身就是一个被低估的检测信号。 一个系统突然慢了半秒、某段路径的 CPU 占比莫名其妙地变了,往往比任何签名规则都更早地暴露出"有什么东西不对"。进攻方在功能和安全之间永远要权衡,而权衡的副产品,就是可观测的物理痕迹。

八、谁是 Jia Tan:国家级行动与刻意的假旗

关于身份,视频保持了克制,这也是我认同的态度。

我的判断(中立网络安全视角):在安全领域,归因(attribution)永远是开放问题,且可能被故意做成谜题。防御方的正确姿势不是去猜"是谁",而是默认对手"足够聪明、足够耐心、足够有钱",并据此设计纵深防御。把注意力放在身份博弈上,反而是中了假旗的下怀。

知识结构图:一次后门攻击的完整解剖

flowchart TD
    A["病灶根源:单个未领薪维护者<br/>Lasse Collin + xz-utils"] --> B["社会工程 2.5年<br/>马甲账号施压 → 拿到维护权"]
    B --> C["伪装身份:Jia Tan<br/>看似无害的提交建立信任"]

    C --> D{"三阶段攻击链"}
    D --> E["① 特洛伊木马<br/>恶意载荷藏进二进制 test blob<br/>构建脚本注入,源码里看不见"]
    D --> F["② Goldilocks 窗口<br/>IFUNC 早执行 → 挂 audit hook<br/>GOT 填入 RSA地址后、RELRO锁定前<br/>偷换 RSA_public_decrypt"]
    D --> G["③ 飞天大盗<br/>迷你握手识别主密钥 → 放行<br/>平时转发真函数,擦除日志"]

    E --> F --> G
    G --> H["目标:劫持 SSH 认证<br/>= 拿到 root = 控制数百万服务器"]

    H -.几周内将进入.-> I["Red Hat Enterprise Linux 10<br/>Debian/Ubuntu 生产环境"]

    J["救命的半秒<br/>Andres Freund 发现<br/>SSH 慢 400-500ms<br/>+ Valgrind 异常"] -->|性能异常| K["追溯到 test blob<br/>看清后门"]
    K --> L["绕过被渗透的联系人<br/>直报 Debian 安全团队"]
    L --> M["Red Hat 立即回滚 Fedora<br/>社区全面审计"]

    H -.差点.-> N["💥 全球性灾难:银行/政府/超算被渗透"]
    M -.阻止.-> N

    style A fill:#fde2e2,stroke:#c0392b
    style J fill:#e2fde2,stroke:#27ae60
    style N fill:#fff3cd,stroke:#d39e00
    style H fill:#fadbd8,stroke:#e74c3c

实战启示:从这次差点翻车里,我们能学到什么

这支视频对普通观众是悬疑故事,对从业者则是一份免费的供应链安全复盘报告。我把可落地的启示梳理成五条:

  1. 依赖不是代码问题,是人的问题。 XZ 暴露的不是某个算法的缺陷,而是"关键基础设施由单个无薪志愿者独撑"的系统性脆弱。如果你维护的项目里有"只有一个人懂"的核心依赖,最该做的不是写更多测试,而是降低 bus factor(巴士因子):引入第二个维护者、写交接文档、把关键知识摊开来。

  2. Code review 的盲区在"数据",不在"代码"。 攻击者把载荷藏进了二进制测试文件。这意味着 review 流程必须覆盖仓库里所有可执行内容:测试 blob、构建脚本、安装钩子、压缩资源。配套的技术手段包括二进制扫描和可复现构建(reproducible builds)——同一份源码,任何人构建出来的二进制必须 bit-for-bit 一致,否则就有人在构建环节动了手脚。

  3. SBOM(软件物料清单)是底线,不是加分项。 你必须知道自己产品的每一层依赖来自哪、谁维护、上次审计是什么时候。CVE-2024-3094 之所以能快速响应,正是因为发行版清楚地知道哪些包链到了 XZ。没有 SBOM,你连"我有没有受影响"都答不出。

  4. 把"性能异常"当成安全信号。 这次救命的不是任何签名或 IDS 规则,而是"为什么慢了半秒"。在生产环境里,对关键路径(尤其认证、加解密、登录)建立延迟和资源消耗的基线监控,异常的毛刺往往是比告警更早的预警。进攻方在"功能"和"隐蔽"之间的权衡,必然会留下可观测的物理痕迹。

  5. 身份认证基础设施要纵深防御。 既然 SSH 认证函数都可能被劫持,那就别把 SSH 当唯一防线。结合代码签名(sigstore)、最小权限、网络分段、特权访问管理(PAM)、多因素,让"拿到一把钥匙"不等于"打开整座城"。

一个反直觉但视频反复强调的点:开源"出事"恰恰是它的优点。 正因为代码公开,全世界才能一起把这段后门拆解得清清楚楚、并把它变成一次行业学习。同样的国家级后门如果藏在某个闭源系统里,可能永远不会有人注意到那半秒——因为没有人在看。

延伸学习路径

  1. Veritasium 原片:《The Internet Was Weeks Away From Disaster and No One Knew》——本文分析的核心视频,叙事节奏和可视化都是顶级。
  2. XKCD 漫画 #2347 "Dependency":那幅"内布拉斯加某个人"的金字塔图,是理解开源依赖脆弱性最直观的一张图。
  3. Red Hat 官方安全公告 CVE-2024-3094 与 Andres Freund 发现后门的原始邮件:第一手资料,看专业响应流程怎么跑。
  4. Russ Cox / Thomas Rokicki 等人对 XZ 后门的技术拆解博客:深入 IFUNC、GOT、audit hook 的字节级分析,适合想啃硬核细节的工程师。
  5. 关于"可复现构建(Reproducible Builds)"和"sigstore 软件供应链签名" 的官方文档:把这次教训转化为可落地的工程实践。

一句话总结

XZ 后门差点攻陷整个互联网,而救了我们的不是什么神兵利器,是一个工程师对"为什么慢了半秒"的好奇心——它提醒我们:互联网的地基不是代码,是那些累垮了却没人付钱的人。

参考来源

  1. The Internet Was Weeks Away From Disaster and No One Knew — Veritasium — 本文分析的核心视频
  2. Video Summary - The Internet Was Weeks Away From Disaster (YouTubeSummary) — 视频技术要点与攻击链结构化摘要
  3. The Internet Was Weeks Away From Disaster — TubeReads — 视频逐章节深度解读
  4. XKCD #2347: Dependency — "某个内布拉斯加人维护"的经典开源依赖漫画
  5. Tests suggest Russian satellites can jam GPS — Ars Technica — 关联的现代关键基础设施安全背景报道

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入