如何抗ddos攻击,教你一个不花一分钱又有效的好方法
ddos 攻击近几年来非常常见,许多知名的平台网站都遭遇过。当应用层 ddos 攻击当前已经是最常见的攻击类型之时,对于程序员而言,有哪些必须掌握的 ddos 攻击的知识点,更为关键的是,如何进行有效的防御实践?在「csdn 在线峰会 —— 阿里云核心技术竞争力」上,在系统、应用、网络安全领域拥有 14 年研究经验的阿里云资深安全专家叶敏深入分享了新型应用层 ddos 攻击防御的最佳实践,希望能够对所有技术人有所启发及裨益。
复制链接或点击「阅读原文」可免费观看叶敏老师分享视频:
作者 | 叶敏,阿里云资深安全专家
责编 | 唐小引
头图 | csdn 下载自东方 ic
出品 | csdn(id:csdnnews)
一、应用层 ddos 攻击介绍
ddos 攻击长久以来困扰着互联网企业,从我们云盾监测到的 ddos 攻击流量峰值来看,最近几年攻击流量在大幅上涨,从 2014 年我们对外宣布防御了全球最大的 ddos 攻击,453.8gbps,到现在 t 级别的 ddos 也变得很常见。
大流量 ddos 攻击存在了很多年,虽然攻击流量一直在增长,但是攻击类型变化不大,一直以 syn flood、udp flood、udp 反射攻击为主。针对大流量攻击已经有了非常有效的防御手段,以前这种大流量攻击遇到安全设备时,就像进了黑洞一样被吞噬,防御成功率很高,但是黑客们不服输,他们向这个黑洞发起了新的挑战。
如果把攻击流量伪装成正常业务的流量,那么安全防御设备就很难区分出攻击流量,这样就能穿过防御设备攻击到后端的应用,这就是应用层 ddos 攻击,也叫 cc( challenge collapsar )攻击,就是挑战黑洞的意思。
二、应用层 ddos 的攻击方式
应用层 ddos 最近几年越来越受到黑客的青睐,从监测到的数据来看,应用层 ddos 攻击在 2019 年就有翻倍增长。
除了容易绕过防御设备,还有一个重要的原因是应用层 ddos 攻击更加高效,因为应用层的攻击都要触发上层应用的处理逻辑,其中可能有数据库查询、远程 api 调用、文件读写,甚至有复杂的计算逻辑,所以这些流量会对服务端带来更大的压力。攻击者精心挑选的带有复杂逻辑的 url 进行攻击,可以用很小的流量对应用或数据库产生巨大压力。攻击者不需要用到很大的带宽,甚至对服务端只有小幅度的 qps 上涨,让检测和防御都变得更有挑战。
ddos 攻击最典型的方式是僵尸网络,黑客控制了大量的傀儡主机(肉鸡或 bot)向目标发起攻击。这些傀儡主机可能是服务器、pc、手机或 iot 设备。
在应用层 ddos 攻击中,我们发现另一种借刀杀人的攻击方式也很常见,黑客在一些热门的网页中嵌入了带有攻击行为的 javascript 代码,当访问者打开这些网页时,浏览器就循环对目标发起攻击,在一些停留时间比较长的网页,比如长篇小说或小电影网站,再加上不停的有新用户访问,攻击就会持续很长时间。虽然黑客没有控制这些设备的权限,但是他借助这些正常用户的浏览器实现了大规模的应用层 ddos 攻击。
互联网上 http/https 服务占比最大,所以针对 http/https 协议的应用层 ddos 攻击也是最常见的,我们把它叫 http flood。虽然都是发起 http 请求,但是也有不同的方式,防御的难度也不一样。我们分析过很多 ddos 木马,有些直接拼接 http 报文内容发送给服务端,这种通常攻击手法比较单一,而且也没有考虑 cookie 和 http 跳转,更不能执行 javascript。
进一步我们发现有些木马使用现成的 http 库,它对 http 协议的支持更完善,部分可以支持 cookie 和 http 跳转,但没有浏览器引擎所以不能执行 javascript。
再进一步我们发现带有浏览器引擎的攻击方式,它其实就是个无窗口的浏览器,可以完整的支持 cookie、http 跳转和 javascript。我们也发现直接使用浏览器进行攻击的,有 windows 平台的恶意软件中嵌入 ie 控件,移动 app 中嵌入 webview 控件,前面讲到的热门网页嵌入 javascript 也是浏览器攻击的例子。因为攻击流量本身就是浏览器发起的请求,所以这种识别难度更大。
另外一种应用层 ddos 攻击是针对 ssl,据统计全球超过 85%的网页已经启用 https 协议了,所以攻击目标范围很大。我们知道建立一个 ssl 连接的开销是比较大的,有人分析过,建立一个 ssl 连接服务端消耗的计算资源是客户端的 15 倍,所以如果攻击者向目标服务器发起大量 ssl 连接握手,就会对目标服务器产生巨大的性能压力。这里还有一个挑战在于,只有在 ssl 握手完成以后,才会传输应用层的数据内容,所以通过数据包内容来检测攻击,在这里就不适用。
前面讲的很多攻击方式跟 http/https 业务有关系,但是私有协议也是存在应用层 ddos 攻击的,这个在很多游戏业务中比较常见。一些粗暴的攻击方式是建立 tcp 连接后,发送随机的垃圾数据,一般情况下服务端遇到非法数据会直接断开这个连接。
但是也有一些耐心的攻击者,对正常的业务流量进行抓包,然后用重放的方式对目标发起攻击,一方面是这种正常的流量会让服务端执行更多的业务逻辑计算,比如登录操作需求查询数据库,从而产生更大的攻击效果,另一个方面是很难把重放流量跟正常用户流量区分开来,对检测和防御有更大挑战。
从这些攻击方式中可以看到,应用层 ddos 攻击不再是简单粗暴的大流量冲击,而是攻击者精心构造的数据包,伪装成正常流量绕过防御设备,攻击后端的应用和服务。
三、传统的应用层 ddos 防御方案
传统的防御策略是频率限制,在源 ip、url 精度进行限速,拦截高频的访问者。目前大多数 cc 防御产品都向用户提供限速功能。但是频率限速有很多缺陷,因为不同的业务 qps 差异很大,默认的限速策略并不能适用于所有场景,比如如下所示,第一个流量图,峰值流量达到 20 万 qps,而第二个图峰值才 2 万 qps,我们直觉上判断第二个是攻击行为,但是显然这两个业务不能用相同的限速策略的。
另一个问题是,当一个网站访问量很大时,一些脆弱的接口能承受的 qps 又很低,全局的限速策略就不适用了。粗暴的拦截 ip 还可能引起误伤,如果一个源 ip 访问量过大就把 ip 加黑名单,有可能将 nat 出口 ip 拉黑,在大的公司、学校里有一个人发起攻击就把整个出口 ip 拦截了会影响到正常用户的访问。
所以应用层 ddos 防御有个关键点是要做更精细化的策略,很多 cc 防御产品支持用户自定义策略,将指定的数据包丢掉。对于非 http 协议,部分产品提供让用户配置报文过滤特征,对 http 协议,多数安全产品都提供用户配置 http 各个维度的组合拦截条件。但是 ddos 防御都是争分夺秒的,这种人工分析和配置策略存在严重的滞后性。另外这种策略非常依赖安全专家经验,以及对业务的了解。
一些自动化的方案也在广泛使用,大家可能遇到过访问一个网站时出现一个白屏页面,上边提示在做安全检测,几秒钟后跳转到目标页面,这个叫 javascript 挑战。服务端向客户端返回一个校验页面,里边包含了校验浏览器的 javascript 代码,如果用真实浏览器访问并且有正常用户行为,就可以校验通过。它也有一些缺点,就是只适用于网页,如果是 api 接口,这种挑战会让正常业务中断,另外也不适用于非 http 协议。
人机校验方式也被用于应用层 ddos 防御,包括图形验证码或者需要用户点击、滑动的校验方式,这种做法虽然很多场景在使用,但非常影响用户体验,而且它同样存在缺陷,只能适用于网页,不能用于 api 接口和非 http 协议。
四、智能化的防御方案
1. 纵深防御的架构
这些方案都存在一定的缺陷,没有一个方案是可以解决所有场景下的 ddos 攻击,所以我们在最近几年做了一个纵深防御方案,考虑到了各种不同的攻击方式,我们从多个维度进行了流量分析和防御,包括数据包内容特征、访问行为、客户端挑战和智能化的限速,其中大量应用了自动化分析建模,精细到每个业务、每个 url 进行访问基线分析,自动发现其中的异常,并且基于阿里云的优势大规模应用了威胁情报技术。以下图中大部分新的防御手段都是为防御应用层 ddos 攻击而设计的。
2. 智能的自适应方案
- 为什么需要自适应?
不管是默认的防护模板,还是让用户去配置,都不是个好的方案。当有大量不同业务的时候,我们必须要一个自适应的方案,根据业务的历史流量自动分析出正常情况下的基线,基于这个基线去发现异常,并阻断异常请求。
- 自适应的难点与挑战
难点一:如何自动刻画业务基线,并避免历史攻击的干扰?
比如以下图中第一个流量图,我们能够自动识别出来它的周期性波动并生成它的频率基线,虽然峰值 qps 非常高,但是它符合历史频率基线,所以我们判定它是正常行为。第二个图,虽然峰值 qps 不高,但是它不符合历史基线,所以判定存在攻击行为。
整个过程需要基于数据自动完成,因为在存在大量不同业务的情况下,人工标注是不现实的。同时,倘若网站历史上存在攻击,也需要自动剔除攻击时的数据,避免干扰。
难点二:如何在攻击第一时间发现异常并作出处置?
发现流量存在异常仅仅是第一步,最重要的是识别出来哪些流量是异常的,并且自动生成策略把它阻断掉。每个业务的流量都不一样,攻击方式也千变万化,显然不能用一个固定的特征去区分出攻击流量和正常流量。同样的,找出攻击流量的关键是要知道正常流量长什么样,我们从几十个维度,在业务正常的时候学习出流量的基线画像,精细到每个域名、每个端口、每个 url,同样也是千人千面。当发生攻击时,流量分析引擎可以根据当前流量和基线的对比,自动生成拦截攻击流量的策略。
3. 降维打击的协同防御
在阿里云我们每天防御了海量的攻击,每一次防御都是可以输出有价值的信息用于保护更多的其他客户。
就像免疫系统一样,一个客户遭受过一种类型的攻击,该攻击情况就会进入威胁情报系统中,自动分析出攻击手法和攻击源 ip 特性,并生成多维度的针对性方案。下次再发生这种攻击时,所有客户都可以受到保护。
五、应用层 ddos 攻防的发展
ddos 防御需要争分夺秒,能快一分钟,业务中断就少一分钟,整个防御系统要足够实时。在流量的采集、分析和拦截都要做到实时化,特别是攻击流量大的时候,实时分析对整个链路的性能都有很大挑战。要做到足够快,人工分析一定是来不及的,必须要足够自动化、智能化,通过离线的基线画像计算,加上实时的智能策略,我们现在做到了 95%以上的应用层 ddos 攻击都可以在 3 分钟内自动防御成功,将业务恢复,因为整个分析决策链路长,其中还是有很大改进空间。
应用层 ddos 还有很多挑战等着我们去解决,误杀问题是其中一个,当业务有促销、秒杀活动时,短时间内流量激增,部分秒杀场景中大量 ip 集中访问一个页面,甚至此时正常业务就已经受到影响,服务端响应过慢了,此时各个维度都跟正常基线相关非常大,攻击检测系统很容易将这种行为误判为 ddos 攻击。
另外一个难题是,防御系统非常依赖业务的基线画像做防御策略,如果一个新上线的业务就遭受攻击,或者业务刚接入防御系统,此时防御系统缺少该业务的画像,并不知道它正常流量是怎样的,防御效果就会大打折扣。另外一个问题也发生过多次,在一些业务中客户端有重连的逻辑,或者出错后重传的逻辑,如果客户端逻辑设置不当,当服务端发生异常时不断重连或重传,也容易误判为攻击行为,导致整个 ip 被封禁。针对这些防御缺陷,我们也在设计新的技术方案,包括访问源、客户端的信誉评分,尽量减少对正常用户的误杀。
从历史发展来看,ddos 的攻防技术一直在发展,但是攻击和防御从来都没有哪一方是占据绝对优势的,双方的技术总是在螺旋上升。只要有利益存在,黑客就会不断挑战我们的防御方案,虽然今天我们做了大量防御技术上的创新,但是道高一尺,魔高一丈,黑客一定会研究新的攻击技术绕过我们的防御系统,从简单、粗暴的攻击方式往精细化、智能化方向发展,进而迫使我们研究新的防御技术,未来攻击和防御技术都会迈上一个新的台阶。
作者简介:叶敏,阿里云资深安全专家,在系统、应用、网络安全领域有14年研究经验,阿里反钓鱼、云盾反入侵、网络安全产品技术负责人,在网络安全攻防方面有丰富的经验,其主导建设的多项安全技术保护了阿里云百万级客户。
作为“百万人学ai”的重要组成部分,2020 aiprocon 开发者万人大会将于6月26日通过线上直播形式,让开发者们一站式学习了解当下 ai 的前沿技术研究、核心技术与应用以及企业案例的实践经验,同时还可以在线参加精彩多样的开发者沙龙与编程项目。参与前瞻系列活动、在线直播互动,不仅可以与上万名开发者们一起交流,还有机会赢取直播专属好礼,与技术大咖连麦。