《最新Snort入侵检测系统中TCP流重组的研究解析.doc》由会员分享,可在线阅读,更多相关《最新Snort入侵检测系统中TCP流重组的研究解析.doc(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateSnort入侵检测系统中TCP流重组的研究解析Snort入侵检测系统中TCP流重组的研究解析学术研究 A c a d e 信息安全与通信保密2007. 265邓子宽, 范明钰, 王光卫, 朱大勇(电子科技大学计算机科学与工程学院, 四川成都610054【摘要】文章通过分析 Snort 入侵检测系统的源代码,剖析了 snort 入侵检测系统的 TCP 流重组的原理及实现
2、,给 出了相关数据结构和算法流程,介绍了针对流重组模块的攻击及 Snort 对此的防御策略,最后指出现有 TCP 流重组 技术几点不足及若干新的研究方向。【关键词】TCP 重组;Snort;Hash 表;Splay 树;入侵检测【中图分类号】TP393【文献标识码】A【文章编号】1009-8054(200702-0065-03Research On TCP reassembly in Snort IDSDENG Zikuan, FAN MingYu, WANG Guangwei, ZHU dayong(School of Computer Science and Engineering UES
3、TC, Chengdu 610054, China【 Abstract 】 Base on the study on the source code of Snort, analyze the principle and implementation of TCP assembly inSnort IDS, present related data structures and arithmetic. Introduce attacks that towards TCP assembly module and theprotection methods Snort adopted. Indic
4、ate several weaknesses of TCP assembly and some new research fields of it.【 Keywords 】 TCP reassembly; Snort; Hash table; Splay tree; Intrusion detectionSnort 入侵检测系统中TCP 流重组的研究在网络安全领域,将分散的 TCP 包按其所隶属的会话重 组成一个连续的 TCP 会话流再与攻击特征库进行匹配是发现 和防御某些攻击的有效方法。1Snort工作流程Snort 是一款开源的跨平台、轻量级的分布式入侵检测 系统 1, 其4种工作方式如下
5、 :嗅探器模式(sniffermode、 包 记录模式(packetlogger、 网络入侵检测模式(NetworkIn-trusionDetectionSystemMode、 线内模式(Inlinemode。入侵检测和线内模式集成了重组 IPfragment、重组TCP 会话及状态协议分析的功能。线内模式通过 iptables 替 代 libcap 获得数据包, 从而使系统变成具有过滤和放行数据 包能力的IPS(IntrusionPreventionSystem 2。 图1是Snort 的工作流程。2流重组S n o r t 使 用 s t r e a m 4模块进行 T C P 流的重组和
6、状态 分析 3。Stream4由 MartinRoesch 于 2001年公布,包含两个可配置预处理模块 stream4和stream4_reassemble, 发布的初衷是为解决snort 针对 snot 攻击报警过于频繁的问题 3。由于 TCP 重组的实现 依赖于 TCP/IP 协议,在应用中受到 TCP/IP 协议先天安全 性不足的局限。因此,MartinRoesch 在这两个模块中增添 了许多抗攻击的功能, 并设计成可供用户通过配置选择使用。 配置选项的说明请参照 snort 用户手册 1。下面分析 TCP 流s e a r c h学术研究 66重组的过程及使用的数据结构。目前 Sno
7、rt 通过两种方式缓 存重组前的数据包:Hash 表与 SplayTree。2.1Hash 表方式H a s h 表方 式是 snort 的默 认方式, 其以会 话的源 IP、 目的 IP、源端口、目 的端口 4个参数为 key 计算得出一个tableindex, 该tableindex指向一个双向链表, 链表 的每一个节点即为一个 Hash 节点。一个 Hash 节点里面包含 有一个会话的信息,若需要查找一个会话的信息,只需根据 该会话或者该会话中的一个 TCP 包的 key 计算 tableindex 得出 tableindex, 再利用 table index中所存地址找到双向链表, 遍
8、历该链表, 查找与 key 匹配的节 点即可找到会话信息。数据包与 会话的匹配流程如图 2所示, Hash 表用作储存会话信息的数据结构 如图 3(a,Hashnode 节点的内部 数据结构如图 3(b, session节点的 内部数据结构如图3(c, stream流 的内部数据结构如图 3(d。使用 Hash 表及双链表结构的形式来存 储及查找可以加快重组时数据包 匹配会话的速度,在高流量的环 境下,对每一个 T C P 包的快速处理是十分必要的。重组过程中,当下述三种情况之一出现时(对以 Splay Tree 储存的情形同样适用, Snort 将会把 Hash表或二叉树中 属于一次会话的所
9、有数据包组合成一个大数据包(仍以Packet 结构定义 :当一个会话结束、当内存耗尽、当收集了某个数 量大小的数据 (该大小值为随机数, 以免被攻击者识破。组合大数据包时,Snort 将遍历 Hash 表节点中指向的双 向链表的每一节点(以 StreamPacketData 结构定义, 将节点 中的 payload 拷贝到大数据包中data 指向的缓存(在Stream4模块初始化时 Snort 已分配一特定大小的内存于该缓存中, 并将大数据包传递给余下的预处理模块处理,当所有的预处理模块处理完毕, Snort才将该会话包交给规则检测引 擎作规则匹配。2.2SplayTree形式SplayTre
10、e 也叫伸展树,当 SplayTree 的一个 节点被访问时,该节点经过一系列的旋转被搬移到树 根,这样可以让计算机执行尽量少的访问即到达目标 节点。由于该特性,它特别适用于 TCP 重组中对每个 TCP 包进行会话匹配。图 4为使用 SplayTree 进行会 话匹配的流程。 注意snort在存储一个会话的所有数据 包时也使用了 Splaytree 结构。 使用 SplayTree方式 重组流所使用的数据结构仍有 Session 、Stream 和 StreamPacketData,不过在相应域中将指针成员改成了 ubi_btRoot 或者 ubi_trNode 结构。无论是 Hash 表或
11、 SplayTree 形式,Snort 均使用了三 个独立的内存块来储存每一个被重组的 TCP 包:一是 Packet 结构定义的 p 数据包中的 data 成员指向的空间;二是将数据 包 p 存进 Stream 中以 StreamPacketData 结构定义的数据包节点时,数据包节点中 pkt 成员指向的空 间;三是存放同一会话包的大数据包中 data 成员指向的空间。Hash 表的插入和 删除的算法复杂度为 O(1, 而SplayTree 的复杂度为 O(log(n。Hash 表的查找复 杂度为 O(n/m,其中 n 为 Hash 表中会话 的个数,m 为 H a s h 表的桶个数,当
12、对象 在 H a s h 表中均匀分布和 H a s h 表的桶个 数与对象个数一样多时,Hash 表查找复 杂度可接近 O(1,这也是 Snort 优先使用 Hash 表作为会话储存结构的原因之一。3流重组对攻击的防御策略针对重组的攻击分五类:图 2Hash 表作储存方式的 TCP 重组流程图4SplayTree作储存方式的TCP 重组流程学术研究 A c a d e 信息安全与通信保密2007. 267 对DS主机或者IDS软件缺陷的攻击。 躲避攻击(e v a s i o n 。 插 入 攻 击 (I n s e r t i o n 。 干扰攻击, 该类攻击利用大量攻击来使I D S疯狂
13、报 警, 而使真正有威胁的攻击未能被及时处理。 拒绝服务攻击(Dos, 包括所有类型资源的耗尽, 如 硬盘、 内存、 CPU等。由于 Snort 的开源性,使第一类攻击能及早被发现而排 除。躲避攻击的一个例子是 TCPSYN 包可包含数据,当 IDS 不处理这些数据时,就造成遗漏包。插入攻击包括 checksum 攻击(利用某些 IDS 不检测 checksum 的漏洞和 TTL 攻击(让 数据包刚好到达 IDS 而不能到达受保护主机。Snort 已有专 门的流程来抵御这几类攻击。防御躲避和插入攻击是一对矛盾,如何找到合适的切 入点, 是今后需要考虑的问题。 干扰攻击是攻击者利用 IDS 自身
14、的攻击规则产生的攻击,一旦这些攻击包被发送到 IDS 所在的网段,IDS 会陷入报警洪流。Snort 采用状态检 测和非法包检测机制,使根本不被受保护主机接受的包无 法进入 T C P 重组流程。拒绝服务攻击包括很广的范畴,攻 击者可以: 发送大量数据包到IDS网段, 让IDS主机网卡读不 过来。 发送大量会被I D S接收并送至内核处理的包, 耗尽 I D S缓存。 制造大量攻击让采用记录攻击模式运作的I D S不断 往硬盘写记录, 耗尽硬盘。 找出对I D S主机C P U时间消耗量最大的包, 制造大量该类包, 发送到IDS网段。拒绝服务攻击不仅妨碍流重组, 也是对整个 IDS的攻击。 对
15、于该类攻击,Snort 的状态检测和非法包检测机制能筛出 垃圾包,内核中对会话池定期按规则的清理也能有效降低此 类攻击的危害。第 2、3、4类攻击是由于 IDS 与受保护系统 处理包的策略不一致造成的,而如果针对每一类操作系统制 定独立数据包处理入口及处理流程又将大大增加 IDS 的软件 复杂性并降低其处理速度。如何比较完善地解决这个问题, 目前还没有有效的方案。4结束语本文分析了 Snort 入侵检测系统的 TCP 流重组的原理和 实现流程,给出了重组过程中使用的关键数据结构。并对针 对重组模块的各种攻击做了介绍,同时研究了 Snort 对这些 攻击的防御策略。文章最后提出 Snort 存在的一些问题,为 研究发展 Snort 作了一些探讨。参考文献1TheSnortProject.SnortUserManual.http :/www.snort.org,2006.2TheSnortCoreTeam.TheSnortFAQ.http:/www.snort.org,2006.3JayBeale, JamesCFoster, JeffreyPoslunsetc. Snort2.0IntrusionDetection. 198-213.4韩东海, 王超, 李群.入侵检测系统实例剖析.北京 :清华大学出版社,2002.-
限制150内