了解 Linus 的开源安全法则

原创
2021/03/27 09:14
阅读数 380

本文翻译自作者 Seth Kenlon 的文章 Understanding Linus's Law for open source security

开源软件一个经常被提及的优点是,它的代码可以被任何人审查。然而,如果你真的问许多开源软件的用户,他们最后一次审查代码是什么时候,你可能会得到从茫然的目光到尴尬低语不等的答案。此外,市面上还有一些真正的大型开源应用,所以很难有效地审查每一行代码。

从这些略显不适的事实推断,你不得不怀疑。当没有人看代码的时候,它是否开放真的很重要吗?

你应该相信开源吗?

平常我们对开源都带有以往的惯性思维,即开源比其他任何东西"更安全"。但我们并不经常谈论这意味着什么,安全比较的基准是什么,或者结论是如何得出的。“更安全”是一种危险的说法,因为它意味着只要你称某件事情为开源,它就会自动地、神奇地继承增强的安全性。这不是开源的意义,事实上,这也是开源安全所反对的一点。

除非你亲自审核并理解了它的代码,否则你永远不应该假设一个应用程序是安全的。一旦你做到了这一点,你就可以给予这个应用程序充分的信任。充分信任不是你在电脑上做的事情,而是你在自己的头脑中做的事情。你信任软件是因为你选择相信它是安全的,至少在有人找到利用该软件的方法之前是这样。

你是唯一一个可以对该代码给予最终信任的人,所以每一个想要享受这种奢望的用户都必须亲自审核代码。听信别人的话是不算数的!

所以,在你自己审核和了解一个代码库之前,你能给一个应用程序的最大信任度是一个范围,从完全不信任、大概,最终到相当信任。这一点是没有捷径的。这是一个你必须为自己做出的个人选择。如果你从你非常信任的人那里听说一个应用程序是安全的,那么你可能会更信任这个软件,而不是信任一个没有得到任何可信建议的东西。并且,由于你无法审核专有(非开放源码)代码,你永远无法赋予它充分的信任。

Linus 的法则

现实情况是,不是每个人都是程序员,也不是每个程序员都有时间专门去审核成百上千行的代码。所以,如果你自己不打算审核代码,那么你必须选择相信(在一定程度上)做审核代码的人。 那么到底谁来做审计代码呢?

莱纳斯法则认为,只要有足够的眼球盯着,所有的 bug 都是浅层次的,但我们并不知道有多少眼球盯着才是"足够的"。不过,不要小看这个数字。软件的审核人数很多时候比你想象的要多。原始开发者显然知道他们所写的代码。然而,开源往往是一个群体的努力,所以代码开放的时间越长,最终看到它的软件开发人员就越多。后续开发者必须审查项目代码的主要部分,因为他们必须学习代码库,为其编写新功能。

开源软件的打包者也会参与到许多项目中,以便将它们提供给 Linux 发行版。虽然一个应用程序可以在几乎不熟悉代码的情况下被打包,但通常打包者会熟悉一个项目的代码,因为他们不想在不信任的软件上签字,也因为他们可能需要对软件进行适当修改以使其正确编译。Bug 报告者和 triagers 有时也会熟悉一个代码库,因为他们试图解决从怪异到重大崩溃的异常情况。当然,有些 bug 报告者无意中暴露了软件的代码漏洞,不是因为他们自己审查了代码,而是因为他们注意到了一些明显没有按照预期工作的东西。系统管理员通常对他们的用户所依赖的一个重要软件的代码非常熟悉。最后,还有一些安全研究人员专门挖掘代码以发现潜在的漏洞。

信任和透明度

有些人以为,因为大型软件是由几十万行代码组成的,所以基本无法审核。不过,不要被一个应用程序的运行需要多少代码所欺骗。其实你不必读懂几十甚至几百万行代码,代码是高度结构化的,可利用的漏洞很少只是隐藏在数百万行代码中的一行,漏洞通常会涉及到整个函数。

当然,也有例外。有时,一个严重的漏洞只需一个系统调用或通过链接到一个有缺陷的库就可以启用。幸运的是,由于安全研究人员和漏洞数据库的积极作用,这类错误相对容易被注意到。

有些人看到 CVE 网站这类专门对外公布项目漏洞的网站上面有众多开源软件的身影,从而推断出开源是不安全的。毕竟,这类网站所做的就是记录下安全风险并公开给大家看到。不过,不要被这些眼前看到的现象所欺骗。由于你看不到封闭软件的漏洞,但这并不意味着这些软件不存在漏洞。事实上,封闭软件确实存在漏洞,也会针对它们的漏洞推出软件更新。不同的是,所有针对开源应用的漏洞都可以让开发者和用户看到,这样就可以让大家了解漏洞的危害以及汇集大家的力量减少这些漏洞。这是提高对开源软件信任度的系统的一部分,而专有软件完全没有这个功能。

任何代码可能永远都不会有"足够"的眼球盯着,但围绕代码的社区越强大、越多样化,就越有机会发现和修复缺陷。

信任和人

在开源中,许多开发者都在同一个项目中工作,他们注意到了一些不安全的东西,但都对这个缺陷保持同样的沉默的概率被认为是很低的,因为人类很少会相互同意以这种方式进行密谋。最近一年多的 COVID-19 疫情中,我们已经看到了人类的行为是多么的不协调。

  • 我们都已经发现了一个缺陷(病毒);
  • 我们知道如何防止它的传播(呆在家里);
  • 然而,由于一个或多个人偏离了计划,病毒继续传播。

软件中的漏洞也是如此。如果有一个漏洞,一旦有人注意到它就会把它曝光。

然而,对于专有软件,许多在项目中工作的开发人员可能会注意到一些不安全的东西,但同样保持沉默却有很大的可能性。因为专有模式依赖于工资收入。如果一个开发人员说出了缺陷,那么这个开发人员最好的情况可能是会损害软件的声誉,从而降低销售量,最坏的情况是可能被解雇。开发人员获得秘密开发软件的报酬时,往往不会谈论其缺陷。如果你曾经做过开发人员,你可能已经签署了一份 NDA,并且已经接受过有关商业秘密重要性的讲座等。专有软件即使面对严重的漏洞也鼓励,甚至强制要求你保持沉默。

信任和软件

不要相信你没有审核过的软件。如果你一定要相信你没有审计过的软件,请选择信任公开给许多可能独立谈论漏洞的开发人员的代码。开源并不是天生就比专有软件更安全,但是用于修复该漏洞的现有系统的规划、实施和人员配置要好得多。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部