开源操作系统和软件如何保持安全?

信息安全 linux 开源
2021-08-16 10:14:37

我一直在想他的事。我在家里的 PC 上运行 Linux。我有一个越狱的 iPhone。它们都具有使它们非常有吸引力的属性,而且它们也是免费的!但是我还没有找到任何讨论如何保护它们免受特洛伊木马攻击的内容。我不认为我可以对源文件运行病毒扫描程序来查看它们是否安全。如果可以的话,我不知道该怎么做。

我应该对 Linux 和越狱 iPhone 的安全性有多大信心?什么可以防止由私人或政府人手造成的故意安全漏洞?

我知道即使使用私人开发的操作系统也存在风险,但在这些情况下,我对谁对它们负责。这两种情况以及其他开源或众包软件并非如此。

4个回答

理论

  • 闭源软件大多没有木马,因为此类软件的供应商对软件内容负有法律责任,并且如果隐藏的恶意代码被泄露(例如通过逆向工程)很容易被追踪到。

  • 开源软件大多是非木马的,因为当源代码公开可见时,很难不引人注意地走私额外代码。据推测,开源代码经常被其他人阅读,因此后门很快就会被发现。

做法

  • 闭源软件大多没有木马,因为没有人愿意在其中植入后门。
  • 开源软件大多没有木马,因为没有人愿意在其中植入后门。

如果我要在开源操作系统中包含后门,我会尝试将其放入Random Number Generator中。编写一个适当的、安全的 RNG 是很困难的,因此一些模糊的更改可能会被忽视,但会导致可预测的输出——因此密钥对生成的可预测结果(例如,对于 SSH 密钥)以及类似的事情。而且由于编写正确的 RNG 的难度,如果后门被发现,我仍然可以合理地声称仅仅是无能,而不是恶意。一个恰当的例子:大约一年前,OpenBSD 的 RNG 代码中有这样的后门谣言(显然,谣言没有得到证实——但是,我承认我自己没有检查代码)。

必须记住的是,检测后门(在源代码或编译代码中)和在不被发现的情况下植入后门都是困难的艺术。职业间谍厌恶轻率;特洛伊木马通常被认为“风险太大”。

开源软件的机密性不如闭源软件,但在考虑后门时这并不重要,而一般的漏洞几乎总是偶然的。在这个答案中,我将只讨论后门,而不是更广泛的漏洞问题(只有一小部分漏洞是故意的)。为了打击后门,您需要对代码的质量完整性进行严格控制公开代码并不会严重削弱此类控制。

诚信:他们做的就是你得到的

所说的完整性是指确保您运行的代码是开发人员编写的代码这要求分发链是可追溯的,或者开发人员使用您识别的签名对代码进行签名。当需要安全软件时,通常会使用签名;闭源和开源是平等的。分发的工作方式不同,对任何一方都没有明显的优势:封闭源代码倾向于直接分发(您直接从供应商处获得),而开源软件倾向于多次复制,这既增加了篡改的机会,也增加了检测篡改的机会。

完整性还有第二部分,它在开发人员的领域内。使用闭源软件,您依赖软件供应商的内部控制。这通常不是您可以直接看到的;唯一有点独立的信息来源是供应商的安全认证,它们只能提供这么多的保证。在开源方面,如今大多数备受瞩目的项目都有公共存储库,使得对源代码的每次更改都可以公开追踪。理论上,即:很少检查源代码的完整性,但有可能偶然发现违规行为。在实践中,双方的完整性控制水平无处不在。开源与封闭源不是区别因素

作者介绍的后门

Integrity 告诉您只有记录在案的开发人员才能生成代码。质量告诉您他们是否引入了后门(故意或被颠覆)。对于闭源供应商,很少有任何超出供应商声誉的质量保证,可能还有认证(假设您认为它们表明质量 - 事实上认证可能涉及对开发人员的犯罪背景调查,但不太可能抓住微妙的后门)。理论上,使用开源代码,任何人都可以看到代码。同样,在实践中,没有人会看它的大部分内容。但由于开发者的名字与每段代码公开相关,后门的作者冒着被暴露的风险。假设后门被这样识别:毕竟大多数漏洞都是偶然的。

看看一个著名的后门很有趣,它是由Ken ThompsonUnix中引入的。我敦促您阅读他的图灵奖获奖感言“对信任信任的反思”,这揭示了后门。简而言之,汤普森修改了系统编译器,在登录程序中添加了一些代码,让他可以登录任何帐户。然后他修改了编译器,在编译编译器的时候插入了这个编译器修改的代码,他重新编译了编译器。最后,他恢复了编译器源代码,不做任何特别的事情。从那时起,即使源代码中没有任何可见的东西,编译器也会使后门永久存在。这说明仅仅追溯源代码的历史是不够的:必须追溯整个系统的历史,包括在任何时候构建系统所涉及的每个程序和数据文件的起源。

Thompson 后门依赖于对编译器的控制。在控制构建或分发系统、操作系统或硬件的情况下,可以以类似的方式将后门注入应用程序。另一方面,应用程序的作者不能轻易隐藏后门。在那里,后门确实必须存在于源代码中。如果您知道要查找的内容,则在源代码中检测后门比在可执行文件中更容易:如果您考虑在正确的位置查找,那么源代码中的许多后门是显而易见的,而测试后门存在在仅二进制可执行文件中需要更多使用调试器的工作。

