翻墙软件的选择与安全系数(7) ——VPNGate,曾经的英雄

我曾经在以前的科普文里提到过VPNGate[1],当时我是强力推荐的,因为VPNGate的创造者们一直把GFW当成对手,在突破GFW封锁上做了很多工作。当时我以为VPNGate是很坚挺的,但没想到在去年年末该死的党国GFW竟然成功通过特征检测和流量分析成功把VPNGate给废掉了!

不瞒大家,我刚翻墙那会儿就是靠VPNGate才看到自由的世界的(最初并不是用VPNGate翻出来的,但当一开始那个翻墙工具突然失效之后,毫无准备的我凭着在此之前看到的关于VPNGate的介绍[2]成功找到并下载了VPNGate,才得以继续翻墙的,当时我也不知道其他的翻墙工具了),谨以此篇作为缅怀,同时向筑波大学的IT英雄们致敬!

在正式开始之前先和大家打个招呼:我本来想仔细分析SoftEther VPN的原理从而找到被GFW干掉的具体原因,但很不幸原始论文是日文的[3],我是一句日语不懂,所以只看了一下网站[4]上的英文资料,看了之后大概有些想法了,但没法做到精确分析,还请见谅。

现在开始!

VPNGate是一种VPN软件(废话),他和我们所熟悉的那些免费或付费VPN最大的不同在于他的远程服务器是分布式的,这些服务器由世界各地的志愿者们免费提供;还有一点就是这些服务器支持很多VPN协议,例如L2TP/IPsec,OPENVPN,MS-SSTP,SoftEther VPN[5]这些协议。事实上那些公共远程服务器还是可以通过L2TP/IPsec或MS-SSTP协议连上的,官网[1]上写出了支持这两个协议的服务器信息,大家可以去看一下(官网上也给出了在PC上和移动端上进行配置的方法)。

不过VPNGate最特别的地方要属SoftEther VPN协议[6]了,这一协议工作在数据链路层上,实现了Ethernet over HTTPS,简单来说就是在物理互联网的基础上构建出了一个虚拟以太网(IEEE 802.3,使用最广泛的有线局域网协议标准),其中的所有数据都是被强加密的,可以有效防止第三方的窃听或篡改。服务器端有证书认证机制(客户端也有,是可选的,默认客户端是匿名认证),可有效防止中间人攻击[7]。

如果安装并运行VPNGate Client,你就会看到一个服务器列表,可以选择通过TCP或UDP连接上里面的服务器,此时就是在使用SoftEther VPN协议进行连接。

……说实在的,VPNGate的开发者们真心在对抗GFW的封锁上下了不少力气[5]:

1,VPNGate的服务器信息公布在官网上,GFW必然不会放过这些服务器的,一开始GFW的走狗们编写了程序自动抓取官网上的服务器IP并加入黑名单中,曾经使得70%的服务器失效。

然后开发者们就想了一个办法:在官网的服务器信息中混入“无辜IP”,例如根域名服务器的IP,顶级域名服务器的IP,常用邮箱服务器的IP,还有Windows Update服务器的IP:)对了,VPNGate Client里的服务器列表中也混入了这些无辜IP,这样一来该死的GFW就不敢自动抓取IP了。

2,该死的GFW一计不成又生一计,把对付Tor网桥中继的那招给用上了:主动探测攻击[8]。GFW设备伪装成客户端试图与服务器建立连接,一旦成功建立连接就把对应服务器的IP放入黑名单中。

VPNGate服务器是有流量日志的,可以通过流量日志发现伪装的客户端(伪装的客户端和普通用户的表现是不一样的:伪装的客户端在连接建立之后马上就断开了,几乎不会传送数据,而普通用户则会持续连接。或者说很多时候伪装的客户端都不会正常完成handshake,服务器通过这些判断出伪装的客户端再记录下伪装客户端的IP)。问题在于当一个服务器发现伪装的客户端时,自身已经被屏蔽了,那又该怎么办呢?

