Take Down GFW技术文档 - gtalent-community/share_learning GitHub Wiki

Take Down GFW技术文档

原始文档By 家驹 战友提供,后续战友增删请备注自己 昵称,谢谢🙏

Copyright Copyright © 2020 G-Talent ggg

Disclaimer All rights reserved. No part of this material may be reproduced in any form without the written permission of the copyright holder. Due to continued progress in methodology, design, the contents of the documents are subject to revision without notice. G-Talent assumes no legal responsibility for any error or damage resulting from the use of this document.
Contents 目标
GFW简介
GFW的历史
介绍GFW的历史,希望大家补充。
GFW的部署和架构
GFW封锁方式
DNS污染(Cache Poisoning)
DNS Hijacking劫持
TCP RST阻断(TCP连接重置)
IP路由劫持
深度包检测
可能的解决方案
GWF可能的网络攻击
GWF厂家及其技术
为制裁文档提供技术关键点的总结
Reference
Revision History

目标 弄清楚DNS请求的流程和DNS Injection的原理; 确定GFW的危害,比如网络攻击,和是否对国外网络运营商的危害,能否找到例子? 确定GFW的关键技术和关键节点,这样才能精确打击; 为制裁文档提供技术支持; 希望一起补充; GFW简介

GFW的历史 介绍GFW的历史,希望大家补充。

GFW的部署和架构 GFW是一种分布式的入侵检测系统,真正的GFW的部署方式,外人无从得知,下图是典型意义下的GFW线路拓扑,也就是GFW部署在国家的出口路由器的旁路上,用分光的方式把IP包复制一份到另外一根光纤上,从而拿到所有进出口国境的IP包。

Figure 1 GFW 线路拓扑示例 另外一个例子是访问被封网站触发连接重置的时候,往往收到两个RST包,但是TTL不同。还有一个例子是对于被封的IP,访问的IP包还没有到达国际出口就已经被丢弃,因此GFW应该在省级骨干路由的位置也有部署。 通过IP协议的TTL特性,可以做一个简单的GFW的探测分析,原理就是IP包每经过一个路由,路由器会把IP包的TTL减去1,如果TTL到0了,路由器不会再把IP包发给下一级路由。然后我们知道GFW会在监听到不和谐的IP包之后发回RST来重置TCP连接,那么通过设置不同的TTL就可以知道用户到GFW之间经过了几个路由器。 由于GFW是在旁路上基于分光来实现的,所以GFW必须把设备部署在主干路由上,包括出口路由器和省级骨干路由的位置。

GFW封锁方式

DNS污染(Cache Poisoning) DNS污染是GFW的一种让一般用户由于得到虚拟目标主机IP而不能与其通信的方法,是一种DNS缓存投毒攻击(DNS Cache Poisoning)。其工作方式是:对经过GFW的在UDP端口53上DNS查询进行入侵检测,一旦发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器NS(Name Server)给查询者返回虚假结果。 DNS查询流程 Figure 3 是DNS查询的流程,简略描述如下(具体描述请查RFC1035): 标准的DNS解析过程由几个实体组成,包括用户主机上的stub resolver,Recursive Resolver (递归解析器),Root Servers, Top Level Domain (TLD) Authorities 和 Authoritative Name Server; 当一个用户发送一个请求到Recursive Resolver 并且此解析器并没有有效的cache信息(没有有效cache信息的意思应该是第一次接到此请求信息,在cache并没有保存有效信息),那么此解析器会首先将整个请求信息转发给root server,root server的作用是重定向发给TLD服务器,TLD服务器会将请求发给最终的Authority servers。 由于每次redirect都会返回Recursive Resolver,所以在这个过程中,Resolver会缓存中间节点的信息 如果有攻击的时候,这个攻击可能是黑客,或者ISP,或者government,这个攻击者监控任何链路并且插入数据包,那么攻击者能够发起DNS Injection Attack,即转发一个伪造的response,这个response包括请求的内容,协议号,并且包含一个无效的IP或者一个能被控制的IP。

DNS查询流程的漏洞 由于通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,查询者只能接受最先到达的格式作为正确结果,并丢弃之后的结果。 由于系统默认使用的ISP提供的NS查询国外的服务器时被劫持,其缓存收到污染,因而默认情况下查询ISP的服务器就会获得虚假IP 用户直接查询境外NS又可能被GFW劫持,从而在没有安全防范机制的情况下仍然不能获得正确IP。 DNS缓存污染受TTL过期时间的限制。

