Unix的作者Ken Thompson有种神奇的本事,他大摇大摆地走到公司任何一台Unix电脑前,输入自己的用户名和密码,就可以以root身份登录系统,为所欲为。
图片
贝尔实验室人才济济,看到Ken这么“嚣张”,另外一些大牛发誓要把这个漏洞给找出来,他们通读了Unix源码,终于找到了Ken安放的登录的后门,清理后编译Unix,再次运行,可是Ken Thompson还能以root身份登录。
图片
既然源码没问题,那肯定是编译的过程出了问题!
编译器一定被Ken动了手脚,在编译Unix时植入后门!
于是,大牛们重新写了一个干净的编译器,用这个干净的编译器去编译干净的Unix,这下世界清净了吧?
可依然不管用,Ken像上帝一般,照样以root身份登录。
这实在是太让人崩溃了!
后来,还是Ken Thompson本人解开了这个秘密。
原来,问题在于Ken写的第一个C编译器,它在编译Unix源码时,会植入后门。
图片
但这还不够,更牛的是,当其他人写了编译器,肯定也需要编译成二进制的代码,用什么来编译呢?当然是Ken写的那第一个编译器,于是,这个新的编译器也被污染了。
再用新的编译器去编译Unix,也会植入后门。
图片
所以,这就是Ken在1984年获得图灵奖演讲时,提出的关键问题:
如果你没有编写全部的代码,那你自己写的代码是不能被信任的。
无论多少源代码级别的审核都不能保证安全性,因为你依赖的软件和系统中还是可能有后门。
Ken选择了C编译器做手脚,但实际上他还可以选择汇编器,load程序,甚至硬件级别的微代码,随着程序级别越来越低,这些错误越来难以被检测到。
相比而言,相信编写软件的人更加重要。
那么这个后门仅仅局限于贝尔实验室,还是外界也能用?
开源先锋Eric S. Raymond提到过,有两份独立的报告展示,那个带后门的Unix版本确实从贝尔实验室“泄露了”,进入了BBN公司。
BBN即雷神公司,曾经深度参与互联网的前身——ARPANET——的构建。
图片
报告称,有人在深夜通过网络用“kt”这个登录名进行了登录BBN的Unix,kt很可能就是Ken Thompson的缩写。
如果BBN的电脑被感染,那么其他地方的电脑被感染的可能性也非常高。
你可能会好奇,Ken的密码是什么?知道了它不就可以登录任意一台Unix电脑了?
2014年,一个叫leah的网友在BSD 3 源码树的文件转储中发现了一个/etc/passwd 文件。
这真是一个宝藏,因为里边包含的都是Unix前辈的密码,每一个人都大名鼎鼎,如雷贯耳!
如Dennis Ritchie, Brian W. Kernighan, Steve Bourne and Bill Joy,当然,Ken Thompson的密码也在内。
图片
由于该密码用基于 DES 的 crypt(3) 算法加密后的散列hash值,而 crypt(3) 是一种弱加密算法(最多限于 8 个字符),Leah 觉得破解起来应该比较容易,所以决定尝试。
很快,那些简单的密码就被破解了,但是Ken Thompson的密码却如同一座高山,一直岿然不动。
Leah花了好几天,用小写字母和数字不断组合,彻底搜索,也不管用。
更有趣的是,这个crypt算法就是Ken Thompson和另外一位密码学家Robert Morris编写的,也许Ken在算法中弄了手脚?
尝试无果的Leah把这个消息发到了邮件列表中,让全球的黑客一起想办法。
5年以后,澳大利亚人 Nigel Williams 宣称终于破解 Ken Thompson 的密码,他的密码是:p/q2-q4!
图片
猛一看,这像一个数学公式。而实际上是一种古老的符号,代表国际象棋中棋子的走位,意思是“线上的棋子向前移动 2 个方格(Pawns in the line move forward 2 squares”)。q 代表 Queen,p 代表 Pawn,这种走棋记法属于国际象棋的代数记谱法。
图片
Ken Thompson为什么用这个当密码呢?
因为Ken热爱国际象棋,也是个国际象棋的高手,他在PDP-11上写了一个国际象棋程序,后来又制作了加速运算的特殊硬件, 最终形成了一台叫Belle的国际象棋计算机。
图片
Belle战绩骄人,在于人类的常规比赛中,获得了2200等级分,成为第一台荣升国际象棋大师的计算机,还获得了1980年世界计算机国际象棋大赛的冠军。
当然了,p/q2-q4!不一定是那个后门的密码,即使是,那个到后门的Unix版本估计也找不到了。