天天看点

JavaScript黑魔法:洪水攻击

作者:修丹道的程序猿

偶然间,在国外的安全网站CloudFlare看到一篇文章,介绍了一种基于JavaScript的在线攻击,大意是:在网页中加入特殊JS脚本,使访问网页的每个人都高频访问某个目标网站地址,大量的访问,即形成为了一种DDOS攻击,也称为洪水拒绝服务攻击。

JavaScript黑魔法:洪水攻击
读来感觉颇有意思,那么,本文测试一下其是否真实有效。并思考其对应的防护方法。
JavaScript黑魔法:洪水攻击
首先,用NodeJS编写一个简单的Web服务器,代码如下:
JavaScript黑魔法:洪水攻击
在NodeJS环境中运行,启动后,这是一个简单的Web服务,访问时会加载一个静态网页,从后台命令行中,可显示被访问的URL:
JavaScript黑魔法:洪水攻击

这个简单的Web服务器,模拟被攻击目标,至此已准备就绪。

接下来,写攻击脚本,嵌入在网页中的JS代码,是核心部分:

JavaScript黑魔法:洪水攻击

这段代码含义、攻击原理是:每10毫秒,带一个随机参数访问一次127.0.0.1/index.html。

为了防止脚本被识破,可对JS代码进行混淆加密,比如使用JShaman加密上述JS代码:

JavaScript黑魔法:洪水攻击
加密后的代码效果:
JavaScript黑魔法:洪水攻击

这样,JS代码成为密文状态,他人就无法分析代码、无法得知攻击逻辑了。

然后是使用:网页被打开时,攻击立即发生:

JavaScript黑魔法:洪水攻击

由上图可看到,后台立刻监测到了大量访问请求。

查看本机网络连接状态,可以看到大量的访问连接:

JavaScript黑魔法:洪水攻击

单个人的访问,即产生如此多的连接。如果代码是嵌入在某个有很多访问量的页面上,想必会产生相当威力?

更理想的效果是:访问服务器上与后台有交互、消耗系统CPU或磁盘性能的网页,最终达到使Web服务器无法正常处理连接请求。这也是拒绝服务攻击的普遍原理。

注:本文是实验性质,用于技术研究、测试基于JavaScript脚本的DDOS攻击,所有操作均是在本地自己机器中进行测试。

简单测试到此结束,从实验来看,虽然没有产生危害,但证明方式是有效果的,起码在理论上如此。

那么,对此种可能发生的攻击,该如何防护呢?

在攻击端而言,要防止页面被植入不法脚本。

在被攻击端而言,也应做好网站安全防护,比如后台逻辑对同一访问者的访问频率做限制、与服务器有交互的页面设计验证访问机制等等。