去年2月,我的“Tor洋葱路由服务”(Onion Service)遭受了一段时间的分布式拒绝服务攻击(DDoS),我花了好长时间对攻击进行了分析,并制订了缓解和防护策略。当时,连我为 Internet Archive (archive.org) 运行的Tor服务也被DDos攻击中断了数小时,但顶着攻击我又设法恢复了正常的运行服务。
为了找到特别的攻击缓解策略以恢复正常服务,我请教了专业的网络应急专家朋友,他们中有些是威胁情报方面的大牛,有些是DOS攻击和C&C节点的追踪溯源高手,在我的请求下他们都欣然同意了,之后我就向他们提供了我Tor服务的IP地址。
而且,当我告诉他们我的Tor服务IP地址时,我只说了152.19.,还没说完剩下的IP位,他们就已经知道了我的完整IP地址,我当时就有点吃惊。这……,Tor不是匿名的吗?你们怎么知道我的IP地址?原来他们一直都在监测着基于Tor节点的DDoS攻击,而且整理出了一份受害者IP名单,所以他们也不知道这原来是属于我的IP地址。
事实证明,在互联网圈子里,一个公开的秘密就是:Tor并不是真正的匿名化服务。
Tor服务架构的威胁模型
网上有很多文档介绍了Tor如何对数据包进行三重加密,和它如何使用了入口节点(guard)、中继节点(relay)和出口节点(exit)方式的路径选择,以及随机路径的混合网络流量等等。然而,很少有文档提到Tor服务架构的威胁模型。所以,我在这里就有一个问题:到底谁能看到Tor服务的流量?
要知道攻击者无处不在:
1、你的网络服务提供商(ISP)可以看到你电脑到Tor网络之间的传输数据包。就像我之前发现的两个”Tor 0day”漏洞一样,这与其中的直接连接或网桥设置无关;
2、连接进入Tor服务的第一跳是入口节点(guard),但是你根本不知道该节点到底属谁所有,所以该节点的所有者可以看到你的数据流量和连接进来的IP地址,但由于有加密机制,它并不能直接解密数据包;
3、连接进入Tor服务的第二跳是中继节点(relay),从中可以看到上一跳和将要跳转的下一跳Tor节点,这里威胁性相对较小;
4、连接Tor服务的最后一跳是出口节点(exit),这里流经了所有的加密网络流量(但不要指望HTTPS就是安全的),从这里虽然无法判断出你的接入来源,但可以判断出你的去向目的,因此,如果要在这里做文章的话,可以在此监控你的流量和去向;
5、上述这些不同的节点之后,还存在着本地的ISP服务提供商,他们也有可能在本地网络中进行网络流量监测;
6、用户经连接Tor服务由出口节点(exit)流向了最终的互联网服务。
如果某Tor服务网络中的只有你一人,那么,理论上来说,你很容易受到其他人“上帝视角”的监控,而且他或许还能监测到全球网络流量。这种全方位的绝佳视角完全可以看出你的一举一动,从而轻易地识别出你准确的入口节点(guard)、中继节点(relay)和出口节点(exit)信息。某种意义上来说,Tor服务就像一种打赌游戏,只要有足够多的用户和路径选择,拥有“上帝视角”的“老大哥”要识别相应的出入节点也比较困难。
上帝视角
上述我们讲的“上帝视角”并不完全只停留在理论层面上,如我咨询DDoS问题的朋友中就有这样拥有“上帝视角”的人,其中一人声称可以看到超过70%的互联网流量,但他不属于国家机构或政府组织,只是在一家公司任职而已。
为什么会存在这种情况呢?因为DOS攻击时有发生,这些公司会与一些大型ISP网络提供商合作进行全网监测,当观察到DDoS攻击时,就能协调处理以及时减轻影响。记住:DDoS攻击不只危及目标系统,还会对降低整体网络速度,且会让大公司在带宽开销上造成损失。一些安全公司可以为ISP服务商降低运营成本,而由此,他们就会得到非常多而全的全球攻击图谱,如我朋友所在的Digital Attack Map 和 NetScout。
据我了解,类似Digital Attack Map的公司可以监测大量涉及TOR的DDoS攻击,因此就储备了很多TOR节点信息,从中可以看到不同节点的流向信息,因此可以知道我的具体受攻击IP。
而且,完全不需要什么大流量的DDoS数据包来识别想要的某位用户或隐藏节点,只需要一个持续的网络负载就可以搞定。像我在FotoForensics公司看到的,它整个溯源机制就像一张蛇吃步 qiang的图片一样:
在Tor网络中,直到TCP连接结束后客户端才能更改路径,也就意味着,在Tor网络事务中的传输路径是固定的,如果你正在其中通过web连接下载一些小文件,那么这可能不会引起太大的注意,但如果你下载的是如视频、ISO镜像等其它类型的大文件,则处于“上帝视角”的那些人就可能通过这种大文件流量观察到你的路径信息,然后通过Tor的出口节点关联到你实际的网络IP地址。
对于托管的Tor隐藏服务(hidden services)来说,相对来说就更容易了。因为Tor隐藏服务是托管在网络中的某台服务器中运行的,这些固定的服务器完全就类似活靶子,服务器会首先接收所有请求流量,再经由服务端处理。如果向一台托管服务器上传文件,则服务端处理需要在上传完全后才能进行。因此,如果拥有“上帝视角”的攻击者希望能发现你的Tor隐藏服务,则他可以向你的Tor隐藏服务中上传一个大文件,这种上传不需要通过你Tor隐藏服务的特定上传页面,即使上传失败也没关系。重点是在整个上传周期内,这些“上帝视角”攻击者能看到上传文件的整个流经路径。
A Lesser God?
不是每个人都有所需要的“上帝视角”,在我与Tor项目组开发人员的讨论交流中,他们也明确表示不能抵御全球性的监测或攻击。在Tor项目文档中就有这么一段话:
在对匿名架构的理论设计进行威胁分析时,全球性的被动对手(Global Passive Adversary,GPA)是最常见的假设威胁,但是像所有实用的低延迟系统一样,Tor不能抵御如此强大的对手。相反,我们假设对手可以观察到网络流量的一部分,可以生成、修改、删除或延迟流量,能操作他自己架设的Tor路由,也能入侵Tor路由的某些部分。
所以,那么到底哪些部分Tor路由是能被这样的对手入侵呢?是10%的入口节点吗?
Tor研究人员Nusenu上个月的分析报告中指出,一位恶意行为者近期设法创建了大量的出口节点,这些出口节点处理了Tor网络中将近24%的出口流量。这不是说你的你Tor服务有24%的时间在使用这些节点服务,因为Tor客户端约10分钟就会更改一次路径。因此,你的Tor初次使用时,有24%的可能会选择到该恶意行为者创建的出口节点,10分钟后切换为其它路径且使用时长为10分钟。因此,前20分钟使用该恶意行为者创建的出口节点的概率为42% (100% - 76%×76%),30分钟后的概率为56%,一小时后,达到80%,两个小时后是96%,依此类推,也即你使用Tor服务的时间越长,他们看到你出口流量某些部分的可能性就越大。
在Nusenu的分析报告中,他提到该恶意行为者创建的出口节点占据了Tor服务中近10%的入口节点。我计算方式如下: 1、在Tor服务中,每个出口节点也是一个中继节点,还有很多出口节点也能当入口节点;
2、近期,我发现了3,244个已知的入口节点和1970个已知的出口节点(只以IPv4地址计算),其中,1372个节点既是入口节点也是出口节点,它们占到3,244节点的42%,也就是说42%的入口节点也是出口节点。
3、也就是说上述恶意行为者创建的24%的恶意出口节点都属于这些节点中的一部份,他们占到了将近10%。
在Tor服务中,入口节点不会经常变化,因此,如果按照上述Nusenu的分析来看,每10个Tor连接服务中就有1个用到了恶意者创建的节点服务,而且,如果连接时间够长,那么恶意行为者就有可能识别关联出用户的出口流量路径。
A Teeny Tiny God?
如前所述,Tor项目组声称要防御“可以观察到部份Tor网络流量的对手”,但按照我的理论来看,Tor项目组不能抵御拥有“上帝视角”的人,甚至无法抵御那些控制了10%入口或出口节点的恶意行为者。
由于每个入口节点也可是中继节点,可以结合这种入口节点,通过客户端网络地址和公共已知Tor节点的比较,区分出实际的客户端用户。另外,如果传入某节点的流量来自另一个Tor节点,那么该节点就是一个中继节点,否则,该节点就是入口节点。
通过入口节点无法实现流量解密,只能进行监测。但幸运的是,对攻击者来说,正常Tor用户产生的网络流量可以被动监测到,且与隐藏服务产生的网络流量不同,比如:
初始连接延迟:对于正常用户来说,Tor守护启动后会建立路径,然后会在用户Tor浏览器启动时会有个暂停,再生成Tor流量;如果是一些机器人式的自动启动程序,可能会没有暂停间隔,且可以在执行扫描、攻击或信息收集等自动任务时有稳定的Tor流量;
Tor隐藏服务启动方式相同,但当完成服务注册后会有快速的流量传输,在等待第一个人连接到Tor隐藏服务时会产生一个暂停缓冲;
持续时间:大多数用户似乎都是启动Tor客户端来使用的,然后在完成后将其关闭。相反,机器人式的自动程序bot和隐藏服务通常会延长运行时间。
这也就是说,从入口节点处可以知晓用户的网络地址,并可以被动监测到用户端是否是真人、自动程序bot或是隐藏服务。
那退一步讲,如果你没用到恶意行为者的入口节点就是安全的了吗?我认为不。我自己托管的Tor隐藏服务经历了十多次大大小小的DoS攻击,其中一次攻击就比较有意思:攻击者控制了一个或多条恶意路径,并且可以识别到我使用的具体入口节点,如果我不连接到他们控制路径上的入口节点,他们就会DDoS我连接的入口节点,直到我下线。之后,我的Tor守护进程就会自动选择其它节点,以此反复,最终就会选择到他们的恶意节点。
根本性的安全缺陷
这篇文章中对Tor的攻击手法绝非新颖或奇特,早在2012年就有论文对长时间Tor连接跟踪的方法研究,2013年的论文介绍了对匿名服务进行匿名处理的方法。尽管这些方法很古老,但由于一直没有相应的解决方案,因此被归类为了0day攻击。
这些安全问题代表了当前Tor体系结构的根本缺陷,人们通常认为Tor为用户和隐藏服务提供了网络匿名性,但实际上Tor仅提供了表面上的匿名性而已,它并不能避免端到端的关联,并且攻击者只要控制了一个入口节点,就有可能实现隐藏服务中的关系识别。
总结
目前,在Tor 0day系列文章中我连续发表了《如何探测接入Tor网络的用户》、《如何发现所有Tor网桥》以及《如何追踪Tor网桥用户》,本文着重介绍了从Tor网络中识别出用户客户端身份的不同情况,而且可通过出口节点流量映射出终端用户网络地址的可能。所有这些Tor服务的安全问题和漏洞都在可行和可利用范围之内,隐患都这么多了,Tor还是安全匿名的吗?
参考来源:
https://www.hackerfactor.com/blog/index.php?/archives/896-Tor-0day-Finding-IP-Addresses.html