为什么 HTTP 协议比 BitTorrent 协议更容易被拦截?

信息安全 http 中间人 比特流
2021-08-19 16:57:51

我正在下载通过主网站提供的 .iso 文件,该文件建议用户使用 BitTorrent。此外,他们使用属于不同国家的不同镜像站点通过 HTTP 提供下载,并声称来自 HTTP 镜像的下载更容易被拦截以提供恶意下载。我很好奇为什么这类下载比原始下载更容易。

如果我不得不猜测,那将是因为世界各地保存文件的服务器之间的安全实现存在差异。我完全没有了?

4个回答

不同之处在于 BitTorrent 协议有一种机制来验证您是否收到了您想要接收的内容,而 HTTP 没有。

HTTP没有机制...

  • 验证您是否实际连接到您打算连接的服务器,
  • 或实际下载您希望收到的文件。

如果任何 HTTP 镜像存在安全漏洞,或者不受提供者的控制,攻击者可以简单地替换文件,并且在接收者一方不会检测到它。

此外,如果情况允许,HTTP 很容易受到中间人攻击这意味着,从您的角度来看,您似乎已连接到 example.com,但实际上您已连接到第三方,该第三方正在拦截流量、操纵网络流量,只是让您看起来像是连接到了 example.com。然后您请求下载某个文件,但攻击者向您发送了一个恶意文件。(附带说明,正确配置的 HTTPS 和S, 可以防止这种情况发生。)

另一方面,通过 BitTorrent 传输的文件首先被分成块。然后由 torrent 创建者使用SHA-1对这些块中的每一个进行哈希处理,即生成校验和在下载之前将哈希值提供给每个 BitTorrent 客户端 - 通常包含在.torrent文件中。当客户端下载文件块时,它们首先由客户端本身进行哈希处理,并与之前接收到的哈希值进行比较。只有当哈希匹配时,这意味着块包含与预期块完全相同的字节,它才会被接受。制造具有恶意内容但保留其原始哈希和的更改块实际上是不可能的。

由于这些哈希是在下载之前与您共享的,可能来自受信任的来源,因此与 HTTP 下载相比,通过 BitTorrent 接收传输中的预期文件更难(甚至不可能)操作。提供者可以通过 HTTPS 在他自己的控制下从单个安全服务器分发一个小文件的 torrent,哈希机制将为实际下载提供验证。

另一方面,如果您的哈希或 torrent 文件在下载之前被篡改,或者如果通过 HTTP 下载 torrent 本身则由于 MitM 攻击,则校验和验证不提供安全性。

最后,如果攻击者在生成哈希和之前(即在最初创建 torrent 之前)可以访问文件,那么还有一种方法可以绕过校验和机制。然后,攻击者有可能以这样一种方式修改文件,以便稍后可以在种子传输期间用预先设计的代码替换文件的某些内容,而不会被 SHA-1 哈希和检查检测到,尽管与最初校验和的文件。

假设一个文档(例如,一个 .iso 文件)的作者有一种方法可以带外与您共享一个 .torrent 文件,而对手无权颠覆——换句话说,当作者创建文档并然后为它制作一个 .torrent 文件,你可以保证(以某种方式)你可以获得真正的 .torrent 文件而不是伪造的。也许您通过 HTTPS 获得了 .torrent,但您会通过 HTTP 从镜像中获得 .iso。 这很关键!如果您通过 HTTP 下载 .torrent 文件本身,那么下面关于 BitTorrent 的所有内容都没有实际意义。

如果对手试图诱骗您获取恶意文档,那么通过 HTTP 下载文档与使用 .torrent 文件通过 BitTorrent 下载文档有什么区别?

