Tor 0day:燃烧的桥梁

2020-08-05 06:57:39

洋葱路由系统Tor是为了绕过审查和逃避监视而设计的。然而,Tor网络和Tor浏览器都有很大的局限性;两者都没有实现这一承诺。在我之前的博客文章中,我写了几个不同的零日漏洞--没有补丁或解决办法的漏洞。这些漏洞会影响Tor浏览器和Tor网络。其中一个问题(检测滚动条宽度)允许恶意服务跟踪用户;使用Tor浏览器的用户可能非常独特,无法逃避监视。我披露的另一个漏洞允许公司、服务提供商和民族国家阻止用户直接连接到Tor网络;您可能无法绕过审查。与ToR网络的直接连接是最常见的连接类型。不过,也有间接连接ToR网络的方式。这些间接方法被称为桥接器。如果有人可以检测到每个网桥协议,那么每个Tor用户都可以被阻止访问Tor网络,或者他们可以被直接监视。(如果他们知道您的真实网络地址,那么他们就知道您是谁,他们可以监视或审查您的活动。)。在这篇博客文章中,我将公开识别ToR网桥网络流量的方法。这包括两个新的零日(0day)漏洞--一个用于检测obfs4,另一个用于检测meek。全面披露:我花了数年时间试图向Tor项目报告安全漏洞。他们的反应不一,从忽视问题到关闭高度严重的问题,尽管这些问题已经解决,但没有实际解决。通常,他们只是不屑一顾。目前,我已经放弃了向他们报告安全问题的尝试。既然公众应该知道Tor让他们变得多么脆弱,我就把这些漏洞公之于众。注:这是一篇技术含量极高的博客文章。它有足够的细节让其他网络开发人员复制我的发现。根据Tor项目的说法,逃避审查和监视的第一步需要用户连接到Tor网络。许多年前,Tor开发人员意识到,服务提供商只需下载Tor节点列表并阻止所有节点,就可以阻止对Tor的访问。在我之前的博客中,我展示了您甚至不需要下载列表--您只需分析Tor服务器的TLS证书即可。Tor项目开发的变通方法被称为“桥”。网桥是不属于公共列表的ToR条目节点(称为守卫)。其目的是让人们在其直接连接被阻止时使用网桥。要连接到网桥,您需要使用称为可插拔传输(PT)的非ToR协议。您不是直接连接到警卫,而是从Tor项目请求一小部分桥梁。每个网桥记录包括PT协议、PT服务器的网络地址和端口以及与PT服务器通信所需的其他参数。PT作为代理工作:您可以配置一小组网桥,以便与您的Tor浏览器(或Tor守护进程)配合使用。由于这些不在公共列表中,审查者不会将它们识别为Tor节点。(至少,理论上是这样的。)。

您的本地PT代理对流量进行编码,使其看起来不像ToR流量。如果操作正确,流量应该看起来是无害的,并且与ToR无关。

编码后的流量通过Internet发送到网桥的PT代理。如果审查人员没有注意到任何异常情况,他们将允许流量通过网络。

规避审查的关键要求(1)网桥是未知的(不在Tor节点列表中),以及(2)网络流量不能容易地与Tor相关联。该编码方法可以由各种可插拔传输协议提供。然而,许多可插拔传输协议已过时或很少使用。例如:格式转换加密(FTE):此协议将ToR网络流量转换为看起来像其他类型的流量。从理论上讲,FTE可能看起来像任何类型的网络流量。实际上,该实现侧重于模拟HTTP流量。托尔项目在大约一年前放弃了对FTE的支持,因为FTE没有得到维护,几乎没有使用,而不是因为它很容易检测到(事实的确如此)。

OBFS:模糊协议家族包括OBFS、obfs2、obfs3、ScrmbleSuit和obfs4。这些协议被描述为看起来不像任何东西的可插拔传输协议。每个都对网络流量进行加密。从理论上讲,监视网络的人只会看到随机字节,这些字节无法与ToR捆绑在一起。这些OBFS服务器中的大多数在具有已知加密服务(例如,SSH和HTTPS)的端口上充当特洛伊木马协议。其原理是观察者会看到二进制数据,并认为它只是预期加密的一部分。但是,如果obfs4服务器在22/TCP(SSH)上运行,则

