1.引言
2002年3月左右,Dug Song(dugsong@monkey.org)发布了一个工具fragroute,在入侵检测领域引起了相当大的震动。有关fragroute的讨论成了3-4月http://www.securityfocus.com和snort邮件列表的一个热点。
fragroute能够截取、修改和重写向外发送的报文,实现大部分在了Secure Networks Insertion, Evasion, and Denial of Service: Eluding Network Intrusion Detection中叙述的IDS欺骗技术,包括IP、TCP层的数据包碎片以及数据包数据重叠等。
2.fragroute和fragrouter
其实,早在1999年5月,Dug Song就发布了一个类似的工具--fragrouter。这个工具是网络入侵检测系统(NIDS)性能测试套件--nidsbench一个部分,顾名思义,fragrouter是一个具有路由器功能的应用程序,它能够对攻击者发送的攻击流量进行分片处理之后,向攻击目标转发。其原理如下所示:
攻击流量 分片之后的攻击流量
+-------+ +------------+ +--------+
| hax0r |-------| fragrouter |- - - - - - - - - - -| victim |
+-------+ +------------+ | +--------+
V
+------+------+
| network IDS |
+-------------+
如果入侵检测系统不能进行IP和TCP分片重组或者重组功能不太完善,将不能发现针对victim攻击。
从实现的技术来看,fragroute和fragrouter差不多。和fragroute不同的是,它只处理本地主机发送到远程主机的数据流量,不支持数据包的转发,因此不会在本地主机打开IP转发功能。
3.网络层和传输控制层IDS欺骗技术
在介绍fragroute之前,我们首先要介绍一些fragroute实现的技术,这些技术主要是在网络层和传输控制层。除此之外,还有一些应用应用层的技术,不过,在本文中将不多做赘述。如果您希望了解更多信息,可以参考Insertion,Evasion and Denial of Service: Eluding Network Intrusion Detection、IDS Evasion Techniques and Tactics、IDS Evasion with Unicode、 A Look At Whisker’s Anti-IDS Tactics和Polymorphic Shellcodes vs. Application IDSs等文档。
3.1.网络层技术
我们首先讨论网络层(IP)的IDS欺骗技术。互联网协议(Internet Protocol)提供一种无连接和不可靠的分组投递服务(RFC791)。它会尽最大努力投递IP分组,但是不能保证分组能够正确地投递到目的地。为了能够更好地理解本文讨论的IDS欺骗技术,我们先看一下IP分组的结构:
0 4 7 15 31
| | | | |
------------------------------------------|
| Ver|head|type of | total length |
| (4)|len |service | (in bytes) |
|-----------------------------------------|
| identification |0|D|M| fragment |
| | |F|F| offset |
|-----------------------------------------|
| time to | proto | header of |
| live(TTL)| | checksum |
|-----------------------------------------|
| source address(32 bytes) |
|-----------------------------------------|
| destination address(32 bytes) |
|-----------------------------------------|
/ /
option
/ /
|-----------------------------------------|
/ /
data
/ /
|-----------------------------------------|
图3-1.IP分组结构
如图3-1所示,每个IP分组的长度都是4个字节的倍数,各个域的意义如下:
4位版本号,一般为4。
以4个字节为单位的分组头的长度,取值范围5-15(默认值5)。
8位的服务类型(Type Of Service,TOS),服务类型的前3位设置分组的优先级,数值越大,则分组越重要。接下来的3位分别表示延迟、吞吐率和可靠性,如果为0则表示常规服务,如果为1则表示短延迟、高吞吐率和高可靠性。最后两位没有使用。
16字节的总长度,单位是字节,包括分组头和数据的长度。
标志符(identification)长度16位,唯一地标识该IP分组。IP分组在传输过程中,期间可能通过一些子网,这些子网间允许的最大协议数据单元(PDU)可能小于该IP分组的长度。为了处理这种情况,IP协议为一数据报方式传输的IP分组提供了分片和重组的功能。当一个路由器分割一个IP分组时,要把IP分组头中的大多数数据段复制到分片中,标志符段是必须复制的数据段。到达目的地之后,目标主机就是通过这个标志符来确定分片属于那个IP分组。
3位的标志段,低序两位分别控制IP分组是否可以分片(DF位)和是否是最后一个碎片(MF位),还有一位没有定义。
13位的碎片偏移表示IP碎片在原始IP分组中的偏移。
生存时间设置分组在互联网中能够经过的跳数。
协议(protocol)段指定高层协议的类型,例如:ICMP是1、TCP是6、UDP是17。
校验和(checksum)保证IP分组头的完整性。
分别为32位的源地址和目的地址。
除了以上这些必需项之外,还可能包括一些任选项,例如源路由。
下面,我们将以此为基础讨论如何使用这些IP分组的域来欺骗IDS。
3.1.1.搀杂无效数据的技术
使用这种技术,攻击者在其发出的攻击数据中,搀杂一些只能被IDS接受的数据,从而影响IDS的正常检测。一般攻击者主要通过使用错误的包头域或者IP选项错误的数据包实现这个目的。
错误的包头域
这是最早被攻击者采用的一种攻击方式。攻击者构造坏的IP包头域,使攻击目标能够丢弃这个包,而让NIDS能够接受这个数据包,从而在NIDS接收的数据中插入无效的数据。不过,这种技术有两个问题。路由器会丢弃这种数据包,因此这种技术很难用于远程攻击,除非IDS和攻击者是在同一个LAN中。另外一个问题是IDS是否能够以攻击者设想的方式解释具有坏包头的数据包。例如,如果使用错误的IP包头的大小,会使IDS无法定位传输控制层的位置,因此,不是每个IP包头的域都是可以使用的。一般使用校验和、TTL和不可分片(DF)等包头域。
校验和域的错误很容易被IDS忽视。有的IDS不校验数据包的校验和,因此不会丢弃校验和错误的数据包。但是,绝大多数系统的TCP/IP协议栈都会丢弃校验和错误的IP数据包。
TTL(Time To Live)也是一个可以利用的包头域,它表示一个IP分组从源地址到达目的地址最多可以经过多少跳(hop),一个在互联网上传输的IP分组,每经过一个路由器它的TTL就会减一,如果这个分组在到达目的地址之前,TTL变成0,就会被丢弃。根据这个原理,如果IDS和目标系统不在同一个网段上,我们可以构造IP分组的TTL域,使分组刚好能够到达IDS,而不能到达目标系统,从而在IDS中插入无用信息。
最后攻击者常用的IP包头域是DF,这个位表示如果这个IP分组超过了转发设备允许的最大长度,是否可以分片。如果IP分组的DF标志被设置为1,就表示这个分组不能被分片,当它超过了转发设备的允许的最大长度时,就会被丢弃。因此,如果NIDS允许的最大数据包长度大于其监视的系统,我们就可以使包含垃圾信息的分组大小介于两者之间,从而在IDS中插入垃圾信息。
这些技术在原理上看起来比较容易,但是在实际应用过程中,需要对目标网络和系统的情况有非常深刻的了解才能实施,否则成功的几率非常小:)。
IP选项
错误的校验和问题不难解决,只要使IDS对错误校验和的分组采用与其它系统相同的处理方式就可以了。IP分组的选项域也可以被攻击者用来给IDS插入垃圾信息。对于IP选项,各种系统的处理方式差别很大,因此很容易使攻击者诡计得逞。
攻击者最为常用的IP选项就是严格源路由(strict source routed)选项。一般情况下,如果自己的地址没有出现在IP分组的源路由表中,系统就会丢弃收到的IP分组。有些系统可以配置为自动丢弃包含严格源路由选项的IP分组。这就给IDS的处理带来了很大的困难。
3.1.2.IP碎片
当路由器准备将IP分组发送到网络上,而该网络又无法将这个IP分组一次全部发送时,路由器必需将分组分成小块,使其长度能够满足这一网络对分组大小的限制,这些分割出来的小块就叫作碎片(fragmentation)。IP分组可以独立地通过不同的路径转发,使得碎片只有到达目的主机之后才可能汇集到一块,而且碎片不一定按照次序到达。到达目的主机后,目的主机会重组IP分片。
当一个路由器分割一个IP分组时,要把IP分组头的大多数段值复制到每个碎片中,其中16位的标志符是必须复制的段,它能够唯一地标志一个IP分组,使目的主机能够判断每个碎片所属的IP分组,而且每个碎片中都偏移值,用来标记素片在IP分组中的位置。
由于目标系统能够重组IP分片,因此需要网络入侵检测系统具有种族IP分片的能力。如果网络入侵检测系统没有重组IP分片的能力,将无法检测通过IP分片进入的攻击数据。不过,现在的网络入侵检测产品基本都具有良好的IP分片重组能力,因此基本的IP碎片问题不会给网络入侵检测系统造成太大的麻烦。但是,象碎片重叠之类的技术仍然会带来很大的问题。
下面我们详细介绍如何使用IP碎片欺骗网络入侵检测系统。
基本的重组问题
IP碎片通常会按照顺序到达目的地,最后的碎