匿名网络概述(Darknet)

3,946 阅读23分钟
原文链接: www.findspace.name

1. Introduction

本文先简单介绍了surface web,deep web 和dark web的信息(主要系翻译),接着说明了onion的内容(来源于wiki)
本文详细介绍了onion路由技术(主要翻译自论文Dingledine R, Mathewson N, Syverson P. Tor: The second-generation onion router[R]. Naval Research Lab Washington DC, 2004 )。最后新技术的说明来源于Building a new Tor that can resist next-generation state surveillance

2. 浅网,深网,暗网

浅网surface web 深网deep web 暗网dark web
可以通过搜索引擎(谷歌,百度等)找到的信息 不能通过前面的那些搜索引擎搜索到的信息 深网的一部分,只能通过tor浏览器访问的信息

大多数人可能会把暗网(darkweb darknet)和深网混淆,深网是指互联网上普通搜索引擎搜索不到的所有信息。专家认为深网是浅网的几百倍。
事实上,深网的大多数内容没什么神秘的,也和“邪恶”无关。它包含不对外公开的大型数据库、图书馆和只允许会员查看的网站,而且,绝大多数内容是科研相关的内容。比如学校的图书馆,拥有自己的搜索引擎,这就属于暗网的内容。很多深网索引项目都失败或者消失了。常见的深网搜索引擎有: Ahmia.fi, Deep Web Technologies, TorSearch, and Freenet.
暗网则是深网很小的一部分。它是匿名网络,访问者和发布者都是完全匿名的。同时,政府部门也可以追踪到一些人,但是需要耗费大量人力物力,而且并非总能成功。而暗网的访问,一般是通过洋葱网络。

3. 洋葱路由(onion routing)

被称作洋葱路由的原因在于消息一层一层的加密包装成被称作洋葱数据包的数据结构,层数取决于到目的地中间会经过的节点数,每经过一个节点层会将数据包的最外层解密,因此任一个节点都无法同时知晓这个消息最初与最终的目的地,使发送者达到匿名的效果。

3.1 数据结构


数据包的创建与发送
为了发送洋葱数据包,发送消息者会从“目录节点”(directory node)提供的列表中选取一些节点,并以这些规划出一条被称作“链”(chain)或“线路”(circuit)的发送路径,这条路径将为传输数据包所用。为了确保发送者的匿名性,任一节点都无法知道在链中自己的前一个节点是发送者还是链上的另一节点;同理,任一节点也无法知道在链中自己的下一节点是目的地还是链上另一节点。只有链上的最后一个节点知道自己是链上最终节点,该节点被称作“出口节点”(exit node)。
洋葱路由网络使用非对称加密,发送者从目录节点获得一把公开密钥,用之将要发送的消息加密并发送给链上的第一个节点,该节点又被称作入口节点(entry node);其后与之创建连接和共享密钥。创建连接后发送者就可以通过这条连接发送加密过的消息至链上的第二个节点,该消息将只有第二个节点可以解密;当第二个节点收到此消息后,便会与前一个节点也就是入口节点同样的创建连接,使发送者的加密连接延伸到它,但第二个节点并不晓得前一个节点在链中的身份。之后按照同样原理,发送者通过入口节点和第二个节点的这条加密连接将只有第三个节点能解密的消息发送给第三个节点,第三节点同样的与第二个节点创建连接;借由重复相同的步骤,发送者能产生一条越来越长的连接,但在性能上仍有限制。
当链上的连接都创建后,发送者就可以通过其发送数据并保持匿名性。当目的地回送数据时,链上的节点会通过同一条连接将数据回传,且一样对数据层层加密,但加密的顺序与发送者完全相反;原发送者收到目的地回传的数据时,将仅剩最内一层加密,此时对其解密就可拿到目的地回送的消息。

3.2 弱点

3.2.1 计时分析

