如何验证git repo中的大软件包是安全的?


9

我正在专门查看emacs头盔,它具有以下属性:

  • 它有成千上万的提交
  • 它主要由一个用户维护
  • 该维护者没有其他个人资料(社交媒体等),可以通过几次搜索找到
  • 它是积极维护(今天)

由于我要在计算机上安装任意代码以在文本编辑器中使用,因此我想验证此代码是否经过了任何审查过程。我想说的是“好吧,它是开源的”,但是我离自己审核所有代码的能力还很远。我想假设社区中的其他人已经对其进行了审查,但其中一项可能是错误的,其中有两项是最新的提交。我还缺少其他策略吗?

记录起来很简单:如果贡献者使用的是一次性帐户,或者没有审查程序,那么“开源”就没有多大关系。


6
验证 ”是一个大词。用这个词的常规意义来说,我认为答案是“您不(您不能)”。您可以跟踪图书馆的开发活动,还可以检查数字签名等,但是我相信没有什么可以确定的。
德鲁

3
好问题。FWIW,Emacs随附的代码已经过审核(通过emacs-diffs邮件列表),但是如果某些贡献者要添加安全漏洞,我敢肯定他能够做到这一点而不会被注意到。当然,如果在Emacs中已经没有很多大的意外安全漏洞,我会感到惊讶,因此我不确定这可能有多少问题。因此,我认为,为了能够获得更加令人放心的答案,需要将注意力集中在特定的简单威胁上(例如,检查代码是否执行某种非隐藏监视应该相当容易)。
Stefan 2015年

2
维护者多年来一直活跃在emacs devel上,可以通过搜索进行验证,因此可以保证:lists.gnu.org/archive/cgi-bin/…–
Tom

1
@Stefan,我只是想抽查。从我的角度来看,mapatoms可以用投入的“危险”组在一起start-processevalfuncall。当然会有一些误报,但是,如果程序包不使用任何这些功能,则可以肯定地将其标记为无害。
abo-abo

1
您需要添加新的make-process,以及call-processdbus-<foo>make-network-stream,然后vc-do-commandvc-git-command,...而且如果你把evalfuncall在“危险”的范畴,那么大多数/所有的包都是危险的。
Stefan

Answers:


7

简短的答案是,除非您自己仔细阅读代码,否则您会非常信任。话虽这么说,信任一个源于上游SCM的项目要比直接从Emacs Wiki中提取的项目安全一些。但是从根本上说,您信任该软件包的作者不会变态,不会滥用在Emacs会话下运行任意代码的能力。

有些事情可能会让您感到更安全:

  • 坚持受欢迎的套餐

尽管流行的软件包不会自动获得更多评论,但事实是它们具有更多的用户,这意味着在恶意行为影响您之前就已经将其检测出来的机会增加了。

  • 查看代码指标

在github上,您可以很好地了解项目的贡献历史。即使主要作者所做的大部分提交都具有广泛的作者,这表明仍有其他人对代码的稳定性和有效性抱有积极的兴趣。

  • 首选GNU ELPA和MELPA Stable,而不是跟踪HEAD(MELPA)或允许未经审查的提交(果酱)的存储库

尽管生活在最前沿,对于那些想要最新的闪亮功能的人来说具有一定的吸引力,但这确实意味着您可能是第一个接受对环境的最新承诺的人。即使不是恶意软件,您也可能会以不断变化的状态获得软件包,而“正式”发行版本至少会经过一些粗略的审查。例如,只有具有提交权限的emacs-devel用户才能提交GNU ELPA软件包。

最终,我敢肯定,即使只是概念验证实验,也会通过软件包系统在某个时候违反安全性。这就是您可能必须依靠常规备份的要点。


1
当提到“信任”时,果酱是一个可怜的档案。它允许任何人以任何名称上传任何软件包,并进行零验证或审阅。而且它维护得不好(仅查看未解决问题的数量)。
lunaryorn

@lunaryorn:好点,我将修改答案。
2015年

@lunaryorn MELPA比elmarmalade存储库还有更多未解决的问题,因此我怀疑这是一个可用的指标。
wasamasa

@stsquad MELPA Stable唯一给您的东西是带标签的东西发布,这些东西本来会在MELPA中最终出现,所以我不认为这比使用橘子果酱更安全。
wasamasa

1
@wasamasa对不起,我的评论措辞很差。这个数字并不能说明太多,但是公开的问题说明:对新问题的反应为零,没有评论,甚至没有标签或作业。果酱实际上已经死了。
lunaryorn 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.