TCP PSH。当通过TCP传输数据时,接收方有两个从网络套接字读取n字节数据的选项:它可以设置一个计时器,该计时器要么返回n个字节,要么等到计时器超时再返回,无论有多少字节(<;n)可用。

它可以执行非阻塞读取并获取网络缓冲区中立即可用的任何内容(≤n)。

然而,还有第四种选择:发送方可以传输数据块,并在最后一个数据包上设置TCP";PSH&34;(PUSH)标志。Psh告诉接收方立即将该数据返回到接收应用程序,即使它是<;n字节。大多数网络服务不会在每隔几个数据包之后定期使用PSH标志。话虽如此,obfs4支持是由obfs4proxy提供的,它总是使用PSH位。如果从客户端到服务器(在从服务器到客户端发送回复之前)的最后一个数据包没有使用PSH,那么它就不是obfs4。

单向。使用tcp,数据可以从客户端传输到服务器(C→S)或从服务器传输到客户端(S→C)。使用许多网络协议,您可以看到数据同时双向传输(全双工)。在obfs4握手和隧道洋葱路由(OR)初始化期间,数据一次只在一个方向上传输(半双工)。数据传输方向与TCP PSH标志齐头并进;在传输PSH之前,数据传输不会改变方向。使用前三条规则,我们只排除了绝大多数TCP流量。剩下的任何东西都可能是模糊的。

数据传输大小。当obfs4客户端第一次联系obfs4服务器时,它们交换几个字节的数据。前两个数据包交换加密参数,然后启动洋葱路由(OR)隧道。第一次数据传输从客户端传输到服务器(C→S)。第二个将数据从服务器传输到客户端(S→C)。任何其他的东西都是不可取的。Fortinet的人员计算出了数据包的大小,包括可变大小的随机填充。第一个C→S必须介于141至8192字节之间。紧随其后的是第一个S→C,长度为109到8160字节。

所有剩余的数据传输。介绍之后,obfs4开始传输数据。所有数据传输必须在21到8192字节之间。我发现,仅检查这些大小范围的前6个数据传输就足以排除大多数非obfs4流量。

并行连接。到目前为止,这种检测方法是非常准确的,但不是100%。它可能会错过每10个obfs4连接中的1个(10%假阴性),并且可能会错误地匹配其他协议。幸运的是,还有一条规则可以用来减轻这些失误。Tor浏览器有三种不同的方式供用户选择网桥。下拉菜单选择默认网桥。(您可以使用About:Config并在Tor浏览器上搜索';Bridge';来查看默认网桥。)。一旦您选择了它们,浏览器就会将连接发送到它们中的每一个。您应该会看到大量的连接。(IPv4上目前有14个默认obfs4服务器,它会立即连接到所有这些服务器。)。

您可以点击Request Bridges';按钮。完成验证码后,您将被分配2-3个obfs4桥,Tor浏览器将立即连接到所有这些桥。通常,一个或多个将被检测为obfs4。您的数据包检查器还肯定会看到多个连接同时连接到不同的服务器。

你可以通过其他方式获得桥梁。(例如,Tor Project提供用于检索桥梁的电子邮件服务。)。然后,您可以将桥梁剪切并粘贴到Tor浏览器中。这通常意味着添加2-3个新网桥,因此包检查器将看到并行请求,其中一个或多个被检测为obfs4。

如果您在任何一个TCP连接上检测到obfs4,则检查是否有一个或多个同时连接到其他服务器(在半秒窗口内)。每个都应该有来自C→S和TCPPSH的第一个数据包,并且看起来是随机字节(不是已知协议)。如果你看到了这一点,那么它就是模糊的,你几乎可以排除所有的假阳性。此外,假阴性并不重要,因为您只需捕获一个obfs4连接,即可确定用户正在运行Tor并尝试连接到obfs4桥。

