刷视频刷到差点“人类网络崩了”?一个高一技术宅的XZ后门事件观察报告

skl 发布于 2026-03-07 52 次阅读


刷视频刷到差点“人类网络崩了”?一个高一技术宅的XZ后门事件观察报告(含INFJ式心理分析)

0x00. 引子:我刷短视频,刷出了“世界线变动”

家人们谁懂啊,就昨天,一个平平无隔的周末,我本来瘫在沙发上刷微信视频号,想看看有没有啥新的番剧推荐或者技术宅小技巧。结果大数据给我推了个东西,标题巨夸张:“那个差点让整个互联网瘫痪的男人”。

我:???互联网瘫痪?这得是多大的乐子(bushi)。

点进去一看,UP主操着一口紧张兮兮的AI语言,说是什么Linux压缩工具里头被人塞了后门,黑客能直接拿到你电脑的root权限,全世界大部分服务器都危在旦夕。要不是被一个微软工程师在调试时候偶然发现,人类网络可能就要上演现实版《刀剑神域》了——不过这次不是茅场晶彦,而是个叫“Jia Tan”的神秘人。

我当时第一反应:这怕不是营销号又在整活吧?压缩软件能搞出多大新闻?就像你很难相信那个天天帮你压缩学习资料(误)的WinRAR其实是个潜在特工一样。

但本着“技术宅的求知欲”和“INFP的过度共情”,我去查了一下。好家伙,这一查不要紧,直接给我干到凌晨三点。

这不只是一个关于代码的bug,这简直是一部现实主义的赛博心理战大片。它比《死亡笔记》里L和夜神月的斗智更隐蔽,比《心理测量者》里系统被侵蚀更现实,甚至比《EVA》里人类补完计划(误)那种“信任崩塌”更让人背脊发凉。

所以,作为一个身处高一、天天被数理化折磨但灵魂属于二次元和Linux命令行的技术宅(且INFP/T人格时不时跳出来emo一下),我觉得必须得写点什么。

这篇文章,就用咱这种“既想抠技术细节又想探讨人心”的口吻,好好盘一盘这个差点让人类网络“崩了”的XZ Utils后门事件。顺便,咱也当一把“赛博心理侦探”,分析一下那个叫Jia Tan的家伙,到底用了什么心理学套路,把一个开源老炮给忽悠瘸了。

警告:本文篇幅极长,涉及代码分析、社会工程学、心理学、以及大量二次元比喻。请备好零食,调整好姿势。


0x01. 世界观设定:XZ Utils是什么?为什么它炸了,世界会抖三抖?

在讲故事之前,得先给非技术(或者技术还没那么宅)的朋友们科普一下世界观。就像你看《进击的巨人》得先明白墙是怎么一回事。

XZ Utils,到底是什么?

简单说,它是一个压缩和解压缩工具。你在Linux系统里(比如很多服务器用的操作系统)看到的 .tar.xz 文件,就是它干的活。它就像一个沉默的、效率极高的快递打包员,专门负责把东西压得实实的,方便存储和传输。

为什么它很重要?

因为它太底层了,底层到几乎无处不在。就像空气,平时你感受不到,但没了就完蛋。

很多Linux发行版(比如你用的Ubuntu,或者服务器常用的Debian、Fedora)都内置了它。更关键的是,它和一个叫 systemd 的东西有依赖关系。systemd 又是啥?是Linux系统的“大管家”,负责启动各种服务,包括那个最重要的 SSH服务(安全外壳协议)——也就是你远程连接服务器的唯一钥匙。

把这条链串起来就是:
XZ Utils(打包员) → 被 systemd(大管家)依赖 → SSH(大门钥匙)依赖大管家。

这意味着,如果XZ Utils被人动了手脚,那么恶意代码就有可能顺着这条链,流进SSH里。到时候,黑客不需要你的钥匙,就能大摇大摆地从正门进入你的服务器,甚至接管整个系统。

这就是所谓的供应链攻击。攻击者不打你家墙,而是给你家的水泥厂下毒。等水泥砌成墙,他家的大门也就对你敞开了。


