为验证下载提供文件校验和有什么意义?

信息安全 中间人 电子签名 篡改 校验和
2021-08-25 11:11:28

许多提供二进制文件的项目还提供这些二进制文件的哈希值(例如 SHA256),作为.ASC文件枯萎,或直接在二进制文件附近的网页上。这不是为了防止网络引起的损坏,因为 TCP 协议确保了这一点。

鉴于二进制文件和哈希是从同一台服务器下载的(例如来自非常敏感的软件bitcoin-core),这种技术可以防止哪些攻击场景?

如果攻击者设法篡改二进制文件,为什么他们不能以同样的方式更改校验和?攻击者执行 MITM 并在传输过程中篡改下载也是如此。

请注意,我不是在谈论公钥/私钥签名,这要安全得多,因为攻击者还需要获取签名者的私钥。我只是在谈论提供校验和/哈希以及下载的意义。这对于 . 来说甚至更奇怪bitcoin-core,它既有机制也有受众使用私钥对文件进行签名。

可以想象,托管在完全不同的系统上的一个单独的、秘密的监控机器人可以每分钟下载一次签名文件(考虑到它的体积很小)并检查它是否被篡改,但我还没有听说这样做过。

4个回答

它允许通过不受信任的渠道分发大量数据。

例如,你可以给我一个 USB 记忆棒,让我使用我便宜的 DSL 连接在晚上为你下载它,同时你从网页上获取校验和(你在笔记本电脑上使用昂贵的计量连接)。我认出了文件名,查看我的“我已经下载的大文件”文件夹,它就在那里,所以我将它复制到你的 U 盘上。

您会立即获得文件,而且您不必信任我也能正常工作。

如果托管可下载文件的组织只是将文件的校验和与文件一起发布,那么您是对的。如果攻击者设法破坏服务器,并用恶意文件替换可下载文件,那么攻击者也可以用恶意文件的校验和替换原始校验和。

这就是为什么大多数组织更进一步,并发布校验和的数字签名,其中数字签名是使用与组织关联并离线存储的私有签名密钥创建的。例如,请参阅https://releases.ubuntu.com/focal/了解使用 Ubuntu 的私有签名密钥制作的 Ubuntu 映像的数字签名。这样,即使攻击者设法破坏服务器,并用恶意文件替换可下载文件 - 攻击者也无法为文件创建有效签名,因为私有签名密钥(希望)没有存储在服务器。

您提出了有关 TCP 协议的有效观点,以确保下载的文件没有损坏。至于“攻击者场景”,我将其用作一揽子声明,签名不能以您建议的方式被篡改,二进制文件也不能被篡改并且签名相同时最终用户散列文件。例如:

一个网站告诉我他们的安装程序有一个 SHA256 哈希ABC(他们经常在下载链接旁边告诉我这个)。我下载该文件,生成它的 SHA256 哈希,它告诉我哈希是123. 我现在知道安装程序与服务器提供给我的不匹配——无论出于何种原因。

听起来你理解的不仅仅是这一切背后的基本概念,而是陷入了提供校验和/哈希的想法以及为什么不能篡改(除非我误解了你)。现在理论上,如果“攻击者”也可以破坏网站并更改哈希以匹配被篡改文件的哈希(123回到我们的示例中),那么他们的攻击就会成功。但按照这个速度,他们还不如停止在线篡改文件,而只是托管他们自己的恶意二进制文件。

这一切甚至都没有考虑到分发软件中经常使用的签名二进制文件或会签签名。

您似乎在假设所有安全措施本质上都可以防止某种类型的攻击。

这是一个相当普遍的误解。所有的安全措施都会增加某种攻击的难度,但只有少数安全措施真正使特定类型的攻击成为不可能。

这很重要,因为使攻击变得更加困难本质上会降低它实际发生的可能性。如果攻击者相对于成功的感知价值而言,攻击太难或太昂贵,他们就不会尝试攻击(或者他们会部分放弃)。

在为下载提供哈希的情况下,您可以获得以下安全优势:

  • 中间人攻击变得有点复杂。您必须拦截和修改两个(或可能更多)请求,而不仅仅是一个请求,这样您的攻击才会被发现,直到为时已晚。
  • 如果哈希没有在访问时完成,则对服务器的攻击必须替换多个文件,或者甚至可能需要替换两个完全不同的网络位置中的内容(我见过将哈希存储在与出于这个原因的文件)。

您还可以获得以下两个非安全性好处:

  • 如果没有攻击,用户可以确信他们下载的文件是他们应该得到的。IOW,它可以保护他们免受由于服务器上的静态数据损坏或服务器或其本地系统上的内存损坏等原因而导致文件损坏。
  • 它提供了合理程度的信心,即中间协议没有破坏数据。TCP 可以防止这种情况(但是对于可能 1k+ 字节的 2 字节校验和会导致很多潜在的冲突),但并非所有内容都使用 TCP,用户甚至可能无法从源服务器获取文件(参见 Simon里希特对此的一个例子的回答)。

因此,总的来说,您可以获得一些有限的安全优势和一些有限的保险,以应对可能出现的一些问题(如果您查看带有文件的旧 usenet 和 BB 帖子,您有时会看到这些帖子中提供的校验和相同的非安全原因)。相比之下,它基本上没有给服务器运营商带来任何成本,也不会给用户带来任何新问题,因此即使它不会增加太多安全性,也很容易看出它是值得做的,因为开销基本上不存在。