开源软件的机密性不如闭源软件,但在考虑后门时这并不重要,而一般的漏洞几乎总是偶然的。在这个答案中,我将只讨论后门,而不是更广泛的漏洞问题(只有一小部分漏洞是故意的)。为了打击后门,您需要对代码的质量和完整性进行严格控制。公开代码并不会严重削弱此类控制。
诚信:他们做的就是你得到的
我所说的完整性是指确保您运行的代码是开发人员编写的代码。这要求分发链是可追溯的,或者开发人员使用您识别的签名对代码进行签名。当需要安全软件时,通常会使用签名;闭源和开源是平等的。分发的工作方式不同,对任何一方都没有明显的优势:封闭源代码倾向于直接分发(您直接从供应商处获得),而开源软件倾向于多次复制,这既增加了篡改的机会,也增加了检测篡改的机会。
完整性还有第二部分,它在开发人员的领域内。使用闭源软件,您依赖软件供应商的内部控制。这通常不是您可以直接看到的;唯一有点独立的信息来源是供应商的安全认证,它们只能提供这么多的保证。在开源方面,如今大多数备受瞩目的项目都有公共存储库,使得对源代码的每次更改都可以公开追踪。理论上,即:很少检查源代码的完整性,但有可能偶然发现违规行为。在实践中,双方的完整性控制水平无处不在。开源与封闭源不是区别因素。
作者介绍的后门
Integrity 告诉您只有记录在案的开发人员才能生成代码。质量告诉您他们是否引入了后门(故意或被颠覆)。对于闭源供应商,很少有任何超出供应商声誉的质量保证,可能还有认证(假设您认为它们表明质量 - 事实上认证可能涉及对开发人员的犯罪背景调查,但不太可能抓住微妙的后门)。理论上,使用开源代码,任何人都可以看到代码。同样,在实践中,没有人会看它的大部分内容。但由于开发者的名字与每段代码公开相关,后门的作者冒着被暴露的风险。假设后门被这样识别:毕竟大多数漏洞都是偶然的。
看看一个著名的后门很有趣,它是由Ken Thompson在Unix中引入的。我敦促您阅读他的图灵奖获奖感言“对信任信任的反思”,这揭示了后门。简而言之,汤普森修改了系统编译器,在登录程序中添加了一些代码,让他可以登录任何帐户。然后他修改了编译器,在编译编译器的时候插入了这个编译器修改的代码,他重新编译了编译器。最后,他恢复了编译器源代码,不做任何特别的事情。从那时起,即使源代码中没有任何可见的东西,编译器也会使后门永久存在。这说明仅仅追溯源代码的历史是不够的:必须追溯整个系统的历史,包括在任何时候构建系统所涉及的每个程序和数据文件的起源。
Thompson 后门依赖于对编译器的控制。在控制构建或分发系统、操作系统或硬件的情况下,可以以类似的方式将后门注入应用程序。另一方面,应用程序的作者不能轻易隐藏后门。在那里,后门确实必须存在于源代码中。如果您知道要查找的内容,则在源代码中检测后门比在可执行文件中更容易:如果您考虑在正确的位置查找,那么源代码中的许多后门是显而易见的,而测试后门的存在在仅二进制可执行文件中需要更多使用调试器的工作。
算法中的后门
在极少数情况下,后门可以隐藏在算法中。这出现在密码学中:许多算法都涉及“魔法常数”,可以随意选择。良好的密码设计使用“nothing-up-my-sleeve numbers”:例如,MD5使用从正弦函数的值派生的常数。作为一个反例,由NIST在FIPS 186-3 中标准化的椭圆曲线包含看起来随机的常数。但是,这些常量可能是从一个秘密值派生的,并且知道该值可以很容易地使用这些算法来破解密码学. 不可能证明 NIST(或 NSA)实际上并没有从他们知道的秘密值中推导出常数。
在这种情况下,开源与闭源无关紧要。即使您确定软件正确实现了算法,您也需要信任算法的设计者。
看消费软件
一些平台更喜欢在基本操作系统之上安装软件的方法。在移动平台上,软件通常通过由平台供应商(App Store、Android Market 等)控制的渠道分发。此渠道可确保您获得的正是平台供应商希望您获得的。因此,它可以保护您免受恶意第三方的侵害,这些第三方可能会试图诱骗您安装合法应用程序的特洛伊木马版本。这首先不能防止恶意应用程序,因为平台供应商只会对他们分发的应用程序进行非常粗略的检查(如果有的话)。
在桌面端,商业软件通常直接分发给消费者或通过一般可靠的第三方(ISP,过去是邮件或实体店)分发。免费软件是另一回事。大多数 Linux 发行版都包含大量软件,并对应用程序包进行签名。就像在移动案例中一样,软件包制造商所做的只是粗略的检查(尽管他们确实拒绝看起来不可靠的应用程序),因此您不能指望他们检测到应用程序作者引入的后门。但是你可以限制你的信任给应用程序作者和分发维护者,因为分发基础设施可以防止第三方篡改。如果发现后门,您可以指望它得到快速纠正,并在安全升级可用时立即接收。Mac OS X 有类似的分销渠道(一个官方商店和几个免费软件分销商)。
Windows 世界不同:Windows 用户通常通过无控制的渠道安装大量第三方零成本软件,并且这些软件没有自动升级机制。我可以在 Ubuntu PC 上舒适地工作,使用的软件很少,Ubuntu 没有在签名包中提供;在 Windows 上,我需要许多第三方程序(网络浏览器、文字处理器、许多“生产力”小程序……)。这一点,再加上攻击者更多地针对 Windows,因为大多数潜在的受害者都在运行 Windows,这使得后门的风险更高。不是直接因为 Windows 是封闭源代码,而是因为它缺乏应用程序分发基础架构。这样的基础设施既可以在自由和开源世界中工作,也可以在闭源付费世界中工作。
一般注意事项
很难确定后门的历史或获得准确的统计数据,因为根据定义,真正成功的是那些我们不知道的。然而,发现失败尝试的能力可能具有指导意义。关于 Linux 内核,有一个著名的尝试注入后门,但由于源代码控制的不一致而被捕获。您可以在 Linux 内核邮件列表上观看发现的展开;有很多文章,例如关于 Kerneltrap、SecurityFocus。
总而言之,当谈到后门时,我看不出开源软件和闭源软件之间的内在赢家。开源软件确实有可能达到与闭源软件相同的保证水平,同时保持广泛曝光带来的优势。如果您愿意为此付费,您当然可以让某人负责开源软件。所以开源软件能够达到更高的保证水平——但这并不意味着它在所有情况下都可以。
开源获胜的方法之一是:如果您担心特定应用程序中的特定后门(而不是整个系统)。使用开源代码,可以看源码,看是否有主密码,或者随机数是否生成正确。