logo资料库

fragroute介绍以及使用案例.docx

第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
资料共15页,剩余部分请下载后查看
一、简介
1、简介
2、fragroute和fragrouter
3、网络层和传输控制层IDS欺骗技术
3.1网络层技术
3.1.1.搀杂无效数据的技术
3.1.2.IP碎片
3.2.网络层问题
3.2.1.插入垃圾数据
3.2.2.TCP流重组问题
4、应用举例
4.1Fragroute使用举例
4.1.1测试环境
4.1.2测试需求
4.1.3测试过程
4.2Fragroute Rule解释
4.2Fragrouter应用举例
4.1.1测试环境
4.1.2测试需求
4.1.3测试过程
一、简介 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 攻击。从实现的技术来看,ragroute 和 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 碎片通常会按照顺序到达目的地,最后的碎片的 MF 位为 0(表示这是最后一个碎片)。不 过,IP 片有可能不按照顺序到达,目标系统必须能够重组碎片。但是,如果网络入侵检测系
统总是假设 IP 碎片是按照顺序到达就会出现漏报的情况。攻击者可以打乱碎片的的到达顺 序,达到欺骗 IDS 的目的。 除此之外还有一个问题,IDS 必须把 IP 碎片保存到一个缓冲区里,等所有的碎片到达之后重 组 IP 分组。如果攻击者不送出所有的碎片,就可能使那些缓存所有碎片的 IDS 消耗掉所有 内存。目标系统必须有处理这种情况的能力。一些系统会根据 TTL,丢弃碎片。IDS 必须以 和目标系统相同的方式处理碎片。如果 IDS 接收被监视的主机丢弃的碎片流,就会被攻击者 插入垃圾数据;如果 IDS 丢弃被监视系统接受的数据,就可能遗漏攻击数据流量。 碎片重叠问题 目前,主要有两种技术用于逃避检测设备的监视。第一种就是使用尽可能小的碎片,例如: 每个碎片只有 8 个字节(碎片最小 8 个字节),而每个碎片中都没有足够的信息,从而逃过检 测。但是,现在的包过滤设备一般会主动丢弃这种碎片,入侵检测设备也会发出碎片攻击的 报警,因此这种逃避方式很难奏效。 另外一种方式就是碎片重叠。在 IP 分组中有一个 13 位的域(fragment offset),标识每个碎片 在原始 IP 分组中的偏移。构造错误的碎片偏移值,可能造成碎片的重叠,如图: |<--- offset=0 size=256 ---->| +-----------------------+----+ | | | frag1 | | | +-----------------------+----+ +----+----------------------+ | | | frag2 | | | +----+----------------------+ |<-- offset=248,size=256 -->| 图 3-2 图 3-2 中,frag1 负载的数据偏移值为 0(也就是第一个碎片),大小是 256,而第二个碎片 frag2 的数据偏移是 248,造成了两个碎片的部分数据重叠。这样会使某个碎片的数据覆盖掉另一 个碎片的重叠数据。而哪一个碎片重叠部分的数据被覆盖由操作系统决定。例如,如果 frag1 先于 frag2 到达,在 NT/Y2K 和 solaris2.6 中,frag1 的数据会覆盖 frag2 的重叠数据;而在 Linux 中,frag2 的数据会覆盖 frag1 的数据。而如果两个碎片不按正常顺序到达,也就是 frag2 先 于 frag1 到达,在 NT/Y2K 和 solaris2.6 中,frag2 的数据会覆盖 frag1 的重叠数据;而在 Linux 中,frag1 的数据会覆盖 frag2 的数据。这些细节在使用 fragroute 之前一定要弄清楚。 究竟是后面到达的碎片覆盖先到达的重叠数据,还是后到达碎片的重叠数据被覆盖可以使用 fragroute 软件包中的一个工具 fragtest 进行判断。fragroute 的配置选项 ip_frag size [new|old] 用于 IP 碎片覆盖方式的配置,new 表示后到达的碎片覆盖先到碎片的重叠数据,old 表示后 到达的碎片覆盖先到碎片的重叠数据。这两个选项是 fragroute 配置选项中比较难以理解的。
对于碎片重叠,如果网络入侵检测系统的处理方式不同,就会造成漏报。例如,使用运行于 Linux 之上的 snort 作为网络入侵检测系统,而攻击者的攻击目标是 Y2K 系统。 3.2.网络层问题 TCP 用于在不可靠的网络上为两台主机之间提供有序可靠的数据投递服务。实现其可靠性传 输的基础是序列号和应答号。TCP 包头结构如下: 0 15 31 | | | |--------------------+------------------------| | source port | destination port | |---------------------------------------------| | sequence number | |---------------------------------------------| | acknowledge number | |-------------+------+------------------------| | data | | code | window | |offset| | | | |--------------------+------------------------| | checksum | urgent pointer | |--------------------+------------------------| | option | padding | |--------------------+------------------------| / / \ data \ / / |---------------------------------------------| 图 3-2.TCP 报文结构 每个 TCP 报文由两个部分组成:包头和数据。TCP 包头包括如下域: 16 字节的源端口和目的端口。 32 字节的序列号和应答号。 4 位数据偏移,标识包头的打消,单位是 4 个字节。 6 位编码位,确定报文的类型和目的。从左到右依次是:URGENT、ACK、PSH、RST、SYN 和 FIN。 2 字节的窗口段。标识发送该报文的 TCP 实体在相反的阐述方向上能够棘手的字节数 2 字节的校验和用于最基本的差错控制。 选项域用于处理其它情况。例如:定义通信过程中的最大报文长度,保护序列号的时间戳以
及用于告诉网络通讯的窗口放大因子等。 填充域用于使包头的大小是 4 个字节的倍数。 3.2.1.插入垃圾数据 在前面我们讨论了使用 IP 协议向 IDS 插入垃圾数据。由于 TCP 协议的处理更为复杂,因此 有很多情况可以使系统丢弃收到的 TCP 报文。如果 IDS 和受监视的系统使用不同的处理方式, 就可能被攻击者利用,在 IDS 中插入垃圾数据,干扰 IDS 的检测。 TCP 包头的畸形域 某些 IDS 产品虽然支持 TCP 会话重组,但是如果它们在没有检查就重组 TCP 会话,就可能被 攻击者利用在检测数据中插入垃圾信息。 一个容易被忽视的是 TCP 包头的编码段(code),这六位标志 TCP 报文的类型和内容。这些编 码位可以进行组合,而某些组合是无效的,例如:把所有的编码位都打开,这些类型的报文 应该被丢弃。而且某些系统不接收没有 ACK 位的 TCP 报文。 另一个经常被忽视的 TCP 包头域是校验和域。所有的系统都会丢弃校验和错误的 TCP 报文, 但是某些入侵检测系统却并不检查这个域,从而能够被攻击者利用。 TCP 选项 IDS 应该能够处理 TCP 选项,但是和 IP 选项不同,TCP 选项要复杂的多,而且经常会出现新 的 TCP 选项。另外一个很难处理 TCP 选项的原因是某些 TCP 选项只在某些连接状态下出现。 对于包含坏 TCP 选项的 TCP 报文,某些系统会拒绝,而另一些系统会忽略坏 TCP 选项。网络 入侵检测系统很难判断被监视系统的处理方式,给攻击者以可乘之机。 RFC1323 提出了两个 TCP 选项(窗口放大和时间戳选项),用于提高高速环境 TCP 传输的效率 和可靠性。和以前的规定不同,这两个新的选项可能出现在非 SYN 报文段中。有的 TCP 实 现会拒绝包括选项的非 SYN 报文段,而有些系统会忽略这样的选项继续处理。这为 IDS 造成 了很大的困难,如果 IDS 不能采取和受监视系统相同的处理方式,就会被攻击者插入垃圾数 据。 RFC1323 定义的另一个概念是 PAW(protection against wrapped sequence numbers,序列号回 卷保护)。如果使用窗口放大(window scale)选项,每个 TCP 连接的窗口最大可以是 65535*2^14, 而 TCP 连接的序列号是 32 位的,所以很快就会发生序列号回卷。为了阻止某个序列号为 n 的报文段,在序列号回卷到 n 时重新出现,RFC1323 提出了 PAWS,使用时间戳避免这种情 况的出现。如果一个报文段的时间戳早于某个时间值,就会被丢弃。攻击者会手工制作低时 间戳的报文段干扰入侵检测系统的检测,这类 TCP 报文段一般会兼容 PAWS 系统丢弃。如果
IDS 不知道被监视系统是否支持 PAWS,就会被攻击者插入垃圾数据。 3.2.2.TCP 流重组问题 对于入侵检测系统,最艰巨的任务是重组通过 TCP 连接交换的数据。TCP 协议提供了足够的 信息帮助目标系统判断数据的有效性和数据在连接中的位置。TCP 协议的重传机制可以确保 数据准确到达,如果在一定的时间之内没有收到接受方的响应信息,发送方会自动重传数据。 但是,由于监视 TCP 会话的入侵检测系统是被动的监视系统,因此无法使用 TCP 重传机制。 如果数据传输过程中,发生顺序被打乱或者报文丢失的情况,将加大其检测难度。更严重的 是,重组 TCP 数据流需要进行序列号跟踪,但是如果在传输过程中丢失了很多报文,就可能 使入侵检测系统无法进行序列号跟踪。如果没有恢复机制,就可能使入侵检测系统不能同步 监视 TCP 连接。不过,即使入侵检测系统能够恢复序列号跟踪,也照样能够被攻击。 基本的重组问题 某些入侵检测系统不使用序列号跟踪,它们按照收到数据的顺序重组 TCP 流,攻击者只要把 报文的顺序打乱,或者在数据流中加入目标系统根本不会接受的垃圾数据,就可以是这种入 侵检测系统失效。 高级重组问题 即使入侵检测系统能够跟踪 TCP 连接的序列号,也照样无法保证某个报文段(即使序列号是 正确的)能够被目标系统接受。有很多问题可能是目标系统丢弃需要正确的数据。最基本的 就是 IP 和 TCP 插入问题,除此之外,还存在一些高层的问题也会是序列号正确的数据被丢 弃。 最主要的问题是入侵检测系统必须知道被监视系统宣布的窗口大小。TCP 包头的窗口域标识 TCP 连接接收方能够接收的数据数量,能够防止发送方向自己的缓冲区发送太多数据。如果 收到的数据数量超过窗口的大小,这些数据就会被丢弃。而且,入侵检测系统对窗口的化的 反应比受监视系统的反应要慢些。如果在两者不一致的期间有报文到达就会造成问题。 另外,攻击者发送一些序列号相同而负载不同的报文也会对入侵检测系统的 TCP 流重组造成 问题,这些序列号相同的报文包头的各个域完全相同(除了校验和域)。很显然,接收方只会 处理所有序列号相同的报文中的一个,其它的都会被丢弃。但是,一般没有足够的信息让入 侵检测系统判断究竟哪个报文是有效的。而且,有些入侵检测系统经常会接受无效的数据, 攻击者可以先发送一些肯定会接收方系统拒绝的报文段,经过很小的延迟之后发出有效的数 据,会造成入侵检测系统后推序列号而无法接收有效的数据。
分享到:
收藏