Back to all posts

简单介绍网络封锁与反封锁

网络基础

主要技术手段

  • DNS 污染:对于特定的域名,通过抢答的方式使 DNS 无法解析出正确的 IP 地址。

原理:由于通常的域名查询没有任何认证机制,而且 DNS 通常基于的 UDP 协议是无连接不可靠的协议,查询者只能接受最先到达的格式正确结果,并丢弃之后的结果。

  • IP 黑名单:针对特定的 IP 地址,将发往这个 IP 的数据包全部丢弃或者将其连接重置(TCP Reset

原理:TCP 协议在遇到丢包时会出现连接超时或者在收到 Reset 回复时会直接放弃建立连接。

  • 域名封锁:针对网络出入节点的每一个网络连接,通过检测目标域名,若发现非法域名则切断连接。

原理:网络协议最初设计时,并未考虑封锁这回事,无论是 HTTP 还是 HTTPS,只需要扫描每个连接的前几十个字节,就可以得到其目标地址(域名)。HTTP 是通过其 Host Header,而 HTTPS 是通过 SNI

  • 关键字过滤:通过检测数据包中的内容,若数据中含有关键字,则触发过滤规则,切断连接。

原理:部分协议(如 HTTP)传输过程中是明文传输,因此所有内容对于第三方是可见的。

  • 间歇性干扰:对网络连接进行干扰,使得网络访问变的不稳定,从而迫使访问者放弃继续访问。

原理:对网络连接进行间歇性的有意地丢包,使得访问端不间断的出现连接超时现象。

主要破解手段

  1. hosts 文件:对被污染的域名通过手动写入本地 hosts 文件来避免被污染,对被封锁的 IP 通过本地解析到未被封锁的 IP 达到正常访问的目的。
  2. 使用代理:通过外部的服务器访问目标地址,并把信息传回内部主机,主要使用的代理类型有一下几种:
  • Socks:可以代理 TCP 和 UDP 连接,但其数据包是明文的,依然逃不过上述检测
  • HTTP:可以有 TLS 加持,但只能代理 TCP 连接,对 UDP 无效
  • VPN:可以代理包含 TCP / UDP 在内的各种连接,但 VPN 会转发几乎所有的数据,导致当访问某些未被封锁的网站时会出现绕路的情况

Shadowsocks

该协议本质上是 Socks 的加密版本,可选择多种加密方式。一旦加了密,其传输的数据就无法被第三方检测了。并且在转发数据之前,可以对其目的地进行判断,避免出现上面提及的绕路的情况。在经常一段时间的优化之后,可以达到一个全局较快的连接速度,比上述的几个代理方式都要好。

对破网软件的反制

  1. 被动式检测:检测方只观察连接中传输的内容,当内容符合某种模式的时候,就把连接中断,或者服务器 IP 列入黑名单。上述的所有封锁方式均为被动式。
  • VPN 协议由于协议特征过于明显,因此在日益成熟的检测机制面前,VPN 会被严重干扰,甚至不可用。
  1. 主动式检测:当观察到一个不可识别的连接时,检测方主动发起一个去往服务器的连接,通过一些编造的数据,探测出服务器是不是一台代理服务器。
  • 重放攻击(Replay Attack):当 A 和 B 的通讯被 C 截获后,C 使用截获到的内容对 A 或 B 进行攻击。
  • 中间人攻击(MITM Attack):在 A 和 B 通信时,有一个 C 站在 A 和 B 当中,和 A 说我是 B,和 B 说我是 A,然后尝试截获并破解通信的内容。
  • 选择明文/密文攻击(CCA / CPA):精心构造出一些特殊的内容,然后对服务器实施的攻击。
  • 模式识别:使用人工或自动的方法,通过分析大量的正常通信数据,得出某个协议的某种模式。( 流量混淆 )
  • 密码学(TLS)

番外篇

既然代理工具有漏洞,那么检测工具也一会有漏洞。只要发现并利用这些漏洞,一样可以突破封锁。

西厢计划

  • TCP 连接混淆:在每次连接中,通过对 GFW 的入侵检测系统进行注入,与正常的连接混淆,使得 GFW 无法正确解析连接和检测关键词,从而避开关键字过滤。
  • 反 DNS 劫持:通过匹配 GFW 伪包的指纹并将其过滤,从而使一般的 DNS 解析也能获得正确的结果,但需要使用未受污染的 DNS,例如 Google Public DNS。
  • 单向隧道:利用 GFW 仅仅对出站的数据包进行过滤的特性,将发出的数据包透过不受过滤的服务器中转,而收到的数据包可直接穿过 GFW 到达客户端。这种情况下,由于 GFW 无法获取请求 URL,关键词过滤也将失效。当时的测试中,以这种方法观看经由 HTTP 协议传输的在线视频时,中转服务器仅耗费极小的流量。