DNS Injection造成的附带损害 正是由于DNS服务器是多个服务器协作完成,所以会造成附带损害(Collateral Damage),即当一个从resolver发出的DNS请求进入一个审查网络的时候,附带伤害就发生了,原因如下: 迭代请求:resolver不会仅仅发送有限的请求比如仅仅询问root来找到需要的TLD,相反,如果root的缓存里面没有TLD的路径的时候,resolver会将整个请求都发给root。同样道理,如果TLD没有authority的缓存的时候,resolver会将整个请求发给 authority。因此,任何一段有审查都会造成解析失败; Redundant服务器:大部分DNS部署都会在多个网络使用多个服务器来增加可靠性,实际的authorities的选择有多个算法。当有13个不同的root和13个global TLD的部署场景情况下,任何一个resolver到这26个IP的路径有审查就会造成整个部署环境的附带损害。Anycast的情况下也是一样的道理; 动态路由:resolver到authorities的路径是动态的,路由会发生在不同的AS(AS是BGP中独立网络的概念),如果一个AS的路径遇到了审查,那么这个AS中的所有数据流都会遇到审查,即使源节点和目的节点不在审查网络内,也会遭到审查。路由的动态变化使得DNS请求什么时候,在哪里经过审查传输网络的预测更加困难。 潜在危害 由于ISP用的审查行为造成了整个DNS服务器组的附带损害,虽然我们很傻很天真的相信ISP不会使用DNS Injection的审查行为,但是ISP会面临很多经济和政治的影响,而且这种审查行为会造成很大的附带损害; 如果ISP仅仅审查用户,而且不是传输链路,就会防止附带损害,但是审查机制的本性就是用来作假和作恶; 如果ISP不改变这种DNS injection的行为,那么一种可能性就是邻居ISP会认为这个审查ISP是无效的,邻居ISP应该尽量选择另外一条传输路径,尤其是TLD运营者应该监控他们的peer来确定是否有DNS injection发生; DNSSEC可以天然防止这种附带损害,尤其在TLD层面。.de和.kr (德国和韩国)的域名部署了DNSSEC验证的resolver,这样可以拒绝unsigned injected replies,并且等待合法的signed回复,这样可以避免DNS injection造成的附带损害;

DNSSEC

本质的解决办法是给DNS协议增加验证机制,例如DNSSEC (Domain Name System Security Extensions),客户端进行递归查询(Recursive Query)而不查询已经被污染的递归解析服务器。然而缺点是目前并非所有权威域名解析服务器(Authoritative Name Server)都支持DNSSEC。(Unbound提供了一个这样的带DNSSEC验证机制的递归解析程序) 需要进一步扩展 DNS Hijacking劫持 指DNS服务器被控制,查询DNS的时候,服务器直接返回给你它想让你看到的信息。这种问题常为ISP所为。由于一般的电脑的DNS服务器的配置都是自动获取,实际上会由ISP分配,因此通常会默认使用ISP的DNS服务器,ISP控制该服务器,可实现DNS劫持。 ISP使用DNS劫持的目的,通常是插入广告,就是要赚钱。 这种情况应该不是GFW主要采用的方式,以为DNS劫持用户国内服务器,而对国外服务器GFW无法更改其内容,故采用DNS污染的方式篡改用户收到的信息。

TCP RST阻断(TCP连接重置) 当检测到某个TCP连接的IP包中包含非法关键词时,伪造RST包发给TCP连接两端,导致连接断开,这就是TCP RST阻断或者TCP连接重置。 TCP协议规定,只要看到RST包,连接立马被中断。从浏览器里来看就是连接已经被重置。这种封锁方式是GFW的主要应对手段之一。大部分的RST是条件触发,比如URL中包含某些关键字,比如facebook。GFW在TCP层的应对是利用IPv4协议的弱点,也就是GFW隐藏在网络上假装成用户发包,一方面欺骗用户去相信RST是facebook发的,另外一方面让facebook相信RST是用户发的。

IP路由劫持--TBD

深度包检测--TBD

可能的解决方案 解决方案是一个比较难的点,尤其需要实际操作经验。由于时间原因,短期不会扩展这一块,重点放在ws+tls+混淆的解决方案,不是为了建梯子,而是找出制裁的关键点,集中注意力到第1章的目标。

GFW可能的网络攻击 GFW的DNS劫持还可能带来网络攻击,对国际国内互联网的严重破坏: 一方面,GFW可能在紧急时刻按照“国家安全”的需要对所有DNS查询都进行污染,而且可能指定污染后的IP为某个特定IP,使得全球网络流量的一部分直接转移到目标网络,使得目标网络立即瘫痪。 另一方面,GFW将伪造的DNS返回包要发送给源IP地址的源端口,如果攻击者伪造源IP,将会导致著名的增幅攻击:十倍于攻击者发送DNS查询的流量将返回给伪源IP,发生如下情况: 如果伪源IP的端口上没有开启任何服务,很多安全配置不严的系统就需要返回一条ICMP Port Unreachable消息,并且将收到的消息附加到这条ICMP信息之后; 如果伪源IP的端口上开启了服务,大量非法UDP数据涌入将使得伪源IP该端口提供的服务瘫痪。 如果攻击者以1Gbps的速度进行查询,一个小型IDC甚至一个地域的ISP也会因此瘫痪。攻击者还可以设置TTL使得这些流量恰好通过GFW产生劫持响应,并在到达实际目标之前被路由丢弃,实现流量“空对空不落地”。 攻击者还可以将攻击流量的目标IP设置伪造成与伪源IP有正常通信或者其他关联的IP,更难以识别。这样实际上就将一个国家级防火墙变成了一个国家级反射放大式拒绝服务(ddos)攻击跳板。

GFW厂家及其技术 不知道能不能定位到提供GWF厂家的具体技术。

为制裁文档提供技术关键点的总结--TBD

Reference [1] Towards a Comprehensive Picture of the Great Firewall’s DNS Censorship [2] 深入理解GFW: DNS污染 [3] DNS Injection can pollute the entire Internet [4] The Collateral Damage of Internet Censorship by DNS Injection [5] P. Mockapetris. Domain Names - Implementation and Specification. RFC1035, 1987.