我与ddos攻击的二三事

PS:本文属于看书后的知识点总结,参考书籍《破坏之王–DDoS攻击与防范深度剖析》

起因:

参加面试,被问了一个DDoS攻击的问题,然后只知道一个SYN泛洪,凉凉,于是去图书馆借了一本DDoS的书研究一下。

ps:关于僵尸网络的知识这里先不写了,以后再攒一篇博客,这里主要总结一下ddos的攻击方法和防御。

DDoS(分布式拒绝服务攻击)的攻击方法:

  1. 直接攻击:使用大量受控主机直接向被攻击目标发送大量的网络数据包,以占满被攻击目标的带宽,并消耗服务器和网络设备的网络数据处理能力,达到拒绝服务的目的。
    i、ICMP(网络控制协议)和IGMP(因特网组管理协议)红洪水攻击:
    攻击者使用受控主机向目标发送大量的ICMP/IGMP报文,进行洪水攻击。这类攻击出现的很早,像起初的死亡之ping就属于这种攻击类型,但是目前这种攻击方法以及不多见了,被攻击目标可以在网络边缘过滤和丢弃ICMP和IGMP数据包就可以进行防御。



    ii、UDP(用户数据包协议)洪水攻击:
    UDP是一种面向无连接的传输层协议,主要用于不要求分组顺序到达的传输,提供面向事务的简单不可靠传输。使用UDP数据报文发动DDoS攻击的原理与ICMP/IGMP洪水攻击相同,通常攻击者会发送大包和小包两种方式进行。
    大包:是指1500字节以上的数据包,他的大小超过了MTU,使用UDP大包攻击能够有效的占用网络接口的传输带宽,并迫使被攻击目标在接受到数据包时进行分片重组,造成网络拥堵,服务器响应变慢。
    小包:是指64字节大小的数据包,他的大小是网络传输数据帧的最小值,再相同流量下,单包体积越小,数据包的数量就越多。数量越多,路由器与交换机对包的校验花费的时间也就越多,这样可以增大网络设备处理数据包的压力,造成网络延时。
    iii、上面两种攻击方法的缺点:方法低效,并且容易被追查到攻击源头。

  2. 反射和放大攻击:反射攻击又称为DRDoS(分布式反射拒绝服务攻击),是指利用路由器、服务器等设备对请求进行应答,从而反射攻击流量并且隐藏攻击来源。
    i、攻击原理:攻击者使用受控主机向反射器发送大量的数据包,这些数据包的特殊之处在于–目的IP地址是反射器,源IP地址是被攻击目标–这样在反射器接收到数据包时就会以为是被攻击目标向自己发送的请求,那么就对数据包进行响应,当大量的响应数据包发送到被攻击目标,就会耗尽他的网络资源,造成拒绝服务攻击。
    ii、放大攻击:放大攻击是一种特殊的反射攻击,特殊之处在于反射器对于网络流量具有放大作用。



    iii、ACK反射攻击:
    在TCP建立连接的时候首先会进行三次握手,在这个过程中,当服务器接收到客户端发来的SYN连接请求之后,会向客户端返回一个ACK应答,利用这个应答就可以进行ACK反射攻击。攻击者只需要将SYN请求包内的源地址换成被攻击目标的IP地址,服务器响应ACK应答时,数据包就会发送到被攻击目标。在发动攻击之前,只需要扫描到大量可作为反射器的服务器,然后发送伪造的SYN数据包便可以,这种攻击能够很好的隐藏攻击源地址。

    iv、DNS(域名解析协议)放大攻击:
    攻击原理:DNS协议的一个特点–响应数据包会大于查询数据数据包–因此攻击者利用普通的DNS查询请求就能够发动放大攻击。
    攻击方法:结合dig和DNS的扩展机制EDNS0,攻击者发送一个大约60字节的请求数据包,然后利用EDNS0机制中的OPT RR字段,将客户端能处理的最大UDP报文大小设置为一个很大的值,并且将请求的源地址伪造为被攻击目标的IP地址,这样DNS服务器就会向被攻击目标发送一个大小扩大了2~50倍的数据包。

    v、NTP放大攻击:
    NTP是指的网络时间协议,是用来使计算机同步化的一种协议,他可以使计算机与时钟源进行同步化并提高精准度的时间校正。在NTP协议的服务器上,通常会实现一系列Mode7的调试接口,而接口中的monlist请求能够获取到与目标NTP服务器进行同步的最后600个客户端的IP地址等信息,这意味着,只需要一个很小的请求包就能够收到大量连续的包含IP地址信息等数据的UDP响应数据包。这也就是NTP放大攻击的原理。
    同时,由于NTP使用的是单包通信,那么可以先伪造源IP地址与NTP服务器进行通信,增加“与NTP服务器通信的客户端的数量”,这样就可以增加进行monlist请求时响应数据的数量

    vi、SNMP放大攻击:
    SNMP是简单网络管理协议,,使用UDP 161端口进行通信。
    在SNMPv2中,存在一个Getbulk请求,该请求会通知设备返回尽可能多的数据,这使得管理程序能够通过发送一次请求就获取大段的检索信息。在这个原理之上,攻击者向广泛存在并开启了SNMP服务的网络设备发送GetBulk请求,使用默认通信字符串作为认证凭据,并伪造攻击源IP地址。设备收到GetBulk请求之后,会将响应结果发送给攻击目标,造成拒绝服务攻击。

  3. 攻击链路:攻击链路有别于上面的攻击方法,他的攻击目标不是互联网边缘的客户端,而是互联网络中的骨干链路带宽资源。
    i、Coremelt攻击:
    攻击过程:首先攻击者要有一个分布广泛的僵尸网络,然后通过路由跟踪等手段判断僵尸主机和被攻击目标的链路关系,根据结果将僵尸主机分为两部分,然后攻击者控制一部分僵尸主机先另外一部分主机进行大数据通信,由于被攻击目标应该是处于通信链路之上,僵尸主机互相通信就会大量占用链路资源,造成拒绝服务攻击。

  4. 攻击系统资源
    首先纠正一个错误:我们通常所说的DDoS服务攻击都被认为是消耗了网络带宽资源,然而事实并不是这样,像我们的SYN泛洪,其实是在消耗主机系统的连接表资源,也就是消耗系统资源。
    i、TCP连接洪水攻击:
    这种攻击是利用TCP通信前的TCP三次握手,利用大量的僵尸主机快速与目标主机建立TCP连接,而每一个TCP连接的信息,目标主机都会保存在一个连接表中,当连接表资源被耗尽时,合法的用户再请求建立TCP连接就会失败。



    ii、SYN泛洪:
    在TCP三次握手期间,当服务器返回了SYN+ACK报文之后,如果客户端没有对服务器进行响应,服务器就会一直重新请求SYN+ACK报文,直到超时断开连接,服务器的这种状态就称之为半开连接。这种半开连接也需要消耗连接表资源,那么如果我们利用僵尸网络向服务器发送大量SYN请求,而其中的源IP地址是伪造的,这样当服务器进行响应时就不会收到回应,服务器就会打开大量的半开连接,直到连接表耗尽。

    iii、PSH+ACK攻击洪水攻击:
    在TCP传递数据的过程中,可以通过设置PSH位置来表示当前数据传输结束,需要服务端进行数据处理。当我们的服务器收到PSH+ACK的请求后会自动认为数据已经传送完毕,然后强制将数据交给应用服务进行处理,并且清空接收缓冲区,那么当我们控制僵尸网络,向服务器发送大量PSH+ACK的报文,服务器就会占用巨大的资源进行数据处理与缓冲区清空,导致正常的数据无法进行处理,造成拒绝服务攻击。

    iv、RST泛洪:
    在TCP通信过程中,如果连接出现异常,通常会发送RST数据包用来强制中断连接,然后RST泛洪的攻击方法就是伪装自己是被攻击目标,向服务器发送大量的RST数据包,强制终端被攻击目标和服务器的连接。因为通常情况下我们不知道通信双方的端口和序列号,所以需要伪造大量的数据包进行盲打,只要有一个RST数据包被服务器接收,连接就会被中断。

    v、其他:
    Sockstress攻击、THC SSL DoS攻击、SSL洪水攻击

  5. 攻击应用资源
    i、DNS QUERY:向DNS服务器发起大量的域名解析请求,因为DNS服务器每做一次解析可能需要很多额外的查询,大量的解析请求就有可能造成正常解析变得缓慢。
    ii、DNS NXDOMAIN:这攻击与上面的区别是查询一个不存在的域名,这样当DNS服务器进行查询的时候没有结果,大量查询也会造成资源浪费。
    iii、HTTP洪水攻击:因为HTTP属于应用层协议,需要在建立TCP连接之后才能进行数据传送,所以不存在伪造源IP地址,造成数据包无法响应。但是我们可以使用HTTP代理来达到这种效果。当我们使用代理向WEB服务器发起HTTP请求之后,立刻断开与代理的连接,转向下一个代理,这样前一个HTTP请求便不会再得到响应。这种攻击需要找到大量的代理,才能发动有效的攻击。

DDoS攻击的防御与治理:

1、从源头治理,打击僵尸网络。
2、地址伪造的治理
3、攻击反射点的治理
4、攻击流量稀释
5、攻击流量清理

ps:总结写的很简单,建议看原书自行理解!!!

你可能感兴趣的:(乱七八糟的知识)