Total Pageviews

Monday, 24 August 2015

关于GFW主动探测SSL(SPDY?)站点的研究



此POST是我个人的一些粗略研究,有兴趣的可以自行验证。

本人在境外有一个VPS服务器,上面搭建了一个我编写的PHP蜜罐[1]。这个蜜罐主要用于记录黑客和扫描器的访问。从2013年搭建开始,陆陆续续的记录下了一些访问者的信息,大部分都是来自于黑客的扫描器,或者搜索引擎的蜘蛛。

在今年2月份以后(可能是我安装了spdy之后?),蜜罐开始记录到一些看起来很普通,但是出现IP地址无规律的User-Agent(浏览器用户代理):“Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)”,如果从这条记录上来看,只能看出访问者使用的是Windows XP的操作系统,同时使用IE 7.0浏览器。

一开始我认为这是某个粗制滥造的扫描器肉鸡,但是有一个很奇怪的现象:此类客户的IP均来自国内,即使刚刚捕获到一个IP,立刻Ping或Traceroute也无法以任何形式访问上。

一直到今年四月,我偶然注意到一个现象,某些时候一访问我服务器上的SSL站点(我搭建了一个phpmyadmin用于管理),立刻就会有这样的一个用户来访问,但是通过手机的浏览器访问却不会出现这个现象(不支持SPDY?)。

在检查了Apache2的日志[2]后,我怀疑此访问是来自GFW的模拟访问,用于检测当前IP的SSL站点上是否含有某些非法内容[3]。

于是我进行了抓包分析[2],SSL服务器的确和这个奇怪的IP地址建立了连接,而且传输了内容。通过整合Apache的日志,我得出以下结论:
1.GFW会主动探测使用SPDY协议的服务器。
2.GFW不知道主机头(Host),因此只能以IP的方式来访问。
3.来源IP均为国内的随机IP地址,因为必须要可以路由到国内。
4.从两次抓包的TTL相同,但是IP不同的情况来看,GFW的探测出口是固定在某个位置的,初始TTL可能为64。 第三次抓包的时候TTL发生了变化,与TTL无关。

建议:如果你要使用SSL/TLS+SPDY协议来保护你的敏感内容,不要将敏感内容放在网站的根目录,确保直接通过IP访问不会显示敏感内容,可以通过创建绑定域名的虚拟主机(VirtualHost,Apache2)来进行保护。

如何检查GFW是否光临过我的服务器?
如果你的网站启用了SSL和SPDY,打开你的网站服务器日志,搜索“Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)”,看看有无来自国内的IP,同时没有提交主机头(Host)和跳转来源(Reference)。

疑问:既然GFW会来主动索取服务器上的内容,如果服务器返回一个可能会引起客户端浏览器崩溃或加密层溢出的异常返回(假设存在这样的漏洞),那么是否可以弄垮这个主动探测?

[1]蜜罐源码详见: http://pastebin.com/U1cWHhRB
[2]本人的Apache日志和抓包结果详见: https://gist.github.com/chenshaoju/567b0f5241cb33345c1b
[3]六个月前,SwitchyOmega的Issues列表上有人报告说GFW会开始主动探测SSL/SPDY协议,但是可能是用于检测SSL/SPDY代理服务: https://github.com/FelisCatus/SwitchyOmega/issues/2

from https://plus.google.com/+%E9%99%88%E5%B0%91%E4%B8%BEelf/posts/jaoJpdLkXCg