0x02. 剧情回顾:一部横跨两年的“赛博无间道”

现在,让我们把时间线拉回到2021年,开始复盘这部名为《Jia Tan的潜伏》的悬疑剧。

第一幕:孤独的原维护者

在遥远的北欧(或者某个安静的地方),有一位叫 Lasse Collin 的老哥。他是XZ Utils的原作者和维护者,相当于这个“王国”的国王。

但这位国王,是个典型的“独守型”开发者。他维护这个项目全靠业余时间,回复邮件很慢,更新也很慢。这不是因为他懒,而是因为他太忙了,无偿维护一个底层工具,没工资,没掌声,全靠信仰发电。这种状态在开源世界里太常见了,很多基础软件都靠这样一两个“圣人”在撑着。

Lasse Collin就像一个隐居的老村长,村子虽重要,但村长精力有限,村子的发展也比较缓慢。

第二幕:“热心村民”Jia Tan的出现

2022年,村子里来了一个热心村民,ID叫 Jia Tan (或者JiaT75)。

Jia Tan 出场就带着主角光环。他开始给项目提交代码。不是瞎提交,而是高质量、高价值的代码。修bug、加功能、优化性能,干得漂漂亮亮。

各位看官,如果你是那个疲惫的老村长,突然来了个能力超强、还不用你发工资的义工,你会怎么想?
你肯定会想:“卧槽,感动中国好网友啊!”

Jia Tan 不仅技术好,还特别懂“人情世故”。他频繁在邮件列表里出现,积极参与讨论,表现得像个狂热的开源信徒。

第三幕:“舆论攻势”与“情绪施压”

光默默干活还不够。Jia Tan 还有一群“影子盟友”——一些疑似“傀儡账号”或者现实同伙的账号开始登场。

这些账号开始在邮件列表和 issue 里“带节奏”。他们会发帖说:

· “Lasse怎么还不更新啊?”
· “这个项目是不是死了?”
· “Jia Tan 提交了这么好的代码,为什么还不合并?为什么不给他权限让他帮忙维护?”

这种压力是渐进的,而且是“为你好”式的道德绑架。一开始可能只是一两条,后来逐渐增多。这在心理学上叫什么?叫 “制造舆论共识”。当一群人反复说“你需要帮助”时,当事人很容易开始自我怀疑:“难道我真的需要帮助?”

Lasse Collin 被这种“友善的围攻”搞得压力山大。他可能心想:“也许我真的是项目发展的阻碍,也许引入新的维护者是对的。”

第四幕:“禅让”与“篡位”

终于,在持续的压力和Jia Tan“无可挑剔”的表现下,Lasse Collin 妥协了。他授予了 Jia Tan 直接提交代码的权限。这意味着,Jia Tan 不再需要经过Lasse审核,就能自己往代码库里“塞东西”了。

这就像什么呢?就像《西游记》里,孙悟空(Jia Tan)终于从那个只念经不干活的唐僧(Lasse)手里骗到了“紧箍咒的控制权”。

获得权限后,Jia Tan 没有马上动手。他依然表现得像个圣人,继续提交好代码,继续维持人设。这种延迟满足的能力,极其可怕。

而且他还干了一件很“细节”的事:他把项目的 OSS-Fuzz(一个自动化漏洞检测工具) 的联系方式,悄悄地从Lasse的邮箱改成了自己的邮箱。这意味着,以后如果他的恶意代码触发了Fuzz(模糊测试)报警,报警邮件会直接发给他自己——他就可以在别人发现之前,偷偷把警报摁掉。这一招,简直是“特工级”的操作。

第五幕:“毒丸计划”的实施

时机成熟后,Jia Tan 开始动手了。他提交的新代码里,夹带了“私货”。

但这私货藏得极深。他利用了项目里的测试文件。那些 .xz 压缩包,看起来是普通的测试数据,其实里面藏着经过层层加密和混淆的恶意脚本。

