08-04-2023, 12:47 PM
越来越多的人向我们询问法国 Inria最近发表的有关 Bittorrent 和隐私攻击的论文。这篇文章试图解释这些攻击及其含义。
攻击分为三个部分(如果您愿意,也可以是三个相互构建的单独攻击)。
第一个攻击是针对那些将 Bittorrent 应用程序配置为通过 Tor 代理跟踪器流量的人。这些人希望对查看跟踪器上的对等点列表的人保密他们的 IP 地址。问题是,在这种情况下,几个流行的 Bittorrent 客户端(作者特别提到了 uTorrent,我认为 Vuze 也这样做了)只是忽略了他们的袜子代理设置。选择忽略代理设置是可以理解的,因为现代跟踪器设计使用 UDP 协议进行通信,而 Tor 等袜子代理仅支持 TCP 协议——因此这些应用程序的开发人员可以选择“即使在用户设置了无法使用的代理”并“使其神秘地失败并让用户感到沮丧”。
这种攻击实际上比这更糟糕:显然在某些情况下 uTorrent、BitSpirit 和 libTorrent 只是将您的 IP 地址直接写入它们发送给跟踪器和/或其他对等点的信息中。Tor 正在履行其职责:Tor 正在_匿名_将您的 IP 地址发送给跟踪器或对等点。没有人知道您从哪里发送 IP 地址。但这可能不是您希望 Bittorrent 客户端发送的内容。
那是第一次攻击。第二次攻击建立在第一个攻击的基础上,针对通过 Tor 代理其余 Bittorrent 流量的 Bittorrent 用户:它的目的是让攻击者(而不是跟踪者)识别您的身份。事实证明,Bittorrent 协议(至少由这些流行的 Bittorrent 应用程序实现的那样)会选择一个随机端口进行侦听,并将该随机端口告知跟踪器以及与之交互的每个对等点。由于上述第一次攻击,跟踪器会了解您的真实 IP 地址以及您的客户端选择的随机端口。因此,如果您的 uTorrent 客户端选择 50344 作为其端口,然后匿名(通过 Tor)与其他某个对等点对话,则其他对等点可以访问跟踪器,查找发布到跟踪器列表端口 50344 的每个人(很有可能只有一),瞧,另一个对等方获知您的真实 IP 地址。作为奖励,如果 Bittorrent 对等通信未加密,您选择的 Tor 出口中继也可以观察交通并进行攻击。
这是第二次攻击。综合起来,它们提出了为什么通过 Tor 运行任何 Bittorrent 流量无法获得您可能想要的隐私的各种原因。
那么解决办法是什么?这里有两个答案。第一个答案是“不要在 Tor 上运行 Bittorrent”。多年来我们一直在说不要通过 Tor 运行 Bittorrent,因为 Tor 网络无法处理负载;也许这些攻击会说服更多人倾听。第二个答案是,如果您希望 Bittorrent 客户端在使用代理时真正提供隐私,您需要让应用程序和协议开发人员修复他们的应用程序和协议。如果您的应用程序泄露了您的身份,Tor 就无法保证您的安全。
他们论文中的第三次攻击让事情变得有趣。为了提高效率,Tor在每个电路上放置多个应用程序流。这种方法提高了效率,因为我们不必浪费时间和开销为 aol.com 首页上的每张小图片制作新电路,并且它提高了匿名性,因为每次您通过 Tor 网络构建新路径时,都会增加您构建的路径之一很可能被攻击者观察到。但缺点是出口中继可以根据他们看到的来自给定电路的所有流来构建用户配置文件的简短快照。如果这些流之一识别了用户,则出口中继器知道这些流的其余部分也属于该用户。
结果?如果您通过 Tor 使用 Bittorrent,并且同时通过 Tor 浏览网页,则上述攻击允许攻击性出口中继破坏部分网页流量的匿名性。
解决办法是什么?与之前相同的两个修复:不要通过 Tor 运行 Bittorrent,和/或让 Bittorrent 开发人员修复他们的应用程序。
但作为 Tor 开发人员,这次攻击为第三次修复提供了机会。作为 Tor,我们有没有一种方法可以减少用户在通过 Tor 使用不安全的应用程序时对自己造成的损害?如果你使用 Bittorrent 而不是 Tor,你就会搬起石头砸自己的脚,这一事实我们无法解决,但也许我们仍然可以挽救腿的其余部分。
Tor 设计中解决此问题的一种方法是让每个用户应用程序使用单独的电路。在 Linux 和 Unix 中,我们可能可以破解类似的东西——有一些方法可以查找连接到我们套接字的应用程序的 pid(进程 ID)。我怀疑在 Windows 中这会变得更困难。它还变得更加困难,因为许多 Tor 应用程序使用中间 http 代理,如 Polipo 或 Privoxy,我们必须教这些其他代理如何区分不同的应用程序,然后将该信息传递给 Tor。
另一个答案是通过目标端口分隔流。然后,前往端口 80 的所有流都在一条线路上,而针对不同目标端口的流则在另一条线路上。这个想法已经在后台潜伏了很长一段时间,但实际上是因为 Bittorrent,我们还没有实现它:如果 BT 客户端要求我们向 50 个不同的目标端口发送 50 个流,我不会希望 Tor 客户端尝试制作 50 种不同的电路。这给网络带来了太多的负载。我想我们可以通过分隔“80”和“非 80”来对其进行特殊处理,但我不确定这在实践中有多有效,首先是因为许多其他端口(IM、SSH 等)都希望变得特殊-cased,其次是因为如今防火墙正在迫使越来越多的互联网通过端口 80。
我们应该继续集思广益,研究如何保护用户,即使他们的应用程序正在移交敏感信息。但与此同时,我认为这些研究人员发布他们的结果并让其他人评估攻击是件好事。(如果您是从事 Tor 攻击或防御工作的研究人员,请查看我们新的研究资源页面。)如果您是 Bittorrent 用户并且希望拥有一些隐私,那么本文中的攻击是严重的攻击。
攻击分为三个部分(如果您愿意,也可以是三个相互构建的单独攻击)。
第一个攻击是针对那些将 Bittorrent 应用程序配置为通过 Tor 代理跟踪器流量的人。这些人希望对查看跟踪器上的对等点列表的人保密他们的 IP 地址。问题是,在这种情况下,几个流行的 Bittorrent 客户端(作者特别提到了 uTorrent,我认为 Vuze 也这样做了)只是忽略了他们的袜子代理设置。选择忽略代理设置是可以理解的,因为现代跟踪器设计使用 UDP 协议进行通信,而 Tor 等袜子代理仅支持 TCP 协议——因此这些应用程序的开发人员可以选择“即使在用户设置了无法使用的代理”并“使其神秘地失败并让用户感到沮丧”。
这种攻击实际上比这更糟糕:显然在某些情况下 uTorrent、BitSpirit 和 libTorrent 只是将您的 IP 地址直接写入它们发送给跟踪器和/或其他对等点的信息中。Tor 正在履行其职责:Tor 正在_匿名_将您的 IP 地址发送给跟踪器或对等点。没有人知道您从哪里发送 IP 地址。但这可能不是您希望 Bittorrent 客户端发送的内容。
那是第一次攻击。第二次攻击建立在第一个攻击的基础上,针对通过 Tor 代理其余 Bittorrent 流量的 Bittorrent 用户:它的目的是让攻击者(而不是跟踪者)识别您的身份。事实证明,Bittorrent 协议(至少由这些流行的 Bittorrent 应用程序实现的那样)会选择一个随机端口进行侦听,并将该随机端口告知跟踪器以及与之交互的每个对等点。由于上述第一次攻击,跟踪器会了解您的真实 IP 地址以及您的客户端选择的随机端口。因此,如果您的 uTorrent 客户端选择 50344 作为其端口,然后匿名(通过 Tor)与其他某个对等点对话,则其他对等点可以访问跟踪器,查找发布到跟踪器列表端口 50344 的每个人(很有可能只有一),瞧,另一个对等方获知您的真实 IP 地址。作为奖励,如果 Bittorrent 对等通信未加密,您选择的 Tor 出口中继也可以观察交通并进行攻击。
这是第二次攻击。综合起来,它们提出了为什么通过 Tor 运行任何 Bittorrent 流量无法获得您可能想要的隐私的各种原因。
那么解决办法是什么?这里有两个答案。第一个答案是“不要在 Tor 上运行 Bittorrent”。多年来我们一直在说不要通过 Tor 运行 Bittorrent,因为 Tor 网络无法处理负载;也许这些攻击会说服更多人倾听。第二个答案是,如果您希望 Bittorrent 客户端在使用代理时真正提供隐私,您需要让应用程序和协议开发人员修复他们的应用程序和协议。如果您的应用程序泄露了您的身份,Tor 就无法保证您的安全。
他们论文中的第三次攻击让事情变得有趣。为了提高效率,Tor在每个电路上放置多个应用程序流。这种方法提高了效率,因为我们不必浪费时间和开销为 aol.com 首页上的每张小图片制作新电路,并且它提高了匿名性,因为每次您通过 Tor 网络构建新路径时,都会增加您构建的路径之一很可能被攻击者观察到。但缺点是出口中继可以根据他们看到的来自给定电路的所有流来构建用户配置文件的简短快照。如果这些流之一识别了用户,则出口中继器知道这些流的其余部分也属于该用户。
结果?如果您通过 Tor 使用 Bittorrent,并且同时通过 Tor 浏览网页,则上述攻击允许攻击性出口中继破坏部分网页流量的匿名性。
解决办法是什么?与之前相同的两个修复:不要通过 Tor 运行 Bittorrent,和/或让 Bittorrent 开发人员修复他们的应用程序。
但作为 Tor 开发人员,这次攻击为第三次修复提供了机会。作为 Tor,我们有没有一种方法可以减少用户在通过 Tor 使用不安全的应用程序时对自己造成的损害?如果你使用 Bittorrent 而不是 Tor,你就会搬起石头砸自己的脚,这一事实我们无法解决,但也许我们仍然可以挽救腿的其余部分。
Tor 设计中解决此问题的一种方法是让每个用户应用程序使用单独的电路。在 Linux 和 Unix 中,我们可能可以破解类似的东西——有一些方法可以查找连接到我们套接字的应用程序的 pid(进程 ID)。我怀疑在 Windows 中这会变得更困难。它还变得更加困难,因为许多 Tor 应用程序使用中间 http 代理,如 Polipo 或 Privoxy,我们必须教这些其他代理如何区分不同的应用程序,然后将该信息传递给 Tor。
另一个答案是通过目标端口分隔流。然后,前往端口 80 的所有流都在一条线路上,而针对不同目标端口的流则在另一条线路上。这个想法已经在后台潜伏了很长一段时间,但实际上是因为 Bittorrent,我们还没有实现它:如果 BT 客户端要求我们向 50 个不同的目标端口发送 50 个流,我不会希望 Tor 客户端尝试制作 50 种不同的电路。这给网络带来了太多的负载。我想我们可以通过分隔“80”和“非 80”来对其进行特殊处理,但我不确定这在实践中有多有效,首先是因为许多其他端口(IM、SSH 等)都希望变得特殊-cased,其次是因为如今防火墙正在迫使越来越多的互联网通过端口 80。
我们应该继续集思广益,研究如何保护用户,即使他们的应用程序正在移交敏感信息。但与此同时,我认为这些研究人员发布他们的结果并让其他人评估攻击是件好事。(如果您是从事 Tor 攻击或防御工作的研究人员,请查看我们新的研究资源页面。)如果您是 Bittorrent 用户并且希望拥有一些隐私,那么本文中的攻击是严重的攻击。