【问题标题】:Thompson's Trojan CompilerThompson 的木马编译器
【发布时间】:2010-10-21 08:52:50
【问题描述】:

我试图更好地理解 Thompson 的木马编译器(在他 1984 年的 ACM 图灵奖演讲“Reflections On Trusting Trust”中进行了讨论),到目前为止我是这样理解的:

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

这是正确的概念吗?我不确定我是否理解整个概念。

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

(另见 Bruce Schneier Countering "Trusting Trust"

【问题讨论】:

  • 您可能应该链接到 ACM 页面以获取 On Trusting Trust,不是吗?

标签: unix compiler-construction


【解决方案1】:

是的,这是正确的概念。还有更多;修改后的编译器还必须将未修改的编译器源编译为自身的类似修改副本。这包括该源的微不足道的变化,这基本上意味着修改后的编译器必须能够解决例如停机问题。

【讨论】:

  • 这……有趣,令人不安。它声称一些不可能的事情,但被接受为正确答案。这似乎会导致汤普森本人消失在一片逻辑烟雾中。
  • 在你说“停止问题”之前,你让我失望了。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    原始登录程序从文件中接受匹配的名称和密码对。

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

    一旦更改的编译器代码存在,您可以编译编译器并将其安装在标准位置,然后将登录程序和编译器的源代码恢复为未修改的形式。安装后的编译器将采用未更改的登录程序并输出不安全的表单。同样,已安装的编译器会将未经修改的编译器源代码编译成不正当的变体。任何检查源代码的人都会同意它们没有什么不寻常的地方。

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

    【讨论】:

    • 我们不能只通过编译器的源代码检查任何后门吗?这篇文章的意义是什么?
    • @coder101,漏洞利用的全部意义在于编译器的源代码不再反映其行为。编译器具有识别普通编译器并插入行为而不更改源代码的不可见代码。要检测它,您必须检查目标代码并注意发出的代码与源代码中的任何内容都不对应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2021-02-22
    • 2021-01-27
    相关资源
    最近更新 更多