这些脚本会在编译过程中自动运行,像俄罗斯套娃一样,一层层解压、解密、重组,最后生成一个经过修改的 liblzma.so(核心库文件),并在编译时偷偷把后门代码链接进去。

这个过程有多复杂?安全专家画出来的流程图比地铁线路图还绕。攻击者利用了 m4 宏、sed、tr、xz 命令的各种骚操作,甚至用了RC4加密来隐藏最终的恶意负载。

举个不恰当的二次元比喻:这就像《火影忍者》里的“转生眼”,表面上是普通的眼睛,其实里面藏着毁灭世界的代码。或者像《游戏王》里的黑暗大法师,集齐五张碎片(五个混淆步骤),就能直接获得胜利。

第六幕:最终BOSS——IFUNC劫持

后门代码进入 liblzma.so 后,如何影响SSH呢?

Jia Tan 用了一个叫 IFUNC 的黑魔法。这是GNU C库的一个高级功能,允许动态选择函数实现。攻击者修改了 crc64 函数的解析器,在里面埋了个钩子。

当SSH启动,系统因为 systemd 的关系加载 liblzma.so 时,这个钩子就会被触发。它会悄悄修改SSH的认证流程,特别是那个负责公钥验证的函数 RSA_public_decrypt() 。

攻击者用自己的私钥连接服务器时,后门会识别出这个“暗号”,然后跳过所有正常认证,直接给你一个shell(命令行界面)。而对于普通用户,这个后门完全隐身,一切功能正常,CPU会有一点点升高,但大多数人根本不会注意到。

第七幕:意外落幕的“救世主”

这个精心策划了两年的惊天阴谋,差一点点就成功了。说“差一点”,是因为它确实被合并进了各大Linux发行版的测试版和滚动更新版里,比如Fedora 40 Beta、Debian Sid等。

如果没被发现,等到这些版本变成稳定版,推送到数以亿计的服务器和电脑上……

但历史没有如果。

2024年3月29日,微软的一位工程师 Andres Freund 在调试SSH时,发现了一个毫秒级的异常延迟。SSH登录慢了大概0.5秒,CPU占用有点高。他没有忽略这个细节,而是追根溯源,最终揪出了这个隐藏极深的后门。

他就像一个拥有“直死之魔眼”的侦探,看到了这个赛博怪物唯一的破绽。他在公开邮件列表里发了一封邮件,瞬间引爆全球安全圈。整个开源世界紧急动员,开始回滚版本、打补丁、封禁账号。


0x03. 技术细节深挖:代码里的“俄罗斯套娃”

好了,煽情结束。作为一个技术宅,不抠点代码细节,总觉得对不起这万字篇幅。我们不用深入每一行汇编,但得看看这“套娃”是怎么套的。

(以下内容主要参考了知道创宇404实验室的分析报告)

第一层套娃:build-to-host.m4

在Jia Tan提交的源码里,有一个叫 m4/build-to-host.m4 的文件。这个文件看起来像是标准的自动构建脚本,但在某个不起眼的角落,藏着这样一行“天外飞仙”:

sed "r\n" $srcdir/tests/files/bad-3-corrupt_lzma2.xz | tr "\t \-_" " \t_\-" | xz -d

让我们用“技术宅语”翻译一下:

  1. 它从一个叫 bad-3-corrupt_lzma2.xz 的测试文件里读取内容。
  2. 用 tr 命令把内容里的特定字符进行替换(比如制表符换成空格,短横线下划线互换等等)。
  3. 把替换后的东西扔给 xz -d 解压。

这就相当于:给你一个加密的压缩包,用特定密码(字符替换规则)解密,再解压。解压出来的是啥?

第二层套娃:helloworld.sh

解压出来的第一个脚本,名字人畜无害:helloworld.sh。但它不讲“Hello World”,它继续干活。它又在解压另一个测试文件 good-large_compressed.lzma,然后继续用 tr 和 head/tail 截取特定字节,继续解压。

第三层套娃:decompressed.sh