以下是对手可能拥有的一些权力:

  1. 拦截互联网连接上的流量并在传输过程中替换它的能力。

    • 使用 HTTP,拦截您的互联网连接的能力足以让对手欺骗您接受恶意伪造。 这是因为 HTTP 不做任何事情来验证互联网上接收到的数据的真实性:它就像一个特别天真的职员,让穿着高能见度背心的人进入秘密控制室,因为他们说他们有工作要做。

    • 使用 BitTorrent,拦截您的互联网连接的能力不足以让对手欺骗您接受恶意伪造。 这是因为 .torrent 文件具有真实文档的每个块的 SHA-1 哈希,因此如果无法控制真实文档,攻击者就没有希望找到与 .torrent 中的 SHA-1 哈希匹配的恶意替换文件。(这就是密码学家说 SHA-1 是“抗原像”的意思,或者更具体地说,这里是“抗第二原像”。)

  2. 运行镜像或 BitTorrent 节点的能力。

    镜像可能由许多不同的方运行,可能不像主站点那样受到严格审查——任何人都可以运行 BitTorrent 节点。这不需要任何网络拦截。

    • 使用 HTTP,运行镜像的能力足以让对手欺骗您接受恶意伪造。 他们只是在您要求时为您提供伪造品,而您无法先验地将伪造品与真实文件区分开来。

    • 使用 BitTorrent,从 BitTorrent 节点提供数据的能力不足以让对手欺骗您接受恶意伪造。 同样,无论对手提供什么伪造品,仅凭这种能力,您都无法在您的 .torrent 文件中找到与 SHA-1 哈希匹配的伪造品。

  3. 影响作者在真实文档中添加内容的权力——只要它通过审查。

    这听起来可能有点令人担忧,但考虑一下现代软件开发如何从 Stack Overflow 风格的 copypasta 演变为对 npm 包(如left-pad )的随意依赖。像事件流这样的包的维护者可能会厌倦这项任务并将包名称的所有权出售给一个令人讨厌的角色,他现在有权影响已部署软件包的较新版本(如您可能由 BitTorrent 分发的操作系统映像)中的内容. (更多关于可以用这种能力玩的游戏:[1][2]。)

    显然,如果对手可以在没有任何人注意的情况下将恶意代码放入真实文档中,那么你就完蛋了。但是,如果我们将对手限制在一点点以对真实文档产生良性影响——这将通过作者的审查——那么你可能仍然会被 BitTorrent 淹没!

    • 使用 BitTorrent,影响文档内容的额外权力——即使它需要接受审查,因此真实文档中没有任何恶意!——可能足以让对手欺骗你接受恶意伪造。

      如何?玩长游戏的对手可以同时制作文档块的两个版本,一个良性版本和一个在 SHA-1 下冲突的恶意版本。(这是因为 SHA-1不是密码学家所说的“防冲突”。他们可能无法控制SHA-1 哈希值——只有良性版本和恶意版本具有相同的SHA-1 哈希值。 )

      然后,攻击者可以说服作者在文档中包含良性版本(已通过审核!),然后在您下载种子时拦截互联网上的种子,并用恶意版本替换良性版本。您的 BitTorrent 客户端不会更聪明,因为恶意版本恰好具有 .torrent 文件中指定的 SHA-1 哈希值!

有一天,BitTorrent 可能会过渡到 SHA-1 的替代品,它具有抗冲突性——可能是 SHA-256。这将使这个故事的复杂性变得毫无意义。我在讲述更细致入微的故事时的意思并不是说 BitTorrent 和 HTTP 一样糟糕——它不是:假设您的 .torrent 文件是好的,BitTorrent 可以抵御对手 (1) 和 (2),而 HTTP 甚至没有那个——但是 BitTorrent 仍然存在棘手的问题。这是因为 SHA-1 是个坏消息(而 MD5 是更坏的消息),如果该假设像 SHA-1十年半前,对 SHA-1 的碰撞攻击于 2005 年首次发布(更多关于 SHA-1 灭亡的危险和时间表。)

HTTP 镜像的主要问题是镜像的维护者可以随意更改文件。使用 BitTorrent 可以缓解这种情况,因为跟踪器包含文件的哈希。

只要您手动验证该哈希,就可以通过在与 torrent 文件相同的位置提供文件的哈希来实现等效的安全性。

BitTorrent 对于安全来说不是必需的,作者只是喜欢它。

你认为这种说法是正确的假设是有缺陷的。他们容易被拦截。有人可能会声称 BitTorrent 不那么重要,因为它是去中心化的,但只需下载.torrent清单就足以重建您将向其他对等方提出的请求。

至少.torrent文件具有对其计算的加密哈希以防止损坏。不过,这并不真正支持您问题中的断言,因为如果这.torrent是通过 HTTP 提供的,那么它同样容易受到网络上的操纵。