摘要: 前段时间看到一篇报道,暗网最大的托管商遭到黑客攻击,6500+网站被删。根据知道创宇平台的暗网雷达显示,一夜之间活跃在暗网中的网站从12000+下降到5000+,几乎遭到团灭,这一事件让暗网再次进入人们的视野。一直以来,暗网被赋予了很多传奇的色彩,本文将带你一步步揭开暗网的神秘面纱。
文章概览
- 基本概念
- 深网
- 暗网
- 黑暗网络
- tor匿名网络
- tor基本概述
- tor网络结构
- tor路由技术
- tor匿名服务
- tor客户端代理
基本概念
在介绍暗网之前,我们先来了解一下经常会混淆的三个概念“深网”(Deep web)、“暗网”(Dark web) 和“黑暗网络”(Darknet) 。
深网
深网是指服务器上可通过标准的网络浏览器和连接方法访问的页面和服务,但主流搜索引擎不会收录这些页面和服务。搜索引擎之所以不会收录深网,通常是因为网站或服务的配置错误、拒绝爬虫爬取信息、需要付费查看、需要注册查看或其他内容访问限制。据不完全统计,互联网世界中只有4%是对公众开放,剩下的96%的网站和数据则隐藏在深网中。
暗网
暗网是深网中相对较小的一部分,与被故意隐藏的 Web 服务和页面有关。仅使用标准浏览器无法直接访问这些服务和页面,必须依靠使用覆盖网络 (Overlay Network);而这种网络需要特定访问权限、代理配置、专用软件或特殊网络协议。
黑暗网络
黑暗网络是在网络层访问受限的框架,例如 tor 或 I2P,私有 VPN 也属于这个类别。通过这些框架的网络流量会被屏蔽。当进行数据传输时,系统只会显示您连接的黑暗网络以及您传输了多少数据,而不一定会显示您访问的网站或所涉及数据的内容。与之相反的是,直接与明网(Clean Net)或与未加密的表网服务和深网服务交互。在这种情况下,您与所请求资源之间的互联网服务提供商和网络运营商可以看到您传输的流量内容。
tor匿名网络
基本概述
经过上面的描述,我们对暗网整体的框架有个大致的了解。暗网不同于普通的互联网络,它拥有特殊的运作方式和网络协议,tor 是目前世界范围内是最大的暗网。tor又名洋葱网络,最初是由美国军方的情报机构开发并且提供财务支持的。洋葱网络使用特殊的路由转发技术,即洋葱路由技术。洋葱路由技术利用 P2P 网络,把网络流量随机地通过 P2P 的节点进行转发,这样可以掩盖源地址与目标地址的路径,使得在 Internet 上难以确定使用者的身份和地址。这就类似于你给某人送一封匿名信,你不是自己去送或者通过邮局的邮差去送,而是在大街上随便找几个不认识的人让他帮你送,这样收信人就很难往回追踪找到你。
洋葱路由项目最初进展缓慢,废弃了其中的几个版本。直到 2002 年才由麻省理工的两位毕业生 Roger Dingledine 和 Nick Mathewson 以及原项目组成员 PaulSyverson 一起开发出一个新版的洋葱路由,也就是Tor。“洋葱路由”的最初目的并不是保护大众的隐私,它的目的是帮助政府情报人员隐藏身份,网上活动不被敌对国家监控。后来为了混淆系统的流量,而不是让系统仅仅拥有来自美国安全部门网络的流量,他们又让系统中加入来自其它网络的流量。于是,tor 的普通版本被推广给了普通大众,让普通大众也能使用 tor 来保护自己的隐私。这样就可以把政府情报人员的流量与社会上各行各业用户的复杂流量混在一起,能让流量分析更加困难,提供更强地隐私保护。
目前全球范围内,tor网络由超过一万七千个中继节点组成,每个中继节点都是由全球志愿者免费提供,这些中继节点大部分分布在欧洲和北美。暗网除了能给我们提供匿名的网络服务之外,在按暗网中也存在各种类型的网站,这些网站只有通过暗网才能够访问。暗网中的网站大部分都是提供一些“特殊的服务”,包括枪支、毒品、网络攻击等等。
网络结构
Tor 匿名网络结构主要由目录服务器、洋葱代理、洋葱路由器这三部分组成。
- 目录服务器:它负责收集和更新网络中所有可运行的中继节点信息,为客户端提供节点公钥等建立链路所需的必要信息。目前,绝大多数的目录服务器在欧美地区,只有极少数分布在亚洲。
- 洋葱代理:它是 tor 用户的客户端代理程序,负责下载目录服务器中的路由信息,选择节点和建立路径,并对通信信息进行加解密。
- 洋葱路由器(又称中继节点):它是构建匿名通信链路的基础,负责转发 tor 客户端和网络服务器的通信信息,是实现匿名通信的关键。目前整个 tor 网络中有几千个路由节点分布在世界各地,这些中继节点又分为三种类型:
- Entry/Guard 中继节点──这是 tor 网络的入口节点。这些中继节点运行一段时间后,如果被证明是稳定的,并具有高带宽,就会被选来作为 Guard 中继节点。
- Middle 中继节点──Middle 中继节点是位于中间节点位置上的洋葱路由器,充当流量从 Guard 中继节点传输到 Exit 中继节点的桥梁,这可以避免 Guard 中继节点和 Exit 中继节点探查到彼此的位置。
- Exit 中继节点──位于出口节点位置上的洋葱路由器,负责将 Tor 网络内的流量转发到网络外部的互联网中去。每个出口节点都有一个相关的出口政策,该政策规定该节点能通过哪个端口转发何种协议的流量来防止滥用 tor 网络。
tor 网络主要依赖于这些中继节点转发用户流量,tor 通过随机选取遍布于全球由志愿者运行的三个中继节点,然后分别与选择的入口节点、中间节点、出口节点协商会话密钥。用这些协商的密钥将通信数据先进行多层加密,然后再将加密的数据在三个洋葱路由器组成的通信链路上传送。数据每经过一个洋葱路由器就像是剥去一层洋葱皮一样解密去掉一个加密层,以此得到下一跳路由信息,然后将数据继续发往下一个洋葱路由器,不断重复此过程,直到数据送达目的地。这种转发方式能防止那些知道数据发送端以及接收端的中间人窃听数据内容。
tor路由技术
以下步骤讲述了Alice在使用tor与Bob的服务器进行通讯时,tor是如何工作的。
- Alice开启tor客户端代理,获取来自tor 目录服务器(Dave)中的tor节点(或中继的列表)以及它们的公钥。
- Alice 选择三个节点建立通信链路。Alice 得到入口中继节点的 IP 地址和身份摘要,和入口节点协商一个只用于两者之间通信的短暂会话密钥。成功建立一跳的链路以后,Alice 使用同样地方法要求入口节点拓展链路到中间节点,得到了 Alice与中间节点的短暂会话密钥。Alice 重复此过程直至建立一条含有三跳的通信链路并且获得三个她与三个节点独一无二的短暂会话密钥。整个链路建立过程中的所有连接都是加密的。然后Alice 向 Bob 发送服务请求,并且将请求内容使用三个会话密钥按由远到近的顺序依次加密。入口节点接收到解密消息后会使用会话密钥将其解密一层,并将仍然加密的信息转发给中间节点。直至到达出口节点后,才将信息解密为明文。图中的虚线表示出口节点与 Bob 之间的连接是未加密的,出口节点将原始数据发送给 Bob。Bob 回复请求内容,并且每个节点会以相反的加密顺序加密一层,最终送还给 Alice。
- 如果 Alice 与 Bob 通信时间较长,Alice 每隔几分钟会重新选择三个节点建立新的通信链路以防攻击者窃听。如果 Alice 想要访问另一服务器 Jane,她也会重新选择中继节点建立新的通信链路。
tor匿名服务
之前提到暗网中也存在很多网站,这些网站在提供相应的服务时(暗网中大部分网络服务都是违法的)也希望是匿名的,即用户无法追踪到关于该网站的相关信息。下面主要讲解用户Alice和匿名服务器Bob交互的具体过程。
- 服务器Bob与tor网络中的一些中继节点连接,请求这些中继节点作为匿名服务的接入点,并将Bob的公钥发送给这些中继节点。注意Bob和中继节点之间的连接也是匿名的,这些中继节点无法获取关于Bob的相关位置信息。
- Bob将之前建立的接入点的相关信息和自己的公钥组装成描述符,并用自己的私钥该描述符进行签名,然后将其发送到目录服务器。通过Bob的公钥可以生成一个16位的字符串,记为XYZ。当客户端请求XYZ.onion时就可以找到对应Bob的描述符。
- Alice通过某些渠道获得了tor域名XYZ.onion,Alice想要访问该服务器。她通过tor客户端访问XYZ.onion,此时可以从目录服务器中获取对应服务器的描述符,通过描述符可以知道Bob服务器的接入点和公钥。与此同时,Alice会提前建立另外一条私密临时会话点,用于下一步与Bob交互。
- 当确认描述符存在且临时通道准备好之后,Alice用描述符中的公钥加密一条信息,包括临时会话点和会话秘钥,将加密后的信息发送给描述符中的接入点,之后接入点会将加密信息发送到对应的服务器(即Bob的服务器)。
- Bob收到加密信息后将其解密,获取临时会话点和会话秘钥。然后和临时会话点建立匿名连接,连接成功后,临时会话点会通知Alice。之后Alice和Bob可以通过临时会话点进行通信,注意通信过程中建立的连接都是匿名的。
tor客户端代理
如果只是希望匿名浏览web网页,我们可以通过tor浏览器来实现。tor浏览器是基于火狐浏览器改造而来,可以方便的帮助我们连接到tor,实现网络匿名。如果想要在更多应用中实现网络匿名,我们可以安装tor客户端代理。以下配置过程基于ubuntu,且默认已安装shadowsocks。
安装polipo
polipo是轻量级的跨平台代理服务器,可以实现http和socks代理,polipo本地服务端口为8123。
1 | sudo apt-get install polipo |
安装完成后,修改配置文件/etc/polipo/config
1 | socksParentProcy = "localhost:9050" #tor服务本地端口为9050 |
安装tor
1 | sudo apt-get install tor |
安装完成后,修改配置文件/etc/tor/torrc,添加以下内容。
1 | SOCKS5Proxy 127.0.0.1:1080 #shadowsocks本地服务端口为1080 |
测试
完成上述操作后,开启polipo、tor和shadowsocks。如果我们希望在chrome浏览器中实现网络匿名,可以通过添加tor代理来实现。
1 | 代理协议:socks5 代理服务器:127.0.0.1 代理端口:9050 |
如果我们希望在命令行中实现网络匿名,可以通过polipo代理来
1 | http_proxy=http://localhost:8123 "需要执行的操作“ |
本文作者:光阴的故事
本文链接: Tor匿名网络.html/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!