SYN ACK UDP ICMP 碎片攻击

时间:2022-09-02 18:40:01

     不太了解碎片攻击,UDP碎片攻击应该是IP碎片攻击的一种吧,这篇文章亮了。

1SYN 攻击:SYN 就是不停发送连接确认信息直到对方因为信息太多无法处理而死机或者无法提供服务

2ACK 攻击:ACK 就是不停发送连接请求信息直到对方因为信息太多无法处理而死机或者无法提供服务

3UDP 淹没攻击

 

 UDP Flood Attack

 

UDP 淹没攻击是导致基于主机的服务拒绝攻击的一种。UDP 是一种无连接的协议,而且它不需要用任何程序建立连接来传输  数据。当攻击者随机地向受害系统的端口发送 UDP 数据包的时候,就可能发生了 UDP 淹没攻击。当受害系统接收到一个 UDP  数据包的时候,它会确定目的端口正在等待中的应用程序。当它发现该端口中并不存在正在等待的应用程序,它就会产生一个  目的地址无法连接的 ICMP 数据包发送给该伪造的源地址。如果向受害者计算机端口发送了足够多的 UDP 数据包的时候,整  个系统就会瘫痪。

 

 UDP 淹没攻击的防范

 

  在网络的关键之处使用防火墙对来源不明的有害数据进行过滤可以有效减轻 UDP 淹没攻击。此外,在用户的网络中还应采取        如下的措施:

   禁用或过滤监控和响应服务。

   禁用或过滤其它的 UDP 服务。

 

  如果用户必须提供一些 UDP 服务的外部访问,那么需要使用代理机制来保护那种服务,使它不会被滥用。

 

  对用户的网络进行监控以了解哪些系统在使用这些服务,并对滥用的迹象进行监控。

 

  对于一些小型的游戏服务器, 私服服务器,, 可以直接用防火墙添加规则的方法屏蔽掉!!@

 UDP Port Scan 攻击只是对你机器进行扫描

 

  谈不上攻击 只是搜集情报

 

  只要禁止ping 或者icmp 等命令别人就扫不到你了

 

4ICMP 攻击:

ICMP IP 层用于向一台主机发送单向的告知性消息。在 ICMP 中没有验证机制,这就导致了使用 ICMP 可以造成服务拒绝的攻击,或者可以支持攻击者截取数据包。

下面列出了几种与 ICMP 协议相关的攻击类型:

ICMP DOS 攻击:攻击者使用 ICMP “ 时间超出 目标地址无法连接 的消息。这两种 ICMP 消息都会导致一台主机迅速放弃连接。攻击只需伪造这些 ICMP 消息中的一条,并发送给通信中的两台主机或其中的一台,就可以利用这种攻击了。接着通信连接就会被切断。当一台主机错误地认为信息的目标地址不在本地网络 中的时候,网关通常会使用 ICMP “ 转向 消息。如果攻击者伪造出一条 转向 消息,它就可以导致另外一台主机经过攻击者主机向特定连接发送数据包。

ICMP 数据包放大(或 ICMP Smurf ):攻击者向安全薄弱网络所广播的地址发送伪造的 ICMP 响应数据包。那些网络上的所有系统都会向受害计算机系统发送 ICMP 响应的答复信息,占用了目标系统的可用带宽并导致合法通信的服务拒绝(DoS )。 死 Ping 攻击:攻击者向受害计算机发送一条比最大 IP 数据包容量还要大许多的 ICMP 响应请求数据包。既然所接收到的 ICMP 响应请求数据包的容量远远高于正常的 IP 数据包,受害计算机不能够将这些数据包重新组合起来。这样导致的结果是,操作系统要么瘫痪,要么重启。

ICMP PING 淹没攻击:大量的 PING 信息广播淹没了目标系统,使得它不能够对合法的通信做出响应。

ICMP nuke 攻击:Nuke 发送出目标操作系统无法处理的信息数据包,从而导致该系统瘫痪。

ICMP 攻击的防范:

在网络的关键之处使用防火墙对来源不明的有害数据进行过滤可以有效减轻大多数 ICMP 攻击。另外,你需要按照如下的方法对 ICMP 参数进行设置后就可以在服务与安全之间合理地保持平衡:

支持 PING — 允许向外发送 ICMP 响应请求,并允许向内发送响应答复消息。 支持路径追踪 允许向内发送 TTL - 超出和端口无法连接的消息。 支持路径 MTU— 允许向内发送 ICMP 零碎DF- 整套消息。 阻止其它类型的 ICMP 通信。

 

