Scapy畸形报文攻击



网络攻击可分为拒绝服务型攻击、畸形报文攻击和扫描窥探攻击三大类。

畸形报文攻击是通过向目标系统发送有缺陷的IP报文,使得目标系统在处理这样的 IP包时会出现崩溃,给目标系统带来损失。主要的畸形报文攻击有 Ping of DeathTeardrop等。

 

常见的畸形报文攻击方法:

  1. Ping of Death攻击

Ping of Death俗称“死拼”,其攻击原理是攻击者A向受害者B发送一些尺寸超大的ICMP(Ping命令使用的是ICMP报文)报文对其进行攻击(对于有些路由器或系统,在接收到一个这样的报文后,由于处理不当,会造成系统崩溃、死机或重启)

IP报文的最大长度是216-1=65535个字节,那么去除IP首部的20个字节和ICMP首部的8个字节,实际数据部分长度最大为:65535-20-8=65507个字节。所谓的尺寸超大的ICMP报文就是指数据部分长度超过65507个字节的ICMP报文。

针对Ping of Death攻击,网络安全设备仅仅通过超大包过滤方法不能达到很好的防御效果,因为在线网种传输的大部分报文都经过了分片,所以单片报文不会超过65507个字节,只是在接收端完成组合后才会超过65507个字节。所以针对Ping of Death攻击,最有效防御方式是禁止ICMP报文通过网络安全设备。

 

  1. Teardrop攻击

Teardrop的攻击原理是:给受害者发送一些分片IP报文,并且故意将“13位分片偏移”字段设置成错误的值(既可与上一分片数据重叠,也可错开),受害者在组合这种含有重叠偏移的伪造分片报文时,会导致系统崩溃。

防御方法:网络安全设备将接收到的分片报文先放入缓存中,并根据源IP地址和目的IP地址对报文进行分组,源IP地址和目的IP地址均相同的报文归入同一组,然后对每组IP报文的相关分片信息进行检查,丢弃分片信息存在错误的报文。为了防止缓存益处,当缓存快要存满是,直接丢弃后续分片报文。

 

  1. 畸形TCP报文攻击

TC报文包含6个标志位:URGACKPSHRSTSYNFIN,不同的系统对这些标志位组合的应答是不同的。  

  1. 6个标志全部为1,也就是圣诞树攻击;  
  2. 6个标志全部为0,如果端口是关闭的,会使接收方应答一个RST | ACK消息,而对于一个开放端口的LinuxUNIX机器则不会应答,而Windows机器将回答RST | ACK消息。这可用于操作系统探测。  
  1. 不管端口是打开还是关闭,ACK与除RST外的其它任何一个状态位组合在一起 都会引起一个还没有发送请求的接收方的一个RST应答,这可用于探测主机的存在。
  2. 不管端口是打开还是关闭SYN | FIN | URG会让接收方发送一个RST | ACK应答,这可用于探测主机的存在。
  3. 如果端口是关闭的,SYNSYN | FINSYN | PUSHSYN | FIN | PUSHSYN|URG SYN | URG | PUSHSYN | FIN | URG | PUSH会使接收方应答一个RST | ACK消息;如果端口是打开的,会使接收方应答一个 SYN | ACK消息,这可用于主机探测和端口探测。
  4. 如果端口是关闭的FINURGPUSHURG|FINURG|PUSHFIN|PUSH  URG|FIN|PUSH 会使接收方应答一个RST | ACK消息,而对于一个开放端口 LinuxUNIX机器不会应答,而Windows机器将回答RST | ACK消息,这可用于操作系统探测。

 

  1. IP-fragment攻击

IP报文中,与报文分片有关的几个字段是:DFDon’t Fragmentate)位、MF位,Fragment OffsetLengthDFMF就是前面提到3位标识位中的第二和第三位,Fragment Offset就是“13位分片偏移”字段,Length就是“16位报文总长度”字段。如果上述字段的值出现矛盾,而设备处理不当,会对设备造成一定的影响,甚至瘫痪。Ip-fragment就是故意制造这种存在字段上相互矛盾的报文进行攻击的。

例如:

  1. DF位被置位(标明报文未分片),而MF位同时被置位或 Fragment Offset 不为0(表示是分片报文)
  2. DF位为0(标明是分片报文),而Fragment Offset + Length > 65535(未分片)

这些都有可能引起系统的崩溃,防御方法同Teardrop一样,都是对报文进行检查,丢弃非法报文。

 

Scapy畸形报文攻击的脚本示例:

Malformed IP packets:

>>>send(IP(dst="10.1.1.5", ihl=2, version=3)/ICMP())

 

Ping of death:

>>> send(fragment(IP(dst="10.0.0.5")/ICMP()/("X"*60000)) )

 

Nestea attack:

>>>send(IP(dst=target, id=42, flags="MF")/UDP()/("X"*10))

>>>send(IP(dst=target, id=42, frag=48)/("X"*116))

>>>send(IP(dst=target, id=42, flags="MF")/UDP()/("X"*224))

Description of Nestea

This DoS attack affects the Linux operating system.

The Nestea attack is very similar to the Teardrop attack, in that it sends IP fragments to a machine connected to the Internet or a network. But,while Teardrop affects Windows based systems, Nestea is specific to the Linux operating system, and exploits a bug (commonly known as the "off by one IP header" bug) in the Linux refragmentation code (the code that reformats, or puts back together, oversize packets when they are received from a client system).

 

The Nestea attack is very similar to the Teardrop attack, and is run against Linux versions 2.0 and 2.1.

 

Symptoms of Attack

Machines subjected to the Nestea Denial of Service attack will almost certainly crash. A simple reboot should be sufficient to recover from a Nestea attack.

How can I fix this vulnerability?

Apply the patch, which can be found at ICMPinfo's Nestea Patch page.

 

 

Land attack (designed for Microsoft Windows):

>>>send(IP(src=target,dst=target)/TCP(sport=135,dport=135))

Land攻击发生的条件是攻击者发送具有相同IP的源地址、目标地址和 TCP端口号的伪造 TCP SYN数据包信息流。必须设置好 SYN标记。其结果是该计算机系统将试图向自己发送响应信息,导致被攻击的机器死循环,最终使受害系统瘫痪或重启。

你可能感兴趣的:(Script,计算机网络,Scapy,攻击,Malformed,Packet,畸形报文攻击,网络)