从技术层面如何防御CC攻击

来源:贝尔盾      时间:2019-11-05
  • 1028
  • 126
  • 216

  CC攻击发生在TCP/IP协议的第七层,一般方式是在很短的时间里对网站发起大量请求,消耗目标服务器的资源,使目标网站负载过高而不能访问。
 
  CC攻击和UDPFlood,TCPSYNFlood这类位于TCP/IP第四层的攻击相比,对自己的资源消耗更少,对服务器的攻击强度更高,有四两拨千斤的效果。如果防御不好,呵呵,一台笔记本打垮一整个服务器集群并不是开玩笑的。
 
  而一般人对网络攻击是怎样进行的,以及怎样进行防御了解的都不多,这也就给了攻击者可乘之机。我这段时间在开发VeryNginx,对这部分正好有所研究。于是写成《CC攻击的防御》系列文章,主要探讨CC攻击的原理,以及一些可能的防御思路。希望能对大家有所帮助,如同在我无知的时候,互联网上其他无私分享知识给我的人一样。
 
  文中描述的全部方法都已经编写成代码,并实际测试通过。包含在开源项目VeryNginx中。开箱即可使用,并且还包含其他诸多强大功能。
 
  传送门:GitHub-alexazhou/VeryNginx:Averypowerfulandfriendlynginxbaseonlua-nginx-module(openresty)whichprovideWAF,ControlPanel,andDashboards.功能强大且拥有对人类友好界面的Nginx,提供防火墙,自定义行为,和统计功能
 
  攻击方式
 
  为了进行防御,我们首先要了解我们对手的攻击方式。
 
  通常发起CC攻击是使用专门的攻击工具,同时模拟成多个用户,向目标网站发起多个请求,一般这些软件为了防止地址被屏蔽,还内置通过代理攻击的功能。可以通过多个代理服务器对目标发起攻击,使封IP的防御方式变的失效。
 
  防御思路
 
  因为CC攻击通过工具软件发起,而普通用户通过浏览器访问,这其中就会有某些区别。想办法对这二者作出判断,选择性的屏蔽来自机器的流量即可。
 
  初级
 
  普通浏览器发起请求时,除了要访问的地址以外,Http头中还会带有Referer,UserAgent等多项信息。遇到攻击时可以通过日志查看访问信息,看攻击的流量是否有明显特征,比如固定的Referer或UserAgent,如果能找到特征,就可以直接屏蔽掉了。
 
  中级
 
  如果攻击者伪造了Referer和UserAgent等信息,那就需要从其他地方入手。攻击软件一般来说功能都比较简单,只有固定的发包功能,而浏览器会完整的支持Http协议,我们可以利用这一点来进行防御。
 
  首先为每个访问者定义一个字符串,保存在Cookies中作为Token,必须要带有正确的Token才可以访问后端服务。当用户第一次访问时,会检测到用户的Cookies里面并没有这个Token,则返回一个302重定向,目标地址为当前页面,同时在返回的Http头中加入setcookies字段,对Cookies进行设置,使用户带有这个Token。
 
  客户端如果是一个正常的浏览器,那么就会支持http头中的setcookie和302重定向指令,将带上正确的Token再次访问页面,这时候后台检测到正确的Token,就会放行,这之后用户的Http请求都会带有这个Token,所以并不会受到阻拦。
 
  客户端如果是CC软件,那么一般不会支持这些指令,那么就会一直被拦在最外层,并不会对服务器内部造成压力。
 
  高级
 
  高级一点的,还可以返回一个网页,在页面中嵌入JavaScript来设置Cookies并跳转,这样被伪造请求的可能性更小
 
  Token生成算法
 
  Token需要满足以下几点要求
 
  1,每个IP地址的Token不同
 
  2,无法伪造
 
  3,一致性,即对相同的客户端,每次生成的Token相同
 
  Token随IP地址变化是为了防止通过一台机器获取Token之后,再通过代理服务区进行攻击。一致性则是为了避免在服务器端需要存储已经生成的Token。
 
  推荐使用以下算法生成Token,其中Key为服务器独有的保密字符串,这个算法生成的Token可以满足以上这些要求。
 
  Token=Hash(UserAgent+client_ip+key)

本文由【贝尔盾服务器】转载编辑,内容仅供取名参考学习,如涉及侵权,请联系贝尔云服务器客服删除!

本文链接: http://www.szbelle.com/news/146.html (转载请保留)