验证开源软件未被篡改

验证开源软件未被篡改

我即将下载一些 OSS 软件,我想确保(以合理的确定性)它没有被篡改以插入恶意软件。具体来说,它是一个密码管理器(KeePassX),这似乎是黑客攻击的一个极具吸引力的目标,因此我感到特别偏执。

我能想到的两个恶意软件插入载体是:

  • 恶意软件进入官方源代码。
  • 恶意的分叉或构建取代了网站上的官方版本。

下载页面确实提供了校验和;然而,这似乎无法防止上述两种黑客攻击。

我没有专业知识或时间进行源代码审计。

检查敏感性质的开源软件是否含有恶意软件的最佳做法是什么?

答案1

如果您害怕来源(您的问题暗示了这一点),那么您就不可能信任该软件。

解决办法是不再惧怕源头。

要做到这一点,你可以关注这样一个事实:在数千个甚至数百万个 OSS 软件项目中,被感染的项目数量以及被感染的代码获得批准并合并到主代码库中的数量为零。

您还可以关注问题的逻辑:由于有大量的眼睛仔细检查每一段代码,而且恶意软件制造商收买足够多的眼睛来强制包含恶意代码的可能性极低,因此恶意代码被放入此类工具中的可能性也为零。

出于这些原因,我尝试坚持使用信誉良好、备受推荐、支持良好且积极开发的 OSS 工具来处理关键软件。在所有这些情况下,我们都在玩概率游戏。虽然默认概率极低,但活跃软件项目被感染的概率甚至低于默认概率。

答案2

你想有多偏执?你信任你的编译器吗?有一个有趣的故事(阅读本节关于信任的思考),由 Unix 的原始创建者之一 Ken Thompson 提出。它描述了一个系统,其中登录程序有一个后门,允许他访问任何机器。编译器被修改,因此当有人编译登录程序的干净源代码时,编译器会注意到并插入后门代码。

编译器还会注意到是否有人在编译编译器的干净源代码,并在那里插入正确的代码。在那些日子里,一切都可以作为源代码使用,但您需要一个编译器的二进制版本作为起点。因此恶意代码永远不会出现在源代码中,而是在系统重新编译时传播自身。这将非常难以弄清楚,基本上需要审计正在运行的代码。

回到最初的问题,你必须信任某个人。问题是你需要走多远?对于一个知名的项目,如果出现问题,很有可能有人会很快注意到。

答案3

如果您找到了该软件包的镜像,您可以与它们的校验和进行比较。

这将防止第二个向量,前提是包在被替换之前已经被镜像。

为了防范第一个向量,您可能需要查看源代码中的更改。

答案4

恶意软件进入官方源代码。

除非您正在处理每日构建,否则这种情况不太可能发生。

恶意的分叉或构建取代了网站上的官方版本。

这需要访问网站,而这不太可能在不被人注意的情况下发生,你应该更加担心 MySQL 的网站受到损害。

下载页面确实提供了校验和;然而,这似乎无法防止上述两种黑客攻击。

当然有...有人必须发布那些不是自动生成的值。

相关内容