我怎么知道我的系统更新是值得信赖的?

每当它通知我软件更新时,我都会定期更新系统。 这是我不相信工作而不知道细节的事情之一,但最近我变得很好奇:我怎么知道那个

  • 检查更新的过程只会显示合法的更新?
  • 我收到并安装的更新不是恶意的?

我知道我有一组软件源,我通过URL指定自己,我是否相信这些来源是我的决定。 但是一旦我指定了这些url会发生什么?

从现在常见的情况来看,我怀疑这些来源的真实性是用HTTPS / SSL的方式来validation的,即我有一些证书可以通过某些权限进行validation,这意味着我需要在某处安装可靠的根证书(可能他们来自系统)。

此外,我猜这些包是加密签名的,就像GPG或类似的一样。

这些假设是否正确? 我在哪里可以检查使用的钥匙/证书? 如何validation它们是否正确? 我如何validation它们实际上是否已被使用? 是否有配置选项使流程或多或少谨慎,它们的默认值是什么? 是否存在已知的攻击,或者最近是否存在漏洞? 我似乎记得Windows不久前有这样的问题。

我在12.04,但我认为这可以更普遍地回答。

这是一个很好的问题。 答案(当然)相当复杂,但让我试着为你分解。 我们先来看看技术流程:

信任链

我们不使用SSL来保护APT,我们使用加密哈希(SHA256,最近)和OpenPGP签名。 这使您可以信任不受信任的镜像,并避免必须信任CA PKI。

将存储库添加到APT的sources.list ,还必须使用apt-key命令将其PGP密钥添加到APT的可信密钥apt-key 。 密钥环附带了Ubuntu存储库的密钥。 当您使用apt-add-repository命令添加PPA时,它会为您添加密钥(通过SSL从Launchpad获取)。

信任链是:

  1. 每个sources.list入口将APT指向存储库中的Release文件,具有Release.gpg签名(或者它们可以组合为InRelease文件)。 此文件描述了存储库,并且必须通过APT密钥环中的密钥进行签名。
  2. Release文件包含所有PackagesSources文件的加密哈希值。 这些列出了存储库中可用的所有包和版本。
  3. PackagesSources文件包含每个包的加密哈希值。
  4. 包本身没有签名。 这是不必要的,从镜像签名的Release文件中有一条信任链​​。 但是,用于构建二进制包的源包是由上载它们的开发人员进行PGP签名的。

您可以在Debian wiki上阅读有关存储库格式的更多信息。

这个链意味着我们不必信任任何中间镜像,我们可以相信我们安装的软件包与Release文件签名时的软件包相同。

您可以通过运行sudo apt-key finger来检查APT的密钥sudo apt-key finger

validationUbuntu的存档密钥

你怎么知道应该在那里? 如果你不相信你的电脑,你就不能相信它上面的任何程序都不会骗你(比如apt-key ),这个练习是徒劳的。 因此,我们假设这只是出于学术兴趣,并从最终源包中validation密钥环的内容,该包是由上传它的开发人员签署的PGP。

下载ubuntu-keyring源包,看看应该有什么:

 $ apt-get source ubuntu-keyring Reading package lists... Done Building dependency tree Reading state information... Done Need to get 20.0 kB of source archives. Get:1 http://localhost/ubuntu/ quantal/main ubuntu-keyring 2012.05.19 (dsc) [1542 B] Get:2 http://localhost/ubuntu/ quantal/main ubuntu-keyring 2012.05.19 (tar) [18.5 kB] Fetched 20.0 kB in 0s (0 B/s) dpkg-source: info: extracting ubuntu-keyring in ubuntu-keyring-2012.05.19 dpkg-source: info: unpacking ubuntu-keyring_2012.05.19.tar.gz $ gpg --verify ubuntu-keyring_2012.05.19.dsc gpg: Signature made Sat May 19 03:33:12 2012 SAST gpg: using RSA key 0x393587D97D86500B gpg: Good signature from "Colin Watson " gpg: aka "Colin Watson " gpg: aka "Colin Watson " gpg: aka "Colin Watson " $ gpg --no-default-keyring --keyring ubuntu-keyring-2012.05.19/keyrings/ubuntu-archive-keyring.gpg --fingerprint ubuntu-keyring-2012.05.19/keyrings/ubuntu-archive-keyring.gpg ------------------------------------------------------------- pub 1024D/0x40976EAF437D05B5 2004-09-12 Key fingerprint = 6302 39CC 130E 1A7F D81A 27B1 4097 6EAF 437D 05B5 uid Ubuntu Archive Automatic Signing Key  sub 2048g/0x251BEFF479164387 2004-09-12 pub 1024D/0x46181433FBB75451 2004-12-30 Key fingerprint = C598 6B4F 1257 FFA8 6632 CBA7 4618 1433 FBB7 5451 uid Ubuntu CD Image Automatic Signing Key  pub 4096R/0x3B4FE6ACC0B21F32 2012-05-11 Key fingerprint = 790B C727 7767 219C 42C8 6F93 3B4F E6AC C0B2 1F32 uid Ubuntu Archive Automatic Signing Key (2012)  pub 4096R/0xD94AA3F0EFE21092 2012-05-11 Key fingerprint = 8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092 uid Ubuntu CD Image Automatic Signing Key (2012)  

