什么是开源?
开源软件是其源代码已由其版权所有者公开的软件。在真正的开源许可证下,软件是协作开发的,其他程序员可以查看、修改或使用自己的代码。这种"纯"开源模式通常被称为FOSS(自由和开源软件)。
开源的一个变体是"源代码可用",这意味着没有授予修改或以其他方式使用代码的权限,但它可供检查。出于安全目的,这与真正的开源一样好,因此当我在本文中提到"开源"时,我包含"源代码可用"的代码。
什么是闭源?
大多数软件都是由商业公司编写和开发的。可以理解的是,这些公司热衷于不让其他人窃取他们的辛勤工作或商业机密,因此他们使用加密隐藏他们的代码,以免被窥探,任何未经许可使用或修改代码的尝试都将导致诉讼或更糟。
那么问题出在哪里呢?
正如我所说,这一切都是可以理解的,但是在安全性方面,它提出了一个主要问题。如果没有人能看到程序所做的事情的细节,我们怎么知道它没有做恶意的事情呢?基本上我们不能,所以我们只需要信任所涉及的公司,这是我们偏执的安全类型不愿意做的事情(有充分的理由)。
为什么开源是最好的解决方案?
如果代码是开源的,那么它可以由任何有资格这样做的人独立检查和审计,以检查是否存在后门、漏洞或其他安全问题。开源不是一个完美的解决方案(见下文),但它是验证软件是否只做它应该做的事情的唯一方法。
即使代码尚未经过审核,它可免费进行审核的事实也强烈表明它是可以信任的,因为开发人员不太可能包含恶意代码,然后让任何愿意查看的人发现它。
不是一个完美的解决方案...
不幸的是,拥有审核开源软件(通常是免费的)的技能和时间的人数量有限,这意味着绝大多数开源程序尚未经过审核。
这个问题变得更加复杂,因为许多开源程序非常复杂,包含成千上万的代码行,所以即使它们已经过审计,审计人员也完全有可能错过了一个问题(特别是如果恶意代码被故意隐藏)。
但。。。
因此,开源并不能保证程序是"干净的",但它仍然是我们拥有(或可以拥有)最好的保证。另一种选择是闭源,不提供任何保证。
始终验证开源程序
因此,开源对安全性非常有用。耶!但是你怎么能确定你刚刚下载的开源程序没有被以某种方式篡改呢?
这听起来像是妄想的阴谋幻想,但在 2016 年 <> 月,最流行的 Linux 开源操作系统版本之一 Linux Mint 的网站遭到黑客攻击,下载者可以使用该操作系统的受损版本,
"黑客制作了一个修改后的Linux Mint ISO,里面有一个后门,并设法入侵我们的网站以指向它。"
受感染的Linux ISO映像安装了带有Internet Relay Chat(IRC)后门Tsunami的完整操作系统,这使攻击者可以通过IRC服务器访问用户的系统。所以威胁是非常真实的。
在这种情况下,费心对文件的 MD5 哈希进行校验和的下载者会发现欺骗,但这种哈希检查并不是可靠的保护,因为如果网站首先可以被黑客入侵,那么用验证所包含文件的虚假校验和替换已发布的校验和是微不足道的。
对于开发人员 来说,更好的是对其软件进行数字签名,以便用户可以验证文件的来源(Mint 开发人员在这方面非常宽松,因为他们的软件没有进行数字签名,甚至使用的 MD5 哈希函数也已知已损坏!
请参阅我的文章 数字签名 - 为什么以及如何使用它们以获取更多信息。不幸的是,验证数字签名是一种痛苦,但如果您关心安全性,这是必要的。
我还应该指出,理想情况下,所有软件都应该进行数字签名和验证,但由于任何人都可以自由修改开源代码,因此它比封闭源代码更容易篡改。因此,验证开源程序尤为重要。
开源:结论
开源不是一个完美的解决方案,但它提供了最好的(也是唯一!)保证软件是可信的。另一种选择是闭源,它不提供任何保证(除了对公司的盲目信任,这是科技公司不值得的信念)。