DDos攻击·单包攻击与防御

一. 单包攻击
1. 单包攻击简介
单包攻击是最常见的DDoS攻击,其中攻击者尝试利用单个网络数据包(通常是恶意构造的数据包)来实施攻击,而不是发送大量数据或建立持续性的连接。
这种类型的攻击通常利用系统或应用程序的漏洞或弱点,通过发送精心制作的数据包来触发漏洞,以实现攻击者的恶意目的。
单包攻击的特点包括:
- 简单性:攻击者只需发送一个特定的数据包,而不需要复杂的攻击工具或多步骤攻击过程。
- 快速性:攻击可以在非常短的时间内完成,因为只涉及一个数据包的发送。
- 危险性:尽管攻击方法简单,但它可以导致严重后果,如系统崩溃、服务中断、数据泄漏或未授权访问。
- 利用漏洞:攻击者通常会寻找系统或应用程序中的漏洞,然后构造特定的数据包,以触发这些漏洞。
2. 单包攻击分类
单包攻击主要分为三类:
- 扫描窥探攻击
- 畸形报文攻击
- 特殊报文攻击
(1) 扫描窥探攻击
顾名思义,扫描窥探攻击主要是进行攻击前的信息准备工作,通常会扫描一些目标端口,操作系统,使用的服务等等
主要的攻击手段有“IP地址扫描攻击”,“端口扫描攻击”
I. IP地址扫描攻击
“IP地址扫描攻击”主要是来判断目标地址是否存活,其实就是我们平时使用的ping
和tracert
命令,通过发送ICMP报文,看是否有响应包看判断目标是否存活
ping
命令
tracert
命令
或者是使用TCP或UDP对地址发起连接,比如工具tcping
通过判断是否有应答报文,以确定哪些目标系统确实存活着并且连接在目标网络上。
II. 端口扫描攻击
然后就是“端口扫描攻击”,这个没啥好讲的,端口扫描有啥好讲的,天天扫,熟悉的很
(2) 畸形报文攻击
畸形报文攻击通常指攻击者发送大量有缺陷的报文,从而造成主机或服务器在处理这类报文时系统崩溃。具体有
- Smurf攻击
- Land攻击
- Fraggle攻击
- IP Fragment 攻击(IP分片报文检测)
- IP Sppfing攻击(IP欺骗)
- Ping of Death攻击(死亡ping)
- TCP Flag攻击(TCP报文标志位攻击)
- Teardrop攻击(泪滴攻击)
- WinNuke攻击
- ARP欺骗
I. Smurf攻击
Smurf攻击应该是最古老的DDoS攻击了,比如说受害者是A,攻击者会伪造A的地址,向广播地址发送ICMP echo Request包,然后广播地址会向网络内的所有机器发包,当这些机器收到后,会向A发送ICMP响应包,这就相当于网络内的所有机器都在向A发包,这样A的网络就会被淹没。
不过这个玩意现在已经没用了。
II. Land攻击
Land攻击挺有意思,他是利用回环地址来自己打自己,我们先来看一个TCP SYN报文
可以看到,源地址是192.168.129.192
,目标地址是111.43.169.68
。当发送第一个SYN包后,第二个SYN ACK的包就会根据第一个包的源、目的地址,做一个调换。也就是说第二个包的源地址是111.43.169.68
,目的地址是192.168.129.192
,这样循环下去,完成两端之间的信息传送。
不过Land攻击做了个手脚,第一个包的源地址是192.168.129.192
,目的地址也是192.168.129.192
,这样第二个包的源地址还是192.168.129.192
,目的地址还是192.168.129.192
,这就相当于一直给自己发包。
由于自己给自己建立连接请求的数据包去向是不合法的,所以会导致系统崩溃。
III. Fraggle攻击
Fraggle攻击类似于Smurf攻击,不过Smurf攻击用的是ICMP,而Fraggle攻击用的是UDP。
这里涉及了两个协议,Chargen协议和Echo协议。
先说Chargen协议。这玩意是来调试TCP 或UDP 协议程序的,默认端口为19,分为基于TCP 和UDP 两种方式,TCP 方式下建立连接后,服务器会不断传送任意字符到客户端,直到客户端关闭连接。UDP 方式下每当服务器收到客户端的一个UDP数据包后向客户端返回一个数据包,长度为0~512 字节之间随机值,数据包的负载可以是任意字符。
Chargen协议的设计初衷是为了网络测试,并没有严格的访问控制和流量控制机制,在UDP 模式下任何主机都可向开放chargen服务的主机请求服务,注意,是任意主机都可以!任意哎!!!
这种简单的 请求-回复 模式使得攻击者可以伪造源发地址向chargen服务发送请求,而chargen服务并不会验证源发地址的真伪,则向源发地址发送应答包,这导致该服务可被用来进行DOS攻击。
然后来说说Echo协议,这个协议和它的名字一样,“回声”。当客户端向服务器发送数据时,服务器会将这些数据原封不动地返回给客户端,他的默认端口是7。
Fraggle攻击的原理就是,利用这两个协议进行骚操作
现在有一个攻击目标A,攻击者可以向A所在的网络发送UDP报文,报文的源地址为A主机的地址,目的地址为被攻击主机所在子网的广播地址或子网网络地址,目的端口号为7或19。这样网络中所有开启Chargen协议或Echo协议的主机,都会向被攻击主机发送回应报文,从而产生大量的流量,占满带宽,导致受害网络的阻塞或受害主机的崩溃。
这里还有一个问题,就是网络里要是没有启动这两个协议的主机怎么办?没关系,因为没启动话,也产生一个ICMP不可达消息,因而仍然消耗带宽。若攻击者将UDP报文的源端口改为19,目的端口为7,这样会不停地产生大量回应报文,其危害性更大。
IV. IP Fragment 攻击
这个叫IP分片攻击,分片是啥?为什么要分片?怎么分片?
讲之前先讲一个东西,MTU,最大传输单元。它限制了数据帧的最大长度,不同的网络类型都有一个上限值。
那么怎么看玩意?我们先来看看专门的命令
1 | netsh interface ipv4 show subinterfaces |
可以看到全是1500,说明我们发包时最多只能发1500字节的数据,但是实际上的MTU会比这个数据小很多
我们来试试,我们向www.trtyr.top
发送一个不可分割的1500字节的ICMP包
可以看到,1500字节的数据不行。
我们用二分法可以得到我这里具体的MTU是1472
所以,如果数据大于1472就会被分片,分片主要是IP报文里的DF(不分段)和MF(更多分段)控制的,如果DF = 0
就代表可以分片,MF = 1
代表后面还有分片,那么这时候设置DF = 1 ; MF = 1
就代表不可以分片,后面还有分片,这样就成了一个逻辑BUG,从而导致主机接收报文时产生故障,报文处理异常,甚至导致主机崩溃。
当然除了DF = 1 ; MF = 1
这种情况以外,还有DF位为1,而分段偏移(Offset) > 0
;DF位为0,而分片Offset + Length > 65535
这些情况。
V. IP Sppfing攻击
IP欺骗攻击是一种常用的攻击方法,同时也是其他攻击方法的基础。我所知的IP欺骗的主要用途有“僵尸网络”,“DDoS”和“MITM攻击”,当然这个DDoS包括很多哈。不过这玩意对IPv6无效。
IP协议依据IP头中的目的地址来发送IP报文,如果IP报文是本网络内的地址,则被直接发送到目的地址;如果该IP地址不是本网络地址,则被发送到网关,而不对IP包中提供的源地址做任何检查,默认为IP包中的源地址就是发送IP包主机的地址。攻击者通过向目标主机发送源IP地址伪造的报文,欺骗目标主机,从而获取更高的访问和控制权限。该攻击导致危害目标主机的资源,信息泄漏。
嗯……可能有点听不懂,这里有张图
可以看到,由攻击者向Server发包,本来源地址是Bot,但是源地址改成了Victim。这样Server得到数据包后会认为这个包是Victim发的,这样Server就会向Victim发送响应包。
那么这样看的话,IP欺骗就有多种可操行为了,DDoS的时候可以用IP欺骗来改源IP,从而避免被返溯源;在打内网的时候,可以利用IP欺骗来伪造内网的高级成员,从而得到更高的权限。
不过在获取权限那里又有了一个新问题,就是发送一个更改源地址的IP包后,Server是会向ictim发包,并不会向Bot发包,那么Bot就无法得到响应,那么怎样让Server向攻击者发包呢?这就是中间人攻击,这里就有点多了,本篇文章不做过多讨论。
VI. Ping of Death攻击
路由器对包的大小是有限制的,IP报文的长度字段为16位,即IP报文的最大长度为65535。如果遇到大小超过65535的报文,会出现内存分配错误,从而使接收方的计算机系统崩溃。
攻击者只需不断的通过Ping命令向攻击目标发送超过65535的报文,就可以使目标计算机的TCP/IP堆栈崩溃,致使接收方系统崩溃。
VII. TCP Flag攻击(TCP报文标志位攻击)
TCP报文标志位包括URG、ACK、PSH、RST、SYN、FIN。攻击者通过发送非法TCP flag组合的报文,受害主机收到后进行判断识别,消耗其性能,甚至会造成有些操作系统报文处理异常,主机崩溃。不同的系统对这些标志位组和的应答是不同的,可用于操作系统探测。
VIII. Teardrop攻击
大名鼎鼎的泪滴攻击,顾名思义,它是一种令人落泪的攻击手段,可见其破坏威力很强大。
对于一些大的IP数据包,为了迎合链路层的MTU(Maximum Transmission Unit)的要求,需要传送过程中对其进行拆分,分成几个IP包。在每个IP报头中有一个偏移字段和一个拆分标志(MF),其中偏移字段指出了这个片段在整个IP包中的位置。
如果攻击者截取IP数据包后,把偏移字段设置成不正确的值,接收端在收到这些分拆的数据包后,就不能按数据包中的偏移字段值正确组合出被拆分的数据包,这样,接收端会不停的尝试,以至操作系统因资源耗尽而崩溃。
X. WinNuke攻击
WinNuke攻击又称“带外传输攻击”,它的特征是攻击目标端口,被攻击的目标端口通常是139,而且URG位设为1,即紧急模式
WinNuke攻击是利用Windows操作系统的漏洞,向端口发送一些携带TCP带外(OOB)数据报文,但这些攻击报文与正常携带OOB数据报文不同,其指针字段与数据的实际位置不符,即存在重合,这样Windows操作系统在处理这些数据时,就会崩溃。还有一种是IGMP(Internet Group Management Protocol)分片报文。一般情况下IGMP报文是不会分片的,很多系统对IGMP分片报文的处理也都存在问题。
XI. ARP欺骗
我写过一篇文章,可以看看
(3) 特殊报文攻击
特殊控制报文攻击也是一种潜在的攻击行为,不具直接的破坏行为,攻击者通过发送特殊控制报文探测网络结构,为后续发送真正的攻击做准备。
I. 超大ICMP报文攻击
超大ICMP报文攻击是指利用长度超大的ICMP报文对目标系统进行攻击。对于有些系统,在接收到超大ICMP报文后,由于处理不当,会造成系统崩溃或重启。
II. ICMP不可达攻击
不同的主机对ICMP不可达报文的处理方式不同,有的主机在收到网络或主机不可达的ICMP报文后,对于后续发往此目的地址的报文直接认为不可达,从而切断了目的地与主机的连接。
攻击者利用这一点,伪造不可达ICMP报文,切断受害者与目的地的连接,造成攻击。
III. Tracert报文攻击
Tracert报文攻击是攻击者利用TTL为0时返回的ICMP超时报文,和到达目的地址时返回的ICMP端口不可达报文来发现报文到达目的地所经过的路径,它可以窥探网络的结构。
IV. ICMP重定向报文攻击
V. 源站路由选项的IP报文攻击
在IP路由技术中,一个IP报文的传递路径是由网络中的路由器根据报文的目的地址来决定的,但也提供了一种由报文的发送方决定报文传递路径的方法,这就是源站选路选项。
源站选路选项允许源站明确指定一条到目的地的路由,覆盖掉中间路由器的路由选项。源站选路选项通常用于网络路径的故障诊断和某种特殊业务的临时传送。
由于IP源站选路选项忽略了报文传输路径中的各个设备的中间转发过程,而不管转发接口的工作状态,可能被恶意攻击者利用,刺探网络结构。
VI. 路由记录选项IP报文控制
在IP路由技术中,提供了路由记录选项,用来记录IP报文从源地址到目的地址过程中所经过的路径,也就是一个处理此报文的路由器的列表。
IP路由记录选项通常用于网络路径的故障诊断,但也会被恶意攻击者利用,窥探网络结构。
VII. 时间戳选项IP报文控制
在IP路由技术中,提供了时间戳选项,记录IP报文从源到目的过程中所经过的路径和时间,也就是一个处理过此报文的路由器的列表。
IP时间戳选项通常用于网络路径的故障诊断,但也会被恶意攻击者利用,窥探网络结构。
二. 单包攻击防御
单包攻击时DDoS的一种,在防御DDoS中有个产品叫做Anti-DDoS
,也就是所谓的DDoS高防,是阿里云提供的DDoS攻击代理防护服务
我们下面的防御就是基于DDoS高防的防御
1. 扫描窥探攻击
(1) IP地址扫描攻击
Anti-DDoS设备或NGFW对进入的TCP、UDP、ICMP报文进行检测,当某源IP地址发送报文的目的IP地址与此源IP地址发送的前一个报文的目的IP地址不同时,则记为一次异常,当异常次数超过预定义的阈值时,则认为该源IP地址的报文为IP地址扫描攻击,并将该源IP地址加入黑名单。
配置命令:
1 | firewall blacklist enable |
(2) 端口扫描攻击
Anti-DDoS或NGFW设备对进入的TCP、UDP、ICMP报文进行检测,根据源IP地址获取统计表项的索引,如果目的端口与前一报文不同,将表项中的报文个数加1;如果报文的个数超过设置的阈值,记录日志,并根据配置决定是否将源IP地址加入黑名单。
配置命令:
1 | firewall blacklist enable |
2. 畸形报文攻击
(1) Smurf攻击
既然Smurf是用ICMP向广播地址发起请求,这里ICMP正常情况下需要向广播地址发包吗?不需要!所以我们可以直接检测ICMP的目的地址是否是广播地址,如果是广播地址就给他丢弃
Anti-DDoS / NGFW设备检查ICMP请求报文的目的地址是否为网络的A、B、C类广播地址,如果是则丢弃。并记录攻击日志。
配置命令:
1 | firewall defend smurf enable |
(2) Land攻击
Land是自己打自己,那么可以直接检查TCP报文的源地址和目的地址是否相同,或者TCP报文的源地址是否为环回地址,如果是则丢弃。
配置命令:
1 | firewall defend land enable |
(3) Fraggle攻击
既然Fraggle攻击用的是UDP协议,那么可以检测UDP协议的报文。而且他是利用Chargen协议和Echo协议,这两的端口号是7和19,那么我们可以让设备对进入的UDP报文进行检测,若目的端口号为7或19,则直接拒绝,并将攻击记录到日志。
配置命令:
1 | firewall defend fraggle enable |
(4) IP Fragment 攻击
IP分片攻击主要是修改DF和MF的值来造成一个逻辑BUG,那么我们可以检测那些BUG情况,设备检测到报文控制位是下列情况之一时,则直接丢弃并记录攻击日志:
- DF位为1(表示不能对数据包分段),而MF位也为1(表示还有更多的分段)。
- DF位为1,而分段偏移(Offset) > 0。
- DF位为0,而分片Offset + Length > 65535。
配置命令:
1 | firewall defend ip-fragment enable |
(5) IP Sppfing攻击
IP欺骗防不了,但可以阻止一下中间人攻击。设备对报文的源IP地址进行路由表反查,检查路由表中到源IP地址的出接口和报文的入接口是否一致。如果不一致,则丢弃该报文,并记录攻击日志。
配置命令:
1 | firewall defend ip-spoofing enable |
这里还有一个专门针对源地址欺骗攻击的技术,URPF技术,不过由于篇幅原因,不做过多讨论。
(6) Ping of Death攻击
死亡ping的防御就有点简单了,设备会检测报文的大小是否大于65535字节,对大于65535字节的报文直接丢弃,并记录攻击日志。
配置命令:
1 | firewall defend ping-of-death enable |
(7) TCP Flag攻击(TCP报文标志位攻击)
检查TCP报文的各个标志位,若出现以下情况,则视为攻击,予以丢弃并记录攻击日志:
- 6个标志位全为1。
- 6个标志位全为0。
- SYN和FIN位同时为1。
- SYN和RST位同时为1。
- FIN位为1,而ACK位为0。
(8) Teardrop攻击
泪滴攻击就是改偏移字段,那么我们可以对接收到的分片数据包进行分析,计算数据包的偏移量是否有误,如果有误则丢弃,并记录攻击日志。
配置命令:
1 | firewall defend teardrop enable |
(9) WinNuke攻击
WinNuke攻击就打139端口,而且URG位还是1。防御也挺简单的。设备将丢弃目的端口为139、URG位为1且URG指针不为空的报文,并记录攻击日志。
另外,如果收到IGMP分片报文也会认为受到了WinNuke攻击,而丢弃报文并记录攻击日志。
(10) ARP欺骗
ARP欺骗是让机器自动学习,改ARP表的。那么我们要么可以直接IP - MAC绑定,要么直接不让你机器学习,即ARP表无法更改。
3. 特殊报文攻击
(1) 超大ICMP报文攻击
当启用“超大ICMP报文控制”时,还需要设置报文长度,当设备收到的ICMP报文长度超过该值时将丢弃该报文,并记录攻击日志。
配置命令:
1 | firewall defend large-icmp enable |
(2) ICMP不可达攻击
启用ICMP重定向报文攻击防范后,设备将直接丢弃ICMP重定向报文,并记录攻击日志。
配置命令:
1 | firewall defend icmp-unreachable enable |
(3) Tracert报文攻击
启用Tracert报文攻击防范后,设备将检测到的超时的ICMP报文或UDP报文,或者目的端口不可达报文,直接丢弃,并记录攻击日志。
配置命令:
1 | firewall defend tracert enable |
(4) ICMP重定向报文攻击
启用ICMP重定向报文攻击防范后,设备将直接丢弃ICMP重定向报文,并记录攻击日志。
配置命令:
1 | firewall defend icmp-redirect enable |
(5) 源站路由选项的IP报文攻击
启用源站选路选项IP报文控制后,设备会检测收到的报文是否设置IP源站选路选项。如果是则丢弃该报文,并记录攻击日志。
配置命令:
1 | firewall defend source-route enable |
(6) 路由记录选项IP报文控制
启用路由记录选项IP报文控制后,设备将检测收到的报文是否设置IP路由记录选项。如果是则丢弃该报文,并记录攻击日志。
配置命令:
1 | firewall defend route-record enable |
(7) 时间戳选项IP报文控制
启用时间戳选项的IP报文控制后,设备将检测收到的报文是否设置IP时间戳记录选项。如是则丢弃该报文,并记录攻击日志。
配置命令:
1 | firewall defend time-stamp enable |