前言:DDoS攻击(Distributed Denial of Service,分布式拒绝服务攻击)的历史可以追溯到1996年(还记得经典的Ping of Death吗),互联网技术飞速发展了二十多年,DDoS的攻击手法也在不断演进,目前它仍然是最活跃的黑客攻击方式之一:每天互联网都会发生不计其数的DDoS攻击 —— 这种攻击方式简单粗暴直接有效,深受攻击者们的青睐。
随着时代的发展,黑客技术已经滋生黑色产业链,从最初的技术炫耀到恶意报复、敲诈勒索乃至商业竞争 ——DDoS攻击也不例外,互联网公司特别是知名的或者特定行业的互联网公司最容易遭受DDoS攻击威胁。腾讯作为中国最大的互联网公司,自然也深受其害,在DDoS攻击防护体系构建的过程中也积累了一些经验和血泪教训,特整理成文供同行参考。
紧急应战:采购商业化防护设备
网络游戏是最容易遭到DDoS攻击的业务模式之一。随着腾讯游戏业务的发展,在2008年左右,当时腾讯的几个主流游戏(QQ堂、QQ炫舞、QQ音速等)开始频繁遭遇DDoS攻击,其他业务有时候也莫名其妙地被攻击(印象最深刻的就是有一次某个网站被攻击,团队忙活了大半天终于顶住了,调查的时候发现是一个私服网站被DDoS后干脆破罐子破摔把域名解析过来,简直是无妄之灾)。
为了解决日益频繁的DDoS攻击问题,安全团队需要一套DDoS攻击防护方案,于是宙斯盾项目(项目内部代号,意为像美国宙斯盾系统那样强力保卫腾讯)就诞生了。
宙斯盾项目的技术方案就是从网络入口镜像流量到分析系统,分析系统分析流量,如果发现异常就通过BGP将被攻击IP的流量牵引到防护系统进行清洗,完成后回注回去。整个方案要在网络入口检测机房入流量,如检测到异常数据包就丢弃。攻击流量检测相对简单,流量突增(这个策略有个坑,要考虑到业务搞活动等流量突增情况,不然会误杀)或某类报文如syn比例过大或格式不对即视为异常。只需要将流量镜像过来分析数据包即可,这个相对容易可以自己写代码搞定,但防护系统相对复杂,通过采购现成的商业设备来实现。
整体架构示意图如下:
防护系统采购的是绿盟的黑洞和华三的AFC,防护效果都还不错。还记得当时攻击最激烈的时候,团队协调多个部门紧急采购紧急上架,着实忙碌了一番。
那个时候机房带宽都不大(不超过20G),不过攻击流量也不大,一般几百M到几个G(基本没见过超过10G的),攻击类型也单一,主要是SYN Flood和UDP Flood。
方案定好后,接下来就是实施,主要涉及运维团队的工作了。团队先从经常被攻击的机房开始部署,很快有游戏业务的几个机房都已经全部覆盖。下图就是2010年几个主流游戏的DDoS攻击防护统计数据。
下图是2009年某个游戏业务被DDoS攻击的流量图,可以看到当年肆虐互联网的大流量攻击才800M而已,而宙斯盾的响应时间非常慢(完全人工操作,效率非常低下),各种环节耗费了数小时。
后来通过不断的运营迭代优化,宙斯盾系统的配套运营工具也趋于完善,自动化需求排上日程并实现,终结了人工应急的原始局面。
顺带提一下,经过团队的分析,我们发现黑客针对某款游戏DDoS的最终目的,居然是“炸房”后抢占第一个位置售卖广告位。后来通过业务模式修改,大大降低了挂广告的效果,攻击自然就减少了,也算是从产品设计层面降低安全风险的一个案例。
精益求精:自研防护设备
DDoS攻击威胁形势越来越严峻。
通过对某年的DDoS攻击防护数据进行分析可以看到,业务遭受到的超过4G的攻击就有200多次,而当时大部分机房的防护能力为4G(一个重点机房部署一台商业设备),也就是说有200多次攻击超过了机房防护能力而让整个机房带宽拥塞,进而影响到该机房所有业务。
为了应对这个问题,就需要各机房补齐资源,简单的办法就是堆砌设备:将5台商业设备堆砌起来使得防护能力提升到20G —— 这就意味着要大量补充设备。一台防护设备可以说是价格昂贵,这里的成本压力非常大;商业设备对于一些业务特定场景的定制化需求响应缓慢甚至无法满足;再就是设备增加之后,需要统计运营数据和统一调度,但当时的商业设备只能写脚本来一台一台登录处理,非常复杂和低效。
成本压力、定制化需求和运营需求最终让宙斯盾选择了自研。
自研一套DDoS攻击防护系统是个巨大的工程。由于是在网络核心出入位置,对性能会有较高的要求,其中涉及到网络架构、硬件架构、软件架构、安全攻防策略、TCP/IP协议等技术领域和难点,需要一支对网络、硬件、研发、安全都非常熟悉的团队。好在公司愿意在安全领域不惜血本并且有各个领域的高手:coolc(sponsor,现在已经是部门负责人)、chair(“宙斯盾之父”、第一代负责人、系统网络方面的专家)、炽天使(第二代负责人,安全专家,现任UCloud安全中心负责人)、apple(研发高手)、plan9(老一辈的人应该看过他的文章《高级shellcode设计技巧》)、老牛(主力研发,现在是数据保护项目负责人)、球头人牛长(主力研发,现在已接班成为新一代宙负责人)、xenos(系统网络方面的专家)、BigHy(主力运营,现在负责大疆的安全)、julang3、honker、瓜哥(不是阿里那个papaya瓜哥)、creative(第三代负责人)、XX、panday、二帅…… —— 当年宙斯盾的同事们,在项目中得以成长,今天仍然在更为广阔的战场继续默默地为互联网安全做着贡献。
半年后,宙斯盾防护设备已经初具雏形,单台设备最大防护能力10G,能成功防护SYN Flood、ACK Flood、UDP Flood、ICMP Flood等常见攻击手法,成本仅为商业设备的十分之一,并且在实战使用中取得胜利。
于是在2011年初开始灰度部署,新建机房的DDoS防护设备中商业设备和宙斯盾各占一半,存量机房扩容全部使用宙斯盾。到了2014年,宙斯盾基本上全部覆盖了所有机房,接下来所有新建机房都是自研设备,这里累计节省的成本初步估计就上亿元。
随着实战对抗经验的增加,宙斯盾系统和团队基本上能够控制住公司层面的DDoS攻击威胁。这部分工作也可以参考团队主力同学们当时写的系列文章:《宙斯盾系统构建之路——系统介绍》、《宙斯盾——DDoS大眼检测系统简介》、《论持久战——带你走进腾讯DDoS防护体系》。
同时宙斯盾团队也锻炼成为一支身经百战的常胜之师,不仅为公司业务保驾护航,还会对合作伙伴施以援手。当年滴滴刚刚接入微信支付的时候,大量用户涌入流量突增,一度怀疑遭到DDoS攻击,团队立即连夜支持,迅速查明原因解决了问题。腾讯的一些合作伙伴(如DNSPod、加速乐、微众银行、Garena)也使用了宙斯盾系统,口碑也还不错。
由于在网络层有了设备,等于是可以对流量进行分析和处置,除DDoS防护外还可以扩展一些其他能力,比如宙斯盾在紧急情况下还对SSL HeartBleed 0day漏洞进行过临时防护(弥补应用层防火墙的能力不足),对Web业务进行防刷,对网络劫持情况进行分析,以及网络层检测木马……这些都取得了不错的效果,也是流量应用和网络防护设备的一个发展方向,有机会另外探讨。
外传:C/L游戏保卫战
游戏行业历来是DDoS攻击的重灾区。C/L游戏一上线就非常火爆,但是树大招风,DDoS攻击也随之而来。宙斯盾团队在这里与攻击者对抗了数年之久,期间系统大重构一次,防护策略至少更新几十轮,产生技术专利十几个,孵化出产品方案若干,保卫战的惨烈程度可见一斑。
现试描述一二:
资源消耗之SYN Flood
最开始的时候攻击者只是简单的采用典型的SYN Flood攻击,这种攻击主要是产生虚假的TCP连接消耗目标服务器CPU,防护办法就是以性能强大的防护设备代替服务器去进行TCP连接,把虚假连接硬扛住,本质上是攻防双方性能的比拼。
SYN Flood的防护方案已经比较成熟了,不管是用syncookie算法还是丢弃重传还是其他什么策略,开启性能强大的防护设备就可以轻松搞定。另外,随着各大运营商对伪造源IP地址的数据包的治理,很多伪造源IP的包都被路由器丢弃了,威力大打折扣。
资源消耗型的SYN Flood攻击被防住后,攻击者又在基础上衍生出一种流量型SYN Flood,就是直接发syn大包,以大流量阻塞网络为目的,防护方案也简单,丢掉这种无效syn包即可。后来又出现混合型的SYN Flood,既有资源消耗型SYN Flood又有流量型syn大包。
僵尸傀儡之流量攻击
大流量UDP Flood也是常见的攻击方式,通过大流量阻塞机房带宽,不过也是比较容易防护的:丢弃掉这些非业务端口或者特定格式的UDP包即可。同样随着运营商的治理,伪造源IP的UDP包威力也大减,所以导致攻击者必须依靠庞大的僵尸网络实施真实IP的攻击。
随着物联网时代到来,越来越多IoT设备也连接到了互联网,但是这种传统的线下厂商显然没有应对互联网安全威胁的经验,这些设备存在各种安全问题,被黑客控制后成为DDoS肉鸡。有了IoT僵尸(如著名的Mirai及其变种)加持,DDoS攻击的流量不断刷新纪录,动辄500+G,上T也不鲜见。
宙斯盾团队对攻击源IP进行分析发现,近几年的攻击源来自IoT/智能设备(如智能路由器、摄像头、智能插座、智能门锁)的数量呈上升趋势,也是从一个侧面反映出万物互联时代的到来。我们把这部分被黑客利用的IP作为黑名单库,防护的时候直接丢弃,甚至还用到其他安全系统去(看,这是威胁情报应用)。
另外,流量大了之后就带来一个问题,流量已经超过机房物理带宽,换句话说就是机房已经被打爆了(这是完全超过,还不算那种达到带宽百分之七八十就抖动的狗血情况)。这种攻击的应对就非常消耗资源:要么继续投资源建设超大带宽的机房(带宽很贵的),然后防护资源满配,要么就让运营商在上一层做清洗(比如电信的云堤。我们也有和一些运营商合建DDoS高防服务)。
“天下熙熙,皆为利来;天下攘攘,皆为利往”,我们的数据还监测到一个有意思的现象:随着一个阶段的实施DDoS攻击成本的增加、刑事风险的增加以及获利减少,好多肉鸡不再进行DDoS而是用于挖矿了。
以小博大之反射型DDoS攻击
自从DNS反射型DDoS攻击被实战应用之后,这种攻击就一直在进化,各种协议(DNS、SNMP、LDAP、SSDP、NTP、Memcached、IPMI)都陆续被挖掘出来并实际攻击,放大系数也越来越大,整合起来的流量也越来越大,从12年的65G到后来的650G。
反射型攻击防护起来比较容易,因为大部分被攻击的业务是不会需要这些协议的(呃,DNS Server是个特例),按协议特征或者来源/目的端口过滤掉就行了 —— 还是那个问题,如果攻击流量超过带宽就会比较麻烦。
我们看到的某一时期的反射型DDoS攻击分类比例:
我们看到的某一时期SNMP反射型DDoS攻击源全球分布:
终极对战之协议模拟攻击
深入业务逻辑的对抗来了,是时候展示真正的技术了。
攻击者继续变招,采取了小流量UDP Flood攻击业务端口,当流量在一定区间的时候可以阻塞业务端口,该端口对应的游戏房间会崩溃,但是又不至于对游戏整体有影响 —— 与之前的入流量陡增及掉线数突增不同,这种攻击让数据在大的面上不会有波动,需要通过精细化运营来发现。
团队发现上述情况后对策略进行了升级,针对业务端口仅允许符合该游戏协议格式的UDP包通过,攻击又被缓解了。
攻击者继续变招,这次他们直接模拟正常的游戏协议格式然后向业务端口发包 —— 这就是四层的CC攻击。
这次怎么缓解呢?一个方案是检测IP的状态(即该IP之前应该登陆过所以要跟游戏Server打通维护一个IP状态表,不在表中的的IP发来的数据包不管格式如何直接丢弃);另一个方案就是“安全水印”(即游戏客户端动态生成token,防护设备校验数据包里的token是否合法)。
从原理上看这种方案跟下发JavaScript防护CC攻击的方案类似,只是针对B/S架构的CC攻击可以下发JavaScript让浏览器实时执行去生成“水印”,而C/S架构就只能预埋逻辑到客户端了。
无论哪种方案都需要防护设备能够快速响应需求,迅速迭代版本,自研的优势就体现出来了。同时我们也把在业务稳定运营的“安全水印”输出为产品,为腾讯云上客户提供服务。
重装升级:云中鏖战
安全团队的价值是降低业务风险,进一步价值是提升业务的核心竞争力,终极价值是成为盈利单元。把内部业务服务好了,下一步就是能力输出。
随着互联网的发展,传统企业也要拥抱互联网开展线上业务(互联网+传统行业= 产业互联网),使用云计算是一个方便低成本的解决方案,同时也为安全服务提供了一个入口。宙斯盾就这样依托腾讯云输出,除了为客户提供免费的DDoS防护基础服务,还推出了收费的定制化高防服务及私有云版本。
云上的DDoS情况跟自研差异较大,长尾客户多、技术架构复杂、特殊情况频发 —— 老革命遇到了新问题,于是宙斯盾从技术架构、系统运营、数据分析、产品设计等方面全面重构以适应云时代的需要。花了整整一年,宙斯盾系统终于重装升级,不仅是架构、运营、数据、产品层面得到提升,而且还尝试引入机器学习基线模型去智能地判断攻击,新架构基本控制住了这里的问题,同时也实现了安全的终极价值 —— 以宙斯盾为底层支撑的腾讯云大禹和宙斯盾DDoS防护服务牛刀小试,收入可观。
云上客户与公司业务同事不同,云上客户人数多而且容忍度低,所以不能把粗犷的内部系统给客户,而是要注重产品体验。另一个需要注意的就是云上业务复杂,很多时候过往经验并不适用。我们见过一些客户的系统健壮性不足,很小流量的攻击系统就崩溃了,根本来不及触发防护阈值。针对这种情况,我们就把一些通用配置下放到客户侧,客户按实际情况来配置。此外,一些复杂配置也可以以专家模式提供给用户。
云上业务的复杂性导致云上的DDoS攻防比自营业务还激烈,尤其是近几年随着云业务的发展,DDoS攻击数量、攻击手法、最大峰值、业务数都超过了自营业务(比如某个云客户遭遇到的1.2T攻击),这些挑战是好事,通过对这些攻击的不断运营优化反过来又促进了宙斯盾系统的迭代优化。
我们看看被DDoS攻击的行业分布,很有代表性。
未来还在继续,云上宙斯盾还在不断迭代优化。
后记
DDoS攻击和防护的本质是攻防双方资源的对抗,一方要不断囤积大量资源具备超大流量输出,一方要不断建设能够抗住超大流量的带宽,对抗的成本和激烈程度甚至可以用军备竞赛来形容(每年我们的服务器运营成本就是数千万)。跟入侵一样,大部分普通攻击比较容易防护,真正厉害的是顶尖高手(比如利用核心交换路由系统bug进行DoS的几十字节数据包,再比如针对防护设备本身的DDoS……)
技术对抗是一方面,在技术之外的刑事打击和震慑必不可少。腾讯“守护者计划”安全团队也会配合警方对黑产进行打击,破获的几起DDoS攻击大案有效地遏制了国内DDoS攻击态势。
就在写作本文时,宙斯盾的100G高性能支持IPv6版本已经在全面部署中,400G以及具备边缘计算能力的智能网卡新设备预研已在路上。时代变迁,技术发展飞快,但是我们始终要记得,安全是一个过程,建设系统永远是第一步,通过运营来不断迭代优化才是安全体系的核心。
附录
lake2的企业安全九部曲(未完待续):