本议题是我们在OWASP杭州区2013年岁末年初安全沙龙中进行分享的内容,在此我们对这个议题的整体内容进行了重新归纳梳理,形成了文字版。
在本文中,DDoS的案例与应对经验均来自于某市场占有率很高的客服系统所遇到的实际场景,分别从成本、效率和具体架构设计(选型、配置、优化等)角度来分析通过自建CDN来应对不同类型的DDoS攻击。
背景介绍
我们的客服系统主要应用在各类网络商品销售、网站在线客服等领域,主要业务是提供基于网页的实时动态的文字聊天,总用户数58万,同时在线活跃的用户~12万。
在此类应用领域,通常行业之间的竞争比较激烈,其中包括在线下无法名正言顺的灰色+暴利产业,导致竞争对手之间经常发动DDoS恶意攻击。营销网站往往是单面加速,很难彻底打击,于是一些黑客通过攻击网站的在线客服系统,导致网站无法跟访客沟通,无法交易,从而达到恶意攻击的目的。结果,客服系统这个原本有助于网站营销的工具反而成了被攻击的主要对象。
我们遭遇的DDoS攻击类型包括:延缓性的CC攻击和致命的大流量攻击。下面将对两种攻击方式的攻击特点、防御思路和我们用过的一些防御方案进行简单的介绍。
延缓性的CC攻击
攻击特点
攻击者借助网络上提供的大量代理服务器IP,利用软件,生成指向受害主机的合法请求。
这类攻击对攻击者来说成本低,而且网上现成的软件多,攻击的风格相对比较”温柔谨慎”,其目的是通过逐渐消耗服务器的应用开销,网络拥堵,最后导致网站变慢,请求无响应,达到网站无法访问的目的。
防御思路
对于这类攻击,有两个漏洞特点可以被我们利用,从而阻止这类恶意的CC攻击。
第一个特征是由于人为生成了大量的非法请求,导致网络的incoming流量会异常增大(正常情况下,incoming流量小,outgoing流量大);第二个特征是攻击力度有一个渐增过程,形成一个缓冲期。
我们要充分利用这个宝贵的时间,让机器第一时间智能的做出反应,调用日志分析脚本做决策并加以防御。脚本实现原理就是在服务器上启动日志分析机制,在第一时间找出异常的IP、URL、特征码,从内核层利用iptables对恶意IP进行过滤,在应用层上利用nginx的http关键词进行过滤,直接返回badcode 444进行拦截。
具体实现触发脚本的方法有多种,这里只列举我们所使用的两种:
-
使用Zabbix的流量监控图来触发日志分析脚本,如图所示:
- 利用bash脚本来统计incoming流量,发现异常时,调用相应日志分析脚本,实现阻击。
方案缺点
无论是从内核级别还是应用级别,对服务器本身的CPU和内存的依赖度高。随着流量的不断增大和攻击时间的持续,资源最终被耗尽,所以,治标不治本。
致命的大流量攻击
攻击特点
这种攻击通常以tcp syn,icmp和UDP(尤其是UDP,单UDP的数据包可以很大)方式为主。客服系统遭遇到的最大的一次为16G的攻击流量,整个机房都被影响到。攻击者通常控制大量肉鸡或者直接勾结IDC里的服务器和带宽资源,对目标进行流量打击。此时流量会快速占满服务器的网络带宽,导致无法响应任何用户请求。
这类攻击需要购买大量带宽资源,对于攻击方来说,成本挺高,但是下手“快狠准”,目的是让网站在短时间内彻底无响应。
由于这类攻击会引起流量陡增,IDC里的流量监控设备也会很明显的察觉到这个现象。IDC通常采取的措施一般是丢车保帅,直接将这个被攻击的IP拉黑名单甚至直接拔线,让攻击对象自杀。这对本应该需要帮助的客户无疑是落井下石,雪上加霜。
防御思路
应付大流量的攻击,目前可以选择的防御方式无非几种:
- 架设硬防火墙
- 租用高防节点
- 租用CDN分散目标流量
方案缺点
- 架设硬防火墙:市面上2G硬防单价在10W左右,集群防御代价更大,虽然硬件级的防御性能高,但面对流量洪水也是爱莫能助。
- 租用高防节点:高防节点有共享独享区分,价格相差很大,分流策略也不同,但都有性能损耗和副作用。
- 租用CDN分散目标流量:市面上的CDN提供商都是以流量为收费标准,这对于经常遭受流量攻击的网站来说,反而要为攻击流量买单,这着实让人哭笑不得。
无论是采购的硬件成本和高防资源还是CDN加速,都成本昂贵,闲时资源利用率低,攻击高峰时面对有组织有规模的流量时又捉襟见肘,还伴有副作用,并非长久之计。
处于弱势的被打击方
综上所述,无论是使用脚本抗击延缓性CC攻击,还是通过堆积流量应付大流量攻击,都不是长久之计。随着业务规模的扩大,我们在这方面投入的成本和精力会越来越多。
我们也曾跟发起攻击的人有过交流,因此也大致了解攻击者手上掌握的资源规模:
这是非常完整的产业链(上游人员早已身在海外,根本无法查处),攻击者手上控制了大量的攻击资源,并且攻击资源本身就来自于IDC。在发动攻击时,他们能够调集到多个IDC的带宽资源来对目标打击(这一现象也折射出了当前国内不规范的IDC管理)。
从这一角度来看,被打击方永远都处于弱势地位,以势单力薄的架构和极其有限的资源,根本无法抵抗强大的集群资源攻击。
因此,我们跳出了单节点防御和租用CDN的思路,转而考虑自建CDN的方案。
长久之计:自建CDN
自建CDN的好处有几个方面:
- 旁路做流量清洗(痘痘长在别人脸上最好)
- 资源充分利用:无攻击的时候,做路由加速,有攻击的时候,做节点切换(一物多用)
- 随着投入的资金增加,防御DDoS攻击的能力增强(长远规划,资金回报率高)
有关自建CDN具体建设的思路如何,成本多少,我们会在系列的下一篇文章中进行介绍。
作者简介
邵海杨,来自杭州Linux用户组。网名“海洋之心”,系统架构师,业余撰稿人,致力于开源软件及前沿科技的研究和探索。
张磊,来自杭州谷歌开发者社区。专注于信息安全技术领域,曾主导多项银行/证券行业网站安全测试和入侵取证分析项目,为四大银行提供安全防护技术支持。目前创业做互联网安全防护。