2021 年,人们喜爱 Linux 的理由比以往任何时候都多。在本系列文章中,我将分享 21 个使用 Linux 的不同理由。本文讨论 Linux 对开源软件安全性的影响。
开源软件经常被称赞的一个优点是,任何人都可以审查(或如安全专业人士所说“审计”)其代码。然而,如果你真的问许多开源用户上次审查代码是什么时候,你可能会得到从茫然的凝视到尴尬的嘟囔等各种答案。而且,除了这些,还有一些非常大型的开源应用程序,因此有效地审查每一行代码可能很困难。
从这些略微令人不安的事实推断,你不得不怀疑:当没有人查看代码时,它是开源的真的重要吗?
你应该信任开源吗?
在业余计算机领域,我们倾向于做出一个老生常谈的假设,即开源比其他任何东西都“更安全”。我们不常谈论这意味着什么,比较的基础是什么(比什么“更”安全?),或者这个结论是如何得出的。这是一个危险的说法,因为它暗示只要你称某物为开源,它就会自动且神奇地继承增强的安全性。这不是开源的意义所在,事实上,这正是开源安全非常反对的。
除非你亲自审计并理解了应用程序的代码,否则永远不应该假设应用程序是安全的。一旦你完成了这项工作,你就可以对该应用程序赋予终极信任。终极信任不是你在计算机上做的事情;它是在你自己的头脑中做的事情:你信任软件是因为你选择相信它是安全的,至少在有人找到利用该软件的方法之前是这样。
你是唯一可以对该代码赋予终极信任的人,因此每个想要这种奢侈的用户都必须自己审计代码。听取别人的话不算数!
因此,在你自己审计并理解代码库之前,你可以给予应用程序的最大信任级别是一个范围,从大约完全不可信到相当可信。没有作弊的方法。这是一个你必须为自己做出的个人选择。如果你从你非常信任的人那里听说某个应用程序是安全的,那么你可能会比你信任那些你没有得到可信推荐的东西更信任该软件。
因为你无法审计专有(非开源)代码,所以你永远无法对其赋予终极信任。
Linus 定律
现实情况是,并非所有人都是程序员,并非所有程序员都有时间专门审查成百上千行的代码。因此,如果你不打算自己审计代码,那么你必须选择(在某种程度上)信任那些确实审计代码的人。
那么,到底是谁在审计代码呢?
Linus 定律断言,只要有足够多的眼睛,所有的 bug 都是肤浅的,但我们并不真正知道多少眼睛才算“足够”。然而,不要低估这个数字。软件通常比你想象的要被更多人审查。最初的开发者或开发人员显然了解他们编写的代码。然而,开源通常是一个集体努力,因此代码开放的时间越长,最终看到它的软件开发者就越多。开发者必须审查项目代码的主要部分,因为他们必须学习代码库才能为其编写新功能。
开源打包者也参与到许多项目中,以便使其可用于 Linux 发行版。有时,应用程序可以在几乎不熟悉代码的情况下进行打包,但通常打包者会熟悉项目代码,既因为他们不想在他们不信任的软件上签字,又因为他们可能必须进行修改才能使其正确编译。Bug 报告者和分类员有时也会在他们尝试解决从怪癖到重大崩溃的异常问题时熟悉代码库。当然,一些 bug 报告者无意中揭示了代码漏洞,不是通过自己审查代码,而是通过引起人们对显然无法按预期工作的事物的关注。系统管理员经常深入了解其用户依赖的重要软件的代码。最后,还有安全研究人员专门深入研究代码以发现潜在的漏洞。
信任和透明度
有些人认为,由于主要软件由成千上万行的代码组成,因此基本上不可能进行审计。不要被制作一个应用程序所需的代码量所迷惑。你实际上不必阅读数百万行代码。代码是高度结构化的,可利用的缺陷很少只是隐藏在数百万行代码中的单行代码;通常会涉及整个函数。
当然,也有例外。有时,只需一个系统调用或链接到一个有缺陷的库就可以启用严重的漏洞。幸运的是,由于安全研究人员和漏洞数据库的积极作用,这些类型的错误相对容易被注意到。
有些人指向 bug 跟踪器,例如 通用漏洞和披露 (CVE) 网站,并推断开源实际上并不安全,这简直是显而易见的。毕竟,数百个安全风险被提交给许多开源项目,公开供所有人查看。不过,不要让这愚弄你。仅仅因为你看不到闭源软件中的缺陷,并不意味着这些缺陷不存在。事实上,我们知道它们确实存在,因为也有针对它们的漏洞被提交。不同之处在于,针对开源应用程序的所有漏洞都可供开发者(和用户)查看,以便可以缓解这些缺陷。这是增强对开源信任的系统的一部分,并且完全是专有软件所缺乏的。
任何代码都可能永远没有“足够”的眼睛,但是围绕代码的社区越强大和多样化,发现和修复弱点的机会就越大。
信任和人
在开源中,许多开发者在同一个项目上工作,注意到某些不安全的东西,但都对该缺陷保持沉默的可能性被认为很低,因为人类很少以这种方式相互同意串通。我们最近已经看到了 COVID-19 缓解措施中人类行为可能有多么不协调
- 我们都识别出了一个缺陷(病毒)。
- 我们知道如何阻止它传播(待在家里)。
- 然而,病毒继续传播,因为一个人或多个人偏离了缓解计划。
软件中的 bug 也是如此。如果存在缺陷,注意到它的人会将其曝光(当然,前提是有人看到它)。
然而,对于专有软件,可能存在很高的可能性,即在项目上工作的许多开发者可能会注意到某些不安全的东西,但仍然保持沉默,因为专有模式依赖于薪水。如果开发者公开反对缺陷,那么该开发者最多可能会损害软件的声誉,从而减少销量,或者最坏的情况是被解雇。被付钱秘密开发软件的开发者往往不会谈论其缺陷。如果你曾经做过开发者,你可能已经签署了 NDA,并且你已经被教导了商业秘密的重要性等等。专有软件鼓励,并且更经常地强制执行沉默,即使面对严重的缺陷也是如此。
信任和软件
不要信任你没有审计过的软件。
如果你必须信任你没有审计过的软件,那么请选择信任那些暴露给许多开发者的代码,这些开发者很可能独立地对漏洞发声。
开源本身并不比专有软件更安全,但修复它的系统在规划、实施和人员配备方面要好得多。
评论已关闭。