惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 【当耐特】
小众软件
小众软件
S
SegmentFault 最新的问题
GbyAI
GbyAI
量子位
爱范儿
爱范儿
L
LangChain Blog
Vercel News
Vercel News
A
About on SuperTechFans
腾讯CDC
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
月光博客
月光博客
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
U
Unit 42
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX
V
Visual Studio Blog
美团技术团队
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium

0x01 byte

我在 2025 年看完的书 西班牙之行 2025 年初展望 2024 年底曼谷之行 荐书:The Blind Watchmaker 王垠传播的「自然视力恢复法」真的有用吗? 从高考志愿到职业选择 浅谈 Apple Intelligence 2024 年,我为什么开始为搜索付费 运气与努力 刷新了一下对内容审查粒度的认知 离开心动和 TapTap 如何反转一个链表? 如何高效地协作开发:一些 Google 的实践 关于 LeanCloud 被心动/TapTap 收购 small talk #3:从 IPFS 聊到 Web 的开放性 small talk #2:聊聊用 M1 芯片的新 Mac 怀念两位老师:Stan Eisenstat 和 Paul Hudak small talk #1: 聊聊你的私有云 如何在 Emacs 里做所有事 Remark Ninja: 一个简单的评论系统 Woman、man、camera、TV:如何做一个完整的深度学习应用 荐书:走出戈壁:我的中美故事 LeanCloud 开始周期性远程工作了 树莓派:用 Pi-hole 来保护隐私和过滤广告 爱国指南 我在 2019 年觉得不错的几个习惯 WeWork 的兴衰和创投的游戏 计算机专业学生该如何提高自己 怎样利用好路上的时间
比 XCodeGhost 更邪恶的手段 30 年前就出现了
blog.incoming@1byte.io (江宏) · 2015-10-09 · via 0x01 byte

最近在开发者圈里讨论最多的莫过于 XCodeGhost。其实在 30 年前,更高明的手段就出现了。

1984 年的时候,UNIX 创造者之一 Ken Thompson 获得了 ACM 图灵奖。他的获奖演讲叫做 Reflections on Trusting Trust(反思对信任的信任)。

Portrait of Ken Thumpson

Portrait of Ken Thumpson

在这个稿子只有三页纸的演讲中他分三步描述了如何构造一个非常难以被发现的编译器后门。这后来被称为 the Ken Thompson Hack(KTH),有人说它是 the root password of all evil。

在第一步里,Thompson 展示了一个可以输出自己的源代码的 C 程序。这需要一定技巧,但很多人作为编程练习都做过。

在第二步里,Thompson 在 C 的编译器里增加了一段代码(后门),让它在检测到自己在编译 UNIX 的 login 命令时在输出里插入一个后门。这个后门会允许作者用特定密码以 root 身份登录系统。

在第三步里,Thompson 在第二步的编译器里使用第一步的方法加入另一段代码(后门生成器),使得这个编译器在检测到它在编译自己时自动把第二步的后门和第三步的后门生成器插入到输出里。

在得到一个第三步的编译器后,就可以把第二、三步新增的代码从源代码里删除,因为这个新的编译器在编译它自己原来「干净」的源代码时会自动把后门和后门生成器加上。很多语言的编译器都会使用「自举」的方式编译,也就是会用一个编译器的旧版本可执行文件来编译新版本的源码,所以这样一个高危的后门完全可以在一个开源项目里存在。通过阅读这个编译器的源码是无法发现这个后门的。

KTH 还可以被加强,让它更难被察觉。比如这个编译器可以污染它编译的调试器、反编译器等开发过程中使用的工具,使得即使程序员反编译这个编译器后看到的仍是干净的代码,除非他使用的是 KTH 注入前的版本。所以当这个带有 KTH 注入的编译器来自于官方渠道时,它的后门是几乎不会被发现的,而且会影响所有用户。

最近的 XcodeGhost 最多只能算是 the Ken Thompson Hack 的一个简化版本,没有试图隐藏自己,并且修改的不是编译器本身,而是 Xcode 附带的框架库。

Thompson 在演讲里的结论是:即使开源项目也无法保证安全。在不考虑硬件或 microcode 后门的情况下,只有当运行的每一个程序都完全是自己写的时才能确保安全。可是谁的电脑上能只运行自己写的程序呢?恐怕只有 Ken Thompson 和 Dennis Ritchie 能在用自己发明的语言写的操作系统上用自己写的编译器编译自己写的操作系统吧。

Ken Thompson 从贝尔实验室退休几年之后加入了 Google。在 Google,他和原来贝尔的老同事一起发明了 Go 语言。Go 从 1.5 版开始以自举的方式编译。;-)