GPG 检查各种发行版上的软件包

GPG 检查各种发行版上的软件包

各种 Linux 发行版都可以使用 gpg 来验证例如通过 http 下载的新软件包。但是如果保存包裹的服务器被黑客入侵会发生什么?好的,他们需要一个新的 gpg 密钥,但是他们如何保证新的 gpg 密钥是有效的 gpg 密钥?在新的 gpg 密钥下载到客户端之前,没有有效的 gpg 密钥,因此当软件包 [包含新的 gpg 密钥] 未使用 gpg 密钥“验证”时,会出现一个窗口。有没有什么方法可以以“权威”/安全的方式向客户端提供新的 gpg 密钥?

答案1

如果只有保存软件包的服务器受到损害,而不是私人签名密钥受到损害,那么就没有什么可做的了。旧密钥仍然有效,并且攻击者修改的包将被检测到。我认为您的问题是如果签名密钥被泄露会发生什么。

只要旧密钥尚未过期,人们就会继续下载旧软件包,而不会意识到密钥已被泄露。理想情况下,包管理工具应该检查密钥是否已被撤销(我不知道 apt、yum 和朋友是否这样做)。然而,应对妥协的第一步是停止分发使用旧密钥签名的软件包,并开始分发使用新密钥签名的软件包。因此,任何恶意修改的软件包在更新之前只会保留在镜像中。

当人们开始接收使用新密钥签名的包时,他们会收到一条错误消息,告诉他们这些包尚未签名。这有望促使他们询问发生了什么并尝试获取新密钥。

该妥协还将在安全邮件列表和各种行业新闻渠道中公布。因此,如果您遵循这些,您就会收到通知。当然,您也应该警惕这些:攻击者可能会破坏列表服务器或开发人员的帐户,并使用实际上是他自己的私钥的新公钥发送假密钥泄露警告。

分发新密钥没有灵丹妙药。您首先需要一个可信渠道来分发密钥,或者更准确地说,建立对新密钥的信任。这与建立对旧密钥的信任一样困难。 (换句话说,大多数人会从 HTTP 网站或未签名的 CD 映像中获取它。)如果您信任该网站(以及制作该网站证书的 CA,并且您正在使用的浏览器及其可信基础!)尚未受到损害。或者,如果您认识并信任拥有钥匙的人,您可以向他们索要钥匙。


请注意,上面我在宽松的意义上使用“包”,假设一个简单的模型,其中包直接使用分发签名密钥进行签名。事实上,在某些发行版中(例如所有使用 APT 的发行版),签名的是包含软件包的加密校验和列表的文件,并且有一个两阶段的过程,安装程序将检查软件包是否具有预期的校验和,并且该列表具有预期的签名。原理是相同的:泄露密钥的攻击者会注入恶意包,并列出带有恶意包校验和的文件,并使用泄露的密钥进行签名。该解决方案需要恢复列表文件和包。

答案2

提供新的“权威”密钥的标准过程是通过使用旧密钥签名的包。如果您信任旧密钥(并且信任 GPG),那么新密钥将分发到用旧密钥签名的包中。现在,您可以开始使用新的了。

这些包可能保存在不安全的服务器上,因为每个包都会被检查签名是否正确。

仅当打包私钥被泄露时才会出现问题。即签署所有包的主密钥。 (Debian SecureApt,Ubuntu SecureApt,软呢帽)。如果发生一次,那就太难看了。

相关内容