另见:流量分析
传统互联网不被认为具有匿名性的一个理由为互联网服务供应商具有纪录和追踪各电脑间的连接能力;例如当有人访问一个特定网站时,往来的信息内容如密码等,虽然能通过像是HTTPS等加密连接方式保护让其他人无法得知内容,但是连接本身却仍会有纪录,包含何时创建连接,多少数据量被发送等。洋葱路由虽然能创建并隐藏两电脑之间的连接,使两者之间并无一个可分辨的直接连接,但仍会有上述的连接纪录问题。流量分析可借由搜索连接纪录的连接时间和数据传输量来试图判别潜在的一对发送者与接收者;例如当有人发送51KB的数据到一个未知的电脑,三秒后另一未知的电脑发送51KB的数据给一个特定的网站,则可以推断此人可能与该网站曾创建连接。此外还有一些原因可以让流量分析更加有效,包含节点的损坏或离开网络,以及当链已经因为定期重建而改变,但有些链上节点却仍在追踪此前创建的会话等。
大蒜路由是洋葱路由的一种变体,其结合了I2P网络并将多份消息加密打包在一起,使其更难被攻击者以流量分析的方式破解。

3.2.2出口节点漏洞

虽然消息在洋葱路由网络中被层层加密,但是在出口节点时,该节点会把最后一层解密并将原始消息传给接收者;因此若出口节点遭到攻击或是受控制,则原始的消息将会被截取。瑞典研究员丹‧伊格史塔德(瑞典语:Dan Egersta)曾用此方式获得了超过100封寄给外国大使馆的电子邮件密码。出口节点漏洞的原理与未加密无线网络很类似,后者为用户将未加密的数据在无线网络上传送时可能中途被其他人截走;这两种问题都可以通过端对端加密连接如SSL、HTTPS等方式解决。

4. Tor(The Onion Router,洋葱路由器)

Tor是实现匿名通信的自由软件。Tor是第二代洋葱路由的一种实现,用户通过Tor可以在因特网上进行匿名交流。Tor用于防范互联网上广泛存在的流量过滤、嗅探分析。Tor在由“洋葱路由”组成的表层网(overlay network)上进行通信,可以实现匿名对外连接、匿名隐藏服务。

4.1 Tor浏览器

前身为Tor Browser Bundle(TBB),是Tor项目的旗舰产品,操作容易,对电脑没有多少知识的人也能使用。由Mozilla Firefox ESR浏览器修改而成,并由Tor Project开发人员做了许多安全性和隐私保护的调校,预载TorButton、TorLauncher、NoScript和HTTPS Everywhere等扩展与Tor代理。其为开源软件、自由软件、绿色软件,可在多种操作系统上运行,包括Windows、Mac OS X、Linux、Unix、BSD、以及Android手机。
Tor浏览器在后台启动Tor进程并透过其连接网络。一旦程序断开连接,Tor浏览器便会自动删除隐私敏感数据,如cookie和浏览历史记录。
Tor浏览器目前提供16种语言的接口,包括简体中文(但尚无繁体中文)。
Tor浏览器本身提供SOCKS代理服务,一些应用程序已可借此使用Tor网络。若结合代理服务器软件 Privoxy,可以让所有走HTTP/HTTPS协议的连网应用程序、以及所有能够设置HTTP/HTTPS代理的应用程序都通过Tor网络来上网。

4.2 移动平台

Android平台上的Tor服务器名为Orbot,并搭配Orfox浏览器来打开网页。Orbot本身可以当作VPN和Proxy使用,让用户指定同一设备上的任何程序通过Tor网络来匿名上网。

4.3 Tor的工作原理

翻译自tor官网

tor网络中的数据包使用了随机的路径来掩盖足迹,这样在某个点的观察者并不知道数据真正从哪里来,真正的目的地是哪里。
用户的tor软件或者客户端在tor网络中增量地建立一条加密线路。这条线路每次只扩展一跳,而且每次扩展的中继点只知道数据来自哪个中继点,数据将要被发送到哪个中继点去。没有任何一个中继点知道整条线路。客户端与每一跳都协商了一组独立的密钥来保证每一跳不能追踪走过的中继点。

