汤普森的木马编译器

KP6*_*P65 11 unix compiler-construction

我正在努力更好地理解汤普森的特洛伊编译器(在他的1984年ACM图灵奖演讲" 信任信任的思考 "中讨论过),到目前为止,这就是我理解它的方式:

"Unix的原始登录程序将接受root指示的任何登录名和密码.它只接受某个密码,只有编写系统的人知道.这可以让他以root用户身份登录系统."

这是正确的概念吗?如果我理解整个概念,我不是百分百肯定的.

如果有人能说得更清楚,那会有所帮助.

(另见Bruce Schneier 打击"信任信托")

Pan*_*rit 15

原始登录程序接受来自文件的匹配的名称和密码对.

修改是添加一个超级强大的密码,编译到登录程序中,允许root访问.为了确保在读取登录程序时看不到此代码,编译器会更改以识别登录程序的这一部分,即其原始格式并将其编译为超级强大的密码二进制文件.然后,为了在编译器中隐藏此代码的存在,需要对编译器进行另一次更改,以识别编译器中添加了第一个更改并输出修改后的表单的部分.

一旦更改的编译器代码存在,您可以编译编译器并将其安装在标准位置,然后将登录程序和编译器的源代码恢复为未修改的形式.然后,已安装的编译编译器将使用未更改的登录程序并输出不安全的表单.同样,安装的编译器会将未修改的编译器源代码编译为devious变体.检查任何一个源代码的任何人都会同意它们中没有任何异常.

当然,只有在任一程序的源代码发展得足够远以至于修改后的编译器不再识别它时,它才有效.由于修改后的编译器的源代码不再存在,因此无法维护,并且(假设编译器和登录继续发展)它最终将停止生成不安全的输出.


Chr*_*fer 6

我之前从未遇到过这个概念,但这非常有趣 - 我在http://scienceblogs.com/goodmath/2007/04/strange_loops_dennis_ritchie_a.php上找到了一篇简洁的文章.