在哪里(如果有的话)画出适合回购的线。
这可能看起来令人沮丧,但其中很多只是常识。也就是说,如果没有人报告问题,那么一切都会好起来的。
这并不像一开始听起来那么糟糕。有很多阶段有人可以报告问题。要了解这些事情是如何完成的(并让您相信这些信息不仅仅是表面上的价值),让我们来看看在某些 Linux 发行版上将包放入官方存储库的过程。尽管那里有几十个发行版,但我们几乎只有三个主要的基础存储库,其他发行版从中提取自己的存储库:
- Debian - Kali 或 Ubuntu 从中获取软件包,然后 Ubuntu 再次进入 Mint。
- RedHat - 通过 Fedora 测试包是否包含(或通过 OpenSUSE 测试包包含的 SUSE)。
- Arch/Gentoo - 如果有足够多的人使用它们,就会有大量用户贡献的软件包集包含在主存储库中(更多发行版也来自她,例如,Majaro 或 BlackArch 是 Arch 的旋转)。
让我们看一下每个模型使用的阶段,以及检查这些包的额外工作量。但首先是一些普遍的担忧:
一般的
许多人使用的软件(我的意思是很多人,例如httpd)也由许多人维护。这样的环境将首先具有编码审查和报告试图破坏代码的用户的方式。
此外,在许多人使用的软件中,CVE 猎手(例如,当时碰巧研究该软件的研究人员)会在数小时内捕获一个故意的恶意软件。
除了可能查看软件本身源代码的人之外,发行版还为每个软件包提供软件包维护者。如果一个不可靠的功能被推送到一个软件的代码存储库中,并且发行版中该软件包的软件包维护者注意到了它,他将报告它(而不是更新他在发行版中的软件包)。
此外,在极其乐观的情况下,将一个软件的新版本添加到存储库中(需要编译和功能测试)需要 20-30 小时(我最近看到的最好的是 Vim 8,添加到 Arch repos 需要 17 小时正式发布后)。如果在下一个版本中存在由故意破坏引起的已知 CVE,包维护者将不会更新存储库中的包(在任何发行版中)。
Debian
Debian 有debian 测试和 debian 不稳定,Debian 用户可以(并且经常这样做)使用不稳定的软件包。Debian 不稳定版最常被软件包维护者逐个软件包使用。Debian 测试被希望更快地获得最新软件的人们广泛使用。Debian 建议,debian 测试中的软件包通常不像启用了安全更新的稳定版本那样安全。
极其关键的软件(例如httpd或openssl)会受到额外的审查。Debian 开发人员的安全团队会检查最重要的软件包(没有检查每一行代码,但会进行大量检查)和几乎所有的 CVE。他们的错误跟踪器在查找和修复问题方面非常有效。
另外,我知道 Debian 安全团队中至少有一名成员在某些软件包上运行CBMC 编译器。
红帽
在 RedHat(和类似发行版)中包含软件包是通过使用开放发行版作为测试场来执行的。对于 RedHat,这就是 Fedora。但这并不是说可以简单地将软件包添加到 Fedora。相反,对要包含的软件包进行了大量审查:Fedora 的包装指南是彻底的。
还有更多,在进入 RedHat 的 repos 之前,一个包必须在 Fedora 主 repos 中表现良好,但要进入 Fedora 主 repos,包应该首先在 EPEL repos 中。并且 EPEL 存储库也根据包指南进行审查。
拱
这是上述两者的混合。要进入 Arch 上的主仓库,包必须在AUR上表现良好(并且很受欢迎) 。
然而,有一个CVE 社区安全团队,就像在 Debian 中一样。
额外说明
因此,该软件包在其社区的开发阶段进行检查。如果社区很小(比方说,只有作者),第二个看到它的人将是发行版上的包维护者。如果单个包维护者或社区成员对更改提出危险信号,则很可能会落入安全团队(或 CVE 猎人)的手中并得到处理。
所有这些似乎仍然很粗略,因为它取决于人们报告的事情。然而,如果你从统计学上考虑,攻击一个由 3 个人使用的包裹几乎没有什么好处。为数百万人使用的软件包添加一个狡猾的代码更改将是有利可图的,但它需要通过数百人的审查。让一个人阅读进入发行版的每一行代码在确定安全漏洞方面可能不如当前使用社区眼睛有效。
真正的危险在于特定于语言(且独立于操作系统)的存储库:类似于pip(python)、gem(ruby) 甚至 CPAN (perl)。确实有人在看里面的包,但是你可以在那里发布一个包含恶意软件的包,它可能会被忽视好几天。