IGMP:

IGMP 是一种网络协议,windows 系统有一个漏洞,当向一台主机发送一些不规则的数据包时,或称网络碎片,往往会导致被攻击主机的当机,典型代表是win98

5 :碎片攻击

1. 为什么存在IP 碎片

-=-=-=-=-=-=-=-=-=-=-=

链路层具有最大传输单元MTU 这个特*** ,它限制了数据帧的最大长度,不同的网络类型都有一 个上限值。以太网的MTU1500 ,你可以用 netstat -i 命令查看这个值。如果IP 层有数据包要传,而且数据包的长度超过了MTU ,那么IP 层就要对数据包进行分片(fragmentation )操作,使每一片 的长度都小于或等于MTU 。我们假设要传输一个UDP 数据包,以太网的MTU1500 字节,一般IP 首部为20 字节,UDP 首部为8 字节,数据的净荷 (payload )部分预留是1500-20-8=1472 字节。如果数据部分大于1472 字节,就会出现分片现象。

 

IP 首部包含了分片和重组所需的信息:

 

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Identification |R|DF|MF| Fragment Offset |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|<-------------16-------------->|<--3-->|<---------13---------->|

 

Identification :发送端发送的IP 数据包标识字段都是一个唯一值,该值在分片时被复制到每个片中。

R :保留未用。

DFDon't Fragment 不分片 位,如果将这一比特置1 IP 层将不对数据报进行分片。

MFMore Fragment 更多的片 ,除了最后一片外,其他每个组成数据报的片都要把该比特置1

Fragment Offset :该片偏移原始数据包开始处的位置。偏移的字节数是该值乘以8

 

另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。

 

每一IP 分片都各自路由,到达目的主机后在IP 层重组,请放心,首部中的数据能够正确完成分片的重组。你不禁要问,既然分片可以被重组,那么所谓的碎片攻击是如何产生的呢?

 

 

2. IP 碎片攻击

-=-=-=-=-=-=-=-=-=-=-=

IP 首部有两个字节表示整个IP 数据包的长度,所以IP 数据包最长只能为0xFFFF ,就是 65535 字节。如果有意发送总长度超过65535IP 碎片,一些老的系统内核在处理的时候就会出现问题,导致崩溃或者拒绝服务。另外,如果分片之间偏 移量经过精心构造,一些系统就无法处理,导致死机。所以说,漏洞的起因是出在重组算法上。下面我们逐个分析一些著名的碎片攻击程序,来了解如何人为制造 IP 碎片来攻击系统。

 

 

3. ping o' death

-=-=-=-=-=-=-=-=-=-=-=

ping o' death 是利用ICMP 协议的一种碎片攻击。攻击者发送一个长度超过65535Echo Request 数据包,目标主机在重组分片的时候会造成事先分配的65535 字节缓冲区溢出,系统通常会崩溃或挂起。ping 不就是发送ICMP Echo Request 数据包的吗?让我们尝试攻击一下吧!不管IPICMP 首部长度了,数据长度反正是多多益善,就65535 吧,发送一个包:

 

# ping -c 1 -s 65535 192.168.0.1

Error: packet size 65535 is too large. Maximum is 65507

 

不走运,看来Linux 自带的ping 不允许我们做坏事。:(

 

65507 是它计算好的:65535-20-8=65507Win2K 下的ping 更抠门,数据只允许65500 大小。所以你必须找另外的程序来发包,但是目前新版本的操作系统已经搞定这个缺陷了,所以你还是继续往下阅读本文吧。

 

顺便提一下,记得99 年有 爱国主义黑客 红客 的前辈)发动全国网民在某一时刻开始 ping 某美国站点,试图ping 死远程服务器。这其实是一种ping flood 攻击,用大量的Echo Request 包减慢主机的响应速度和阻塞目标网络,原理和ping o' death 是不一样的,这点要分清楚。

 

 

4. jolt2

-=-=-=-=-=-=-=-=-=-=-=

jolt2.c 是在一个死循环中不停的发送一个ICMP/UDPIP 碎片,可以使Windows 系统的机器死锁。我测试了没打SPWindows 2000CPU 利用率会立即上升到100% ,鼠标无法移动。

 

我们用Snort 分别抓取采用ICMPUDP 协议发送的数据包。

 

发送的ICMP 包:

01/07-15:33:26.974096 192.168.0.9 -> 192.168.0.1

ICMP TTL:255 TOS:0x0 ID:1109 IpLen:20 DgmLen:29

Frag Offset: 0x1FFE Frag Size: 0x9