一旦一条线路建立了,就可以用来进行交互数据了。


为了提高效率,十分钟以内的链接,将采用同一条路径。之后的请求将建立新的路径。

4.4 相关工作

基于中继的匿名系统设计主要分歧在两个方向上。像Babel,Mixmaster,Mixminion这样的系统通过设置相对较大和可变的延迟来最大化匿名性,这样,这些高延迟的系统就拥有了高防御性。但是像网页浏览、即时通讯或者ssh连接则无法忍受这样的高延迟。
tor属于第二种:低延迟的设计,允许匿名的交互式流量。这些系统提供了更明确的及时的信息分发,导致很难阻止可以监听通讯终点时序和流量的攻击者。
最简单的低延迟设计是单跳代理,比如:Anonymizer:在转发数据之前会剥去数据的源信息。将流量集中到此单点增加了匿名集,但是如果窃听者可以观察到所有进入和离开这个代理的流量,则此方式很容易被攻击。
更复杂的设计是通过分散可信点、基于路径的匿名系统。(用户可以建立一个或多个双向的点到点路径,,,,?这里原文没太懂)
PipeNet是和onion routing同期提出来的低延迟设计。有很强的匿名性,但是允许用户切断网络(?)
类似P2P设计的系统有Tarzan和MorphMix等,所有的用户既产生流量,也转播流量,它们意在隐藏当前节点是流量的发起者还是转播者。Tarzan一类在每层都进行了加密,而Corwds则简单地假设监听者无法观察流量发起者,所以没有使用任何公钥加密,线路上的任何节点都可以读取用户的流量。
Hordes基于Crowds,但是使用了多播响应来隐藏流量发起者。

4.5 Tor的设计原理

Tor网络是一种覆盖网络,每个洋葱路由器(onion router, OR)作为一个没有任何特权的用户层正常程序运行,与其他所有节点维持一个TLS链接。每个用户运行自己的洋葱代理程序:获取目录,建立路径,处理连接。这些代理接受TCP数据流,并且在同一条线路上复用他们(?)。
每个洋葱路由器维护一个长期的验证密钥和短期的洋葱密钥。验证密钥来签署TLS的证书,签署OR的描述符(包含了当前节点的keys,地址,带宽,退出策略等等),还被目录服务器用来签署目录。洋葱密钥则用来解码用户发送来的请求,以便建立一条通路同时协商临时的密钥。TLS协议还在通讯的OR之间使用了短期的连接密钥,周期性独立变化,来减少密钥泄漏的影响。

4.5.1 传输单元Cells

流量在网络中以固定大小的单元进行传输,每个单元是包含头和有效载荷的12字节数据。头包括一个线路标识符(这个单元使用哪条线路)和一个指令(指明将要对这个单元的数据做什么)。指令包括:

  • padding,目前主要用来keepalive,也用来进行链接填充
  • create or created(用来建立新的路线)
  • destory,弃用线路

中继单元在有效载荷数据之前有额外的头(中继头),包含了一个streamID,一个端到端的校验和,中继负载的长度和一个中继命令。整个中继单元的信息在线路上流动时,使用128位的AES进行加解密。中继命令包括:

  • relay data,数据顺着stream向下流
  • relay begin,打开一个stream
  • relay end,关闭一个stream
  • relay teardown,关闭一个断开的stream
  • relay connected,提示洋葱代理 relay begin成功了。
  • relay extend and relay extended,延长线路一跳,加ed的表示返回确认
  • relay truncate and relay truncated,截断线路的一部分
  • relay sendme,用于拥塞控制
  • relay drop,用于实现远程虚拟

4.5.2 线路和流(Circuits and streams)

洋葱路由最初位每个TCP流都建立一条线路。而由于建立一条线路可能会耗费0.1秒(因为公钥加密和网络延迟),这种设计导致像网页浏览器这样会打开很多TCP流的应用消耗线路成本过高。
在Tor里,一条线路可以被很多TCP流共享。

