DDos简介
- 对于DDos(分布式拒绝服务)攻击,人们往往谈虎色变。它被认为是安全领域中最难解决的问题之一,迄今为止也没有完美的解决方案。
- DDos攻击是一种网络攻击方式,其目的是通过利用大量的互联网连接设备同时向目标网站或服务发送大量请求,使得目标服务器无法处理正常流量,进而导致服务拒绝、系统瘫痪或者严重影响正常用户的使用体验。
- DDos攻击中,“分布式” 意味着攻击流量来自多个源头,这使得攻击更难以防御,因为攻击者可以控制成千上万的设备形成所谓的“僵尸网络”,对目标发起大规模冲击。"拒绝服务"则表示攻击的目标是让合法用户无法正常使用目标网站或服务。
DDos攻击案例
- Dyn 遭受的 DDoS 攻击:2016 年 10 月,主要域名服务 (DNS) 提供商 Dyn 遭受每秒 1 TB 的流量洪水攻击,有证据表明,DDoS 攻击实际上可能达到了每秒 1.5 TB 的速度。流量海啸使 Dyn 的服务下线,对很多主要网站造成了破坏,导致包括 GitHub、HBO、Twitter、Reddit、PayPal、Netflix 和 Airbnb 在内的许多知名网站无法访问。
- GitHub遭DDoS攻击:2018年2月,GitHub平台遭遇了史上最大规模的DDoS网络攻击。这次攻击以每秒1.3太字节(Tbps)的速率传输流量,每秒发送1.269亿的数据包。攻击者利用memcached数据库缓存系统的放大效应,将攻击放大了约50,000倍。幸运的是,由于GitHub正在使用DDoS防护服务,该服务器在接收攻击后的10分钟内自动发出警报,触发了DDoS防护的缓解过程,成功阻止了攻击,这次攻击仅持续了约20分钟。
- 美国大面积断网事件:2016年10月22日凌晨,美国域名服务器管理机构Dynamic Network Service(Dyn)宣布,该公司在遭受了一次大规模的DDoS攻击后,导致很多网站在美国无法访问。这次攻击展示了DDoS攻击对于全球互联网基础设施的潜在破坏力。
- 针对AWS的大规模攻击:2020年AWS经历了一次前所未有的大规模DDoS攻击。这次攻击达到了2.3Tbps的流量,是有史以来最猛烈的攻击之一。攻击持续了整整三天,主要目标是AWS的云服务,攻击者似乎企图使其瘫痪。幸运的是,由于AWS拥有强大的防御系统,攻击者的目标并未达成。据悉,此次针对AWS的攻击是基于CLDAP反射的攻击,这种反射攻击会利用受欺骗的IP地址向第三方服务器发送请求,以此来滥用合法协议。
DDos攻击原理
- 拒绝服务攻击的方式有很多中,比如触发了服务器bug,导致服务器进程崩溃,或者大量恶意得到请求导致服务器的CPU、内存、磁盘等资源被过度消耗,还有网络流量劫持、DNS劫持都可能导致服务中断,都可以被称为拒绝服务攻击。
- 多台计算机节点共同发起拒绝服务攻击,就能形成规模效应。这些攻击节点往往是黑客所控制的"肉鸡",当肉鸡数量到达一定规模后,就形成了一个"僵尸网络"。在大型的僵尸网络中,肉鸡数量甚至能达到数万、数十万的规模。如此大规模的僵尸网络发起的DDos攻击,几乎是不可阻挡的。
DDos攻击类型
网络层泛洪攻击
- 网络层泛洪攻击是一种常见的DDos攻击类型,攻击发生在网络层,其目的是通过向目标系统或网络设备发送大量数据包、请求或无效信息,从而耗尽目标的网络带宽、CPU资源或其他关键资源,最终导致合法用户无法正常访问该服务或系统。
- 常见的网络泛洪攻击有 : SYN Flood、ACK Flood、FIN Flood、RST Flood、TCP Fragment Flood、、UDP Flood、UDP Fragment Flood、IP Flood等。下面重点介绍下 SYN Flood攻击
SYN Flood攻击
- SYN Flood是一种最为经典的DDos攻击,它利用了TCP协议设计中的缺陷,而TCP/IP协议是整个互联网的基础,如今想要修复这样的缺陷几乎是不可能的事情。
- 正常情况下,TCP三次握手的过程如图所示
- 客户端向服务端发送一个带有SYN标志位的包,包含了客户端使用的初始序列号
- 服务端收到客户端发送的SYN包后,向客户端发送了一个SYN和ACK都置位的TCP报文,其中包含确认号和服务端的初始序列号
- 客户端收到服务端返回的SYN+ACK报文后,向服务端返回一个ACK置位且确认号的报文。至此,一个标准的TCP连接就完成了,双向都可以收发数据。
- 在SYN Flood攻击中,攻击者向服务端发送大量伪造源IP地址的SYN包,此时服务端会返回SYN+ACK包,因为源IP地址是伪造的,所以伪造的IP地址并不会应答ACK包,而服务端没有收到ACK回应包,就会等待一段时间,此时的连接状态称为半开连接,如果超时则丢弃这个连接。
- 虽然是半开连接,服务端也需要为它们分配系统资源,并使用一个队列来存储这些半开连接。如果攻击者大量发送这种伪造源IP地址的SYN报文,服务端将会消耗非常多的资源来处理这种般连接,同时半开连接数量会超过队列中连接数的最大限制。随后的结果是,服务端没办法处理正常的连接请求,因而拒绝服务。
- 对抗SYN Flood攻击,有一种方案为Safe Reset,一般在网络防火墙中使用。接收到客户端的SYN报文后,防火墙返回一个确认号错误的SYN+ACK报文,真实的客户端在发现错误后会回应一个RST报文,这样防火墙就知道这个IP地址是真实客户端,并将其添加到白名单中,后面如果客户端重新请求连接时就将它放行。而虚假的源IP地址不会有响应,所以它们就不会被列入白名单。
反射放大型攻击
- 反射放大型攻击是近几年非常流行的DDos攻击方式,超大流量的DDos攻击多数是由反射放大型攻击产生的。
- 绝大部分反射放大型攻击是使用UDP协议,因为UDP是无连接的协议,当客户端伪造源IP地址访问UDP服务时,服务端会把响应内容返回给伪造的源IP地址,所以当攻击者把源IP地址指定为攻击目标时,响应内容就被发送给了攻击目标。
- 如果一个UDP响应内容远大于请求内容,攻击者就借助UDP服务器实现了四两拔千斤的放大攻击效果。
Web应用层DDoS攻击
- Web应用层DDos攻击,攻击发生在应用层,TCP三次握手已经完成。所以发起攻击的IP地址都是真实的。但应用层DDos攻击有时甚至比网络层DDos攻击更为可怕,因为网络层DDos攻击通常都伴随着超大流量,并且都是非正常的网络数据包,攻击流量和正常访问流量比较容易区别,而应用层DDos攻击流量可能与正常访问流量的相似度很高,这对网络安全产品提出了很大的挑战。
- 常见的Web应用层DDos攻击有:HTTP Flood、HTTPS Flood、Slowloris、CC攻击等。
HTTP Flood
- HTTP Flood攻击主要是通过向目标网站发送大量看似合法的HTTP请求来消耗服务器资源,从而导致服务器无法处理正常用户的访问请求。
- 在HTTP Flood攻击中,攻击者通常使用大量的肉鸡或僵尸网络,模拟真实用户发起HTTP请求。这些请求可以包括GET、POST等各种HTTP方法,并且可能携带各种不同的URL和HTTP头信息,使得防御系统难以简单地通过过滤特定IP地址或识别异常数据包特征的方式来抵御攻击。
- 攻击的目标在于耗尽服务器资源,例如CPU使用率、内存占用、数据库连接数或者Web服务器线程池等。当这些资源被恶意请求填满时,正常的网页访问将变得极其缓慢甚至完全无法响应。
CC攻击
-
CC攻击源自一个叫fatboy的攻击程序,当时黑客为了挑战绿盟的一款反DDos设备开发了它。绿盟是中国著名的安全公司之一,它有一款叫"黑洞" (Collapasar)的反DDos设备,能够有效清洗SYN Flood等有害流量。而黑客则挑衅式地将fatboy所实现地攻击方式命名为 Collenge Collapasar,简称CC,意指在黑洞地防御下,仍然能有效地完成拒绝服务攻击。
-
CC攻击的原理非常简单,就是对一些资源消耗量较大的应用页面不断发起正常的请求,以达到消耗服务端资源的目的。
-
这种攻击手法利用多个代理服务器、肉鸡网络(被恶意软件感染并控制的计算机网络)或僵尸网络向目标网站发送大量并发请求,尤其是对那些资源消耗较大的动态页面发起攻击。由于这些请求看似合法且通常来自不同的IP地址,因此难以通过简单的过滤手段来防御。
-
攻击的目标是耗尽受害服务器的CPU使用率、内存占用或者数据库连接数等关键资源,导致服务器响应速度极度下降,甚至无法正常处理合法用户的访问请求,最终造成网站服务中断或严重性能下降。相较于传统的网络层DDoS攻击,CC攻击更难以防御,因为它往往需要识别和区分出恶意用户流量与正常访问流量,而这在应用层上具有更高的复杂性。
Slowloris攻击
- Slowloris攻击原理是以极低的速度向服务器发送HTTP请求。由于Web服务器对于并发的连接数都设有上限,因此若是恶意占用住这些连接不释放,那么Web服务器的所有连接都将被恶意连接占用,从而无法接受新的请求,导致网站拒绝服务。
- 为了保持住这个连接,攻击者构造了一个畸形的HTTP请求,准确的说,是一个不完整的HTTP请求
-
GET / HTTP/1.1\r\nHost:www.csdn.netUser-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36\r\nContent-Length:42\r\n
- 正常的HTTP请求是以两个"\r\n"表示HTTP Headers部分结束的,比如
-
Content-Length:42\r\n\r\n
- 由于Web服务器只收到了一个"\r\n",因此认为HTTP Headers部分没有结束,并保持此连接不释放,继续等待完整的请求。
- 此时,客户端每隔一段时间再发送任意HTTP头,并保持住连接即可。因为一直没有收到两个"\r\n",所以服务端就一直认为请求还没有发送完,这个连接就会很长时间不断开。当构造很多个连接后,服务器的连接数很快就会达到上限,从而产从拒绝服务。
- 这种攻击可以通过设置Web服务器读取请求头的超时时间,或者通过设置网络层读取数据包的超时时间来防御。
DDos攻击类型分布
网络层DDos攻击
应用层DDos攻击
总结
- DDos攻击自1996年首次出现,距今已过去近30年的时间,依旧是安全领域最难解决的问题之一。
- 由于DDoS攻击利用的是互联网协议的漏洞和弱点,因此没办法从根本上去解决,只能被动采取一些防御措施去抵御攻击。并且随着技术的不断进步,DDoS攻击的手法也在不断演变和升级。攻击者可能会利用新的漏洞、协议缺陷或者技术手段来发起更加复杂和难以防御的攻击。
- 虽然无法从根本上完全解决DDoS攻击,但可以通过技术、管理和合作等多种手段来降低其影响和风险,保护网络的安全和稳定。抵御DDos攻击之路任重而道远。
参考
- 《白帽子讲Web安全》 - 吴翰清 叶敏/著