TOR网桥,主动探测攻击和烧钱的GFW

2014/11/22

随着GFW的不断升级,goagent以及其他基于GAE开发的翻墙软件越来越不好使,自由门和无界还有赛风在很多地方也瘫痪了,VPN的PPTP协议与L2TP协议也不再安全(共匪已经拥有解密这两种协议的能力了),OPENVPN被特征检测搞得半残了,其他手段基本上是要花钱或者进行复杂配置,所以TOR又成了很多人的选择,特别是TOR最新出了MEEK插件和obfs4网桥。MEEK插件我曾经介绍过https://plus.google.com/109790703964908675921/posts/NZbwYqJAbKC,这次就来聊聊obfs4网桥究竟有什么特别之处以及GFW是如何屏蔽TOR的。
2011年有中共匪国的TOR用户报告说一个网桥在使用几分钟之后就被GFW屏蔽了(当时是obfs2网桥,后来TOR官方正式宣布放弃对obfs2网桥的技术支持),GFW究竟是如何做到的呢?

注意我前面提到的一个词:特征检测。简单来说,很多互联网连接建立时都会有着某些特征(可以想象成他们都是一些有个性的人,打招呼时用的是自己的方式,从而很容易被别人从人堆里认出来),这些特征在一大堆流量里是很容易被认出来的(例如一大堆明文流量里的加密流量就非常显眼,TOR也有一样的问题,所以墙内使用TOR的人越多,诸位TOR用户和我就越安全,请为了自己的安全推广TOR),而GFW就是利用了这一点:众所周知墙内无法直连TOR(不过前段时间有份实验报告中提到在教育网TOR还是可以直连的,有条件的人可以试一下,不过即使是能直连也建议不要直连,因为TOR流量实在是太特别了,一定会成为重点监控对象,最好通过网桥或者前置代理掩盖TOR流量),因为GFW一是把绝大部分中继节点和目录服务器的IP都加入了黑名单(TOR要先与目录服务器连接获取节点信息再与节点连接建立环路,TOR中继的信息都是公开的,GFW的走狗们去网站https://metrics.torproject.org/index.html就能把中继节点的IP放到黑名单里了),二是利用特征检测识别出了TOR流量并在TOR请求连接时进行阻断,具体来说就是放过走到墙外的TCP请求流,阻断返回的TCP数据流,这样TOR就无法正常建立连接了。
为了对付封锁,TOR团队就开发出了网桥,不过obfs2网桥依旧是在连接时会表现得很特别(具体来说GFW用了DPI(Deep Packet Inspection,深度包检测https://zh.wikipedia.org/zh/%E6%B7%B1%E5%BA%A6%E5%8C%85%E6%A3%80%E6%B5%8B)检测到当一个天朝用户试图连接网桥或中继节点时,TOR客户端会发送一个密码列表进行TLS连接(TLS hello,为了与网桥建立HTTPS连接,TOR连接直到出口节点都是HTTPS强加密连接),这一过程非常独特,只有TOR会这么表现,那么GFW就会意识到这是在与TOR网桥进行通信),GFW意识到这一点后就进行了主动探测攻击(我试着用流程图表示出攻击过程),从而将网桥废掉。
obfs3比起obfs2改进了不少,但依旧可以被GFW用主动探测攻击屏蔽,于是为了应对GFW,obfs4横空出世了。
看看obfs4的配置:Bridge obfs4 178.209.52.110:44367E72FF33D7D41BF11C569646A0A7B4B188340DF cert=Z+cv8z19Qb8RxWlkagp7SxiDQN++b7D2Tntowhf+j4D15/kLuj3EoSSGvuREGPc3h60Ofw iat-mode=0
比起obfs3,后面多了一大堆:“67E72FF33D7D41BF11C569646A0A7B4B188340DF”是建立连接时的验证密码,和后面的证书“cert=Z+cv8z19Qb8RxWlkagp7SxiDQN++b7D2Tntowhf+j4D15/kLuj3EoSSGvuREGPc3h60Ofw”一起建立了一个严格的连接验证机制,这样一来GFW就没办法伪装成TOR客户端与网桥进行连接了,而且也改进了连接时所用的协议,GFW要想进行特征检测很困难。
但其实还有一个问题没有解决:网桥不是公开的,但可以去https://bridges.torproject.org/或者通过邮件(具体看这里http://allinfa.com/tor-links.html)获取网桥,那么,GFW的走狗们也可以这么做,然后把获取到的网桥加入黑名单,从而使得诸位找网桥变得困难。关于如何解决这一点我有一个想法:网桥中继也许可以采取像自由门一样的动态IP技术(很多人以为自由门就是简单的连接代理服务器然后翻墙,但如果就是如此,那么自由门早就废掉了,我打开资源监视器之后发现自由门同时与不少IP进行连接,而且不断在变动,还与两个后面相同的域名一直连接着:111-252-81-24.dynamic.hinet.net61-230-111-251.dynamic.hinet.net,我打不开这两个域名对应的网页,但应该是动态网公司的服务器域名,可能自由门就是从这里即时更新代理服务器IP,使共匪无法封锁;还有一个61-67-165-host139.kbtelecom.net.tw,依旧是打不开,这三个域名应该对应的都不是网页,而是IP地址库),每个网桥都拥有IP地址库,当第一次用网桥连上TOR后就即时变换IP,如果发现网桥被封锁就自动与IP地址库连接(我不知道动态网公司是怎么做到不让共匪全面封锁他们的主机的,也许是在重要的平台上搭建的地址库(例如云计算平台,例如电子商务平台。解说一下:为了节省成本,不少网站都采用了在同一台服务器主机上搭建VPS共用IP的策略,所以GFW的IP屏蔽误伤率非常高))更新网桥IP从而重新连接上。但自由门一直都不开源,动态网公司也一直不肯说明技术细节,所以要实现这一想法非常困难:(
论技术,GFW没有多高明,特征检测IP屏蔽之类早就不是新领域了,要不是该死的思科(卖给共匪核心技术和大量设备),GFW都不见得能搭建起来,但GFW通过砸了N多天朝屁民们的血汗钱,硬是将95%的流量困在了墙内!共匪倒台之后,建立维护GFW的钱一定要回到我们每个人手上!
参考资料:http://www.cs.kau.se/philwint/scramblesuit/ "How the Great Firewall of China is Blocking Tor"https://www.usenix.org/conference/foci12/workshop-program/presentation/winter
补充一下torrc文件设置方法(网桥版本):
AvoidDiskWrites 1
SocksListenAddress 127.0.0.1
ControlPort 9151
SocksPort 9150
HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C
UpdateBridgesFromAuthority 1
DirReqStatistics 0
ExcludeNodes {cn},{hk},{mo},{sg},{th},{pk},{by},{ru},{ir},{vn},{ph},{my},{cu},{br},{kz},{kw},{lk},{ci},{tk},{tw},{kp},{sy}
ExcludeExitNodes {cn},{hk},{mo},{sg},{th},{pk},{by},{ru},{ir},{vn},{ph},{my},{cu},{br},{kz},{kw},{lk},{ci},{tk},{tw},{kp},{sy}
StrictNodes 1
最后照例附上科普文链接集合:https://plus.google.com/u/0/109790703964908675921/about

來源:https://plus.google.com/u/0/109790703964908675921/posts/aLcyVfcH7mP
BY:Ghost Assassin

Related Posts