4.5.2.1 建立一条线路

Constructing a circuit
用户的代理程序增量地构建一条线路,同线路上的每个OR(洋葱路由器)协商一个对称密钥,一次一跳(一个节点)。
假设洋葱代理Alice想要建立一条线路,她会发送一个create cell(携带create指令的单元)给她选择的线路上的第一个节点Bob。她会选择一个的连接中没有用过的新的cricID CAB。create cell包含了 the Diffie-Hellman handshake(gx)(迪菲-赫尔曼密钥交换是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容)的前半部分,加密了给Bob的洋葱密钥。Bob回复一个created cell 包含了gy和一个K(K = g xy)。
一旦他们两个的连接建立了,Alice和Bob将发送其他使用协商的密钥加密的中继单元。
要扩展这条线路时,Alice会发送一个relay extend cell给Bob,其中已经指定了下一个OR(Carol)和用来加密的gx2。Bob转发内含的半次握手数据到一个create cell给Carol。Bob选择了一个他和Alice的连接中没有用过的新circID CBC,Alice永远不会知道Bob和Carol之间的circID。当Carol返回了created cell,Bob包装这个cell成relay extended cell给Alice。这样,线路就扩展到了Carol,Alice和Carol共享一个密钥 K2 = gx2y2
如果要继续扩展,则依此类推,执行以上步骤。
线路级的握手协议实现了单方面的实体认证(Alice知道她和OR握手了,但是OR不关心谁建立了线路)和单方面的密钥验证(Alice和OR共享了一个密钥,但是Alice只知道OR知道这件事(?))。更正式一点,这个协议如下:
Alice->Bob: EpkBob(gx)
Bob->Alice: gy,H(K|”handshake”)

EpkBob(・)是使用Bob的公钥进行加密,H是一个安全的哈希函数,|表示级联。

4.5.2.2 中继单元

OR在收到Alice的中继单元数据以后,用相应的密钥解密中继单元头和负载。如果这个中继单元是由Alice向目的地发出的,则检查是否有有效摘要(作为优化,前两个字节作为完整性检查,看是否是0,大多数情况下,这样可以避免计算hash值)。如果有效,他们将按照下面说的进行处理。否则的话,
洋葱代理处理进来的中继单元很简单:他们用和每个OR的公钥迭代地解出中继头和负载。(在任何节点发现解出的摘要失效)???
Alice对每个节点都针对性的赋值了摘要,并进行了加密,因为摘要已经在每步都加密成了不同的值,只有在特定的目标OR才有意义。这种leaky pip circuit 拓扑允许Alice发送的流在线路上的不同OR处退出。Alice也可以根据自己的退出策略选择不同的节点退出,或者让OR无法得知流是否来自于同一个人。
如果要截断路径,Alice发送一个destroy 控制单元。线路上每个接受到destroy的OR,关闭这条线路上的所有stream,并且传递这个destroy到下一个节点,这个过程也是增量的,同样执行destroy完毕的OR也发送relay truncate cell 确认。通过这种方式,Alice就不用通知中间节点她更换了线路。这样“截断节点查看线路是否断开”的攻击破坏性就不大了。

4.5.3 打开和关闭steams

当Alice的应用想要TCP连接时,OP(洋葱代理)选择(或者建立)一条新的线路,选择一个合适的节点作为退出点。OP发送一个relay begin单元给退出节点来打开新的stream,生成新的streamID。一旦退出节点连接上了目标主机(想要访问的网站等),它响应一个relay connected 单元。OP则通过sockes代理通知应用程序线路已经建立。接下来,OP接收应用的TCP流数据,封装成relay data单元沿着线路发送给退出节点。
这里还需要一个注意的地方,一些应用给Tor客户端发送的是字母数字的主机名,有些给的是解析好了的ip地址。如果应用先做dns解析,那Alice要访问的地址就透漏给DNS服务器了,而不是通过tor网络发送hostsname最后才解析。Mozilla和SSH之类的有这样的漏洞。
Mozilla中这个问题很好解决。Privoxy(一个HTTP代理)可以给tor客户端hostname,而不是在本地就进行了dns解析。而更广泛适用的解决方案仍是急需的(这是04年的论文,不确定现在)。替换本机的nameserver可以达到目的,但是不方便而且不可移植。强迫解析库使用TCP而非UDP也是困难的不可移植的。动态拦截系统解析看起来是个正确的方向。我们也提供了一个tor网络上的解析工具dig。但是目前,我们仍然建议使用Privoxy这样的代理。
关闭一个Tor stream和关闭一个TCP stream类似:正常情况下使用两步握手,出错时一步。

