原文链接

社会工程从来都是在安全领域最有趣味的话题。钓鱼(phishing)是社会工程的一种。最近韩寒童鞋揭露了出现在上海的某种钓鱼小把戏,我们也不妨来讨论一下某种GFW钓鱼小把戏。面对GFW这个黑箱,我们希望对它的内部的行政机制有所了解,这当然是技术性的逆向工程无法解决的问题,所以这里主要讨论社会工程的方法。

原理

对GFW进行黑箱式分析,就会发现一种非常确定的刺激-反应的行为模式。一般来说是这样的过程:1)一个网站处于含有敏感内容的状态;2)在某个时刻GFW感知到这个网站(“先期侦察”)并受到刺激;3)然后通过GFW内部的某种过程;4)最后形成对这个网站的封锁反应。一般只有最后的封锁反应是公开可观测的GFW特征,然而由于GFW的封锁采取伪造的方式进行,我们很难从这种封锁动作中获得信息。而如果我们特制一个网站并作为网站控制者让GFW对它进行感知,并利用GFW自认为置身暗处而不采取防护的漏洞,那么在刺激这个环节就很有可能观测到GFW的真实信息。简而言之GFW你不是特别会封吗?这次我造一个网站让你封,来啊。然后将GFW在这个环节泄漏的信息全部记录下来。这就是钓鱼,有人也把这个叫做蜜罐,在蜜罐里放一些GFW特别喜欢的东西,苍蝇循着香味飞进来就黏住了。根据先验知识我们还可以知道,在对目标进行侦察之后,GFW内部还会有关于反应方式的评估。这个过程虽然是无法观测的,不过当蜜罐收集到的数据量比较充分之后进行分析,就会找到这个过程的某些模式,分离出时间周期、地域、主题偏好等要素,对GFW内部的机制有一个轮廓性的刻画。

方法

在8月份我们就进行了这样一次钓鱼。钓鱼有这么几个要件:诱饵,钩子,鱼,渔。在这里鱼是GFW,渔是我们,诱饵是一个充满了敏感词的网站,钩子是这个网站内置的日志记录器。诱饵的建设是体力活,比较麻烦,行为跟spammer差不多了。首先寻找国外的免费空间和免费域名,然后用一个php+.htaccess/mod_rewrite做一个网页反向代理,代理到某个特别敏感的网站,然后php内置日志记录器将访问时间和访问者的IP地址和HTTP头全部记录下来。网站看起来是一模一样的,差别只在域名,这就建好了。然后到伟大光荣正确的国新办网站net.china.cn举报之,尽情选最高最反动的那档,然后坐等鱼儿上钩、苍蝇入罐。

数据和讨论

等的过程这里读者就不用体验了(高兴的读者可以自行体验)直接给出结果,就是这个表格。这次钓鱼的一个很大失误就是忘记设置robots.txt,让搜索引擎的爬虫造成了大量噪音,给日志分析带来很大困难,这里展示的数据已经把搜索引擎直接产生的噪音去掉了,但是搜索引擎引来的访问者却很难办。

我们来对数据进行一些分析。首先拿到IP要做一下whois,看看究竟who is it。这就有结果了,看whois那栏,一个是公安部的网监,一个是BAOSHAN-POLICE,呵呵,上海的。它们的其他各项header相似性很高,其中奇怪的是Accept-Language是en-us的,其他header也给得很少。难道我们机智的警警察察已经人人都考过英语四级了,用英语版Windows?显然不是,根据先验知识加以推测,这应该就是金盾网的内网出口。根据这一特征,又找到CHINANET-FJ和CHINANET-GD 的两个警警察察。注意到,在31日就有报告说整个co.cc被封,9月1日的那位还能访问,这说明两件事情:1)警警察察枪决罪犯以后要验尸;2)警警察察上网没有墙。

那个UNICOM-TJ的是怎么回事?我们来分析一下这个诱饵是怎么被咬掉的。我们建立的诱饵之一域名是shangwang.co.cc,然而最终被封掉的却是co.cc。我们来观察一下17日凌晨这位来自天津的朋友他的referrer是:http://www.google.cn/search?q=gfw+co.cc+dns&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:zh-CN:official&client=firefox。就是说这位朋友通过在谷歌中文搜索“gfw co.cc dns”这个关键词找到了这个网站,为什么要这样搜索呢?为什么过了几天整个co.cc就被封了呢?这无疑是抓你一个,杀你全家的做法。结合当时的情况,net.ru在这之前被封掉,idv.tw在这之后被封掉,做法都是直接把cctld列为关键词,我们不难这样推测GFW的习惯:看见一个不熟悉的域名,先谷歌一下看你是不是属于大户人家,一搜发现哦原来net.ru和co.cc你们都是些免费的弃儿,就杀你全家,斩草又除根春风吹不生,反正没人知道。不过天津的那位又是谁呢?难不成是坐落在天津的公安部麾下“国家计算机病毒应急处理中心”?天津这位朋友后来居然还会从瑞士走代理来访问,而且我们设置的两个诱饵他都碰了,这确实非常先进了。

未来研究

这只是一次孤立的钓鱼,数据还是不具有普遍性,如果这样的实验成规模地重复,那么GFW的工作周期和口味都能有更清晰的了解。如果利用javascript甚至更侵入性的手段,还可收集到更多信息。另外一个直接的提示就是,网站管理者应该调查APNIC的whois数据库查出属于网监的IP段并“软性屏蔽”之,这样对于避免安全问题可以起到一定效果。一个需要考虑的问题是,如果以后GFW在先期侦察和验尸的时候都注意隐藏信息,调查访问者身份就会增加一些困难,但是如果搜索引擎隔离得足够好还是问题不大的。

结论

我们通过利用GFW在侦察目标时自认为置身暗处而不采取防护的漏洞,进行了一次钓鱼实验并获取了适量数据进行分析,证实了net.china.cn举报平台与GFW在工作流程上的密切关系,并发现了可能来自金盾网的举报验证,以及证实了金盾网使用“防外线”不受GFW影响的传言。我们还分析发现了一种GFW对于小站点的极端封锁策略,以及一种封锁实施后验证封锁的行为方式。不幸的是,这次钓鱼带来一个意想不到的后果就是co.cc全军覆没,对那些采用co.cc做域名的站长们在这里只好抱歉了。我们原来还试图生成一个de bruijn序列来高效证明著名的法轮猜想——“任意其他GFW关键词的长度都大于”falun””,没想到短短时间就又出现一个长度为5的新秀与老牌关键词falun并驾齐驱,真是出乎意料。

总结这次实验,钓鱼的哲学有两条:一条是钓鱼比的是想象力,感兴趣的童鞋可以观赏Mitnick的The Art of Deception会有更多收获;另外一条是,钓鱼需要耐心,这次钓鱼实验持续近半个月一无所获,“那是极端反动的大妓院啊怎么不快快封掉?!”我们几乎以为失败,鱼最终才上钩,如果没有比鱼更多的耐心是钓不到的。同理推之不难想象,上海的哪个闲得蛋疼人士也可以开着一辆破车去钓鱼,只要把一个对方的“钩子”钓到自己车上,之后想做什么那都好办了。