GFW - mj5219054/clash_for_windows_pkg GitHub Wiki

时间表

  • 2001年,方滨兴”计算机病毒及其预防技术”获国防科学技术三等奖,排名第一。

  • 2001年,方滨兴获国务院政府特殊津贴、信息产业部”在信息产业部重点工程中出突出贡献特等奖先进个人”称号,中组部、中宣部、中央政法委、公安部、民部、人事部等联合授予”先进个人”称号。

2002年9月3日,Google.com被封锁,主要手段为DNS劫持。

  • CNCERT/CC的应急支撑单位中民营企业最初领跑者是绿盟,后来绿盟因其台谍案被罢黜,启明星辰取而代之。而安管中心具有一些资质认证、准入审 批的行政权力,这可能是民间安全企业趋之若骛的原因。不过,民营企业并未参与到国家信息安全的核心项目建设中,安管中心许多外围项目交给民企外企做,比如 像隔离器之类的访问限制设备外包给启明星辰以作为辅助、备用,或者在与他们在网络安全监测上有所交流。

  • GFW与金盾没有关系 敏锐的读者从时间表应该已经看出这样的感觉了。实际上,GFW与金盾就是没有关系,两者泾渭分明,有很多区别。

  • GFW主要是舆情情报系统的工具,而金盾主要是公安系统的工具。 而金盾的科研实力较弱,公安系统的公安部第三研究所信息网络安全研发中心、国家反计算机入侵与防病毒研究中心都缺乏科研力量和科研成果,2008年8月成立信息网络安全公安部重点实验室想 与哈工大的重点实验室抗衡,还特意邀请方滨兴来实验室学术委员会,不过这个实验室光是电子数据取证的研究方向就没什么前景,而且也没什么研究成果。GFW之父方滨兴没有参与金盾工程,而工程院里在支持金盾工程的是沈昌祥;实际上那个公安部重点实验室的学术委员会名单很是有趣,沈昌祥自然排第一,方滨兴因为最近声名太显赫也不好意思不邀请他,方滨兴可能也有屈尊与公安系统打好关系的用意。

GFW的技术是世界顶尖的,GFW集中了哈工大、中科院、北邮货真价实的顶尖人才, 科研力量也是实打实地雄厚,什么动态SSL Freenet VPN SSH TOR GNUnet JAP I2P Psiphon 什么Feed Over Email 算什么葱。所有的翻墙方法,只要有人想得到,GFW都有研究并且有反制措施的实验室方案储备。

比如说:串接式封堵 采用中间人攻击手段来替换加密通信双方所用的没有经过可信赖CA签名保护的数字证书网关/代理间的证书协调,在出口网关上进行解密检测也就是所谓深度内容检测 七层过滤 HTTPS 是需要认证的。客户端访问服务器时,服务器端提供CA证书,但有些实现也可以不提供CA证书那么对于不提供CA证书的服务器,防火墙处理很简单,一律屏蔽掉另外检测默认的CA发证机构,如果证书不是这些机构(Verisign、Thawte Geotrust)发的,杀无赦就是在客户端与服务器端进行https握手的阶段,过滤掉一切无CA证书或使用不合法CA证书的https请求。这一步是广谱过滤,与服务器的IP地址无关。

GFW主要是入侵防御系统,检测-攻击两相模型。

所有传输层明文的翻墙方案,检测然后立即进行攻击是很容易的事情;即使传输层用TLS之类的加密无法实时检测,那种方案面向最终用户肯定是透明的,谁也不能阻止GFW也作为最终用户来静态分析其网络层可检测特征。

