DDoS简述
什么是DDoS攻击
DDoS(Distributed Denial of Service)分布式拒绝服务攻击是一种非入侵式网络攻击,主要通过使用大量的虚假流量来阻塞网络或让服务器超负载运行,最终达到影响服务正常运行甚至关闭服务的目的。DDoS 攻击通过发送虚假流量,这些流量会突破网络带宽上限或者服务器的计算资源上限。
绝大度数的DDoS攻击都依赖于僵尸网络中的大量僵尸主机(肉鸡),这些僵尸主机主要由受感染的物联网设备、网站设备和计算机组成。 当发起 DDoS 攻击时,僵尸网络将在同一个时间内,想同一个攻击目标发送大量虚假请求,这些虚假请求会快速耗尽网络服务的网络带宽资源或者服务器计算资源,从而导致被攻击网站的财产损失。
DDoS攻击的目的
DDoS攻击的目标就是通过攻击扰乱网站的正常使用。造成的不良后果有以下两种:
第一,网站服务会变得非常慢,影响正常用户的使用;
第二,网站服务关闭,正常用户无法使用。
无论是哪一种后果,都会对网站业务造成破坏。
DDoS、DoS之间的不同
DoS (Denial of Service)拒绝服务攻击和DDoS(Distributed Denial of Service)分布式拒绝服务攻击非常相似。 它们之间的唯一区别就是规模。DoS攻击来自一个来源,而 DDoS攻击来自多个来源,通常是一个大型僵尸网络中的大量僵尸主机,这也导致了DDoS攻击比DoS攻击更具有欺骗性。
无论是DoS还是DDoS攻击,攻击者都使用一台或多台计算机设备。DoS 攻可以说是DDoS攻击组成部分。DoS是一个兵,DDoS攻击是一只军队。大型的DDoS 攻击可以跨越数百或数千个系统。 DoS/DDoS 攻击主要受DDoS租赁服务(DDoS-for-hire)的影响,这种租赁服务也叫 Booter Services。
遭受DDoS攻击的表现
1.网站响应速度变慢,比如延时时间突然持续变大
2.网站无响应,无法获取网站内容
3.网站无法登陆
4.网络连接出现问题,比如连接出现rst
当DDoS攻击攻击网站时,它可能会大量占用服务器资源(如 CPU、内存)和网络带宽资源最后使服务器完全崩溃。 如今,大多数 DDoS 攻击都源自黑客控制僵尸网络。 这些僵尸主机主要是易受攻击物联网设备,包括连接互联网的安全摄像头、家用电器、智能电视、家庭照明系统,甚至冰箱。并且因为智能家居以及工业互联网设备的快速发展和这些设备安全防护薄弱之间的矛盾,这使得物联网设备成为僵尸网络的主要受害者,从而也导致了DDoS 攻击出现了指数级增长。 一个被劫持的具有唯一IP地址的物联网设备可以被重定向以向网站发出恶意请求,从而引发 DDoS 攻击。
DDoS攻击类型
DDoS攻击都是根据当前网络协议中的薄弱点进行攻击。
计算资源耗尽型DDoS
IP Null Attack
该攻击将流量包中的IPv4的header头信息设置为0,这些数据包可以绕过旨在扫描 TCP、IP 和 ICMP 的安全措施。当服务器需要解析和处理这些数据包时,就会耗尽所有计算资源,并导致服务器异常关闭。
HTTP碎片 Flood(Fragmented HTTP Flood)
在这个针对已知漏洞的复杂攻击示例中,具有有效IP的攻击者与Web服务器建立有效的HTTP连接。 然后,攻击者将HTTP数据包拆分成微小的片段,并在超时之前尽可能慢地发送到目标。 这种方法允许攻击者长时间保持连接活动,而不会警告任何防御机制。
攻击者可以使用一个BOT启动多个未检测到的、扩展的和消耗资源的会话。 像 Apache 这样的流行 Web 服务器没有有效的超时机制。这种DDoS攻击会逐渐将服务器的计算资源占满。
HTTP Flood
攻击者利用大量的受控主机不断的向Web服务器发送恶意大量HTTP请求,要求Web服务器处理,就会完全占用服务器的资源,造成其他正常用户的Web访问请求处理缓慢设置得不到处理,导致拒绝服务,这就是HTTP洪水攻击。
由于HTTP协议是基于TCP协议的,需要完成三次握手建立TCP连接才能开始HTTP通信,因此进行HTTP洪水攻击时无法使用伪造源IP地址的方式发动攻击,这时,攻击者通常会使用HTTP代理服务器,HTTP代理服务器在互联网上广泛存在,通过使用HTTP代理服务器,不仅可以隐藏来源以避免被追查,还能够提高攻击的效率——攻击者连接代理服务器并发送完成请求后,可以直接切断与该代理服务器的连接并开始连接下一个代理服务器,这时代理服务器与目标Web服务器的HTTP连接依然保持,Web服务器需要继续接收数据并处理HTTP请求。
Web服务也存在缓存机制,如果攻击者的大量请求都命中了服务器缓存,那么这种攻击的主要作用仅体现再消耗网络宽带资源上,对于计算和I/O资源的消耗是非常有限的,因此,高效的HTTP洪水攻击应不断发出针对不同资源和页面的HTTP请求,并尽可能请求无法被缓存的资源,从而加重服务器的负担,增强攻击效果。
此外,如果Web服务器支持HTTPS,那么进行HTTPS洪水攻击是更为有效的一种攻击方式,一方面,在进行HTTPS通信时,Web服务器需要消耗更多的资源用来进行认证和加解密,另一方面,一部分的防护设备无法对HTTPS通信数据流进行处理,也会导致攻击流量绕过防护设备,直接对Web服务器造成攻击。 HTTP洪水攻击是目标对Web服务威胁最大的攻击之一,有大量的攻击工具支持HTTP洪水攻击,发动简单其效果明显,已经成为攻击者使用的主要攻击方式之一。
Slowloris攻击
Slowloris攻击是一种针对web服务器的慢速HTTP攻击,由安全研究人员在2009年提出。
在HTTP协议中规定,HTTP头部以连续的“”作为结束标志,许多Web服务器在处理HTTP请求的头部信息时,会等待头部传输结束后再进行处理,因此,如果Web服务器没有接受到连续的“”,就会一直接受数据并保持与客户端的连接,利用这个特性,攻击者能够长时间与Web服务器保持联系,并逐渐耗尽Web服务器的连接资源。
攻击者在发送HTTP GET请求时,缓慢的发送无用的header字段,并且一直不发送“”结束标志,这样就能够长时间占用与Web服务器的连接并保证该连接不被超时中断,然而,Web服务器能够处理的并发连接数是有限的,如果攻击者利用大量的受控主机发送这种不完整的HTTP GET请求并持续占用这些连接,就会耗尽Web服务器的连接资源,导致其他用户的HTTP请求无法被处理,造成拒绝服务。
Slowloris Post
慢速POST请求攻击也是一种针对Web服务器的慢速HTTP攻击,由安全研究人员在2010年提出,与Slowloris攻击不同的是,慢速POST请求攻击利用缓慢发送HTTP BODY的方式达到占用并耗尽Web服务器连接资源的目的。
在HTTP头部信息中,可以使用Content-Length字段来指定HTTP消息实体的传输长度,当Web服务器接收到的请求头部中含有Content-Length字段时,服务器会将该字段的值作为HTTP BODY的长度,持续接收数据并在达到Content-Length值时对HTTP BODY的数据内容进行处理,利用这个特性,攻击者能够长时间与Web服务器保持连接,并逐渐耗尽Web服务器的连接资源。
攻击者在发送HTTP POST请求时,在请求头部中将Content-Length设置为一个很大的值,并将HTTP BODY以非常缓慢的速度一个字节一个字节的向Web服务器发送,这样,Web服务器就需要一直维持与客户端的连接并等待数据传输结束,由于Content-Length被设置成了很大的值,而HTTP BODY的传输速度又非常缓慢,攻击者就可以长时间占用这个连接,通过间断性的发送单字节的HTTP BODY内容,攻击者就能够确保连接不因超时而导致中断,如果攻击者利用大量的受控主机发送这种缓慢的HTTP POST请求并持续占用这些连接,就会耗尽Web服务器的连接资源,导致其他用户的HTTP请求无法被处理,造成拒绝服务。
Single Session HTTP Flood(HTTP GET Flood)
攻击者可以利用 HTTP 1.1 中的漏洞从单个 HTTP 会话发送多个请求。 这允许攻击者从少数会话中发送大量请求。 换句话说,攻击者可以绕过 DDoS 防御机制对允许的会话数量的限制。这种攻击的会话数比较少,但是每次都会请求服务器上涉及数据库操作的URI或其它消耗系统资源的URI。
这种攻击可以根据网站的特点进行改进和优化,比如请求有大量图片的网站,或者按照网站的index按顺序发起get请求。
Single Request HTTP Flood
Single Request HTTP Flood 通过在一个 HTTP 数据包中屏蔽具体的请求信息,实现单个 HTTP 会话可以发出多个 HTTP 请求,实现基于http的放大攻击。该技术通过将数据包速率保持在允许的范围内,允许攻击在耗尽服务器资源的同时保持隐形。
THC SSL DoS攻击
THC SSL DOS攻击是安全研究人员在2011年提出的一种针对SSL的拒绝服务攻击方法,这种方法就是利用Renegotiation选项,造成被攻击目标资源耗尽,在进行SSL连接并握手之后,攻击者反复不断的进行秘钥重新协商过程,而秘钥重新协商过程需要服务器投入比客户端多15倍的CPU计算资源,攻击者只需要一台普通的台式机就能拖慢一台高性能服务器,而如果有大量主机同时进行攻击,则会使服务器忙于协商秘钥而完全停止响应。
SYN Flood
这种攻击利用了客户端、主机和服务器之间的三向 TCP 通信过程的设计。 在这个过程中,客户端通过生成一个 SYN 包来发起一个新的会话。 主机分配并检查这些会话,直到它们被客户端关闭。 为了进行 SYN Flood 攻击,攻击者从欺骗的 IP 地址向目标服务器发送大量 SYN 数据包。
SYN ACK Flood
当服务器收到syn_ack报文后会在系统里查询是否属于3次握手的范畴。如果属于则回复ack,并将连接设为连接状态。若没有查到相关信息,则回复reset。(这里window协议实现与Linux有所不同,这里仅讨论Linux)。当攻击者发送大量的syn_ack进行攻击时,服务器将会为处理这些报文而消耗大量的计算资源。
ACK & PUSH ACK Flood
客户端与服务器连接时,客户端可以通过设置 ACK 要求确认信息是否已收到,也可以通过设置PUSH强制服务器处理数据包中的信息。与其他类型的请求相比,这两种请求都需要服务器处理更多的任务作业。通过用虚假的 PUSH和ACK请求,被攻击目标就会消耗大量的系统资源不断地进行接收缓冲区的清空处理,导致无法正常处理数据,从而造成拒绝服务。
RST/FIN Flood
在TCP连接的终止阶段,通常是通过带有FIN标志报文的四次交互(TCP四次握手)来切断客户端与服务端的TCP连接,但是客户端或服务器其中之一出现异常状况,无法正常完成TCP四次握手以终止连接时,就会使用RST报文将连接强制中断。
在RST/FIN Flood 攻击中,目标服务器会收到大量不存在会话的欺骗性RST或FIN数据包。当服务器试图处理这些无效请求时,攻击试图耗尽服务器的资源它的 RAM、CPU 等。 结果是服务器由于资源耗尽而无法处理合法请求。
攻击者可以利用RST报文的这个特性,发送伪造的带有RST标志位的TCP报文,强制中断客户端与服务端的TCP连接,在伪造RST报文的过程中,服务端的IP地址和端口号是已知的,攻击者还需要设法获取客户端的IP地址和端口号,如果可以窃取这些信息,就可以破坏现有的连接会话。
Spoofed Session Flood(TCP会话)
通过构建一个包含一个SYN包、多个ACK包、一个或多个RST/FIN包的会话,实现对目标服务器的攻击,这种攻击更难以被检测。
TCP Session attack
为了绕过防御,攻击者使用真实IP,这种攻击在创建TCP-SYN会话后,通过延迟 ACK 数据包延长该会话直到超时。会话攻击试图通过这些空会话耗尽服务器的资源。 这反过来又会导致系统完全关闭或系统性能无法接受。
网络资源耗尽型DDoS
ICMP Flood(Ping Flood)
当大量的源ip地址向服务器发送大量欺骗性的Ping数据包的时候,服务器就遭受了Ping Flood攻击。大量的Ping流量包会耗尽所有的网络资源,使所有网络带宽都被占满。
ICMP分片 攻击
这种ICMP洪水攻击通过发送分片后的ICMP小包来耗尽目标服务器的网络带宽。 当目标服务器试图将这些伪造的、没有关联的碎片化 ICMP 数据包进行重组时,也会占用大量计算资源。
CharGEN Flood(放大攻击)
CharGEN(字符生成器协议)于20世纪80年代推出,设计初衷是为了网络测试,并没有严格的访问控制和流量控制机制,在UDP模式下任何人都可以向开放Chargen服务的主机请求服务,这种简单的请求-回复模式使得攻击者可以伪造源发地址信息向Chargen服务发送请求,而Chargen服务并不会验证源发地址的真伪,会向源发地址发送应答包,这导致该服务可被用来进行DOS攻击。RFC 864中给出Chargen应答包的建议大小不超过512字节,但是在实际实现过程中,这个大小并未被严格限制,根据实际测试,在Linux 系统下,对于64字节的无负载UDP Chargen请求,系统回复一个1066字节的UDP 应答报文,流量被放大了15倍,而在Windows系统下使用同样的请求,回复的UDP应答报文长度达3259字节,并产生了分片,流量被放大了50倍。这使得该服务可以被用来进行放大DOS攻击。
SNMP Flood(放大攻击)
简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议,工作在UDP 161端口,用于监控目标设备的操作系统、硬件设备、服务应用、软硬件配置、网络协议状态、设备性能及资源利用率、设备报错事件信息、应用程序状态等软硬件信息。攻击者将一堆包含目标服务器IP的伪造小数据包发送到使用SNMP的路由器或交换机。这些设备配置为答复该源IP。异常流量最终会耗尽网络宽带资源导致服务器停止服务。
NTP Flood(放大攻击)
网络时间协议,英文名称:Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。NTP的目的是在无序的Internet环境中提供精确和健壮的时间服务。
这些对此类设备的欺骗性请求随后用于将 UDP 泛洪作为这些设备的响应发送到目标。 当目标试图理解大量请求时,它最终会耗尽网络资源导致目标服务器离线。
SSDP Flood(放大攻击)
简单服务发现协议(SSDP,Simple Service Discovery Protocol)是一种应用层协议,是构成通用即插即用(UPnP)技术的核心协议之一。简单服务发现协议提供了在局部网络里面发现设备的机制。控制点(也就是接受服务的客户端)可以通过使用简单服务发现协议,根据自己的需要查询在自己所在的局部网络里面提供特定服务的设备。设备(也就是提供服务的服务器端)也可以通过使用简单服务发现协议,向自己所在的局部网络里面的控制点宣告它的存在。SSDP一般使用多播地址239.255.255.250和UDP端口号1900。
利用SSDP协议进行反射攻击的原理与利用NTP服务类似,都是伪造成被攻击者的IP地址向互联网上大量的智能设备发起SSDP请求,接收到请求的智能设备根据源IP地址将响应数据包返回给受害者。随着物联网和智能设备的快速发展和普及,利用智能设备展开DDoS攻击会越来越普遍。
其他的DDoS放大攻击
这些放大攻击与CharGEN、NTP协议类似,通过UDP协议也可以作为反射放大攻击的工具协议:
- SNMPv2
- NetBIOS
- QOTD
- BitTorrent
- Kad
- Quake Network Protocol
- Steam Protocol
ACK分片 Flood
在ACK & PUSH ACK Flood攻击可以通过构造分片ACK数据包消耗目标服务器的宽带资源。 为了执行这种攻击,1500 字节的分段数据包被发送到目标服务器。这些数据包更容易在未被检测到的情况下到达其目标,因为它们通常不会被路由器在 IP 级别重新组合。这使得攻击者可以通过路由设备发送少量包含不相关数据的数据包,从而消耗大量带宽。
UDP Flood
UDP洪水攻击也是很早就出现的一种拒绝服务攻击方式,这种攻击发动简单,有相当多的工具都能够发动UDP洪水攻击,如hping、LOIC等,但UDP洪水攻击完全依靠受控主机本身的网络性能,因此通常对目标宽带资源的消耗并不太大。主要手段是通过UDP大包占满带宽,并且可以使用虚假源IP。
UDP分片 Flood
这是另一种不易检测到的巧妙掩盖的 DDoS 攻击。 此攻击产生的活动类似于有效流量,并且所有流量都保持在限制范围内。这种UDP Flood 攻击发送更大但碎片化的数据包,通过发送更少的碎片化UDP数据包来耗尽更多带宽。当目标服务器试图将这些不相关的、伪造的分段UDP数据包进行重组时,也会耗费大量计算资源。 最终,所有可用资源(计算资源和网络资源)都用尽。但是以网络资源为主。
DNS Flood
攻击目标是DNS服务器,它也是最难检测和预防的 DDoS 攻击之一。 攻击者会发送大量伪造的 DNS 请求数据包,这些数据包看起来与来自大量源 IP 的真实请求没有什么不同。这些DNS请求的域名可以是真的也可以是假的。
VoIP Flood
VOIP ,即指在 IP 网络上使用 IP 协议以数据包的方式传输语音。使用 VOIP 协议,不管是因特网、企业内部互连网还是局域网都可以实现语音通信。一个使用 VOIP 的网络中,语音信号经过数字化,压缩并转换成 IP 包,然后在 IP 网络中进行传输。
通过UDP协议对VoIP服务器发动攻击,攻击者从一个非常大的源IP集发送大量欺骗性的 VoIP 请求数据包。 当 VoIP 服务器充斥着欺骗性请求时,它会在尝试为有效和无效请求提供服务时耗尽所有网络带宽资源。攻击者的IP地址可以是虚假IP地址
Media Data Flood
VoIP Flood理论上也属于Media Data Flood,攻击者从一个非常大的源 IP 集合中发送大量的欺骗性媒体数据包。 当服务器充斥着欺骗性媒体数据请求时,它会耗尽所有可用资源和网络带宽来处理这些请求。这些攻击者的IP地址可以是虚假IP。
DDoS攻击的动机
DDos攻击主要以UDP的放大攻击和基于HTTP的web服务器攻击为主。那么DDoS攻击的主要动机都有哪些呢?
为了赎金
攻击者通过对目标网站或网络服务器持续发动攻击,向网站服务拥有者勒索赎金,实现通过网络攻击牟取利益。有时候还存在一个网站被多个攻击者使用相同的DDoS攻击勒索多次的情况,妥妥的属于一鱼多吃了。
黑客主义
这种攻击动机可能是最难理解的。当攻击者以黑客主义发生攻击时,其目的通常是为了抗议或者声援,同时实现 炫耀和吹嘘的资本。许多黑客行动主义 DDoS 攻击的目标是政府、金融或商业网站。当知名组织发生这种情况时,黑客就会声称对攻击负责并发表声明。
针对性攻击
受雇佣的黑客会受雇与客户,并对特定目标发起攻击,这种行为主要出现在企业之间商业竞争或国家之间的网络对抗行为。
无聊的尝试
有些拥有网络技术和大把时间的黑客会发动一些网络攻击,通过这种攻击测试一下自己的网络攻击能力,同时,也可以看一些自己攻击的目标的防御能力以及被攻破后的反应。这些黑客一般破坏性较小,并没有很强的自主开发能力,一般会被称为脚本小子(script kiddies)。