检测来源于IP层的攻击及防御

检测来自IP层的攻击及防御
本文档的Copyleft归yfydz所有,使用GPL发布,可以*拷贝、转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn

0. IP包头
由于IP头的内容比较固定,来自IP层的攻击相对比较单一的,检测也相对比较容易。

为方便理解,先列出IP头结构,下面是RFC791定义的IP头结构:

    0                   1                   2                   3 
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Version|  IHL  |Type of Service|          Total Length         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Identification        |Flags|      Fragment Offset    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Time to Live |    Protocol   |         Header Checksum       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Source Address                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Destination Address                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Options                    |    Padding    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Version:版本,4位,固定为4
IHL:IP头长度,4位,以4个字节为一个单位,最小为5,最大15,分别表示包长为20,60字节
Type of Service:服务类型,8位,可看RFC2474
Total Length:IP包总长,16位
Identification:ID号,16位
Flags:分片标志,3位
Fragment Offset:碎片偏移,13位
Time to Live:存活时间,8位
Protocol:协议,8位
Header Checksum: IP头校验和,16位
Source Address: 源地址, 32位
Destination Address: 目的地址, 32位
Options: IP选项,长度从0到40字节
Padding: 填充字节,IP头都要是4的倍数,不够的以0填充


1. IP异常包
如非法协议值,现在已经分配的IP协议号在1-137之间,此外的协议号都可认为非法,已分配的协议

号可见:http://www.iana.org/assignments/protocol-numbers;非法地址,对于42亿多的IP地址

,有的是属于不可能在Internet上出现的,有的是合法但还未分配的,如果出现这些地址的包,可认

为非法,IP地址的分配情况可见:
http://www.iana.org/assignments/ipv4-address-space

2. LAND攻击
严格说是TCP层的攻击了,不过在网络层就可以防护;攻击方发送源地址和目的地址相同的TCP SYN包

,对老的某些操作系统就会发SYNACK包给自身,建立空连接,最终消耗尽自身资源,现在的操作系统

已经不会那么傻了,这种攻击标志很明显,防御也很容易,可以做到100%检测并阻断;

3. 碎片攻击
IP包的总长字段是16位,因此允许IP包的最大长度为65536字节,这个值超过各类网络的最大帧长(以

太网为1500字节),这样IP栈就需要把IP包分割为数据链路层所允许的长度,碎片包就要设置相应的

Flags和碎片偏移值,供目的端组包时使用,注意所有分片包的Identification都是相同的,表明这些

分片都属于同一个包。

碎片攻击有很多种,如ping of death, tear drop, Jolt2等,攻击原理是发送畸形的分片包,这样

目的地的IP栈在重组IP包时,会发现IP包的总长超过65536(ping of death)、或者碎片偏移重叠导致

重组错误(tear drop)等错误,老点的操作系统由于没考虑到这些情况会造成非法指针的情况而导致内

核崩溃。新点的操作系统已经都能正确处理这些情况,对于防火墙来说,防止碎片攻击的方式是在防火

墙上就进行数据包重组,只有重组成功的IP大包才重新转发,所以可以对该类攻击包100%阻断。Jolt2

是ID为0x1109的分片包,可能会误查。

对于某些协议,如TCP,在传输数据之前就会协商好最大段长MSS,一般是不会出现分片的,这类协议

出现分片包是值得怀疑包的合法性的。

4. Flood攻击
如ping flood、ping sweep,ping回应攻击等,ping flood就是大量发ping包到目的机而导致其流量

阻塞;ping sweep是同时对多个地址进行ping扫描;ping回应是伪造具有相同源地址(受害机地址)的

echo包给其他机器,其他机器就正常回应echo reply到受害机,造成受害机承受突然大量echo reply

包的流量冲击。防火墙除了ping回应攻击可以通过状态检测检测出来外,其他Flood攻击就只能通过统

计的方式来辨认,不可能对这种攻击包100%的阻断的,总会先放几个过去。除了用ICMP包进行flood攻

击外,其他任何IP协议的包都可以用来进行flood攻击,反正只要能通过发大量包阻塞受害机的网络通

信就达到攻击的目的了。


5. IP选项攻击
IP选项的目的本来是提供特殊路由、诊断或提高安全性用的,但事得其反,在正常通信中这些选项基本

很少用到,反而很多攻击就利用IP选项来进行。

以下一些IP选项可能被用于非法目的:
1) 松散源路由、严格源路由:攻击者用其来隐藏数据包的真实来源;
2) 时间戳:用于搜集目的机的信息;
3) 记录路由:用于搜集目的机的信息;
4) 安全、流ID:都是被废除了不用的选项,有的话就是非法

防火墙进行防护时可以丢弃具有这些选项的包,正常通信没有这些选项也能进行。

6. IP欺骗
IP欺骗就是用伪造的源地址构造数据包进行攻击。Flood攻击基本上都属于IP欺骗,恐怕不会再有哪个攻击者“诚实”地用自己的真实IP来构造攻击包。当然,对于DDOS来说,攻击机先控制一堆“肉鸡”,再由“肉鸡”真实地发动攻击,此类攻击不在此列。

使用IP欺骗也可以实现网络入侵,但这需要目标机的“配合”,其难度类似于盲人穿针。在早些年安全意识还很差的年代此类攻击还可以奏效,但随着防御意识的提高,大部分危险服务都被关闭,数据随机性增强,这种攻击的难度越来越大。

对于IP欺骗攻击的防御,重点在于边界路由器或防火墙,这些路由器、防火墙应该能够过滤来自内部网段内非内部网段地址的数据包。

7. 总结
IP层的攻击相对比较简单,防护也比较容易,由于模式固定,非常适合硬件实现。