08 00 00 00 00 00 00 00 00 .........

 

发送的UDP 包:

01/10-14:21:00.298282 192.168.0.9 -> 192.168.0.1

UDP TTL:255 TOS:0x0 ID:1109 IpLen:20 DgmLen:29

Frag Offset: 0x1FFE Frag Size: 0x9

04 D3 04 D2 00 09 00 00 61 ........a

 

从上面的结果可以看出:

* 分片标志位MF=0 ,说明是最后一个分片。

* 偏移量为0x1FFE ,计算重组后的长度为 (0x1FFE * 8) + 29 = 65549 > 65535 ,溢出。

* IP 包的ID1109 ,可以作为IDS 检测的一个特征。

* ICMP 包:

类型为8 、代码为0 ,是Echo Request

校验和为0x0000 ,程序没有计算校验,所以确切的说这个ICMP 包是非法的。

* UDP 包:

目的端口由用户在命令参数中指定;

源端口是目的端口和1235 进行OR 的结果;

校验和为0x0000 ,和ICMP 的一样,没有计算,非法的UDP

净荷部分只有一个字符'a'

 

jolt2.c 应该可以伪造源IP 地址,但是源程序中并没有把用户试图伪装的IP 地址赋值给src_addr ,不知道作者是不是故意的。

 

jolt2 的影响相当大,通过不停的发送这个偏移量很大的数据包,不仅死锁未打补丁的Windows 系统,同时也大大增加了网络流量。曾经有人利用jolt2 模拟网络流量,测试IDS 在高负载流量下的攻击检测效率,就是利用这个特***

 

 

5. teardrop

-=-=-=-=-=-=-=-=-=-=-=

teardrop 也比较简单,默认发送两个UDP 数据包,就能使某些Linux 内核崩溃。Snort 抓取的结果如下:

 

第一个:

01/08-11:42:21.985853 192.168.0.9 -> 192.168.0.1

UDP TTL:64 TOS:0x0 ID:242 IpLen:20 DgmLen:56 MF

Frag Offset: 0x0 Frag Size: 0x24

A0 A8 86 C7 00 24 00 00 00 00 00 00 00 00 00 00 .....$..........

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00 00 00 00 ....

 

* MF=1 ,偏移量=0 ,分片IP 包的第一个。

* 结构图:

 

|<-------20-------->|<------8------>|<---------------28---------------->|

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| IP | UDP | Data |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 

第二个:

01/08-11:42:21.985853 192.168.0.9 -> 192.168.0.1

UDP TTL:64 TOS:0x0 ID:242 IpLen:20 DgmLen:24

Frag Offset: 0x3 Frag Size: 0x4

A0 A8 86 C7 ....

 

* MF=0 ,偏移量=0x3 ,偏移字节数为 0x3 * 8 = 24 ,最后一个分片。

* 结构图:

 

|<-------20-------->|<--4-->|

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| IP | Data |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 

如果修改源代码,第二片IP 包的偏移量也可以为0x4 ,偏移字节数就是 0x4 * 8 = 32

 

下面的结构图表示了接收端重组分片的过程,分别对应于偏移字节数为2432 两种情况:

 

|<-------20-------->|<------8------>|<---------------28---------------->|

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| IP | UDP | Data |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|

| +-+-+-+-+

|<------------- 24 ------------->| Data |

| +-+-+-+-+

|<--4-->|

 

|

| +-+-+-+-+

|<------------------- 32 ------------------>| Data |

| +-+-+-+-+

|<--4-->|

 

可以看出,第二片IP 包的偏移量小于第一片结束的位移,而且算上第二片IP 包的Data ,也未 超过第一片的尾部,这就是重叠现象(overlap )。老的Linux 内核(1.x - 2.0.x )在处理这种重叠分片的时候存在问题,WinNT/95 在接收到1050teardrop 分片时也会崩溃。你可以阅读teardrop.c 的源代码来了解如何构造并发送这种数据包。

 

 

6. 如何阻止IP 碎片攻击

-=-=-=-=-=-=-=-=-=-=-=

* Windows 系统请打上最新的Service Pack ,目前的Linux 内核已经不受影响。

* 如果可能,在网络边界上禁止碎片包通过,或者用iptables 限制每秒通过碎片包的数目。

* 如果防火墙有重组碎片的功能,请确保自身的算法没有问题,否则被DoS 就会影响整个网络。

* Win2K 系统中,自定义IP 安全策略,设置 碎片检查

 

来源:http://yu1jiang.blog.163.com/blog/static/323298852008214101740564/