ddos技术漫谈
分类
TCP
针对tcp的攻击总体上可分为以下几种:
-
Flood类攻击
攻击者向目标发送海量的 SYN、ACK、FIN 或 RST 报文,占用被攻击目标的系统资源,使其无法提供正常服务。对这种攻击基本上没有完美的解决方案。
-
连接耗尽类攻击
攻击者与被攻击目标完成三次握手后便不再发送报文,但一直维持连接,或立刻发送FIN或RST报文,在断开连接后快速发起新的连接等,消耗TCP连接资源
-
异常报文类攻击
发送不符合规范的报文,例如TCP报文中的标志位全部置0或置1,以引起目标的崩溃
SYN Flood
介绍
SYN Flood 是经典的DDOS攻击方式之一,攻击者发送大量SYN包,且不进行回应,以消耗服务器的连接数。因为攻击者只需要发送一个SYN包,所以包中的任何信息均可以是伪造的,这种攻击从报文本身上来说并没有明显的攻击特征。不过我们可以从SYN报文建立连接的行为如手,判断其是否是可信。
防御措施
源认证
Anti-DDoS 系统在收到SYN报文时,直接返回seq序号正确的 SYN-ACK 报文,若客户端返回了正确序号的 ACK,则说明该连接是可信的,可以把该ip加入白名单,返回 RST 报文,让其重新连接,后续源报文ip地址命中白名单的直接通过。
不过这样还是会带来一些问题
- 在受到攻击时,网络中存在攻击者所发送的海量的SYN数据包,同时还会存在 Anti-DDoS 系统所反弹出去的海量的 SYN-ACK 数据包,使网络拥塞更加严重。
- 当判断出某个连接是可信的时,会将该ip加入白名单。若攻击者利用这些白名单内的ip 进行 SYN Flood,会使该防御措施失效。
首包丢弃
这个措施主要是为了减少反弹的 SYN-ACK 报文对网络拥塞的影响。TCP作为可靠连接,存在超时重传的机制,可利用这一点,对收到的SYN报文直接丢弃,然后观察客户端是否重新连接。如果客户端重传了SYN报文,则再进行源认证。
SYN-ACK/ACK/FIN/RST Flood
介绍
攻击者向受害主机发送大量的 SYN-ACK/ACK/FIN/RST 报文,使目标主机忙于回复这些凭空出现的报文,导致资源耗尽,无法响应正常的请求。
防御措施
源认证
以 SYN-ACK 为例:
Anti-DDoS 系统向发送 SYN-ACK报文 的源地址发送 SYN 包,若目标响应了正确序号的 SYN-ACK 报文,则说明目标是一个真实存在的IP,把该ip加入白名单,对后续的 SYN-ACK 直接放行。
当然,这种方案问题也很多,比如攻击者发送报文中的源ip使用的是本身就是存活的ip,以及 Anti-DDoS 系统在收到 海量 SYN-ACK 报文时同样会反弹海量的 SYN 报文。
会话检查
由于这些报文都是tcp连接过程中的报文,所以可以通过会话检查来确定该报文的真实性。以 FIN/RST 为例,若没有命中会话,则直接丢弃,若该会话是由 SYN/SYN-ACK 报文创建的,则允许该 FIN/RST 通过,若由其他报文创建的(例如ACK报文),则需要进一步检查报文序号是否正确,序号不正确的报文则被丢弃。
TCP连接耗尽
TCP 是面向连接的协议,通信双方必须保持连接状态,并通过 确认、重传、滑动窗口等机制,保证数据的可靠性和稳定性。攻击者可根据上述的TCP的特点,利用 TCP 连接消耗被攻击目标的系统资源。
防御方可通过异常会话的检测来防御此类攻击。例如某个源IP在指定时间间隔内,发起的TCP连接数量超过阈值,则将该IP加入黑名单。同样的攻击者可能还会有其他攻击手段,例如构造大量并发连接、设置很小tcp窗口、发送重传报文、发送很小报文维持连接状态,其目的都是消耗目标的系统资源。总体来说,防御时应该基于会话机制,通过新建连接速率的检查、并发连接检查、异常连接检查,将源ip加入黑名单
TCP异常流量
TCP 报文中的标志字段,按照协议要求有固定的用法,而攻击者可能不遵守规范,随意设置标志位。防御方在遇到这些异常流量时可直接丢弃相关报文(依照实际需要可选择是否记录异常行为)
UDP
UDP的攻击主要分为两类,比较传统的是控制僵尸主机直接发送大量的UDP报文给受害服务器,这种对于攻击者所掌握的机器资源、网络资源由较大的要求;另外一种是利用互联网上各种开放服务的缺陷进行反射放大攻击,这种经常被攻击者所利用,所以UDP的防御重点应该聚焦在这上面。
下面举几个反射放大的例子:
- NTP反射放大
- SNMP反射放大
- Chargen反射放大
- TFTP反射放大
- NetBIOS反射放大
- Steam反射放大
- Portmapper反射放大
- DNS反射放大
- SSDP反射放大
- QOTD反射放大
- Quake反射放大
- Wordpress反射放大
- SQL反射放大
- RIPV1反射放大
HTTP
HTTP慢速攻击
利用http协议的交互机制,攻击者持续与目标建立长时间的连接,导致目标资源耗尽,无法提供正常服务。
例如 slow header,攻击者使用 get、post与目标建立连接,然后持续发送不包含结束符的http头部报文,而目标服务器会一直等待请求头中的结束符,导致连接被占用。攻击者控制大量僵尸主机向目标发起这种攻击,导致服务端资源耗尽,无法提供正常服务。这种攻击特征比较明显,可以依据这些攻击特征进行检测,将恶意客户端ip加入黑名单。
参考
华为 Anti-DDoS 技术漫谈