入侵检测然后TCP会话重置攻击算是干净利落的手段了,最不济也能通过人工的方式来查出翻墙方 法的网络层特征(仅仅目标IP地址就已经足够)然后进行定点清除。

  • 知己知彼,百战不殆,我们应该先对GFW有清晰的技术性认识。防火长城条目称GFW的主要技术是域名劫持、IP封锁、关键字过滤阻断、HTTPS证书过滤。实际上这些技术在实现上可以归结为两种技术:IP封锁和入侵检测,其中入侵检测是核心。IP封锁因为比较底层,接近于切光缆拔网线,没有什么技术可言,这种封锁实施以后除了绕道而过也没有更好的解决办法。而入侵检测则是GFW最为强大灵活的功能。

  • 传输层的TCP和UDP解析都是入侵检测业界的标准配置。UDP通常用来做DNS查询劫持,一个附加效果就是国内的域名缓存充满了污染。应用层就更加百花齐放了,因为解析一个协议实在不是一件困难的事情。所谓的SSL证书拦截也不过是稍微做了一下SSL/TLS协议的解析而已,并无神秘之处。这就是入侵检测的强大之处。

  • 入侵检测的灵活之处在于它的部署和撤销都很便捷无副作用无延迟,匹配精确无误伤。举一例,要防止一些反动软件通过https访问google docs获取信息,怎么做?在应用层检测证书显然是杀鸡用牛刀浪费性能了;用动态路由封特定IP的特定端口是不行的,因为解析结果在不断地变,动态路由的变化跟不上;用域名污染更不行了,把80端口的web业务也搞掉了,影响太大;所以就在传输层乱发RST做无状态的连接阻断,写个脚本定时更新解析结果,这也就是google的数据中心只有在中国解析出来的那部分被封掉的原因。

  • GFW的设备有两种,一种是在北京、上海、广州搭在总交换中心上做旁路监听的入侵检测设备,一种是放在ISP那里的动态路由设备。一般来说入侵检测总是比动态路由来得灵活,所以RST要比封IP更常用。另外,碰到网站无法访问然后traceroute发现线路死在ISP骨干上于是责怪ISP,这是不合理的。中国的ISP的一项主要业务就是接待各个强力部门的插入,纪检、军队、公安之类的部门都会长期插入。

GFW的工作方式

GFW的日常工作方式:但做技术的人都明白twitter的这种架构是没有办法封的。对twitter.com什么办法都用了,效果不大好,结果领导不满意地催促了。这个交不了差是很严重的事情啊,怎么办呢,就对twitter搞破坏吧。凡是跟twitter有关的第三方网站,见一个斩一个,领导你看我都把twitter诛九族了,这已经是自古以来用刑的极致了。再举一例,如何封掉一个网站?先在这个网站上放置一些有害非法信息,再去违法和不良信息举报中心(后台国新办)举报之,等十天就成了。

  • GFW的研发方式:于是在第一生产力院成立242项目“P2P协议分析与测量”专门研究之。

  • GFW的封锁,这是因为GFW很善于进攻,而网民们迄今为止只会不断地四处寻找新的逃避办法。

这种互动模式的问题在于,随着军备竞赛的继续,GFW越来越完善越来越强大,而网民不断地失去手中的牌,翻墙的难度和成本越来越高。GFW是这个领域(网络安全)的专业人士,而网民虽然富有群体智慧,但是其技术能力缺乏有效组织不能与GFW对等。因此如果稍微看得远一些就会了解到,这种模式对于网民来说是不可持续的,总有一天GFW会超过绝大多数网民的技术基准线。所以,唯一的出路便是改变方式,突破这种模式。

应对GFW

网民突破当前被动态势方法的基本原理,在后面的章节中我们会看到,在于利用GFW在善于进攻的同时不善于防守的特点。与其把GFW看作国家网络暴力机关,不如把GFW看作一个网络安全机构,事实上它也是一个网络安全机构(CNCERT/CC)。任何安全系统必然都有漏洞和弱点,它所提供的这个GFW安全解决方案(国家信息安全管理系统)也不例外。网民并非缺乏技术,而是技术没有得到有效组织,没有往这个方向进行有效投射。实际上GFW漏洞和弱点并不少,有一些甚至是理论上无法解决的,这在以后会详细论述。正如《阅后即焚》一文所言,GFW尽管是中国少有的顶尖科研力量与国家强力支持结合的产物,“但也无法摆脱山寨的本性——做一个东西出来很容易,但是要把这个东西做得细致严格就不行了”。
  • 而用户直接查询境外NS(比如OpenDNS)又可能被GFW劫持,从而在没有防范机制的情况下仍然不能获得正确IP。然而对这种攻击有着十分简单有效的应对方法:修改Hosts文件。但是Hosts文件的条目一般不能使用通配符(例如*.blogspot.com),而GFW的DNS污染对域名匹配进行的是部分匹配不是精确匹配,因此Hosts文件也有一定的局限性,网民试图访问这类域名仍会遇到很大麻烦。

观测DNS污染

 “知己知彼,百战不殆”。这一节我们需要用到前面提到的报文监听工具,以及参考其DNS劫持诊断一节。在Wireshark的filter一栏输入udp.port eq 53可以方便地过滤掉其他无关报文。为了进一步减少干扰,我们选择一个并没有提供域名解析服务的国外IP作为目标域名解析服务器,例如129.42.17.103。运行命令nslookup -type=A www.youtube.com 129.42.17.103。如果有回答,只能说明这是GFW的伪造回答,也就是我们要观测和研究的对象。