5. Tor的安全性讨论

这两位来自美国东北大学的两位科学家在Tor洋葱网络进行了一项实验,此项实验用到1500蜜罐服务器已发现出至少110台“流氓服务器”。本此实验(2016年2月12日–2016年4月24日)旨在测试Tor同胞服务器的可信因素和HSDirs(隐藏服务目录),尤其是HSDirs,它是指一个Tor服务器用于承载一个.onion(深网)网站的复杂项目。

5.2 对一些服务器尝试SQL注入和XSS攻击

大多数数据查询表现出恶意行为,如访问服务器的根目录的路径,description.json服务器文件,以及Apache状态页面数据。Guevara Noubir教授补充道:

“我们检测到其它攻击手段,如SQL注入(针对INFORMATION_SCHEMA.TABLES),Drupal用户名枚举,跨站点脚本(XSS),路径遍历(寻找boot.ini文件和/ etc / passwd文件),瞄准Ruby on Rails框架(导轨/信息/属性),和PHP复活节彩蛋(= PHP? – – – – *)。 ”
这110台行为不端的HSDirs中,有70%是运作在专业云计算基础架构上。这就说明,这些“流氓服务器”不是建立自己的家用台式机作为节点服务器。

5.3 有些恶意服务器是Tor的出口节点

Tor网络的攻击都为Tor项目,探讨这些项目的大多是民族国家行为者,犯罪侦查机构,学术研究人员和网络犯罪分子。研究中,25%的HSDirs充当Tor流量的出口节点,也就是说这类人群可能会利用这些服务器来开展中间人攻击(MitM)攻击的征兆,并窥探Tor流量,隐患重重。

5.4 问题总结

目前为止(2016.8.31),全球大概有7000个中继节点,2000个入口节点和1000个出口节点。攻击者只需要有一个蜜罐入口和出口,就可以分析出你的流量去向,获得你的真实身份,(1/2000*1/1000)的机率,恰好你使用了这个入口和出口节点,考虑到在用Tor时,你一个HTTPServer的访问就可能建立很多条线路,这个机率将大大提升,如果你长期使用Tor,那么被蜜罐节点收集到信息的可能性更大。
Tor在低延迟和高匿名性之间做了一个取舍(trade off),因为tor的最广泛应用是浏览器,为了维持访问的流畅性,牺牲了部分匿名性。

6 大蒜路由(Garlic routing)

是洋葱路由的一个变体,它将传输的原始数据拆散为加密数据包通过多条隧道交叉疏散传递,令攻击者的流量分析难上加难。在洋葱路由中一条或多条数据流的上传与下载共用一条隧道,而这种路由方式的上传与下载隧道相互独立而且两个方向上的隧道数量都可能>1,所以被称为大蒜路由。
与洋葱路由的电路交换(Circuit Switching)相比,大蒜路由也称为封包交换(Packet Switching)方式。大蒜路由是I2P与Tor及其他隐私/加密网络的主要区别之一。

6.1 典型应用 I2P

很难被封杀
在抗封杀方面,I2P 比 TOR 要坚挺。