此数据包分析假设您有一个跟踪移动方向的有限状态机(C、→、S或S、→、C)。为了防御这种类型的分析,obfs4有两种到达间隔计时(IAT)模式。(对于我们数据包分析器来说幸运的是,IAT模式相当弱)。对于ToR浏览器,每个obfs4代理定义都列出了IP地址、端口、一些签名信息和IAT模式。例如:obfs4 209.148.46.65:4437FAD13168806246602538555B5521A0383A1875 cert=ssH+9rP8dG2NLDN2XuFw63hIO/9MNNinLmxQDpVa+7kTOa9/m+tGWT1SmSYpQ9uTBGa6Hw IAT-MODE=0IAT MODE 0表示数据包按网络分段。它们可以是任何尺寸的。但是,由于它们是由网络分段的,因此具有大有效负载的数据包将首先到达,数据传输中的最后一个数据包将具有PSH。

IAT模式1表示数据包由obfs4代理进行分段。最大TCP有效负载大小将为1448字节。如果您看到带有PSH的1448个字节,那么只需假设更多的数据将来自同一方向。这也意味着您可以看出它处于IAT模式1。

IAT模式2使用随机数据包大小。如果信息包有效载荷的大小随机变化(不限于1448或网段大小),则它属于模式2。在模式2中,除非psh实际更改了方向,否则您不应假设psh更改了通信方向(C→S或S→C。

IAT模式2非常少见。几乎所有网桥都使用IAT模式为0或1的obfs4。从密码学的角度来看,obfs4似乎相当可靠。然而,开发人员似乎专注于密码学,而不是网络分析。网络分析允许我识别整个OBFS系列的可插拔传输(包括ScrmbleSuit、obfs3和obfs4),而无需接触密码。2020年7月27日16:42:41.787239格林尼治标准时间192.168.15.15[54006/tcp]->;146.57.248.225[22/tcp]:obfs42020-07-27 16:42:41.829451格林威治时间192.95.36.142[443/tcp]->;192.168.15.15[60838/tcp]:obfs42020-07-27 16:42:41.832556格林威治时间192.168.15.15[47232/tcp]->;144.217.20.138[80/tcp]:obfs42020-07-27 16:42:41.843840格林尼治标准时间192.168.15.15[41534/tcp]->;209.148.46.65[443/tcp]:obfs42020-07-27 16:42:41.860354格林威治时间38.229.1.78[80/tcp]->;192.168.15.15[37020/tcp]:obfs42020-07-27 16:42:42.077762格林尼治标准时间192.168.15.15[43922/tcp]->;37.218.245.14[38224/tcp]:obfs42020-07-27 16:42:42.147042格林威治时间192.168.15.15[54346/tcp]->;85.31.186.26[443/tcp]:obfs42020-07-27 16:42:42.153197格林威治时间192.168.15.15[49538/tcp]->;85.31.186.98[443/tcp]:obfs42020-07-27 16:42:42.156841格林威治时间192.168.15.15[52074/tcp]->;193.11.166.194[27020/tcp]:obfs42020-07-27 16:42:42.170548格林尼治标准时间192.168.15.15[33632/tcp]->;193.11.166.194[27015/tcp]:obfs42020-07-27 16:42:42.181053格林威治时间192.168.15.15[58162/tcp]->;193.11.166.194[27025/tcp]:obfs42020-07-27 16:42:42.441658格林尼治标准时间37.218.240.34[40035/tcp]->;192.168.15.15[57268/tcp]:obfs4。

托尔项目曾将桥梁描述为军备竞赛。一方面,你有想要绕过审查和访问Tor网络的用户。另一方面,审查人员想要阻止Tor的流量。不幸的是,Tor项目已经放弃了军备竞赛,而选择了一个同质的解决方案:obfs4。如果没有人知道如何检测和阻止obfs4流量,这是可以的。但是,中国似乎有一种复杂的方法来检测和阻止obfs4连接,我刚才已经展示了更简单的状态包检测系统可以检测obfs4流量。目前的Tor浏览器默认只支持三种方式连接Tor网络:直接连接、使用obfs4桥接、使用meek桥接。可以使用原始IP阻止或基于独特的服务器证书进行过滤来实时检测直接连接。有很多obfs4桥,但如果您知道要查找什么(如本文所述),则它们很容易实时检测到。那就只剩下温顺了。据我所知,今天只有一台Meek服务器可用。它托管在微软的Azure云上。因为中国屏蔽了直通和obfs4,所以meek是唯一