我们可以发现GFW返回的IP取自如下列表:

  • 4.36.66.178
  • 203.161.230.171
  • 211.94.66.147
  • 202.181.7.85
  • 202.106.1.2
  • 209.145.54.50
  • 216.234.179.13
  • 64.33.88.161 关于这八个特殊IP,鼓励读者对这样两个问题进行探究:
  • 1、为什么是特定的IP而不是随机IP,固定IP和随机IP各自有什么坏处;
  • 2、为什么就是这8个IP不是别的IP,这8个IP为什么倒了GFW的霉?关于搜索这类信息,除了www.google.com之外,www.bing.com有专门的搜索IP对应网站的功能,使用方法是输入ip:IP地址搜索。www.robtex.com则是一个专门收集域名解析信息的网站。欢迎读者留下自己的想法和发现。

一型:

  • ip_id == ____(是一个固定的数,具体数值的查找留作习题)。
  • 没有设置“不分片”选项。
  • 没有设置服务类型。
  • 对同一对源IP、目标IP,GFW返回的污染IP在上述8个中按照给出的顺序循环。与源端口无关、与源IP目标IP对相关。
  • TTL返回值比较固定。TTL为IP头部的“Time to Live”值,每经过一层路由器这个值会减1,TTL为1的IP包路由器将不再转发,多数路由器会返回源IP一条“ICMP time to live exceed in transit”消息。

二型:

  • 每个包重复发送3次。

  • 没有设置“不分片”选项。

  • 设置了“保障高流量”服务类型。

  • (ip_id + ? * 13 + 1) % 65536 == 0,其中?为一个有趣的未知数。ip_id在同一个源IP、目标IP对的连续查询之间以13为单位递减、观测到的ip_id的最小值和最大值分别为65525(即-11,溢出了!)和65535。

  • 对同一对源IP、目标IP,GFW返回的污染IP在上述8个中按照给出的顺序循环。与源端口无关、与源IP目标IP对相关。 对同一对源IP、目标IP,TTL返回值时序以1为单位递增。TTL在GFW发送时的取值有64种。注:源IP接收到的包的TTL被路由修改过,所以用户观测到的TTL不一定只有64种取值,这是由于网络拓扑变化的原因导致的。一型中的“比较固定”的“比较”二字也是考虑到网络拓扑偶尔的变化而添加的,也许可以认为GFW发送时的初始值是恒定的。

  • 从Wireshark收集到的结果分析(实际上更好的办法是,将结果保存为pcap文件,或者直接使用tcpdump,由tcpdump显示成文本再自行提取数据得到统计),我们将GFW发送的DNS污染包在IP头部的指纹特征分为两类:

(以上结果仅保证真实性,不保证时效性,GFW的特征随时有可能改变,尤其是时序特征与传输层特征相关性方面。最近半年GFW的特征在很多方面的变化越来越频繁,在将来介绍TCP阻断时我们会提到。)

还可以进行的实验有:由于当前二型的TTL变化范围是IP个数的整数倍,

  • 通过控制DNS查询的TTL使得恰好有GFW的返回(避免动态路由造成的接收者观察到的TTL不规律变化),观察IP和TTL除以8的余数是否有对应关系,在更改源IP、目标IP对之后这个关系是否仍然成立。

  • 这关系到的GFW负载平衡算法及响应计数器(hit counter)的独立性和一致性。事实上对GFW进行穷举给出所有关于GFW的结果也缺乏意义,这里只是提出这样的研究方法,如果读者感兴趣可以继续探究。

每次查询通常会得到一个一型包和三个完全相同的二型包。更换查询命令中type=A为type=MX或者type=AAAA或者其它类型,可以看到nslookup提示收到了损坏的回复包。这是因为GFW的DNS污染模块做得十分粗制滥造。

  • GFW伪造的DNS应答的ANSWER部分通常只有一个RR组成(即一条记录),这个记录的RDATA部分为那8个污染IP之一。对于二型,RR记录的TYPE值是从用户查询之中直接复制的。于是用户就收到了如此奇特的损坏包。DNS响应包的UDP荷载内容特征:

一型

  • DNS应答包的ANSWER部分的RR记录中的域名部分由0xc00c指代被查询域名。

  • RR记录中的TTL设置为5分钟。

  • 无论用户查询的TYPE是什么,应答包的TYPE总是设置为A(IPv4地址的意思)、CLASS总是设置为IN。 二型

  • DNS应答包的ANSWER部分的RR记录中的域名部分是被查询域名的全文。

  • RR记录中的TTL设置为1天。

  • RR记录中的TYPE和CLASS值是从源IP发送的查询复制的。

    其中的术语解释:RR = Resource Record:dns数据包中的一条记录;RDATA = Resource Data:一条记录的数据部分;TYPE:查询的类型,有A、AAAA、MX、NS等;CLASS:一般为IN[ternet]。

