The Great Cannon缺陷探究之JS纰漏篇

  前段时间被爆出的中国强大电子战武器——超级大炮(The Great Cannon)备受关注,其疑似劫持百度广告服务的流量,并将这些流量引导到Greatfire.org、CN-NYTimes等网站,造成大规模DDoS攻击。

  本文参考自国外一个研究组织针对此次事件的事后分析,以及通过被攻击网站的日志和捕获的代码上的一处纰漏,锁定这份代码正是The Great Cannon攻击时使用的。

Greatfire.org攻击日志

  Greatfire.org在Amazon的cloudfront基础设施上有几个镜像网站:d19r410x06nzy6.cloudfront.net 就是其中一个,2015年3月18日,上述镜像站被攻击时的日志抽样如下:

1

  从攻击日志中,奇怪的发现攻击时刻虽然是2015年3月18日,但GET后面的参数很显然是一个Unix时间戳形式,转换成时间表示为2015年3月3日,整整相差了15天(360小时)。但这看似不经意间的差别却为后来锁定攻击源码提供铁证!

寻找攻击代码

Google

  攻击事后寻找攻击代码并不顺利。Google(Cache)引擎在爬取页面时解析了恶意代码,在Google中直接搜索:d19r410x06nzy6.cloudfront.net,结果如下:

22

但是再次访问这些页面时已没有恶意代码存在。

urlQuery.net

  urlQuery.net是一个提供基于Web恶意程序的发现和分析服务的网站,当浏览器访问一个页面时,它提供了详细的信息,包括页面中的其它连接的访问和JS脚本的加载等。并以树形图的方式展现出来。

  我们幸运的在urlQuery.net中找到了一些踪迹,urlQuery.net记录了在访问zhao.juji123.com页面时的迭代加载过程,其中记录了对被攻击网站的访问,而请求包的格式与被攻击网站记录的日志格式相同(时间戳也相差了15天)。这说明在访问zhao.juji123.com时恶意JS脚本被加载了。

3

攻击代码

  非常幸运,urlQuery.net也将攻击代码缓存了下来!于是我们打开攻击代码看看端倪:

4

  哈哈,原来在生成时间戳时误将getDate()和getDay()混淆了。了解Javascript的都知道,getDate()是以月为单位表示日期,而getDay()是以周为单位表示日期。3月18日正好是星期三,所以差了整整15天!

  这也为这份代码的真实性提供了强有力的证据。

后记

  虽然国家有了这种能力,但提高姿势水平还很重要:P

发表评论

电子邮件地址不会被公开。 必填项已用*标注