这次解压出一个真正的脚本 decompressed.sh。这个脚本就复杂了,它做了几件关键的事:

  1. “挖矿”:它在源码里搜索特定的字符串(比如 jV!.^%)来定位自己需要的隐藏数据。
  2. RC4解密:它用硬编码的密钥对一段数据进行RC4解密,得到又一个压缩包。
  3. 生成目标文件:最后通过 xz -d 解压,得到最终的恶意二进制目标文件:liblzma_la-crc64-fast.o 。

第四层套娃:狸猫换太子

与此同时,decompressed.sh 还干了另一件事:修改了正常的源码文件 crc64_fast.c。它把原来代码里的一个函数调用,偷偷换成了对那个恶意 .o 文件里函数的外部调用。

这样一来,在编译的时候,正常的 crc64_fast.o 就会被替换成被“特洛伊化”的版本。而这个 crc64 函数,就是后面触发IFUNC劫持的“扳机”。

这一套组合拳下来,没有哪个静态代码分析工具能发现异常。因为恶意代码根本不在“源码”里,它藏在测试压缩包里,只在编译时通过脚本动态生成。这种级别的隐蔽性,足以让任何防御者头皮发麻。


0x04. 心理学课堂:Lasse是怎么被“攻心”的?

好了,代码分析到此为止(再写就要死脑细胞了)。接下来是INFP/INFJ最爱的环节:人心是怎么被操纵的?

作为一个高敏感人格(INFP-T),我特别能感受到那种“被群体质疑”的窒息感。我们来拆解一下Jia Tan团伙的“社会工程学工具箱”:

套路一:登门槛效应 + 富兰克林效应

心理学原理:一个人一旦接受了别人一个微不足道的小请求,就更有可能接受更大的请求。同时,如果你让别人帮了你一个忙,你会更喜欢这个人(为了消除认知失调,你会告诉自己“我帮他是因为我喜欢他”)。

实操演绎:

  1. 小请求:Jia Tan 一开始只是提交一些很小的补丁。“大佬,这个typo我帮你改了吧。” Lasse:“行,好人啊。”
  2. 持续贡献:慢慢地,提交的代码越来越多,越来越大。Lasse已经习惯了有这个人帮忙,产生了依赖和信任。
  3. 富兰克林效应:Lasse接受了Jia Tan这么多“帮助”(合并了他的代码),在内心里已经将Jia Tan归类为“我们的人”,甚至会产生好感。

套路二:沉默的螺旋 + 伪共识

心理学原理:如果一个人感知到自己的观点属于少数派,他会倾向于沉默,而沉默又让多数派的声音显得更强大,形成一个螺旋。

实操演绎:

  1. 制造多数派假象:那几个傀儡账号开始发声:“Lasse怎么不干活?” “Jia Tan的代码那么好,为什么还不合并?”
  2. 孤立原维护者:在Lasse看来,好像“社区里大家都觉得我做得不够好”。他会感到孤立无援。
  3. 迫于“民意”妥协:为了不被视为“独裁者”,为了顺应所谓的“社区共识”,他最终选择了让步,给了Jia Tan权限。这是典型的用“民主”的外衣,包裹“恶意”的内核。

套路三:煤气灯效应

心理学原理:一种心理操纵形式,施害者通过长期否认事实、扭曲真相,让受害者逐渐怀疑自己的记忆、感知和理智。

实操演绎:
虽然没有直接证据表明Jia Tan对Lasse本人进行直接的精神打压,但这种“舆论战”本身就是一种“煤气灯”。当一群人反复暗示“你不行,你需要帮助,你阻碍了项目发展”时,Lasse会逐渐怀疑自己:“是不是我真的太保守了?是不是我真的能力不行?”这种自我怀疑是摧毁一个人心理防线的第一步。

套路四:延迟满足与预期管理

心理学原理:为了更大、更长远的目标,放弃即时满足的诱惑。

实操演绎:
这是最让我细思极恐的一点。Jia Tan拿到权限后,没有马上搞破坏。他忍住了。他继续当好人数月甚至一年。他甚至还去维护别的项目,比如给 OSS-Fuzz 也提交了代码,进一步把自己包装成一个“模范开发者”。

