如何保证Debian软件包的真实性?


8

有哪些安全系统和流程可以防止恶意第三方入侵/破坏Debian镜像中代码的安全性,或验证我们获得的软件包实际上是维护者认为的软件包?

Answers:


14

验证包裹

镜像的内容使用PGP密钥直接或间接签名。从Debian发行版的“根”开始:

  • Release在中使用分离的签名签名Release.gpg,包含所有程序包索引和安装程序哈希(InRelease现在将两者结合在一起)的哈希(MD5,SHA1,SHA256 );
  • 包索引(例如binary-amd64)包含封装的散列(MD5和SHA256)。

哈希和签名通过工具检查,例如apt-get使用存储在系统上的PGP密钥(由管理apt-key)。因此,只要接收系统是健全的,默认情况下,如果尚未通过归档PGP密钥(间接)对其进行签名,则不能从Debian归档安装任何软件包。如果镜像上的任何入侵者也无法控制相关的PGP密钥,则它们将无法替换二进制文件。

控制后视镜

这意味着破坏归档文件不足以实际损害最终用户系统。您还需要破坏那些系统已经信任的PGP密钥。(由此得出的结论是,向Debian系统添加密钥并不是一件容易的事。)这在一定程度上解决了您的第一个问题,因为档案库的安全性并不重要。尽管如此,关键系统(发生签名的地方)仍受到严格的监视和监督,很少有人可以访问它们。

维护者的期望

确保软件包“实际上是维护者认为的软件包”涉及更多。这是包采取的路径:

  • 该软件包由维护者准备,并用Debian密钥环中的密钥签名(即,属于上载Debian Developer或Debian维护者的密钥,该密钥已上传到Debian密钥环服务器并由密钥环维护团队合并);
  • 已签名的程序包将上载到存档,并在其中进行验证(此外,使用的密钥必须在当前密钥环中且不得已过期,签名必须有效,并且如果该程序包是由DM签名的, DM必须具有该软件包的相关权限);
  • 所有上传的二进制文件都按原样推送到最终存档中(我在这里简化了一点,但这就是效果);
  • 任何缺失的二进制文件由内置buildd并通过buildd的PGP密钥签署,并推到最终存档(这知道什么buildd键是有效的,并且对这些文件的验证);
  • 所有这些更新最终都将通过适当的索引更新(如上所述签名)被推送到镜像网络。

如果维护者将二进制文件和软件包源一起上传,则这些文件最终将被提供(暂时)。由于现在上传二进制文件是可选的,因此跳过它们越来越普遍,最终将删除上传的二进制文件。(在Ubuntu中一直是这种情况。)其他二进制文件是否符合维护者的期望取决于所构建的网络。因此,建筑物也是关键的系统,在严密的监督下并且几乎没有人接触。由于所有工件均已签名,因此始终可以验证文件的完整性:首先根据维护者的密钥,然后针对buildds的密钥,最后针对存档的密钥。

正如plugwash指出的那样,原始签名在镜像上不可用,并且任何DD都可以上载丢失的二进制文件。原始签名可以从debian-devel-changes档案中获取。

总而言之,尽管当前系统并不完美,但它确实为您可以从镜像下载的所有文件提供了可追溯性。为了改善这种状况,我们付出了许多努力:可复制的版本(将允许独立验证二进制文件与已发布源的对应关系),删除维护者提供的二进制文件...


令人赞叹的全面,但您也可以合理地告诉发布者离开并阅读文档。:-)
Faheem Mitha

@FaheemMitha我犹豫了,但是什么文件呢?有wiki.debian.org/SecureApt,但并没有涵盖所有内容...将它们拼凑起来是相当复杂的,除非有我不知道的其他文档!
史蒂芬·基特

那么,用户运行的debian OS上是否预嵌入了公共PGP密钥-将它们与关键系统上的私钥(在发生签名的地方)配对-并apt-get使用这些本地预嵌入的密钥验证软件包,因为它信任它们?
the_velour_fog's

1
@the_velour_fog是的,这是(几乎)正确的;公用密钥在debian-archive-keyring包装中提供。使用这些密钥apt-get验证Release文件,并使用ReleasePackages文件中包含的哈希值对文件包进行验证。
史蒂芬·基特
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.