网络安全 频道

IDS欺骗之Fragroute(1)

fragroute能够截取、修改和重写向外发送的报文,实现大部分在了Secure Networks Insertion, Evasion, and Denial of Service: Eluding Network Intrusion Detection中叙述的IDS欺骗技术,包括IP、TCP层的数据包碎片以及数据包数据重叠等。

fragroute和fragrouter

   其实,早在1999年5月,Dug Song就发布了一个类似的工具--fragrouter。这个工具是网络入侵检测系统(NIDS)性能测试套件--nidsbench一个部分,顾名思义,fragrouter是一个具有路由器功能的应用程序,它能够对攻击者发送的攻击流量进行分片处理之后,向攻击目标转发。其原理如下所示:

攻击流量 分片之后的攻击流量
+-------+ +------------+ +--------+
| hax0r | ------->| fragrouter | - - - - - - - - - - ->| victim |
+-------+ +------------+ | +--------+
V
+------+------+
| network IDS |
+-------------+

   如果入侵检测系统不能进行IP和TCP分片重组或者重组功能不太完善,将不能发现针对victim攻击。

   从实现的技术来看,fragroute和fragrouter差不多。和fragroute不同的是,它只处理本地主机发送到远程主机的数据流量,不支持数据包的转发,因此不会在本地主机打开IP转发功能。

网络层和传输控制层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等文档。

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
/ /
|-----------------------------------------|
图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。

(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的处理带来了很大的困难。 

0
相关文章