当然是协同工作了!各地志愿者们设置的服务器信息都会被上传到专门的List Server里(类似于Tor网络的目录服务器),List Server同时收集流量日志中的信息,把某一个服务器发现的伪装客户端的IP告诉其他服务器,这样其他服务器就能在伪装客户端进行探测时直接拒绝访问,这使得GFW的主动探测攻击成本飙升(这里有一个技巧,伪装客户端通常都是一个IP段,List Server在通知其他服务器时是通知跟据已知IP推出的IP段的)而且效果变得很差。

3,VPNGate Client里的服务器列表是要与List Server连接之后才能正常更新的,每一个Client都通过伪随机算法获得独一无二的服务器列表(总列表的一小部分),这足够GFW的走狗们哭一会儿了:)

不过该死的GFW又想到了招数:List Server是中心化的,就那么几台,那么只要直接把List Server的IP地址放入黑名单不就可以了吗?

研究者们早就想到这一招了!如果List Server被屏蔽了,那么Client可以先与已知的志愿者服务器建立连接,然后再通过志愿者服务器的中介与List Server建立连接从而成功更新服务器列表,这一过程被称为间接服务器列表传输协议(Indirect Server List Transfer Protocol)。顺便说一句,下载Client时初始的服务器列表也是随机生成的独一无二的。

4,GFW要屏蔽官网是一件非常容易的事情,研究者们针对这一点设置了镜像站点:这些镜像站点实际上是开启了HTTP中继功能的志愿者服务器,用户可以赶在这些服务器被GFW屏蔽之前通过他们与官网服务器建立连接从而下载Client。

的确花了很大力气吧?

很可惜研究者们没有考虑到一点:VPN协议并不是为了翻墙而生的,所以经过VPN协议处理后的数据包的特征都很独特(例如拥有独一无二的数据包长度,头部结构,以及数据包之间的发送时间间隔,还有handshake过程等),而GFW正是通过特征检测成功废掉VPNGate的:SoftEther VPN协议的TCP连接方式是要认证服务器端证书的,结果在半年前就被GFW识别出从而成功废掉了,包括OPENVPN也是这么废掉的;而UDP连接方式不需要证书认证(UDP本身是不可靠的无连接协议,如果要在UDP的基础上完成完整的handshake过程,那就必须要依靠其他协议的帮助,这一点我会在以后讲DTLS(Datagram Transport Layer Security Protocol,数据报传输层安全协议)的时候进行具体说明),从而多撑了一段时间,但在去年年底也正式失灵了,我估计是数据包本身的特征被GFW成功识别了。

如果想要复活VPNGate,那么就必须引入流量混淆插件,这一点可以参考Tor团队开发的那些插件;除此之外没有什么办法了:(

下一篇咱就来聊聊各种VPN协议吧!(VPN协议数量众多,估计又要变成系列了(笑))

最后附上科普文链接集合:
https://plus.google.com/109790703964908675921/posts/TpdEExwyrVj

参考资料:
1,
http://www.vpngate.net/cn/
2,http://program-think.blogspot.com/2013/04/gfw-vpngate.html
3,Master Thesis Text PDF (Japanese)
http://www.softether.org/@api/deki/files/400/=master_dnobori_2012.pdf
4,http://www.softether.org/
5,VPN Gate: A Volunteer-Organized Public VPN Relay System with Blocking Resistance for Bypassing Government Censorship Firewalls
https://www.usenix.org/system/files/conference/nsdi14/nsdi14-paper-nobori.pdf
6,http://www.softether.org/4-docs/1-manual
7,SSL/TLS的原理以及互联网究竟是如何工作的(4)
                                                        ————中间人攻击,当心!

https://plus.google.com/109790703964908675921/posts/3U3iMGDNZiB
8,TOR网桥,主动探测攻击和烧钱的GFWhttps://plus.google.com/109790703964908675921/posts/aLcyVfcH7mP

原文:https://plus.google.com/109790703964908675921/posts/hJ4enE9K1cL

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s