目录
  1. 1. SYN Flood
  2. 2. UDP Flood/DNS Query Flood
  3. 3. CC攻击
  4. 4. 慢速连接攻击
  5. 5. DRDOS(分布式反射DOS攻击)
  6. 6. 链路泛洪

DDOS(Distributed Denial of Service),分布式拒绝服务攻击是目前互联网上主流的攻击方式,也是最难防御的攻击方式。之前就已经有了解,只是最近刚刚好整理相关方面的资料,顺便简单记录一下。

SYN Flood

SYN Flood既SYN 洪水攻击,是DDOS攻击方式中最为经典的一种,利用TCP三次握手的设计缺陷,通过发送含有虚假源IP地址的SYN报文,使得服务端永远无法完成三次握手,一直处于SYN_RECV状态无法释放资源,直到占满系统协议栈等待队列无法新建连接导致拒绝服务。(关于TCP三次握手详见这里)

  1. client发送SYN报文(虚假源IP地址)
  2. server接受到包含虚假源IP地址的SYN报文后,返回SYN+ACK报文进入SYN_RECV状态等待client的ACK报文
  3. client接受到server的SYN+ACK报文,返回ACK报文。由于攻击者使用的SYN报文为虚假源IP地址,所以client是无法收到SYN+ACK报文的,故此步骤无法执行,从而造成server一直等待此步的ACK报文。

防御:SYN Flood可以通过调整内核的参数对其攻击起到一定的缓解作用,但修改内核参数的做法仅在攻击流量小的时候才有效果,当攻击流量大时是抵挡不住的。

  • /proc/sys/net/ipv4/tcp_syncookies:开启SYN Cookie(1开启)
  • /proc/sys/net/ipv4/tcp_max_syn_backlog:SYN最大队列长度
  • /proc/sys/net/ipv4/tcp_synack_retries:SYN+ACK最大重试次数

 除了调整内核参数外,对于SYN Flood常见的防御方法有如下三种:

  • SYN Cookies:当启用了SYN Cookies后server在收到client的SYN包并回复SYN+ACK包时,并不会专门分配存储空间而是根据client的SYN包计算出cookie值,此cookie值将代替原有随机产生的序列号作为SYN+ACK包的序列号回复给client,当client回复ACK包时,核对cookie(SYN+ACK序列号)和确认序号,匹配则完成三次握手,不匹配则丢弃。
  • SYN Proxy:SYN Proxy是在client和server之间做一个”代理转发”。proxy先伪装成server接受client的SYN握手请求,当成功建立三次握手后(表明client是正常而非攻击者)proxy在伪装成client向server进行三次握手建立连接,然后转发数据。如此一来,一次通信就由原来的三次握手变成了六次握手而且序列号也需要做相应的调整。
  • 首包丢弃:对client首次发送的SYN进行丢弃处理,如果是正常client会在一定时间内重新尝试握手,假若等待超时后没收到重传的SYN包则判断此client非法,加入黑名单。

UDP Flood/DNS Query Flood

UDP Flood通常是制造大量伪造源地址的UDP包对提供使用UDP协议的服务器进行流量攻击致使服务器及其网络瘫痪,而其中又以DNS Query Flood攻击最为常见。DNS Query Flood主要是针对DNS服务器,通过向DNS服务器发起大量的域名查询请求从而让服务器或其网络瘫痪,为使攻击更有效果,攻击者会伪装源IP、源端口、查询ID等,对需要解析的域名会进行随机的伪造从而降低DNS缓存的命中率达到攻击效果最大化。

CC攻击

CC攻击其实是HTTP Flood攻击,通过对Web服务器发起大量真实的HTTP请求使得服务器无法同时间处理并发量巨大的请求而导致服务瘫痪来达到攻击目的。粗暴的CC攻击是利用大量真实并发的HTTP请求来达到效果,有点以本伤人的味道。然而简单粗暴的CC攻击需要大量的”肉鸡”或匿名代理服务器,为了以最小的攻击量达到最大的攻击效果,针对不同Web服务器业务的针对性CC攻击杀伤力才巨大,同时也是最难防御的。针对性的对攻击目标Web服务进行分析,找出业务上的缺陷,如某个请求会触发数据库查询等,针对性的对缺陷进行攻击。CC攻击之所以难防御就是因为其不具备容易防御的攻击特性。
防御:对于CC攻击目前并没有一个普遍且有效的防御方式,只能缓解而无法彻底防御。用好缓存是较为有效的办法,比如图片等静态资源可以使用CDN做缓存,对于不复杂的数据查询可用Redis、Memcache做缓存减少对数据库的查询压力,减少业务上的缺陷提高并发能力,优化SQL性能等等。

