本文原创作者:ArkTeam,本文属FreeBuf原创奖励计划,未经许可禁止转载
众所周知,Tor(The Onion Router,洋葱路由)提供客户端匿名通信,可以帮助用户匿名上网,保护用户隐私。其实 Tor同样也可以提供服务器端的匿名,这就是暗网中的顶级域名为onion的网站。这些网站只能通过Tor网络才可以访问,相信很多用户是被这些网站下的一些服务所吸引而使用的 Tor。
暗网中的Tor网络连接和普通网站的Tor网络连接一样吗?下面我们来讲解一下。
Tor网络中的客户端与服务器的连接过程一般称为电路(circuit),电路是由Tor路由节点组成的网络路径。
普通的网站通过Tor网络连接一般需要经过三个Tor节点,如图1 ,而暗网中的网站通过Tor网络连接一般则需要六个Tor节点,如图2。
图1 普通Tor电路
一般情况下,客户端匿名访问普通网站的Tor电路为:首先通过本地代理随机选择一个入口节点,入口节点随机选择一个中间节点,中间节点随机选择一个出口节点,最后出口节点通过TCP 连接并以明文形式携带内容到目的服务器。入口节点知道用户的IP地址,出口节点知道目的服务器的IP地址以及传输内容。但是每一个节点都不知道完整信息流向,从而保证通信的匿名性。
图2 暗网Tor电路
暗网情况下,客户端匿名访问暗网服务器的Tor电路需要经过六个Tor节点,客户端和服务器各通过一个 Tor电路连接到一个中继Tor节点(称为“会合点” ),这个会合点既不知道客户端地址,也不知道服务器地址,从而保证通信双方的匿名性。
当然暗网中的Tor电路不仅增加了一个会合点,还增加了介绍点和目录数据库。它的电路结构如图3所示:
图3 暗网中Tor电路结构
首先介绍暗网中的各个角色:
a)客户端:匿名访问暗网服务器的用户(浏览器);
b)暗网服务器:也叫隐藏的服务器,只能通过Tor网络被访问的目的服务器(网站);
c)目录数据库:存放暗网中的网站信息,用于客户端查询;
d)介绍点:用于与客户端或暗网服务器通信的节点;
e)会合点:用于最终客户端和暗网服务器端通信的节点。
在暗网的电路连接中形成七个小电路,每个小电路都有不同的功能:
1)暗网服务器-介绍点:选取介绍点;
2)暗网服务器-目录数据库:发布网站;
3)客户端-目录服务器:查询描述符;
4)客户端-会合点:建立连接;
5)客户端-介绍点:请求转发;
6)介绍点-暗网服务器:转发信息;
7)暗网服务器-会合点:终极连接。
每一条小电路都由若干随机选取的Tor节点组成,以保证通信的匿名性。
下面回到主题,揭秘暗网中的Tor网络连接。客户端通过Tor网络访问暗网服务器经过以下的 7个步骤。
暗网中的网站建立后,需要将自己发布出去才能让用户访问,为了将自己的URL信息放到目录数据库上,暗网服务器需要选取一些 Tor节点作为介绍点,并建立Tor电路,这样这些介绍点就不知道暗网服务器的具体地了。这些介绍点用于以后客户端想要访问暗网服务器时与会合点的通信(图4所示)。
图4 暗网Tor电路(1)
暗网服务器组合一个描述符,包括自己的公钥和各个介绍点,并用私钥进行签名认证,上传到目录数据库上。这些描述符和暗网服务器的网址是一一对应的,客户端通过请求暗网服务器的网址可以在目录数据库中找到对应的描述符,只有通过描述符里的介绍点才能访问到暗网服务器。暗网服务器的网址以 onion为顶级域名,并由它的公钥派生出的16个字符组成,例如 : http://kpvz7ki2lzvnwve7.onion/index.php/Main_Page 。至此,暗网服务器(网站)就建立好了(图 5所示)。
图5 暗网Tor电路(2)
客户端通过某个渠道得知了暗网服务器的网址,但是它不能直接访问暗网服务器,必须获取更多的信息。客户端需要通过Tor电路与目录数据库建立连接,查找该网址对应的描述符,从而获取该暗网服务器的介绍点和公钥信息,通过介绍点来连接暗网服务器。与此同时,客户端随机选择一个中继节点作为 “会合点”(图6所示)。
图6 暗网Tor电路(3)
客户端与会合点建立Tor电路,随机选取Tor 节点进行连接,在此电路中会合点作为Tor电路中的出口节点。连接时携带一个一次性的“secret”给会合点,以校验将要与之连接的暗网服务器(图 7所示)。
图7 暗网Tor电路(4)
客户端查找到暗网服务器的描述符并与会合点建立好连接之后,选择描述符里的其中一个介绍点与它通信,建立Tor电路并携带一个用暗网服务器的公钥加密的信息(该信息包括会合点地址和一次性的 “secret”)发送给介绍点,请求介绍点通知要访问的暗网服务器(图8所示)。
图8 暗网Tor电路(5)
介绍点收到请求消息后将用公钥加密的信息传送给暗网服务器,暗网服务器收到客户端请求后,用自己的私钥对加密信息进行解密,得到会合点的地址和一次性“secret” 。由于经过Tor电路传输,介绍点不知道服务器的具体地址(图9所示)。
图9 暗网Tor电路(6)
暗网服务器得知会合点地址之后,经过Tor电路与会合点建立连接,并携带一次性 “secret”,会合点将此“secret”与之前客户端发给它的进行校验。如果校验成功,则会合点通知客户端,至此,客户端与暗网服务器的连接建立完成(图10 所示)。
图10 暗网Tor电路(7)
最终客户端和暗网服务器之间的Tor电路连接经过六个节点:客户端的入口节点,客户端的中间节点,会合点(也是客户端的出口节点),暗网服务器的出口节点,暗网服务器的中间节点,暗网服务器的入口节点。
暗网中客户端和服务器的通信在经过会合点和介绍点时都通过Tor电路连接,因此介绍点和会合点都不知道客户端和服务器的具体位置,保证了通信双方的匿名性,并且所有经过Tor 网络的电路都是被TLS强加密的,Tor电路本身也有证书认证机制,防止了中间人攻击。但是Tor 网络的安全性问题仍在持续对抗中。
攻击者不断通过浏览器漏洞、流量分析、电路指纹等手段对Tor用户进行追踪识别。Tor团队也不甘示弱,在最近发布了加固版 Tor浏览器,使追踪Tor网络的难度进一步加大;志愿者团队中被称为“BADONION”的实验通过不断改进可以提高识别出恶意出口节点的效率,从而使得 Tor网络的通信更加安全。
2016年2月份,Tor网络节点数量迅速从 4万增加到6万,但是整个Tor网络的流量没有出现相应比例的增长。谁设立了这些节点,是出于什么目的,目前还无法判断。
Tor提供匿名通信功能,但是Tor并非绝对匿名。从丝绸之路到斯诺登事件说明了:Tor 只是一个工具可以让你匿名,但是它不确保你可以安全的连接。
https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-kwon.pdf
https://www.torproject.org/docs/hidden-services.html.en
https://plus.google.com/+GhostAssassin/posts/71FLns6QSt4
http://www.freebuf.com/news/107370.html
https://chloe.re/2016/06/16/badonions/
https://www.profwoodward.org/2016/02/what-just-happened-on-tor-network.html
*本文原创作者:ArkTeam weedy,本文属FreeBuf原创奖励计划,未经许可禁止转载