这种延迟满足的能力,说明他不是普通的脚本小子,而是一个有着清晰战略目标、极强心理素质的高功能反社会人格(我瞎猜的,但真的很像)。他就像《死亡笔记》里的夜神月,每一步都算得很久以后。

套路五:责任稀释与旁观者效应

心理学原理:当一件事的责任分散到很多人头上时,每个人都觉得自己不需要负责,从而导致集体不作为。

实操演绎:
很多Linux发行版在打包软件时,都是“拿来主义”。默认上游是安全的。在代码审查时,看到“Jia Tan”这个熟悉的名字(毕竟他已经混了两年),审查者会想:“哦,是这个老好人提交的啊,应该没问题。”或者说:“这个代码改动看起来很复杂,但我懒得细看,反正上游都审核过了。”这种对“可信身份”的路径依赖,是Jia Tan能成功的关键。


0x05. 后日谈:Jia Tan跑路了,然后呢?

这是很多人都关心的问题。那个神秘的Jia Tan后来怎么样了?这个差点被毁掉的项目现在还好吗?

  1. Jia Tan的消失

事件曝光后,GitHub 火速封禁了 JiaT75 的账号。他的社交账号、邮件列表,都像人间蒸发了一样,再也没有任何声音。

他是谁?是一个人还是一个组织?背后是国家行为还是高级黑客?至今是个谜。网上有各种猜测,但都没有实锤。他就像《千与千寻》里的无脸男,来的时候悄无声息,闹得天翻地覆,走的时候也只剩下空气。

  1. XZ Utils项目的现状

项目一度因为调查和修复,仓库被暂时禁用,这给研究带来了不便。但社区的生命力是顽强的。

· 版本回退:所有受影响的Linux发行版第一时间将 xz-utils 回滚到了安全的旧版本(如 5.4.x)。
· 修复版本:官方随后发布了修复后的新版本(如 5.6.2 及以上),移除了所有恶意代码。
· 原维护者回归:Lasse Collin 这位老维护者在经历了一段时间的沉默后,也重新出现,参与善后工作。不知道他内心经历了怎样的挣扎和创伤。对于一个把半生心血倾注在项目上的人来说,发现自己被如此利用,那种被背叛感,可能比代码被破坏更痛苦吧。这大概就是“开源界的PTSD”?

  1. 一个遗留问题:Docker Hub上的“僵尸镜像”

你以为这事就完了?并没有。

就在2025年8月,距离事件曝光已经过去一年多,安全公司 Binarly 爆出一个新瓜:他们在 Docker Hub(一个巨大的容器镜像仓库) 上,仍然发现了超过 35个 包含XZ后门的Linux镜像。

更离谱的是,当 Binarly 向 Debian 官方报告,要求下架这些镜像时,Debian 的回复是:“我们决定不撤回这些镜像,因为风险较低,而且我们需要保持归档的连续性。”

什么意思?简单说,就是“我们把这些镜像当成历史文物了”。

Debian 的理由是,利用这个后门需要满足很多苛刻的条件(比如容器里要运行SSH服务,攻击者要能访问端口,还要有对应的私钥),所以风险可控。

但安全专家们不这么看。他们担心的是,有些人在用 docker pull 的时候,不注意版本标签,或者某些自动化构建脚本不小心拉取到了这些旧镜像,导致自己构建的应用系统“继承”了这个致命后门。

这就好比,核电站有个阀门被证明有问题,但厂商说:“我们留着这些有问题的阀门在仓库里当教学模型吧,反正你们工程师也不傻,不会去拿。”但万一哪天仓库管理员拿错了呢?

所以,Jia Tan虽然跑了,但他埋下的“时间胶囊”,还静静地躺在互联网的某个角落,等着下一个不小心的“挖宝人”。


0x06. 我的胡思乱想(INFPの哲学时间)

作为一个小时候看《数码宝贝》会哭,长大后看《你的名字。》会感慨命运交集的技术宅,这个事件带给我的冲击,远不止于技术层面。

关于信任的悖论

