前言:在最近的一周的时间里,我们的服务器遭受了大量的CC攻击,下面就从最近收获的经验里面,来讲下具体的防护策略和攻击原理
什么是CC攻击
首先关于防护CC攻击,首先我们要知道什么样的攻击定义为CC攻击,下面是百科的一些官方性解释。
CC(ChallengeCollapsar,挑战黑洞)攻击是DDoS攻击的一种类型,使用代理服务器向受害服务器发送大量貌似合法的请求。CC根据其工具命名,攻击者使用代理机制,利用众多广泛可用的免费代理服务器发动DDoS攻击。许多免费代理服务器支持匿名模式,这使追踪变得非常困难。
CC攻击的原理是攻击者通过控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。CC主要是用来攻击页面的,每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了,CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,导致正常的访问被中止。
那么如何发动一场CC攻击呢?成本有多低呢?
如何发动CC攻击:
最简单的手段如莫过于使用Windows平台下一些编号的现成CC攻击器,只需要设置目标站点URL和线程数,即可快速进行发动一场CC攻击。
在linux或mac os平台下,我们可以使用apache的压力测试工具ab,也可以简单模拟CC攻击的效果
ab -n 100000 -c 1000 http://www.baidu.com/
基本用法:ab –n 请求次数 –c 并发次数 如:ab –n 1000 –c 100
-n后面的10000代表总共发出10000个请求;-c后面的1000表示采用1000个并发(模拟1000个人同时访问),后面的网址表示测试的目标URL。
攻击的成本
攻击的方式有2种,有肉鸡CC攻击和代理CC攻击,前者的成本更高,但是更容易模拟真实用户,伪造合法数据请求,但是攻击者需要控制大量的肉鸡来发动攻击,后者只需要单台或多台服务器,加上扫描出来的IP,通过工具代理,模拟不同IP疯狂请求目标站点,造成目标站点访问终端。
肉鸡CC攻击成本:不太好说,要根据肉鸡数量规模来定,但是比代理CC攻击更难防御。
代理CC攻击成本:可以通过自己自己扫描,也可以通过6元/天 30元/周的第三方代理提取站点,进行无限次的提取。
打手攻击成本:在一些第三方论坛上,第三方专业打手甚至通过了50 元/小时攻击,每小时保底打出1G的流量。
根据上面的 整体情况来看,发动一场CC攻击的技术手段不仅非常容易,而且攻击成本最低只需要几块钱,就能达到让目标站点进行瘫痪的效果,所以在这类攻击的本质:便是双方攻防资源的对抗,一方要不断囤积大量资源具备超大流量输出,一方要不断建设能够抗住超大流量的带宽,就像一场战争一样,要实时对对方进行侦查和防御。
如何防护
(一)基于IP限制的防护
我们可以通过防火墙或者nginx server调整单个IP的限制连接数,及每分钟最大请求次数,设置一定的阀值,动态调整,当某IP超过指定阀值后,进行拦截或黑名单处理,让目标IP无法到底应用层,影响正常用户使用,在网络层就进行屏蔽处理。
(二)基于用户频率调用限制
可以将应用的新用户和老用户区分至不同的服务器群,如新用户每分钟请求上限为60s/分钟,老用户为:45次/分钟,如新用户突然暴涨,混入了大量肉鸡注册的账号进行了攻击,我们则可以将他们路由到另一个服务器群,导致老用户所在的服务群不受正常影响,然后找出异常的用户进行封停和拦截处理。
(三)优化数据缓存(减少磁盘IO)
在一些通用的业务接口上,可多次重用的数据,可以考虑使用redis或memcached基于内存的缓存服务,减少数据库检索次数,因为数据库数据储存还是基于文件储存的,一旦查询起来就免不了对文件进行读写操作,内存访问可比磁盘IO的速度可是要快上几百倍的,一旦数据查询和计算出结果后,尽量就存放至缓存中,以便下次请求时,可直接通过缓存读取,减轻DB服务器的压力。
(四)优化核心代码
在一些关键的接口或核心代码处,尽可能使用缓存来存储重复的查询内容,减少重复的数据查询资源开销。减少复杂框架的调用,减少不必要的数据请求和处理逻辑。程序执行中,及时释放资源,比如及时关闭mysql连接,及时关闭memcache连接等,减少空连接消耗。
(五)更改访问端口
一般正常接口下web server通过80端口对外提供服务,因此攻击者一般也是针对目标站点的80端口进行攻击,以此在不影响外部业务提供的情况下,我们可以调整web端口,来达到防护目的,但是一般此类策略,如果对方是个懂一些的,一般很快就会被再次发现,治标不治本。
(六)扩充服务器资源
在手头资金预算足够的情况下,我们可以对服务器群组进行水平和垂直扩充,来提高服务器对CC攻击的承载能力。
水平扩充:升级服务器硬件,如:升级CPU、添加内存、添加SSD固态硬盘,扩充带宽等。
垂直扩充:增加服务器数量来提升承载能力。
结尾
在计算机的攻与防的博弈中,作为防御方的我们,不要总是想着如何完全去战胜另一方,我们应该尝试去寻找最短的路径,不要太过于拘泥不必要的细节,应该快速找到当下的痛点,快速的打上一针止痛剂,尝试去增加对方的攻击成本,消除对方的耐心,便是最佳的防御实践。
以上内容如有疑问或见解错误之处,还请多多指教。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。