触发条件

  • 实际上DNS还有TCP协议部分,实验发现,GFW还没有对TCP协议上的DNS查询进行劫持和污染。匹配规则方面,GFW进行的是子串匹配而不是精确匹配,并且GFW实际上是先将域名转换为字符串进行匹配的。

这一点值得特殊说明的原因是,DNS中域名是这样表示的:一个整数n1代表以“.”作分割最前面的部分的长度,之后n1个字母,之后又是一个数字,若干字母,直到某次的数字为0结束。例如www.youtube.com则是"\x03www\x07youtube\x03com\x00"。

                 因此,事实上就可以观察到,对www.youtube.coma的查询也被劫持了

现状分析

  • 4.36.66.178,关键词。whois:Level 3 Communications, Inc. 位于Broomfield, CO, U.S.

  • 203.161.230.171,关键词。whois:POWERBASE-HK位于Hong Kong, HK.

  • 211.94.66.147,whois:China United Network Communications Corporation Limited位于Beijing, P.R. China.

  • 202.181.7.85,关键词。whois:First Link Internet Services Pty Ltd.位于North Rocks, AU.

  • 202.106.1.2,whois:China Unicom Beijing province network位于Beijing, CN.

  • 209.145.54.50,反向解析为dns1.gapp.gov.cn,新闻出版总署的域名解析服务器?目前dns1.gapp.gov.cn现在是219.141.187.13在bjtelecom。whois:World Internet Services位于San Marcos, CA, US.

  • 216.234.179.13,关键词。反向解析为IP-216-234-179-13.tera-byte.com。whois:Tera-byte Dot Com Inc.位于Edmonton, AB, CA.

  • 64.33.88.161,反向解析为tonycastro.org.ez-site.net, tonycastro.com, tonycastro.net, thepetclubfl.net。whois:OLM,LLC位于Lisle, IL, U.S. 可见上面的IP大多数并不是中国的。如果有网站架设到了这个IP上,

  • Twitter、Facebook请求都会被定向到这里——好在GFW还有HTTP URL关键词的TCP阻断——HTTPS的请求才构成对目标IP的实际压力,相当于对这个IP发起DDoS攻击,不知道受害网站、ISP是否有索赔的打算?

GFW是一套入侵检测系统,仅对流量进行监控,暂没有能力切断网络传输,其“阻断”也只是利用网络协议容易被会话劫持(Session hijacking)的弱点来进行的。使用无连接UDP的DNS查询只是被GFW抢答了,真正的答案就跟在后面。于是应对GFW这种攻击很自然的想法就是:

根据时序特性判断真伪,忽略过早的回复。

  通常情况对于分别处于GFW两端的IP,其RTT(Round-trip time,往返延迟)要大于源IP到GFW的RTT,可以设法统计出这两个RTT的合适的均值作为判断真伪的标准。另外由于GFW对基于TCP的DNS请求没有作处理,于是可以指定使用TCP而不是UDP解析域名。
  • 也可以通过没有部署GFW的线路到没有被DNS污染的NS进行查询,例如文章一开始提到的“远程解析”。但黑体字标出的两个条件缺一不可,例如网上广为流传的OpenDNS可以反DNS劫持的说法是以讹传讹,因为到OpenDNS服务器的线路上是经由GFW的。

本质的解决办法是给DNS协议增加验证机制,例如DNSSEC(Domain Name System Security Extensions),客户端进行递归查询(Recursive Query)而不查询已经被污染了的递归解析服务器(Recursive/caching name server)。然而缺点是目前并非所有的权威域名解析服务器(Authoritative name server)都支持了DNSSEC。Unbound提供了一个这样的带DNSSEC验证机制的递归解析程序。

  • 另外GFW的DNS劫持还可能被黑客利用、带来对国际国内互联网的严重破坏。一方面,GFW可能在一些紧急时刻按照“国家安全”的需要对所有DNS查询都进行污染,且可能指定污染后的IP为某个特定IP,使得全球网络流量的一部分直接转移到目标网络,使得目标网络立刻瘫痪。

    任何一个会使用C语言编程的人只要稍微阅读libnet或者libpcap的文档,就可能在几天之内写出这样的程序。而GFW作为一套入侵防御系统,注定缺乏专门防范这种攻击的能力,因为如果GFW选择性忽略一些DNS查询不进行劫持,网民就有机可乘利用流量掩护来保证真正的DNS通信不被GFW污染。尤其是UDP这样一种无连接的协议,GFW更加难以分析应对。“反者道之动,弱者道之用。