没有
如最初所述,该攻击绝不是威胁。虽然理论上编译器可以做到这一点,但要真正阻止攻击,就需要对编译器进行编程以使其
- 识别正在编译的源代码何时属于编译器,并且
- 弄清楚如何修改任意源代码以将hack插入其中。
这需要弄清楚编译器如何从其源代码工作,以便可以对其进行修改而不会造成损坏。
例如,假设链接格式将数据长度或已编译机器代码的偏移量存储在可执行文件中的某个位置。编译器必须自己确定其中哪些需要更新,以及在插入漏洞有效载荷时需要在何处更新。编译器的后续版本(无害版本)可以任意更改此格式,因此利用代码将需要有效地理解这些概念。
这是高级的自定向编程,这是一个棘手的AI问题(最后我检查了一下,现有技术正在生成实际上由其类型决定的代码)。看:几乎没有人能做到这一点;您将必须学习编程语言并首先了解代码库。
即使解决了AI问题,人们也会注意到,编译其微型编译器是否会导致二进制文件带有链接到其中的巨大AI库。
类似攻击:自举信任
但是,攻击的一般化是相关的。基本问题是您的信任链必须从某个地方开始,并且在许多领域,其起源都可能以一种难以察觉的方式破坏整个链。
一个可以在现实生活中轻松实现的示例
您的操作系统(例如Ubuntu Linux)通过对照存储库的签名密钥(使用公共密钥加密)检查下载的更新包来确保更新的安全性(完整性)。但是,这只能保证真实性更新的,如果你能证明签名密钥是通过合法来源所有。
您从哪里获得签名密钥?首次下载操作系统发行版时。
您必须相信信任链的来源(此签名密钥)不是邪恶的。
任何能够使您与Ubuntu下载服务器之间的Internet连接成为MITM的人(可能是您的ISP,控制Internet访问的政府(例如中国)或Ubuntu的托管提供商)都可能劫持了此过程:
- 检测到您正在下载Ubuntu CD映像。这很简单:请参见将请求发送到任何(公开列出的)Ubuntu镜像,并询问ISO映像的文件名。
- 服务来自他们自己服务器的请求,为您提供CD映像,其中包含攻击者的公共密钥和存储库位置,而不是Ubuntu的。
此后,您将从攻击者的服务器安全地获取更新。更新以root用户身份运行,因此攻击者拥有完全控制权。
您可以通过确保原件是真实的来防止攻击。但这要求您使用哈希来验证下载的CD映像(实际上很少有人这样做),并且哈希本身必须安全地下载,例如通过HTTPS。而且,如果攻击者可以在计算机上添加证书(在公司环境中常见)或控制证书颁发机构(例如中国),那么即使HTTPS也无法提供保护。