先说说 TOR 为啥被天朝封杀:
TOR 每次启动时,需要先连接到某个 TOR 的目录服务器,获取网络上可用节点的信息。由于目录服务器数量有限,GFW 就把互联网上所有的 TOR 目录服务器的 IP 地址都列入黑名单。后来,TOR 官网提供网桥中继,帮助网友接入 TOR 网络。但是,TOR 的网桥中继,数量依然不太多。据说 GFW 专门有人在盯着 TOR 官网更新的网桥中继地址——每次有新的中继地址贴出来,就列入黑名单。经过 GFW 的不懈努力,大部分 TOR 的网桥都被封杀。所以,TOR 在天朝内不太好使。

再看看 I2P 为啥封杀不了:
I2P使用 Kad 算法(用过电驴或电骡的网友,应该听说过)来获取网络节点的信息。这么做有几个好处:
1. 不需要目录服务器
2. Kad算法拿到的节点信息只是整个 I2P 网络的一小部分
3. 每一台运行 I2P 的主机都可以成为中继,帮别人转发数据(类似于 P2P 下载)
由于上述好处,GFW 很难把所有 I2P 节点都列入黑名单。

7 下一代匿名通信系统

Tor仍有很大优势,在短时间内不会消失。最可能的情况是Tor继续作为一种优良但不完美的通用匿名系统,同时也会有新的特定用途匿名性更强的系统,比如匿名通信,匿名文件分享,匿名微博和匿名网络语音系统等等。

7.1 Herd:没有元数据的信号

Aqua/Herd项目看起来是最可能在现实中部署的。Aqua(Anonymous Quanta)是一套匿名文件分享网络。Herd,基于Aqua,利用了类似的匿名性设计了匿名网络语音系统。(论文ACM SiGCOMM 2015 CCF-A,相关资料)。接受了美国NSF的50万美元资助后,设计者正努力在2017年上线这个系统。
这两个系统都是通过用噪音数据填充用户的流量,使其通信不可轻易识别。

7.2 Vuvuzela/Alpenhorn

Vuvuzela’s approach to anonymous chat is to encrypt the metadata that it can, add noise to the metadata that it can’t, and use differential privacy to analyse how much anonymity this noise provides.

7.3 Dissent

基于Dining cryptographers problem,结合了一个可验证的随机算法,现在DIssent正处于研究进程中。该项目的更适用于一对多的广播,不需要实时交互,比如博客,微博甚至IRC。
(然而,github上的代码已经两年没有更新了。)

7.4 Riffle

跟Aqua类似,Riffle的主要应用场景也是匿名文件分享。更多的是对Tor的补充。因为Tor是不支持P2P的,p2p是点对点下载文件,在这个过程中,使用tor会暴露自己的ip地址,也就失去了tor的意义。

7.5 Riposte:匿名的Twitter

类似Dissent,尚未部署,实验阶段。继续平衡高匿名性和低延迟之间的取舍。

7.6 新技术的现状

上面提到的新技术,很少有能完整可用地部署到现实中的,一个原因是研究人员通常不倾向于做出产品级的项目,没有足够的热情。
另一个是技术实现上有很多障碍,理论研究和实际开发仍有距离。
个人认为,SDN+Tor(之类)

8. Reference

A Beginner’s Guide to Exploring the Darknet
wiki 洋葱路由
Tor
Tor: Overview
Dingledine R, Mathewson N, Syverson P. Tor: The second-generation onion router[R]. Naval Research Lab Washington DC, 2004.
Building a new Tor that can resist next-generation state surveillance
Overlay network
Transport Layer Security, TLS
Diffie–Hellman key exchange
揭秘暗网中的Tor网络连接
历时72天,TOR网络中钓出110多台“流氓服务器”
【技术分享】几张图让你理解:Tor是如何工作的
Dining cryptographers problem
TOR: Is There a Viable Alternative?
“如何翻墙”系列:关于 TOR 的常见问题解答
kad算法介绍
什么是洋葱路由
P2P技术原理及应用
SDN是什么

文章若未注明转载皆为原创,如需转载请注明出处FindSpace博客及文章链接,文章markdown格式源码现已开放,欢迎转载。文章源码地址:github.com/FindHao/Fin…