慢速连接攻击

 一般的DDOS攻击都是以大流量为主,通过发送大量报文将目标服务器或网络压垮导致服务瘫痪无法正常提供服务。然而,慢速连接攻击却反其道而行之,攻击者会操控肉鸡先与目标服务器正常建立HTTP连接,然后将HTTP HEADERConnection设置为keep-alive并设置一个较大的content-length,每隔一段时间只发送几个字节的数据,服务器一直等待接收剩余数据而保持连接,此种慢速连接不断累积增加直到导致新的连接请求无法被处理,以此达到让服务器拒绝服务的目的。
慢速连接攻击发展至今已有很多变种,常见的有以下三种类型:

  • 慢速Header:服务器在处理HTTP请求之前需要先接收请求的HTTP Header,而HTTP协议规定,一个正常的HTTP请求要以\r\n\r\n结尾用以表示请求结束,服务器可以开始正式处理此HTTP请求。慢速Header利用此特性,慢速不断的发送只带有\r\nHTTP Header,由于服务器没有收到\r\n\r\n结尾的HTTP Header便一直等待。
  • 慢速Body:攻击者会先建立一个正常的HTTP连接,然后发起一个HTTP POST请求,此请求的Content-length设置为较大的值,再以很低的速度发送很小的数据,使得服务器一直保持连接无法释放资源。
  • 慢速Read:攻击者在建立正常HTTP连接后会发送一个Read请求(比如请求下载一个较大的文件),然后故意通告一个极小的TCP接收窗口(甚至通告为零窗口),让服务器认为此请求的客户端繁忙,服务器便会以非常缓慢的频率和数据量很小的发送请求的文件,使得服务端资源一直被占用而无法释放。

防御:针对慢速连接攻击的特点,常见的防御思路有:

  • 限制HTTP请求的最大时间,超过最大连接时间则判断为异常请求。
  • 周期性统计传输报文数量,一个周期内传输的报文数量过少则判断为异常请求。

DRDOS(分布式反射DOS攻击)

DRDOS攻击有点借刀杀人的味道。攻击者伪装被攻击目标的IP,向开放特定服务的服务器发出请求,服务器接收到请求后根据源IP(攻击者伪装)响应请求内容给被攻击目标。大致过程如下所示:

1
攻击者————>(发送源IP为被攻击目标IP的请求包)————>开放特定服务的服务器————>(服务器接收请求,根据包的源IP响应请求给被攻击目标)————>被攻击目标

 一开始这种攻击方式并没有什么太吸引人的地方,攻击力也不强。一般的TCP反射,由于被攻击目标和开放特定服务器之间并没有建立TCP握手,在被攻击目标收到响应会立刻回复RST将连接重置。最主要的一点是攻击者制造的攻击流量和被攻击目标接收的流量是一样的。所以一开始DRDOS并没有流行起来,但一旦DRDOS攻击被附加了流量放大属性后,其攻击的威力瞬间提升,攻击者只需要用较小的流量便能获得几倍或几十倍的攻击流量。
 目前DRDOS攻击常见的利用协议有:NTP、Chargen、DNS、SNMP等等。大多都是基于UDP的反射型攻击,基于TCP的反射型攻击也有但目前的主流还是集中在UDP类型的反射攻击上。

  • NTP反射流量放大:DRDOS攻击利用NTP协议,主要是NTP协议有一个monlist功能,此功能是列出最近同步过时间的600个主机列表。所以只有攻击者伪装IP发送一个较小的monlist请求,NTP服务器便会响应一个包含600个主机列表的大数据包,攻击者以此来进行流量的反射放大。
  • DNS反射流量放大:DNS协议的利用主要是使用ANY类型的域名查询请求。

防御:DRDOS攻击最主要的威胁还是在附加流量放大后,本质上也是流量攻击的一种。对于大流量的攻击,需要先有较大的处理流量的带宽。其次是利用CDN、智能DNS等手段将流量分散。伴随流量放大的DRDOS攻击会有一个明显的攻击特征,比如利用NTP流量放大攻击,被利用的NTP服务的源端口一般都是UDP 123;利用DNS流量放大的攻击,一般是UDP 53。可以在网络边缘针对源端口进行流量的拦截限制。

链路泛洪

 链路泛洪的攻击方式并不直接攻击目标对象而是转为击垮目标的上级网络链路为目的。有时候攻击目标防御措施较为完善,不易攻破。那么攻击者会选择对目标的上级网络链路进行攻击,击溃或堵塞目标的上级网络链路使得正常的流量无法到达目标,从而间接的达到让目标无法提供服务器的目的。

Powered: Hexo, Theme: Nadya remastered from NadyMain