算法中的后门

在极少数情况下,后门可以隐藏在算法中。这出现在密码学中:许多算法都涉及“魔法常数”,可以随意选择。良好的密码设计使用“nothing-up-my-sleeve numbers”:例如,MD5使用从正弦函数的值派生的常数。作为一个反例,NISTFIPS 186-3 中标准化椭圆曲线包含看起来随机的常数。但是,这些常量可能是从一个秘密值派生的,并且知道该值可以很容易地使用这些算法来破解密码学. 不可能证明 NIST(或 NSA)实际上并没有从他们知道的秘密值中推导出常数。

在这种情况下,开源与闭源无关紧要。即使您确定软件正确实现了算法,您也需要信任算法的设计者。

看消费软件

一些平台更喜欢在基本操作系统之上安装软件的方法。在移动平台上,软件通常通过由平台供应商(App Store、Android Market 等)控制的渠道分发。此渠道可确保您获得的正是平台供应商希望您获得的。因此,它可以保护您免受恶意第三方的侵害,这些第三方可能会试图诱骗您安装合法应用程序的特洛伊木马版本。这首先不能防止恶意应用程序,因为平台供应商只会对他们分发的应用程序进行非常粗略的检查(如果有的话)。

在桌面端,商业软件通常直接分发给消费者或通过一般可靠的第三方(ISP,过去是邮件或实体店)分发。免费软件是另一回事。大多数 Linux 发行版都包含大量软件,并对应用程序包进行签名。就像在移动案例中一样,软件包制造商所做的只是粗略的检查(尽管他们确实拒绝看起来不可靠的应用程序),因此您不能指望他们检测到应用程序作者引入的后门。但是你可以限制你的信任给应用程序作者和分发维护者,因为分发基础设施可以防止第三方篡改。如果发现后门,您可以指望它得到快速纠正,并在安全升级可用时立即接收。Mac OS X 有类似的分销渠道(一个官方商店和几个免费软件分销商)。

Windows 世界不同:Windows 用户通常通过无控制的渠道安装大量第三方零成本软件,并且这些软件没有自动升级机制。我可以在 Ubuntu PC 上舒适地工作,使用的软件很少,Ubuntu 没有在签名包中提供;在 Windows 上,我需要许多第三方程序(网络浏览器、文字处理器、许多“生产力”小程序……)。这一点,再加上攻击者更多地针对 Windows,因为大多数潜在的受害者都在运行 Windows,这使得后门的风险更高。不是直接因为 Windows 是封闭源代码,而是因为它缺乏应用程序分发基础架构。这样的基础设施既可以在自由和开源世界中工作,也可以在闭源付费世界中工作。

一般注意事项

很难确定后门的历史或获得准确的统计数据,因为根据定义,真正成功的是那些我们不知道的。然而,发现失败尝试的能力可能具有指导意义。关于 Linux 内核,有一个著名的尝试注入后门,但由于源代码控制的不一致而被捕获。您可以在 Linux 内核邮件列表上观看发现的展开有很多文章,例如关于 KerneltrapSecurityFocus

总而言之,当谈到后门时我看不出开源软件和闭源软件之间的内在赢家开源软件确实有可能达到与闭源软件相同的保证水平,同时保持广泛曝光带来的优势。如果您愿意为此付费,您当然可以让某人负责开源软件。所以开源软件能够达到更高的保证水平——但这并不意味着它在所有情况下都可以。

开源获胜的方法之一是:如果您担心特定应用程序中的特定后门(而不是整个系统)。使用开源代码,可以看源码,看是否有主密码,或者随机数是否生成正确。

使用开源软件,任何人都可以查看和分析代码,所以这个模型实际上有很多用途。许多眼睛等...

当你有一个庞大的代码库,而没有足够的合格、有经验的眼睛时,问题就来了——事情可能会漏网。

但是,对于封闭源代码,您实际上是在信任开发人员——您怎么知道他们已经正确分析了代码?根据经验,我发现大量供应商要么没有进行代码审查,要么做得很糟糕,以至于应用程序中存在巨大的漏洞,如果您阅读任何建议,您会发现有多少是由于错误或遗漏造成的在编码实践中!

我不确定开源或闭源是否会胜出,但我强烈支持所有软件供应商都应该在发布之前对所有代码进行独立的代码审查和渗透测试(由经过批准的渗透测试人员)的想法!

至于开源系统的安全性,我更喜欢考虑类似的物理世界示例,例如门锁而不是多眼论点,因为许多眼多年来一直错过漏洞(例如绑定)。所有前门锁的细节都是众所周知和理解的,但这些知识并不能降低其安全性。该锁的安全性来自其坚固的设计和结构。它将螺钉头暴露在房屋内部(如果有的话);它由坚固的金属制成,依此类推。

好的开源代码也是如此。尽管有公开可用的蓝图,但良好设计的良好构造可提供可靠的安全性。这给我们带来了如何确认软件的构建。在我看来,具有令人放心的哈希检查的流行 Linux 发行版是一个很好的开始。

越狱属于不同的类别。对我来说,这类似于拆除我们家锁的面板并修改锁系统。我自己可能会这样做,但我个人不愿意让一个完全陌生的人为我这样做。根据定义,越狱利用安全漏洞允许“root”您的系统。