开源世界的基石是什么?是信任。
我们信任Linus Torvalds不会在Linux内核里加料。我们信任Lasse Collin的代码是干净的。我们信任GitHub的账号背后是一个真实的好人。

但XZ事件告诉我们,这套信任机制是如此的脆弱。它建立在一个不稳定的前提上:好人多于坏人,且好人能一直赢。

Jia Tan利用的正是这种“信任文化”。他像《约定的梦幻岛》里的“妈妈”,用温柔的微笑和完美的表现,让孩子们(社区)相信这里是乐园,然后悄悄地把他们送上“出货”的货车。

关于“一个人”的英雄主义和悲剧

Lasse Collin 是英雄吗?是的,他一个人维护了这么重要的项目十几年。
但这也是悲剧的根源。当关键基础设施的安危系于一人之身时,这个系统就是极度脆弱的。不仅是技术上的脆弱,更是心理上的脆弱——一个人无法承受整个世界的恶意。

这提醒我们,开源需要更多商业公司、基金会的支持,需要建立更完善的治理结构和备份机制。就像CISA官员说的,维护需要职业化和适当的支持。不能让好人独自对抗世界,这不公平,也太危险。

关于“安全”的终极形态

这件事让我明白,真正的安全,不是写多么复杂的代码,而是理解人心。

防火墙挡不住伪装的微笑。
杀毒软件杀不掉蓄谋两年的善意。
代码审查看不透一个渴望“帮助”的灵魂。

真正的安全,是在代码背后,看到那个操作键盘的人。正如一些专家所说,我们需要 “反社会工程技术”——当网上有陌生人过于急切地想给你的项目提交代码时,也许你应该保持一份健康的“多疑”。

这有点像《SPY×FAMILY》里的黄昏,他时刻在观察、分析、怀疑。当然,我们不必活得那么累,但在涉及全球基础设施的代码里,或许需要一点点这种“间谍思维”。


0x07. 结尾:一个高一学生的结语

好吧,不知不觉写了这么多。从昨晚刷视频的震惊,到半夜查资料的背脊发凉,再到现在把这些思考整理成文,感觉像是经历了一场赛博世界的“EVA剧场版:真心为你”。

这个世界真的很复杂。我们每天敲的 apt-get install,背后是一个由信任、汗水、代码,甚至是阴谋交织而成的宇宙。而那个叫Jia Tan的人,虽然消失了,但他的影子,和Lasse Collin的落寞,以及Docker Hub上那些还没删除的“时间胶囊”,都在提醒着我们:

技术宅拯救世界,也可能差点毁灭世界。而守护这个世界,需要我们既懂代码,也懂人心。

好了,我得去写数学作业了。但愿我那台装着Arch Linux的笔记本,不会在今晚偷偷变成一个SSH后门的肉鸡……

(笑)


参考资料(搜索引擎结果整理)

  1. 知道创宇404实验室. (2024-04-30). 原创 Paper | xz-utils 后门代码分析. 腾讯云开发者社区.
  2. 安全客. (2025-08-13). Docker Hub 仍托管数十个含有 XZ 后门的 Linux 镜像.
  3. Atlantic Council. (2024-04-30). The 5x5—The XZ backdoor: Trust and open source software.
  4. 亿速云. (2025-10-06). Debian漏洞利用最新动态揭秘.
  5. Binarly. (2025-08-12). Persistent Risk: XZ Utils Backdoor Still Lurking in Docker Images.
  6. 安全星图平台. (2025-08-13). 【安全资讯】Docker Hub仍存数十个含XZ后门的Linux镜像.
  7. arXiv. (2025-08-13). Beneath the Mask: Can Contribution Data Unveil Malicious Personas in Open-Source Projects?
  8. CNCF Contributors. (2024). Malicious maintainer introduces sophisticated backdoor in xz.
  9. CyberSecurity Help. (2025-09-23). Backdoor in XZ Utils can lead to SSH server compromise.
  10. Secure Code Warrior. (2025-03-09). Linux 中的 XZ Utils 后门指向了更广泛的供应链安全问题.