我知道这实际上是科林沃森的签名,因为我已经多次见过他,我们已经validation了彼此的身份,并签了对方的钥匙。 如果您在PGP强设置中有密钥,您应该能够找到他的信任路径。 我也知道我可以信任他上传正确的ubuntu-keyring包。

对于Debian,有一个包( debian-keyring )包含所有Debian开发人员的PGP密钥,您可以使用它来validation源包签名。 Ubuntu没有等效的,但许多Ubuntu开发人员也是Debian开发人员,我们所有开发人员的PGP密钥都可以在Launchpad的配置文件中找到。

其他问题

我怎么知道更新不是恶意的?

归结为信任。 您必须完全信任您使用的每个存储库。 您正在为每个存储库的维护者授予在计算机上以root用户身份运行的权限。

Ubuntu软件包只能由Ubuntu开发人员上传,这些开发人员已被开发者会员委员会 (我目前在其上发布)授予了上传权限。 要申请上传权利,您必须由几位与您合作并相信您自己工作能力的现有Ubuntu开发人员提倡。 没有上传权限,上传必须由拥有权利的开发者赞助(应包括对上传的审核)。

对于发布后更新,Ubuntu对更新内容有严格的策略 。 它们应该只包含修复已知错误的最小补丁。 补丁在被接受之前由SRU /安全团队的成员进行审核。

显然,PPA和第三方存储库没有所有这些限制。 你必须相信PPA所有者是明智的。

所有Ubuntu和PPA软件包都有可用的源代码,因此任何人都可以对其进行检查。

是否有配置选项使流程或多或少谨慎,它们的默认值是什么?

您可以在APT中关闭签名validation,但当然默认情况下它已启用。 当您尝试从未签名/不受信任的存储库安装某些东西时,apt会让您确认您确实想要这样做。

是否存在已知的攻击,或者最近是否存在漏洞?

我记得一个, Debian bug 499897 。 Debian通过向Release文件提供一个到期日期来解决这个问题,之后它们就不可信了。 Ubuntu 尚未支持此function 。

我知道没有SSL / https,并且您自己的计算机之外没有证书颁发机构。

要检查更新,您的计算机会联系您指定为源的服务器。 它将使用普通的http从这些服务器下载索引文件。 此索引文件已签名,因此没有人可以为您提供错误索引,但可以从任何计算机提供正确的文件,从而可以轻松使用镜像。

使用此索引,您自己的计算机将计算需要下载的新软件包。 再次使用普通的http检索包。 将使用发布文件检查每个包的md5总和。 此外,还签署了Ubuntu官方存储库包。 某些第三方源可能有未签名的软件包(但仍然使用md5检查),当发生这种情况时,安装程​​序(apt,Ubuntu软件中心,……)会发出警告。

总而言之,安全性不在服务器或连接中,而是在包本身中。 攻击者闯入更新服务器不会损坏您的计算机,但可以获得有效签名的人可以。

您可以在此处找到有关secure apt的更多详细信息。 总结一下:所有包都有一个GPG签名,并且可以信任那些公钥在apt钥匙链中的人发布的( /etc/apt/trusted.gpg

相关回答:除了检查包签名的真实性之外,您还可以更进一步,使用Landscape的合规性报告functionvalidation系统是否完全是最新的适用安全补丁。

这是一张现场更新的饼图,显示您有多少以及哪些系统仍然容易受到攻击。 对于一个人而言,这可能有点过头了,但它是大型企业和小型企业的常见问题解答。