基于网络引擎入侵检测系统的研究与实现
扫描二维码
随时随地手机看文章
摘要:基于滥用和基于异常的检测模型是IDS系统两大检测模型,其对应的技术即为网络引擎和主机代理。本文主机代理采用基于异常的模型进行入侵检测,与数据库中存储的入侵特征库进行比较,从而判断是否是一次攻击,从而实现一个网络引擎可以监视具有多台主机的整个网段,通过网络引擎实现企业网络中所有组件不受攻击。
关键词:检测模型;网络引擎;主机代理;特征库
近年来入侵检测系统(IDS)成为一个非常活跃的研究领域。所谓入侵检测,就是通过从计算机网络或计算机系统中的若干关键点收集信息并对其进行分析,以发现网络或系统中是否有违反安全策略的行为和遭到袭击的迹象。在二十世纪八十年代,大多数入侵者都是高水平的专家,他们经常自己研究入侵系统的方法,而很少使用自动工具和现成的代码。虽然现在的入侵者的整体技术水平越来越不如以前,但是现在的攻击工具却越来越高级。这使得任何人都可以使用现成的工具来攻击Internet上的计算机系统。入侵检测系统的目标是将攻击的各种表象特征化,以确认所有真正的攻击而且又不误认非攻击活动。
1 网络引擎引入及设计
网络引擎通过分析网络上传输的数据包,得到可能入侵的信息。它不仅是一个数据产生和传输的工具,也具有一定的分析能力。它的功能基本上相当于一个完整的基于网络的入侵检测系统。为了提高网络引擎的检测的速度和准确度,首先,基于已知的攻击手段来建立黑客攻击的元数据库,保存所有已知的黑客攻击知识,按照其类别进行分类。其次,采用建立模糊模型来对网络引擎上报事件进行分析。
网安入侵检测系统中的网络引擎是在windows NT平台上,使用Visual C++6.0编程实现。网络引擎分为以下几个模块:数据包截获、协议分析、数据分析。结构如图1所示。
1)数据包截获 该模块将网络接口设置为混杂模式,将流经网络的数据包截取下来,供协议分析模块使用。由于效率的需要,有时要根据设置过滤网络上的一些数据包,如特定IP、特定MAC地址、特定协议的数据包。该模块的过滤功能的效率是该网络监听的关键,因为对于网络上的每一数据包都会使用该模块过滤,判断是否符合过滤条件。低效率的过滤程序会导致数据包丢失、分析部分来不及处理。
为提高效率,本系统采用了专门为数据监听应用程序设计的开发包Winpcap来实现这模块,开发包中内置的内核层所实现的BPF过滤机制和许多接口函数,不但能够提高监听部分的效率,也降低了开发的难度。同时Winpcap是从UNIX平台上的Libpcap移植过来的,它们具有相同的接口,减轻了不同平台上开发网络代理的难度。Winpcap有3部分组成:一个数据包监听设备驱动程序,一个低级的动态连接库和一个高级的静态连接库。数据包监听设备驱动程序直接从数据链路层取得网络数据包,并不加修改地传递给运行在用户层的应用程序。数据包监听设备驱动程序支持BPF过滤机制,可以灵活地设置过滤规则。低级的动态链接库运行在用户层,它把应用程序和数据包监听设备驱动程序隔离开来,使得应用程序可以不加修改地在不同Windows系统上运行。高级静态链接库和应用程序编译在一起,它使用低级动态链接库提供的服务,向应用程序提供完善的监听接口。
2)协议分析 协议分析的功能是辨别数据包的协议类型,以便使用相应的数据分析程序来检测数据包。把所有的协议构成一棵协议树,一个特定的协议是该树结构中的一个节点,可以用一棵二又树来表示,如图2所示。
一个网络数据包的分析就是一条从根到某个叶子的路径。在程序中动态地维护和配置此树结构即可实现非常灵活的协议分析功能。在该树结构中可以加入自定义的协议节点,如在HTTP协议中可以把请求URL列入该树中作为一个点,再将URL中不同的方法作为子节点,这样可以细化分析数据,提高检测效率。树的结点数据结构中包含以下信息:该协议的特征、协议名称、协议代号,下级协议代号,协议对应的数据分析函数链表。协议名称是该协议的唯一标志。协议代号是为了提高分析速度用的编号。下级协议代号是在协议树中其父结点的编号,如TCP的下级协议是IP协议。协议特征是用于判定一个数据包是否为该协议的特征数据,这是协议分析模块判断该数据包的协议类型的主要依据。数据分析函数链表是包含对该协议进行检测的所有函数的链表。该链表的每一节点包含可配置的数据,如是否启动该检测函数等。
3)数据分析 数据分析模块的功能是分析某一特定协议数据。一个数据分析函数检查一种协议类型的入侵,这样可以方便地进行配置。一个协议数据可能有多个数据分析函数来处理它,这些函数地被放到一个链表中。一般情况下,数据分析尽可能地放到树结构的叶子节点上或尽可能地靠近叶子节点,因为树根部分调用次数最多,过多的数据分析函数聚集在此会严重影响系统的性能。同时叶子节点上的协议明确,分析程序可以少做一些冗余的工作,也由此提高了系统的处理速度。数据分析函数不仅仅由数据包触发,也可以是系统定义的某一个事件来触发。如时间、特定的数据包到来、管理员启动、某种数据分析的结果等都可以触发一个数据分析函数的启动检测。这些灵活的触发方式提供了良好的可配置性,也提供了一个开放的、分布的平台使各种分析技术在一个系统中工作。
数据分析的方法是入侵检测系统的核心。使用了快速的模式匹配算法,所有的攻击方法被表示为模式信号,存放在入侵特征数据库中,当前的数据如果和数据库中某种特征匹配,就指出这是这种入侵行为。如发现一个HTTP请求某个服务器上的“/cgi—bin/phf”,这很可能是一个攻击者正在寻找系统的CGI漏洞。
本文设计这个体系结构时充分考虑了系统的开放性,可以向系统中添加任何一种分析方法,也可以把多种分析方法同时运用到系统中,甚至在不关闭系统的状态下向系统动态地添加新的数据分析功能。这充分保证了系统的可靠安全服务。动态添加数据分析功能是通过添加新的动态连接库中的数据分析函数来实现的。对于已经有的分析功能,可以在入侵特征数据库中添加新的入侵特征,以增强现有模式匹配分析方法的检测能力。
2 检测规则和匹配算法
网络引擎的实现中,最为关键的部分是数据分析模块。该模块中涉及到两个问题:如何描述入侵行为;使用什么算法来快速检测入侵行为的存在。
在实现中,本文使用了与SNORT兼容的检测规则来描述入侵行为,使用一种改进的Boyer-Moore-Horspool算法来进行匹配。模式匹配是第一代和第二代入侵检测系统所使用的基于攻击特征的网络数据包分析技术。它的分析速度快、误报率小等优点是其他分析方法不可比拟的。协议分析有效利用了网络协议的层次性和相关协议的知识,快速地判断攻击特征是否存在。它的高效使得匹配的计算量大幅度减小。
本文在网络引擎的数据分析模块中使用协议分析和模式匹配结合的方法来分析网络数据包。首先使用协议分析来判断要进行哪种类型的特征检测,然后使用检测规则来进行匹配。
2.1 检测规则
每一个基于模式匹配的人检测方法都需要一个已定的入侵模式。这就需要一种对入侵行为的描述方法。现在的各种入侵检测系统中的描述方法各有不同,每个厂商定义自己的描述方法,每种方法各有优缺点。在网安入侵检测系统中,采用了Snort的入侵行为描述方法。Snort是一个开放源代码的轻量级的基于网络的入侵检测系统。这种描述方法简单、易于实现,能够描述绝大多数的入侵行为。由于其简单,因此检测速度比较快。每条规则分为逻辑上的两部分:规则头部和规则选项。规则头部包含规则的操作、协议、源IP地址和目标IP地址及其网络掩码和端口。规则选项包括报警信息及需要检测模式信息。以下是一个例子:
alert tcp any any->192.168.1.0/24 111(content:“|00 01 86 a5|”;msg:“mounted access”;)
以上规则描述了:任何使用TCP协议连接网络IP地址192.168.1.1到192.168.1.255的任何主机的111端口的数据包中,如果出现了二进制数据00 01 86 a5,便发出警告信息mounted access。在圆括号前的部分是规则头部,在圆括号中的部分是规则选项。规则选项部分中冒号前面的词组称为选项关键字。规则选项不是规则的必需部分,它只是用来定义收集特定数据包的特定特征。一条规则中不同部分必须同时满足才能执行,相当于“与”操作。而同一个规则数据库文件中的所有规则之间相当于一个“或”操作。规则头部包含了定义数据包“从哪里来,到什么地方去、干什么”以及发现满足这个规则所有条件的数据包时应该干什么的信息。规则的第一项是规则操作,第二项是协议,第三项是IP地址和端口。规则操作说明当发现适合条件的数据包时应该做些什么。有3种操作:alert、log和pass。
alert:使用选定的告警方法产生警报,并记录这个数据包。
log:记录该数据包。
pass:忽略该数据包。
规则头部的第二部分是协议。
规则头部的第三部分是IP地址和端口。关键字“any”可以用来定义任何IP地址。网络引擎不提供从主机名称到IP地址的转换,所以IP地址规定为点分十进制的IP地址格式,在IP地址后指定网络掩码。例如任何由外部网络发起的连接可以表示为:
alert tcp ! 192.168.1.0/24 any->192.168.1.0/24 111
端口号可以用几种方法指定:用“any”、数字、范围以及用“非”操作符。“any”指定任意端口。静态数值指定一个单一端口,如80为HTYP,23为TELNET等。指定端口范围用“:”,它可以指定一个范围内的所有端口。如:
log udp any any->192.168.1.0/24 1:1024
记录从任意主机发起的到目标网络的任何主机上的1~1 024端口的UDP协议数据包。
log tcp any any->192.168.1.0/24:6000
记录从任意主机发起的到目标网络的任何主机上的端口号小于等于6 000的TCP协议数据。
log top any:1024->192.168.1.0/24 500:
2.2 匹配算法
匹配算法是检测引擎的关键,它直接影响系统的实时性能。在网络数据包搜索入侵特征时,需要一个有效的字符串搜索算法。字符串搜索算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore)。两个算法在最坏情况下均具有线性的搜索时间。在实用上,KMP算法并不比最简单的c库函数strstr()快多少,而BM算法则往往比KMP算法快上3~5倍。但是BM算法还不是最快的算法,还有很多改进的BM算法存在。
第一次匹配结果是在第二个字符处发现不匹配,于是要把子串往后移动。但是该移动多少呢?最简单的做法是移动一个字符位置;KMP是利用已经匹配部分的信息来移动;BM算法是做反向比较,并根据已经匹配的部分来确定移动量。Boyer-Moore-Hompool算法根据被比较串对齐的最后一个字符(r)来决定位移量的多少。本文的方法是根据紧跟在当前子串之后的那个字符(例子中的i)获得位移量。
显然,由于上一次匹配的失败,移动是必然的,因此,设移动步数为N,则N≥1。但N的最大值是多少?如果这个字符在模式串中,显然应该根据模式串的位置来决定。如果它在模式串中就没有出现,显然连它自己也不用比较了,因此可以移动到该字符的下一个字符开始比较。以上面的例子,子串“search”中并不存在“i”,则说明可以直接跳过一大片,从“i”之后的那个字符开始作下一步的比较,如下:
substring searching procedure
search^
比较的结果,第1个字符又不匹配,再看子串后面的那个字符,是“r”,它在子串中出现在倒数第3位,于是把子串向前移动3位,使2个“r”对齐,如下:
substring searching procedure
search
这次匹配成功了。回顾整个过程,只移动了两次子串就找到了匹配位置,可以看出,用这个算法,每一步的移动量都比BMH算法要大,所以比BMH算法更快。
以下是用类封装的搜索算法:
2.3 检测举例
以下是网络引擎判断某个网络数据包是否是CGI攻击的一个示例,协议规范指出以太网络数据包中第13字节处包含了2个字节的第三层协议标识。本入侵检测系统利用该知识开始第1步检测:跳过前面12个字节,读取13字节处的2字节协议标识:08。根据协议规范可以判断这个网络数据包是IP包。IP协议规定IP包的第24字节处有一个1字节的第四层协议标识。因此系统跳过的15到24字节直接读取第四层协议标识:06,这个数据包是TCP协议。TCP协议在第35字节处有一个2字节的应用层协议标识(端口号)。于是系统跳过第25到34字节直接读取第35字节的端口号:80。
该数据包是一个HTTP协议的数据包。HTTP协议规定第55字节是URL开始处,检测特征“GET/cgi—bin/./phf”,因此对这个URL进行模式匹配。可以看出,利用协议分析可以减小模式匹配的计算量,提高匹配的精确度,减少误报率。
3 主机代理
基于主机的入侵检测要依赖于特定的操作系统和审计跟踪日志获取信息,此类系统的原始数据来源受到所依附具体操作系统平台的限制,系统的实现主要针对某种特定的系统平台,在环境适应性、可移植性方面问题较多。在获取高层信息以及实现一些特殊功能时,如针对系统资源情况的审计方面具有无法替代的作用。本文设计的入侵检测系统应用于Windows操作系统。
3.1 数据来源
主机代理的数据来源不像网络引擎的数据来源那样单一,它可以在系统所能够访问的所有地方获得数据来分析。网安入侵检测系统主机代理的数据来源有:
1)系统和网络日志文件 黑客经常在系统日志文件中留下他们的踪迹,因此,充分利用系统和网络日志文件信息是检测入侵的必要条件。日志中包含发生在系统和网络上的不寻常和不期望活动的证据,这些证据可以指出有人正在入侵或己成功入侵了系统。通过查看日志文件,能够发现成功的入侵或入侵企图,并很快地启动相应的应急响应程序。日志文件中记录了各种行为类型,每种类型又包含不同的信息,例如记录“用户活动”类型的日志,就包含登录、用户ID改变、用户对文件的访问、授权和认证信息等内容。很显然地,对用户活动来讲,不正常的或不期望的行为就是重复登录失败、登录到不期望的位置以及非授权的企图访问重要文件等等。
2)目录和文件中的不期望的改变 网络环境中的文件系统包含很多软件和数据文件,包含重要信息的文件和私有数据文件经常是黑客修改或破坏的目标。目录和文件中的不期望的改变(包括增加、删除、修改),特别是那些正常情况下限制访问的,很可能就是一种入侵产生的指示和信号。黑客经常替换、修改和破坏他们获得访问权的系统上的文件,同时为了隐藏系统中他们的表现及活动痕迹,都会尽力去替换系统程序或修改系统日志文件。
3)程序执行中的不期望行为 网络系统上的程序执行一般包括操作系统、网络服务、用户启动的程序和特定目的的应用,例如数据库服务器。每个在系统上执行的程序由一到多个进程来实现。每个进程执行在具有不同权限的环境中,这种环境控制着进程可访问的系统资源、程序和数据文件等。一个进程的执行行为由它运行时执行的操作来表现,操作执行的方式不同,它利用的系统资源也就不同。操作包括计算、文件传输、设备和其它进程,以及与网络间其他进程的通讯。一个进程出现了不期望的行为可能表明黑客正在入侵你的系统。黑客可能会将程序或服务的运行分解,从而导致它失败,或者是以非用户或管理员意图的方式操作。
3.2 代理结构
从以上可以看出,主机代理的数据来源比网络引擎复杂得多,由于数据源的不同,分析方法也各不一样。本系统的主机代理分为日志分析、文件检测、用户行为监测、主机网络接口检测。
4 结束语
本文设计的入侵检测系统使用了网络引擎来检测流经网络的数据包,一个网络引擎可以监视具有多台主机的整个网段,从路由器的基础设施到应用程序的访问,可以说网络引擎能够检测企业网络中所有组件所受到的攻击。不过网络引擎在下列情况下也有局限性:
1)快速网络 随着网络速度的加快,有时候网络引擎的工作速度无法跟上网络数据传输的速度。
2)加密数据 如果网络数据被加密的话,网络引擎即不能起作用,原因是它无法正确地“看到”网络数据。
3)交换网络 在交换网络中,是不可能从一个中央位置处看见所有网络数据的。因为通常网络数据都是停留在交换的网段内部。而利用主机代理,就不受上述情况的限制。利用网络引擎和主机代理,将基于网络的入侵检测系统和基于主机的入侵检测系统结合起来,就构成了实现网络入侵检测的比较可靠的解决方案。