前言:上周,我们服务器遭受了大量的CC攻击。让我们谈谈最近的经验。防御策略和攻击原理什么是CC攻击?首先,我们需要知道什么样的攻击被定义为CC攻击。以下是来自维基百科的一些官方解释。CC(ChallengeCollapsar,挑战黑洞)攻击是DDoS攻击的一种,利用代理服务器向受害服务器发送大量看似合法的请求。CC以其工具命名,攻击者使用代理机制,使用众多广泛可用的免费代理服务器发起DDoS攻击。许多免费代理服务器支持匿名模式,这使得跟踪非常困难。CC攻击的原理是攻击者控制某些主机不断向对方服务器发送大量数据包,导致服务器资源耗尽,直至服务器崩溃。CC主要用于攻击网页。每个人都有这样的经历:当一个网页被大量访问时,打开网页会很慢。CC是模拟多用户(有多少用户就有多少线程)。访问需要大量数据操作(即大量CPU时间)的页面会造成服务器资源的浪费。CPU长期处于100%状态,总会有无穷无尽的连接,直到网络拥塞,导致正常访问中断。那么如何发起CC攻击呢?成本有多低?如何发起CC攻击:最简单的方法是在Windows平台下使用一些编号现成的CC攻击工具。只需设置目标站点URL和线程数,即可快速发起CC攻击。在linux或者macos平台下,我们可以使用apache压测工具ab,或者简单模拟CC攻击的效果ab-n100000-c1000http://www.baidu.com/基本用法:ab–nrequest次数-c并发次数如:ab-n1000-c100-10000-n后代表一共请求10000次;-c后面的1000表示1000并发(模拟1000人同时访问),后面的网址表示测试目标网址。攻击成本攻击方式有两种,有botCC攻击和proxyCC攻击。前者成本较高,但更容易模拟真实用户,伪造合法数据请求,但攻击者需要控制大量的bot才能发起攻击。运营者只需要一台或多台服务器,再加上扫描到的IP,通过工具代理,模拟不同的IP疯狂请求目标站点,导致目标站点访问终端。肉鸡CC攻击成本:不好说,取决于肉鸡的数量,但是比代理CC攻击更难防御。代理CC攻击费用:可以自行扫描,也可以使用第三方代理提取站点6元/天到30元/周无限提取。打手攻击费用:在一些第三方论坛上,第三方专业打手甚至以50元/小时的价格通过攻击,每小时保证1G流量。从以上总体情况来看,发起CC攻击的技术手段不仅非常容易,而且攻击成本最低也只有几块钱,可以达到瘫痪目标站点的效果,所以在本质上这个攻击类型:方便是双方攻防资源的交锋。一方必须不断囤积大量资源才能有超大流量输出,另一方必须不断建设能够承受超大流量的带宽。就像一场战争一样,需要实时侦测对方并进行防御。如何保护(1)基于IP限制的保护我们可以通过防火墙或者nginx服务器调整单个IP的限制连接数和每分钟最大请求数,设置一定的阈值,动态调整。当IP超过指定的阈值时,会进行Blocking或黑名单处理,防止目标IP到达应用层,影响用户正常使用,在网络层进行Blocking处理。(2)应用的新老用户可根据用户调用频率限制分为不同的服务器组。例如新用户每分钟请求次数上限为60s/分钟,老用户为45次/分钟。如果新用户突然暴涨,夹杂着大量被僵尸注册的账号进行攻击,我们可以将他们路由到另一个服务器组,这样老用户所在的服务组就不会受到正常影响,然后找出异常用户并对其进行阻止和拦截。(3)优化数据缓存(减少磁盘IO)。在一些常见的业务接口上,对于可以多次复用的数据,可以考虑使用redis或者memcached基于内存的缓存服务来减少数据库查找的次数,因为数据库数据存储还是基于文件存储的,一旦查询,它读写文件是不可避免的。内存访问比磁盘IO快数百倍。一旦查询到数据并计算出结果,尝试将它们存储在缓存中以备下次使用。请求时可以直接通过缓存读取,减轻DB服务器的压力。(4)优化核心代码在一些关键接口或核心代码处,尽可能使用缓存来存储重复查询的内容,减少重复数据查询的资源开销。减少对复杂框架的调用,减少不必要的数据请求和处理逻辑。程序执行过程中,及时释放资源,如及时关闭mysql连接和memcache连接,减少空连接的消耗。(5)更改访问端口一般web服务器在正常界面下都是通过80端口对外提供服务的,所以攻击者一般会攻击目标站点的80端口,这样我们就可以在不影响对外提供的情况下调整web端口services,达到保护的目的,不过一般这种策略,如果对方稍微懂一点,一般很快就会再次被发现,治标不治本。(6)服务器资源的扩展在手头资金和预算充足的情况下,我们可以横向和纵向扩展服务器群,提高服务器对CC攻击的承载能力。横向扩展:升级服务器硬件,如:升级CPU、加内存、加SSD固态硬盘、扩展带宽等。纵向扩展:增加服务器数量,增加承载能力。最后,在电脑攻防的博弈中,作为防守者,不要总想着如何彻底打败对方。我们应该尽量找到最短的路径,不要过于执着于不必要的细节。我们应该迅速找到针对当前的痛点,迅速注射止痛药,尽量增加对方的攻击成本,消除对方的耐心,这才是最好的防御做法。以上内容如有疑问或错误,敬请指教。
