我如何知道编译器没有将恶意软件注入我的程序

1 python security

我最近用 python 编写了我的第一个应用程序,它运行得很好。过了一会儿,我的防病毒程序将其标记为木马并将其卸载。

经过一番研究,我相信这是因为我还没有签署我的代码,但这让我思考。编译器难道不能通过在原本合法的代码中添加一段恶意软件来修改我的程序吗?我怎样才能知道它是否有效?

这可能是一个非常愚蠢的问题,但我无法通过谷歌搜索找到任何答案,而且我是新手,正在尝试学习和理解。=

kel*_*aka 5

编译器不能通过基本上将一段恶意软件添加到您原本合法的代码中来修改我的程序。我怎样才能知道它是否有效?

肯·汤普森(Ken Thompson)就此写了一篇很棒的文章

人们应该在多大程度上相信程序不含特洛伊木马的声明?也许信任编写软件的人更重要。

他描述了如何将特洛伊木马放入C编译器中,并基于以下事实:用当前的C编译器(先有鸡还是先有蛋)编译出一个新的C编译器

  • 首先将木马插入C编译器代码中
  • 编译它,现在新的C编译器有木马,它会将自己注入到它编译的每个代码中。
  • 回滚到旧的C编译器代码,并使用新的编译器进行编译。
  • C编译器源代码中没有木马,但编译器有它,并将其携带到它编译的每个程序中,甚至是未来的C编译器中。

好吧,有时这可以被检测到。然而,道德是这样的

其中的寓意是显而易见的。您不能信任并非完全由您自己创建的代码。(特别是来自雇用像我这样的人的公司的代码。)再多的源代码级验证或审查也无法保护您免于使用不受信任的代码。在演示这种攻击的可能性时,我选择了 C 编译器。我可以选择任何程序处理程序,例如汇编程序、加载程序,甚至硬件微代码。随着程序级别越来越低,这些bug会越来越难被发现。安装良好的微代码错误几乎不可能被发现

这是一个信任问题。到目前为止,您信任您的编译器、防病毒程序和操作系统。现在你的编译器和你的防病毒软件正在战斗。难道你的防病毒软件已经损坏了吗?不会是你的操作系统损坏了吧?

最好的措施是关闭电脑并对系统进行外部分析。


等等,您会相信外部分析仪吗?


而且,您会相信您的硬件吗?

不幸的是,这是一个被彭博社毒害的严重问题。


注意:需要一个外包示例,然后查看 SolarWinds 攻击。