由于互联网应用的大规模的快速增长,传统的防火墙已经不能满足互联网对安全的需求,因此网络安全作为一个无法回避的问题被提出。入侵检测系统IDS,Intrusion Detection System,作为一种新的安全防御措施,是传统防火墙的补充策略,对网络安全的发展以及应用具有十分重要的意义。协议分析技术凭借着其诸多优势在网络安全领域迅速发展起来。由于其具备解析数据包、探测分散的多个数据包中的网络攻击、减少误报和漏报率、真正的高性能等多项技术优势,常常被用来和模式匹配算法结合起来,在误用检测系统中使用。用Ubuntu系统作为开发平台,开发一基于协议分析的入侵检测系统, 该系统主要对捕获的数据包进行协议解析,提取有效数据,通过与特定攻击的规则进行匹配,找出可疑或攻击行为,做出响应并记录结果。
论文主要工作如下:
1、论文首先分析了现有入侵检测产品所存在的问题。针对这些问题,提出了选用协议分析和遗传神经网络技术来构建入侵检测系统中规则检测器和行为检测器的设计思路。
2、利用协议的高规则性, 进行协议树、协议解码以及协议分析过程的设计,给出协议分析检测器的基本步骤;结合遗传神经网络算法的思想设计了行为检测器,并详细分析了适应度函数、交叉算子、变异算子以及其他控制参数,给出了核心参数的确定方法。
3、根据本文入侵检测模型的设计方法,结合各模块的实现原理,完成了基于规则与行为的入侵检测模型的开发。其中,在数据采集模块中利用Winpcap函数定义了数据捕获机制的核心数据结构和函数。
关键词:入侵检测,协议分析技术,遗传算法,神经网络,遗传神经网络 论文类型:
Subject: Potocol analysis-based intrusion detection system Specialty: Computer Aplication Name:
Supervisor: Professor ABSTRACT
Since large-scale Internet applications, the rapid growth of traditional firewalls can not meet the demand for Internet security, so the network security as an unavoidable problem have been proposed. Intrusion Detection System IDS, Intrusion Detection System, as a new security defense measures supplement the traditional firewall strategy, the development and application of network security is of great significance. Protocol analysis technology by virtue of its many advantages in the field of network security has developed rapidly. Because of its analytical data packets to detect a plurality of data packets distributed network attacks and reduce false positives and false negative rate, the real high number of technical advantages, are often used together and pattern matching algorithms, in error with the detection system.Ubuntu system as a development platform used to develop an intrusion detection based on protocol analysis system, which mainly captured packets for protocol analysis, extract valid data, with particular attack matching rules to identify suspicious or aggressive behavior, do the response and the results recorded.
Thesis work is as follows:
1,The paper firstly analyzes the existing intrusion detection products the problems. To solve these problems, proposed optional protocol analysis and genetic neural network technology to build intrusion detection system rules and behavior detector detector design ideas.
2, The use of high regularity protocol, the protocol tree, protocol decoding and protocol analysis process design, protocol analysis detector gives the basic steps; combines the idea of genetic neural network algorithm designed behavior detector, and a detailed analysis of the adaptation fitness function, crossover operator, mutation operator and other control parameters, gives the kernel parameter determination method.
3, Intrusion detection model based on this design approach, combined with the realization of the principle of each module to complete the rule-based intrusion detection model and behavioral development. Among them, the data acquisition module using Winpcap function defines the data capture mechanism the core data structure and functions.
KEY WORDS: Intrusion Detection, Protocol Analysis Technology, Genetic Algorithm, Neural Network, Genetic Neural Network
Dissertation Type: 目录
第1章绪论………………………1 1.1 本文研究背景………………………1 1.2 国内外研究现状………………………1
1.2.1 入侵检测系统的发展历史………………………1 1.2.2 公共入侵检测系统………………………2 1.2.3 入侵检测的分类………………………4 1.2.4 入侵检测方法………………………5 1.2.5 现有的入侵检测产品………………………7
1.2.6 入侵检测面临的问题及其发展趋势………………………7 1.3 本文研究内容………………………9 第2章协议分析技术………………………10 2.1 网络协议简介………………………10 2.2 协议分析简介………………………10 2.2.1 协议分析概念………………………10 2.2.2 协议分析原理………………………11 2.2.3 协议分析核心技术………………………11 2.3 协议分析入侵检测方法介绍………………………12 2.3.1 简单协议分析检测方法………………………12 2.3.2 协议状态分析检测方法………………………15 2.4 本章小结………………………16
第3章神经网络和遗传算法………………………17
3.1 神经网络………………………17 3.1.1 神经网络的概念………………………17 3.1.2 BP算法………………………17 3.1.3 BP网络………………………18
3.1.4 BP网络在入侵检测中的应用………………………20 3.2 遗传算法………………………21
3.2.1 遗传算法的基本概念………………………21 3.2.2 遗传算法的实现………………………21
3.3 利用遗传算法训练神经网络………………………22 3.4 遗传神经网络在入侵检测中的应用………………………23 3.5 本章小结………………………23
第4章基于协议分析的入侵检测系统设计………………………24 4.1 基于协议分析的网络入侵模型的基本框架………………………24 4.2 数据采集模块的设计………………………25 4.2.1 Winpcap的概念………………………26 4.2.2 Winpcap的功能及优缺点………………………26 4.2.3 Winpcap的组成………………………27 4.3 基于规则检测器的设计………………………27 4.3.1 设计原则………………………27
4.3.2 规则检测器的工作流程设计………………………27 4.4 基于行为检测器的设计………………………30 4.4.1 行为检测器的设计思想………………………31 4.4.2 行为检测器的实现步骤………………………31 4.4.3 遗传神经网络算法设计………………………32 4.4.4 两种检测技术的结合………………………34
4.5 数据存储模块的设计………………………34 4.6 控制台模块的设计………………………35 4.7 本章小结………………………36
第5章基于协议分析的入侵检测系统实现………………………37 5.1 开发工具简介………………………37 5.2 数据采集模块………………………38 5.2.1 数据包格式………………………38 5.2.2 数据包的读取………………………39 5.3 数据分析模块的实现………………………41 5.3.1 预处理器检测………………………41 5.3.2 规则库检测过程………………………42 5.4 系统运行结果与分析………………………54 第6章总结与展望………………………57 6.1 总结………………………57 6.2 展望………………………57 参考文献………………………59 致谢………………………62
攻读硕士学位期间的研究成果………………………63 第1章绪论 1.1 本文研究背景
计算机网络技术的广泛应用和互联网的快速发展使得计算机信息网络作为现代信息社会的基础设施,广泛深入到人们的工作和生活当中,我们畅游网络,进行信息传递,开展各种社会活动,它给我们的工作和生活带来了翻天覆地的变化,已经无法想象没有网络的世界会是什么样。当然,计算机网络在带给我们极大便利的同时,计算机安全问题也随之而来,并且日益突出,计算机病毒的感染与传播、网络黑客的攻
击与破坏、计算机网络犯罪等违法事件的数量迅速增长,给我们的网络生活蒙上了一层阴影,网络安全问题成为人们普遍关注并且日益重视的问题。
近些年来,协议分析技术凭借着其诸多优势迅速发展起来,广泛应用在网络安全领域,比如网络诊断和故障排除、防火墙、移动通信以及入侵检测等方向都得到大量使用。由于其具备解析数据包、探测分散的多个数据包中的网络攻击、减少误报和漏报率、真正的高性能等多项技术优势,常常被用来和模式匹配算法结合起来,在误用检测系统中使用。协议分析技术作为入侵检测技术的一个分支,是近年来网络入侵检测研究领域中的一大热点。
1.2 国内外研究现状
1.2.1 入侵检测系统的发展历史
入侵检测系统IDS(Intrusion Detection System)[1]是一项新的网络安全技术,它是对静态防御技术的一个有效补充,是一种主动防御黑客攻击的网络安全技术。入侵检测是检测计算机网络和系统以发现违反安全策略事件的过程。
入侵检测技术自20世纪80年代提出以来经过20多年的不断发展,从最初的一种有价值的研究想法和单纯的理论模式,迅速发展出种类繁多的实际原型系统,并且在近10年内涌现出许多商用入侵检测系统产品,成为计算机安全防护领域内不可缺少的一种重要的安全防护技术。期间的发展经历了许多阶段。
1980年,Aderson[2]提出了改进安全审计系统的建议,以便用于检测计算机用户的非授权活动,同时,提出了基本的检测思路。
1984-1986年,Denning和Neumann设计和实现了著名的IDES[3]。IDES系统采纳了Anderson提出的若干建议。IDES系统包括了统计分析组件和专家系统组件,同时实现了基于统计分析的异常检测技术和基于规则的滥用检测技术。
1987年,Dorothy Denning发表了经典的论文“An Intrusion Detection Modal”,提出入侵检测的基本模型[4],并提出了几种可用于入侵检测的统计分析模型。
1989-1991年,Stephen Smaha设计开发了Haystack入侵检测系统。Haystack同时采用了两种不同的统计分析检测技术,来发现异常的用户活动。
1990年,加州大学Davis分校Todd Heberlien发表“A Network Security Monitor”—NSM[5],标志着入侵检测将网络数据包作为实际输入的信息源。
1991年,在NSM系统和Haystack系统的基础上,Stepen Smaha主持开发了分布式入侵检测技术DIDS(Distribute Intrusion Detection System)[6]。DIDS是首次将主机入侵检测和网络入侵检测技术进行集成的一次尝试,它具备在目标网络环境下跟踪特户异常活动的能力[7]。
1992年,加州大学圣巴巴拉分校的Porras和Ilgun提出了状态转移分析的入侵检测技术,并实现了原型系统USTAT,之后发展出NSTAT,NetSTAT等系统。同时期,Kathleen Jackson在Los Alamos国家实验室设计开发了NADIR(Network Anomaly Detection and Intrusion Reporter)[8]入侵检测系统,该系统用于监控Los Alamos的内部计算网络环境。
1994年,Porras在SRI开发出NIDES(Next-Generation Intrusion Detection System)[9]系统,在系统整体结构设计和统计分析算法中有较大的改进。进一步,SRI开发了用于分布式环境的EMERALD[10]系统。
1995年,普渡大学的S.Kumar在STAT的思想基础上,提出了基于有色Petri网的模式匹配计算模型,并实现了IDIOT[11]原型系统。
1997年,Cisco公司开始将入侵检测技术嵌入到路由器,同时,ISS公司发布了基于Windows平台的RealSecure[12]入侵检测系统。
1998年,Ross Anderson和Abida Khattak[13]将信息检索技术引进了入侵检测系统。
2000年,普渡大学的Diego Zamboni和E.Spafford提出了入侵检测的自治代理结构,并实现了原型系统AAFID[14]系统。
1.2.2 公共入侵检测系统
CIDF(Common Intrusion Detection Framework)是一个开放组织,早期由美国国防部高级研究计划局赞助研究,现在由CIDF工作组负责。CIDF已经形成了一套比较完整的规范,它定义了IDS的框架结构、IDS描述检测信息的标准语言以及IDS各组件之间的通信协议。凡是符合CIDF规范的IDS都可以共享检测信息,可以相互通信,协同工作,以及和其它系统配合实施统一的配置响应和恢复策略。CIDF的主要作用在于集成各种IDS,使之协同工作,实现各IDS之间的组件重用[15]。
北京启明星辰公司的天闻入侵检测系统。天闻网络入侵检测系统采用了新一代的入侵检测技术,包括基于状态的协议分析技术、规范的入侵特征描述语言、准确的特征分析和提取、标准的安全信息知识库等。它将网络入侵检测和主机入侵检测集成在一个管理控制中心进行集中管理,在一个管理控制中心既可以管理网络的探测引擎又可以管理主机的探测代理,针对不同的引擎或代理制定不同的策略。
上海金诺网安入侵检测系统KIDS。它采用了智能检测技术,综合了特征匹配、协议分析、流量异常监测等技术的特点。在保证检测到已知的最新攻击行为的前提下,通过协议状态分析的方法,对一些未知的非法入侵行为进行分析、判断,为发现新型入侵提供了帮助。
CIDF将入侵检测系统分为四个基本部分:事件产生器、事件分析器、事件数据库和响应单元。其模型如图1-1所示:
图1-1 CIDF模型 Fig.1-1 CIDF Model 1.事件产生器
事件产生器从网络数据源中收集事件,并将这些事件转换成相应的格式用以传送给其它组件。 2.事件分析器
事件分析器既是一个特征检测工具,用于在一个事件序列中检查是否有已知的攻击特征;也是一个统计分析工具,检查现在的事件是否与以前某个事件来自同一个事件序列,将有关联的事件放到一起,以利于以后的进一步分析。
3.事件数据库
事件数据库用来存储事件产生器和事件分析器产生的临时事件,以备系统分析的时候使用。 4.响应单元
响应单元针对事件产生器和事件分析器分析到的入侵行为采取相应的响应措施。
在检测到入侵攻击后,基于网络的入侵检测系统的响应单元主要有两类响应方式:被动响应方式和主动响应方式。被动响应方式是系统在检测出入侵攻击后只是用报警和日志的方式通知管理员,具体处理工作由管理员完成;主动响应方式是系统在检测出入侵攻击后可以自动对攻击的目标系统或者相应网络设备做出修改,制止入侵行为。
1.2.3 入侵检测的分类
对于目前常用的入侵检测系统,我们可以从以下三个方面进行分类。 1.按照数据来源分类
根据入侵检测的数据来源和系统结构,入侵检测系统可以分为三类: (1)基于主机的入侵检测系统(HIDS)[16]
基于主机的入侵检测系统主要是针对系统的审计日志进行分析,一般只能检测该主机上发生的入侵行为。
(2)基于网络的入侵检测系统(NIDS)[17]
基于网络的入侵检测系统的输入数据来源于网络数据包,该类系统一般监听整个网段上传输的信息流,通过捕获网络数据包,进行分析,检测该网段上是否有网络入侵事件发生。
(3)分布式入侵检测系统
分布式入侵检测系统一般由多个部件组成。分布式网络入侵检测系统是通过中心控制分布在网络中的部件进行数据采集、数据分析,然后进行数据汇总;若发现入侵行为,则发出警报。分布式入侵检测系统既可以检测到针对主机的入侵事件,也可以检测到针对整个网络上的主机的入侵行为。
2.按照工作方式分类
按照入侵检测的工作方式,入侵检测系统可分为两类: (1)离线检测系统
离线检测系统是非实时工作的系统,它是在事后对审计事件进行分析,从中检查是否有入侵活动。 (2)在线检测系统
在线检测系统是一种实时联机的检测系统,它包含对实时网络数据包分析以及实时主机的审计分析。 3.按照所采用的技术分类
按照入侵检测所采用的技术,入侵检测系统可分为两类: (1)基于规则的入侵检测系统
基于规则的入侵检测系统的核心就是误用检测技术(又称特征检测)。它假定所有入侵行为和手段(及其变种)都可以用一种模式来表示,系统的目标是检测主体活动是否符合这些模式。特征检测的关键
在于如何表达入侵的模式,把真正的入侵和正常的行为区分开来。这种检测技术也被称为基于知识(模型推理)的入侵检测。
(2)基于行为的入侵检测系统[18]
基于行为的入侵检测系统又叫异常检测系统。都有一个阀值,超过阀值的活动被定义为入侵,反之被视为合法的活动。
1.2.4 入侵检测方法 1.误用检测[19]
误用检测需要预先建立一个入侵模式库,然后将收集到的数据与预先确定的入侵模式库的各种攻击模式进行比较,如果发现模式库里的特征相符的行为,则认为是攻击。入侵模式库是将已知的攻击方法和技术的特征提取出来,来建立的一个知识库。当入侵发生时,入侵的已知模式(入侵标志)被用来确认入侵。当符合条件的线索被发现后,它就会触发一个警告,即任何不符合特定特征的活动将会被认为是合法和可以接受的,尽管其中可能包含有隐蔽的入侵行为。常用的误用检测技术大体上可以分为以下几种[20]:
(1)专家系统
专家系统是早期基于知识的检测中运用较多的一种方法。专家系统是将有关入侵的知识转化成if-then结构的规则,即将用来判断入侵事件的规则构成转化为if部分,将发现入侵事件后采取的相应措施转化成then部分。当其中某个if条件满足时,系统就判断为入侵行为发生。专家系统技术除了基于知识方法的缺点外,还有以下局限性:对攻击知识的提取很困难(属于知识工程问题);所需处理的数据量过大,效率不高。
(2)模式匹配系统
模式匹配检测系统是将已知的入侵特征编码成与审计记录相符合的模式,能够在审计记录中直接寻找相匹配的入侵事件。它的优点是检测准确率和效率相当高,但是该方法存在的弱点是需要不断升级以对付不断出现的黑客攻击手法,缺乏对从未出现过的黑客攻击的检测能力。简单模式匹配的特点是原理简单、扩展性好、检测效率高、可以实时检测,但是漏报率高,而且在性能上存在很大问题。著名的Snort就是采用了这种检测手段。
(3)协议分析技术
协议分析的功能是利用协议的高规则性来辨别数据包的协议类型,以便使用相应的数据分析程序来检测数据包。协议分析技术包含协议解码、数据重组、命令解析等技术。简单来说就是让入侵检测系统能够读懂协议,知道在数据包的不同位置所代表内容,并且准确判断出这些内容的真实含义。协议分析技术提高了性能、提高了准确性、系统资源开销小。
(4)状态转换分析技术
状态转换分析法使用系统状态和状态转换分析表达式将已知入侵行为转化特定攻击模式的特征行为序列。基于状态的特征检测可以使攻击行为在尚未达到侵入状态之前被检测到,从而及时采取相应措施阻止攻击行为的发生。但是,状态转换分析系统是属于研究性质的原型系统,不善于分析过分复杂的入侵事件,而且不能检测到与系统状态无关的入侵行为,在实际应用时必须与其他检测器协同工作。
2.异常检测
异常检测技术[21]是指根据用户的行为和系统资源的使用状况来判断是否存在网络入侵事件的发生。异常检测技术首先假设网络攻击行为是不常见的或者是异常的,区别于所有的正常行为。如果能够为用户和系统的所有正常行为总结活动规律并建立行为模型,那么入侵检测系统就可以将当前捕获到的网络行为与模型相比,若入侵行为偏离了正常的行为轨迹,就可以被检测出来。
常见的异常检测技术可以分为如下三种[22]: (1)概率统计方法
统计分析方法首先给系统对象(如用户、文件、目录和设备等)创建一个统计描述,统计正常使用时的一些测量属性(如访问次数、操作失败次数和延时等);测量属性的平均值和偏差被用来与网络、系统的行为进行比较,任何超过正常值(阀值)范围的观察值都认为有入侵行为发生。
(2)神经网络算法
基于神经网络入侵检测方法是将检测规则做为训练神经网络连续的信息单元,这样经过一段时间的训练后,神经网络系统就能作为一个入侵检测器输出来。
神经网络检测方法是针对统计入侵检测方法的改进,它能更好的处理原始数据的随机特性,并具有很好的抗干扰能力;但由于网络拓扑结构和各元素的权重很难有同一的标准,所以信息单元集的大小也很难有一个确定的值。太大,会浪费网络资源,甚至阻塞;太小,则输出性能不好。
(3)基于人工免疫的方法
此类系统分两个阶段来对入侵进行分析处理。第一个阶段建立一个正常行为轮廓的知识库,与这个特征轮廓的偏差被定义为异常;在检测的第二阶段,特征轮廓用于监控随后的异常系统行为。
1.2.5 现有的入侵检测产品
目前IDS产品有很多,下面我们列举几个相对比较成功的产品.其中,免费的产品Snort、shadow等。商品化的产品,国外的有IIS公司的RealSecure(分布式IDS)、Cisco的NetRanger(NIDS)、CyberSafe公司的Centrax(分布式IDS)、CA的eTrustIDS、Symantec的Intruder(HIDS)和NetProwler(NIDS)、NFR公司的NID 、NAI的CyberCop Monitor,Network Security Wizards公司的Dragon IDS系统(NIDS)等,国内的有金诺网安的KIDS、北方计算中心的NISDetector、启明星辰的天阗黑客入侵检测与预警系统、中科网威“天眼”网络入侵侦测系统、复旦光华S_AuditA入侵检测与安全审计系统等。
1.2.6 入侵检测面临的问题及其发展趋势 1.面临的主要问题 (1)误报
误报是入侵检测系统将正常或合法操作作为入侵事件进行报警。假警报不但令人讨厌,并且降低了入侵检测系统的效率;而且攻击者往往可以利用包结构伪造无威胁“正常”假警报,以诱使被攻击方把入侵检测系统关掉。
由于不同的网络及主机存在不同的安全问题,不同的入侵检测系统有各自的功能;因此没有一个入侵检测系统可以完全避免误报。
(2)漏报
漏报是指入侵检测系统将本来的入侵事件作为合法操作而放过,从而让受保护的网络和计算机受到攻击。
(3)有组织的攻击
攻击可以来自四方八面,特别是要检测出攻击者花费很长时间组织策划的高技术攻击是一件很难的事。
此外,高速网络技术,尤其是交换技术以及加密信道技术的发展,产生的巨大通信量对数据分析也提出了新的要求。
2.发展趋势
从总体上讲,目前除了完善常规的、传统的技术外,入侵检测统应重点加强与统计分析相关技术的研究。许多学者也在尝试研究新的检测方法,如采用自动代理主动防御方法,将免疫学原理应用到入侵检测的方法等。其主要发展方向可以概括为[23]:
(1)分布式入侵检测与CIDF。传统的入侵检测系统一般局限于单一的主机或网络架构,对异构系统及大规模网络的检测明显不足,同时不同的入侵检测系统之间不能协同工作。为此需要分布式入侵检测技术与CIDF。
(2)应用层入侵检测。许多入侵的语义只有在应用层才能理解,而目前的入侵检测系统仅能检测Web之类的通用协议,不能处理如Lotus Notes数据库系统等其他的应用系统。许多基于客户/服务器结构、中间件技术及对象技术的大型应用,需要应用层的入侵检测保护。
(3)智能入侵检测。目前,入侵方法越来越多样化与综合化,尽管已经有智能体系、神经网络与遗传算法应用在入侵检测领域,但这些只是一些尝试性的研究工作,需要对智能化的入侵检测系统进一步研究,以解决其自学习与自适应能力。
(4)与网络安全技术相结合。结合防火墙、PKIX、安全电子交易(SET)等网络安全与电子商务技术,提供完整的网络安全保障。
(5)建立入侵检测系统评价体系。设计通用的入侵检测测试、评估方法和平台,实现对多种入侵检测系统的检测,已成为当前入侵检测系统的另一重要研究与发展领域。评价入侵检测系统可从检测范围、系统资源占用、自身的可靠性等方面进行,评价指标有:能否保证自身的安全、运行与维护系统的开销、报警准确率、负载能力以及可支持的网络类型、支持的入侵特征数、是否支持IP碎片重组、是否支持TCP流重组等。
1.3 本文研究内容 第一章:绪论
介绍了本课题的开发背景及现实意义,重点阐述了本课题的发展及国内外的研究状况,并对本论文的文章结构做了简单介绍。
第二章:协议分析技术
重点讲述了协议分析技术的概念,对协议分析的原理、模型及过程做了详细阐述,并对协议分析技术的优缺点做了分析。
第三章:神经网络和遗传算法
介绍了神经网络和遗传算法的原理及其优缺点;并将BP神经网络与遗传算法相结合的,利用遗传算法神经网络算法来解决最优化问题。
第四章:基于协议分析的入侵检测系统设计
给出了本文入侵检测系统的设计方案,重点介绍了数据分析模块的设计方案。 第五章:基于协议分析的入侵检测系统实现
结合该系统的设计方案,给出了侵检测系统的各个模块的具体实现过程。 第六章:总结与展望
全文的总结部分,总结论文的研究成果,并指出下一步研究方向与重点。 第2章协议分析技术 2.1 网络协议简介
目前,互联网上运用的最为广泛的网络体系结构是TCP/IP参考模型。它包含了网络接口层(network interface)、网际层(internet)、运输层(transport)、应用层(application)。其层次结构及各层的主要协议如表2-1所示。
表2-1:TCP/IP协议簇
Tab.2-1 TCP/IP protocol family
TCP/IP结构描述各层主要协议各层主要功能
应用层 http\elnet\\FTP和E-mail 负责把数据传输到运输层或接收运输层返回的数据 运输层 TCP 和 UDP 主要为两台主机上的应用程序提供端到端的通信。
网际层 ICMP、IP和IGMP 也称网络层或者互联网层,主要是为数据包选择路由。
网络接口层 ARP、RARP和设备驱动程序及接口卡发送时将IP包作为帧发送,接收时把接收到的位组装成帧,提供链路管理和错误检测等。
2.2 协议分析简介 2.2.1 协议分析概念
“协议分析”技术[24],是一种用来检测攻击特征是否存在的技术,其特点是充分利用网络协议的高度规则性,对协议进行分析,进而找出违反协议定义的数据包。协议分析技术充分利用不同协议的规则来快速检测某些攻击特征是否存在,从而减少特征搜索的工作量,提高搜索速度。
与原始的“模式匹配”相比,协议分析具有快速、精确和高效等特点。协议分析通常只检测网络数据包的特定部分,从而减少了计算量和存储空间。
2.2.2 协议分析原理
协议分析技术是在模式匹配技术上发展起来的,其基本原理是利用网络协议的高度有序性,通过捕获高速数据包来快速检测某个攻击是否存在。协议分析方法与模式匹配方法在检测原理上存在着本质上的区别,协议分析的主要功能是辨别数据包的协议类型,以便使用相应的数据分析程序来检测数据包。
由于协议分析方法能够更加智能的分析网络数据[25],所以协议分析方法在分析速度和准确率方面都比模式匹配方法有很大的改进,进而解决了特征模式匹配技术检测速度慢、准确度不高、消耗系统资源等缺陷。
2.2.3 协议分析核心技术
协议分析的思想是让系统能够读懂协议,知道数据包中某些指定位置的内容,分析这些内容的真实含义,并根据定义的规则,判断是否有入侵事件。协议分析技术主要包括协议解码、数据重组和命令解析等技术。
1.协议解码[26]
协议解码就是观察并检测所有网络数据包,如果数据包不符合预期的标准,就发出报警。其过程主要包括:解包、HTTP解码、IP分片重组、TCP流还原等。协议解码过程实质就是一个数据包从协议栈由底向上分析,去掉各层附加的报文首部的过程。一个数据包的协议解码过程如图2-1所示。
图2-1 数据包的协议解码过程
Fig.2-1 Packet protocol decoding process
协议解码能最大程度地减小误报。因此在基于协议解码的入侵检测系统中,系统能够知道每个协议中潜在的攻击串所在的精确位置,并使用解析器来确保某个特征的真实含义被正确理解,从而有效的降低入侵检测的误报率。
2.数据重组
数据重组是在协议解码的基础上对数据包进行TCP流重组及IP分片重组,重组后进行整体上的协议分析,它充分利用了协议运行信息来检测协议相关的异常、多步骤攻击和分布式攻击等复杂攻击。
3.命令解析
命令解析可针对各种高层协议,分析出攻击串以及各种可能的变体。命令解析工作在应用层上,运用命令解析器即一个命令解释程序对使用应用层协议(如Telnet,FTP,HTTP,SMTP,SNMP,DNS,TCP,IP)的每一个用户命令做出详细分析,看是否存在攻击串或各种可能的变体[27]。
2.3 协议分析入侵检测方法介绍
协议分析检测技术主要包括简单协议分析检测方法和协议状态分析检测方法。在进行检测前,两种方法都需要按照协议首部结构和协议规定数据载荷的数据结构对数据包进行协议解析,再检测解析后的数据。只是简单协议分析检测技术是根据协议中单个数据包内容进行检测,而状态协议分析检测方法则根据多个数据包中反映的协议状态信息进行检测。
2.3.1 简单协议分析检测方法
简单协议分析检测方法(Simple Protocol Analysis简称SPA)是基于传统模式匹配技术发展起来的。它充分利用了网络协议的高度有序性,结合了高速数据包捕获、协议分析和命令解析,并根据协议标准和己知攻击特征构造检测规则。使用检测规则对解析后的单个数据包中的协议首部和数据载荷进行检测,表2-2介绍了检测规则所包含的内容及其解释:
表2-2 检测规则的内容及其解释
Tab.2-2 Content of the detection rules and their interpretation 字段名解释
协议名称数据包的协议名称
首部字段名称被检测的协议首部字段名称 检测类型指明是误用检测还是异常检测 首部检测值要在协议首部中检测的值 数据载荷检测值要在数据载荷中检测的值 字段名解释
预处理函数对检测字段进行检测前处理的函数 报警信息检测到攻击或异常后的报警信息
其中预处理函数根据攻击特征对数据包域进行检测前处理,可识别变体攻击等采用躲避检测技术的攻击。进一步提高了检测的效率,检测规则也是根据协议类型等信息按树形结构组织起来,根据数据包检测域的信息可以只选择匹配其中部分规则,不必对全部规则进行匹配检测。
简单协议分析检测方法大大减少了计算量,即使在高负载的高速网络上,也能逐个分析所有的数据包。简单协议分析检测方法对于每个解析后的数据包,依次使用每条检测规则对其进行检测,直至报警或规则使用完毕,检测过程如下:
1.查看数据包是否为协议名称指定的协议数据,如不是则使用下一条规则,否则继续。 2.如有预处理函数则对指定的检测域进行预处理。
3.使用规则中的检测值对指定的数据包首部和数据载荷进行检测,当进行异常检测时,如果数据包值与检测值不符,则认为有异常行为发生;当进行误用检测时,只有当两者的值匹配时,才认为有攻击行为发生。
4.当检测到异常或攻击时,输出规则的报警信息进行报警;否则使用下一条规则继续进行检测。 5.当引发了报警或所有规则使用完时,结束对当前数据包的检测,开始检测下一个数据包。 其中预处理函数根据攻击特征对数据包域进行检测前处理,可识别变体攻击等采用躲避检测技术的攻击。
简单协议分析方法可以根据协议信息精确定位检测域,针对性地使用详细具体的检测手段,提高了检测的全面性、准确性和效率。针对不同的异常和攻击,以灵活地定制不同的处理函数来加强检测能力,识别变体攻击等较难检测的攻击。
简单协议分析检测方法可以解决的问题: 1.解决模糊路径问题
模糊路径方法就是改变路径,使它看起来不同,但是实际上和改变前代表的含义是一样的。这种技术常被黑客用于URL中,发起HTTP攻击。例如:“/”和“\\”通常是可以转换的。大多数WEB服务器不区分这两种字符。所以在WEB服务器看来scripts/iisadmin和scripts\\iisadmin是一样的。但是基于模式匹配的IDS认为两者是不同的,在发现\\iisadmin时不报错。同样/./也可能加到路径中,通常表示当前路径。WEB服务器会忽略它的存在,但是模式匹配的方法就不能够判断出,会认为/./iisadmin是安全的数据。一种比较复杂一些的情况是/./的使用:/../通常表示父目录,攻击者可以在/../前面加上一个不存在的非法目录,这样相当于什么都没加,还是剩下/iisadmin。
上述几种方法还可以组合起来使用,比如/./././././iisadmin,或者\\./iisadmin。这样的组合是可以无穷多的,而模式匹配方法对于这样伪装的攻击是束手无策的。协议分析方法和WEB服务器使用同样的URL处理方法:当HTTP网络数据被检测到的时候,IDS探测器会把URL的路径提取出来并且加以分析。它能够处理“/./和“/../”的情况,得到标准的URL以后,再进行模式匹配,就能检测出攻击了。
2.解决十六进制编码问题
十六进制编码是一种很常见的现象,使用十六进制代码代替部分字符,比如%73是S的十六进制表示方法,/iisadmin就改为/ii%73admin。实际上这个简单的路径可以有很多种变种,在这个时候,只有用协议分析的方法,使得分析系统按照WEB服务器的原理工作,先把%73转化成S,再判断是否可疑。
3.解决双十六进制编码问题
Nimda病毒利用16个不同的URL去探测微软的IIS服务器,查看是否具有漏洞,这些URL中包括双十六进制编码。例如:/..%255c../winnt,%25表示%,也就是变成/..%5c../,%5c表示\\,变成/..\\/winnt,这就是所熟悉的模糊路径,也就是/../../winnt,这实际上是一种root traversal攻击。
4.减少误警率
假设XYZ协议包括X字段和Y选项字段,检测某种攻击是可以通过查看X字段中是否出现foo这样的字符串。Y字段合法的选项值为:food,moon和tooth。如果使用简单的模式匹配方法,在整个数据包中搜索foo字符串,因为在选项字段有字符串fooh,包含了foo,所以会产生误警。而且,因为字段的长
度是可以变化的,这种错误也很难用限定匹配的开始点和结束点来避免。所以唯一的解决办法就是对协议的完全解码,只在X字段中寻找“foo”字符串。
5.提高分析速度
一种存在于FTP MKD命令中的内存溢出漏洞,会被含有shell代码的长参数利用。典型的模式匹配必须在整个FTP,数据包中搜索shell代码序列。如果采用模式匹配的方法,对于满负载的100Mbps以太网:计算量=(攻击特征字节数)X(数据包字节数) X (每秒的数据包数) X (数据库的攻击特征数)。假设一个攻击特征有5字节,平均数据包大小为200字节,每秒5000个数据包,数据库有1000个攻击特征,每秒就需要有50000000000字节的计算量。协议分析就通过查看MKD命令里的参数是否过长,是否包含二进制代码,判断是否有利用内存溢出漏洞的攻击。假设网络数据中有1%是FTP数据,FTP数据中有1%是MKD命令,计算量减到了模式匹配方法的万分之一。如果再采取一些优化措施,计算量还可以下降。
用简单协议分析方法可以准确有效地检测大量异常和攻击,但是仍有很多复杂攻击不能凭借单一的数据包来检测,要联合多个数据包中的信息,根据协议执行过程进行识别。协议状态分析检测方法就是一种充分利用了协议运行的状态信息来检测协议相关的异常和多步骤、分布式等复杂攻击的方法[6]。
2.3.2 协议状态分析检测方法
状态协议分析(STAteful Protoco1 Analysis,简称STAPA)是一种改进的更加合理的特征检测方法。它是在协议分析的基础上,加入相关的状态信息,充分利用协议运行的状态信息来检测协议相关的异常和多步骤、分布式等复杂攻击的方法。它不仅仅是检测单一的连接请求或响应,而是将一个会话的所有流量作为一个整体来考虑,更能够进行智能的数据分析[30]。此方法基于状态协议分析检测模型,建立协议状态序列,将观测到的数据包序列映射为状态序列,使用状态序列上的一元谓词来检测异常和攻击。简单的说就是将状态特征添加到常规的协议分析中。
协议状态分析检测方法可以解决的问题:
状态协议分析比前两种方法能够发现更多的攻击,但是要付出更多处理时间的代价。IDS可以在多个方面利用状态信息,解决以下问题:
1.检测猜测密码:攻击状态协议分析系统通过统计在一段时间内失败的登陆请求个数,设定一个合理的阈值准确的检测此种攻击。
2.进行IP分片重组和TCP流重组,检测边界问题:举个例子说,在简单的模式匹配方法中,如果IDS在端口2222发现字符串“foo”,就引发报警。黑客就可以用第一个数据包发送“fo”,而在第二个数据包的开头写入“o”,这样当数据包发送到系统,系统就不会发出警告。而在状态协议分析中,这种小技巧会被轻松的发现。
3.检查请求和应答是否匹配:在拒绝服务入侵(SYN Flood)中,攻击者常常通过在短时间内不断发起某种相同的请求,而目标系统来不及发送应答,占用了系统的资源,不能再对新的请求发出应答。当入侵监测系统发现短时间内很多的请求,却没有任何应答的时候,就会发出警报。
4.记录用户信息:
以FTP用户登录为例:一个FTP用户登录,需要四个步骤: (1) 用户发送“USER cqut”到FTP服务器,其中cqut是用户名。 (2) FTP服务器用“331 Send password”应答。 (3) 用户发送“PASS jsj”到FTP服务器。
(4) FTP服务器验证密码正确,应答“230 User Logged in”。
IDS从这里能够知道,这次会话的用户是cqut,如果会话中有可疑行为,系统可以对用户cqut进行记录。根据应答结果,IDS系统还能够检测是否有人尝试使用用户root或者是administrator。如果一个攻击者想要得到某个重要文件,就能根据应答所包含的状态码来判断攻击者是否成功。
5. 验证命令序列:
以FTP为例,典型的客户端与FTP服务器建立会话的过程如下: (1) 连接:FTP客户端与服务器的FTP端口(2l)建立TCP连接;
(2) 验证:用户发送用户名和密码或者是匿名用户登陆,如果验证通过,连接建立,否则通话结束; (3) 传输:当一个用户通过验证后,他就可以向服务器发送命令。如果是传输文件的命令,一个短暂单独的TCP连接会被建立;
(4) 结束:当FTP服务器和客户端想要结束会话的时候,TCP连接断开。
有些攻击是与会话的状态紧密相连的,比如有的攻击是利用验证通过之前的传输阶段的命令发起的。检测这种攻击,必须知道会话的状态,当发现验证还没有完成,就有一个传输阶段的命令的时候,系统发
出警告。再来看一个例子,当需要在FTP服务器上重新命名一个文件的时候,需要两条命令RNFR(修改文件XX)和RNFT(文件名修改为XX)。通常RNFR和RNF是成对有序出现的。有些攻击就会使用利用的RNTO命令导致系统出现问题。入侵监测系统可以计算连续的RNTO数量,或者记录每个命令的前一条命令,当发现RNFT命令,就检查前一条命令是不是RNFR。
通过两种方法的介绍,本文选用了简单协议分析检测方法,并在规则分析器的设计中给出简单协议分析检测方法的具体分析步骤。
2.4 本章小结
本章分析了网络协议的层次结构,了解了协议分析技术的原理和核心技术;学习了协议分析入侵检测方法。并根据两种方法的比较,选择了简单协议分析检测方法来实现本文规则检测器的构建。
第3章神经网络和遗传算法 3.1 神经网络 3.1.1 神经网络的概念
人工神经网络(Artificial Neural Network-ANN)是一种数学模型,对生物的神经进行模拟,他主要是进行信息的处理,实现某种要求的功能,他是在大脑生理研究基础上进行的,神经网络是人工神经网络的简称,涉及学科领域广泛,具有非常重要的研究前景和应用价值[31]。
神经网络可以自行在外部环境当中获取新的知识,还可以在把获取的知识存放到神经网格当中去,这里主要是在神经网格当中利用权值的方式进去存取,在涉及到这方面知识的时候从神经网格当中再提取出来。前面提到的神经网格是一种计算结构,主要是大量的神经元根据一定的拓扑结构组织而成。
神经元就像人的神经系统中的神经结点一样,其中一个神经元的输出信号,经过传输到另一个神经元当中去,这个时候作为这个神经元的输入信号,这种方式就称为神经网络的连接,此连接当中每个这种连接通路对应一个权值,不同的连接方式组成神经网络。根据连接方式的不同分成单层向前网络、互联的网络和具有反馈的前向网络以及层内互联前向网络这几种方式。
本论文主要是把BP神经网络也就是多层前向反馈网络作为数据分析模块中的异常检测器。接下来我们就要具体对BP算法和BP神经网络进行介绍。
3.1.2 BP算法
BP(Backpropagation)算法是一种自适应的网络学习算法,主要是根据梯度下降法来进行网络学习,这个算法又称作为误差反向传播算法。主要的学习过程如下:
学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出不符,则转入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这种信号正向传播与误差反向传播的各层权值调整过程,是周而复始地进行的。权值不断调整的过程,也就是网络的学习训练过程。此过程一直进行到网络输出的误差减少到可接受的程度,或进行到预先设定的学习次数为止。
3.1.3 BP网络
神经网络有前馈神经网络、感知器、多层前馈网络(BP)网络和和径向基函数网络等几种网络模型,其中BP网络是目前最为热门的神经网络模型,其网络的结构图如图3-1所示。
图3-1 BP神经网络的结构图
Fig.3-1 The structure of BP neural network
BP网络是反向传播网(Back—Propagation Network)的简称,它是一种多层的网络,训练非线性可微分的函数,是对W—H学习的一般化,它也是多层前向反馈神经网络,由于S型函数是它的神经元变换函数,所以输出的量是0和1之间的连续量,能够从输入到输出之间的任意非线性映射。被称作为BP神经网络一个重要的原因那就是权值调整采用反向的传播BP算法。
我们以3-1中的三层神经网络为例子,BP算法来对BP网络的训练基本步骤如下: 1. 对网络进行初始化。初试化时,给、、、赋予之间的随机值; 其中:为输入层与隐含层各神经元之间的连接权值; 为隐含层与输出层各神经元之间的连接权值; 为隐含层各神经元的阀值; 为输出层各神经元的阀值; 2. 给网络随机选取一个学习样本;
3. 计算隐含层各神经元的输入值和输出值:
(3-1)
其中:为输入层神经元个数; 为输入层各神经元的输入向量; 采用型函数,即: ;(3-2)
4. 计算输出层各神经元的输入值和输出值: (3-3)
5. 根据实际输出与期望输出直接的误差进行反馈调整; 6. 定义误差计算函数: ;(3-4)
其中:为输出层神经元结点的个数; 是样本的期望输出值;
7. 计算隐含层与输出层之间各神经元的权值误差: (3-5)
8. 计算隐入层与隐含层之间各神经元的权值误差: (3-6)
9. 利用隐含层与输出层各神经元的权值误差和隐含层各神经元的输出来修正隐含层到输出层的连接权值和阀值:
(3-7) (3-8)
其中::修正前;:修正后;:学习率,在之间取值;
10. 利用输入层与隐含层各神经元的权值误差和输入层各神经元的输入量来修正输入层到隐含层的连接权值和阀值:
(3-9) (3-10)
11. 判断网络误差是否满足,其中:为期望的精度。若满足或者学习次数大于设定的最大次数,则网络收敛;否则,转到第12步进入下一轮学习;
12. 随机选取下一个学习样本提供给网络,并返回到步骤3,如此反复操作,直至全部样本训练完毕为止。
3.1.4 BP网络在入侵检测中的应用
BP神经网络具有如下几个特点:在训练的阶段,主要将规则集通过格式转换对神经网络进行训练、学习规则,以此获得一定的预测能力;不断注入新规则使得入侵检测系统获得自适应的能力;经过训练将此网络变成一个基于工作模式的检测器,对和正常工作模式有区别的行为做出一定的响应,以此来发现新的攻击行为;经过训练后入侵检测系统的处理速度也大大的提高了。以上这些特点使得BP神经网络广泛的应用到入侵检测技术当中去。
目前BP网络在入侵检测中已取得了较好的检测结果,如文献[38],[39]就是BP网络用于入侵检测系统的典型案例。网络训练成功之后对入侵检测系统的响应速度有很大的提高,而且对实时性也有很大的提高。
尽管BP网络在入侵检测方面提供了很大的应用,但是由于BP算法是基于梯度下降这个本质,这使得BP网络也存在像算法收敛速度过慢、鲁班性差、容易陷入局部最值等问题。针对以上不足之处,出现了很多新算法对BP神经网络进行了改进。如文献[40]采用改进的BP神经网络优化算法进行入侵检测分类器的设计;如文献[41]提到的一种改进的BP算法,其基本思想是每一个样本对于网络并不立即产生作用,而是等到输入完全部样本后,将全部误差求和累加,集中修改权值;文献[42]介绍了一种变速回归神经网络(采用了批处理技术和动量方法)检测算法,以上这些算法在BP算法收敛速度和克服局部最值问题起到了非常重要的作用。
3.2 遗传算法
3.2.1 遗传算法的基本概念
基于梯度搜索算法的BP算法适用于局部搜索,它只能在起始点附近的区域里找到最有解,要获得全局最优解,需要用到全局搜索算法,如:模拟退火算法(SA)和遗传算法(GA),来寻找到全局最优解。
遗传算法(Gneetci Algortihms)是一种随机的搜索优化算法,是在模仿生物进化的过程中提出的,遗传算法的简称GA。此算法生成和检验特征的形成是在模拟生物进化过程中的自然选择和遗传机制基础上,参数空间是编码空间代替问题,评估依据为适度函数,进化基础是编码群体,然后对群体中进行个体位进行选择、交叉、变异等操作,不断的进行迭代操作,使个体不断进化,逐步接近问题中的全局最优解。遗传算法经过人们不断的深入研究,已经在智能计算和模式识别等领域取得了很好的应用。
3.2.2 遗传算法的实现
遗传算法主要是从问题可能存在的解集里选择一个经过基因编码过的,一定数目个体组成的种群来进行迭代。每个个体就是一个实体,染色体上带有特征的实体。多个基因组合成染色体,它是非常重要的遗传物质载体,它的基因决定着个体形状的外部表现。所以,一开始要进行一个编码工作,就是表现型和基因型的一个映射,经过达尔文进化论的原理,不断演变出一个近似解。根据问题域中的个体适应度大小在每一代中挑选个体,并组合交叉,产生出具有代表性解集的种群。这个种群比前面的要更加适应环境,最后面种群中的最优个体解码就可以作为问题中的近似最优解[46]。遗传算法的基本流程如下图3-2所示:
图3-2 遗传算法的基本流程图
Fig.3-2 The basic flowchart of genetic algorithm 3.3 利用遗传算法训练神经网络
通过上面分析我们知道遗传算法在求全局最优解的过程中所用到的时间复杂度小,并且鲁棒性也非常强,所以把BP神经网络和遗传算法结合起来进行分析问题具有非常重要的意义,能够发挥神经网络的优点还能弥补神经网络的不足之处,结合后的神经网络具有非常强大的学习能力。
遗传算法与神经网络结合主要有以下这两种方式[44]:
第一种是进行常规的遗传算法计算,通过神经网络的训练列把所有可能存在的神经元全部列举出来,并把这些连接之间的权值进行二进制编码或者用实数码串表示个体,接着生成码串群体。通过将码串解码,计算出训练神经网络产生的平均误差来确定和算出每个个体的适应度。
第二种结合方式是利用遗传算法对神经网络进行像连接权值的此类优化,结构和学习规则进行优化。此种结合方式可以可以进行适应度来计算方程。这种结合和第一种结合方式的区别是没有将连接权值而是
将结构模式和学习规则编码成码串,通过这种方式表示个体,所以遗传算法的搜索空间就相对来说比较小了。
3.4 遗传神经网络在入侵检测中的应用
在其他领域的应用上神经网络取得了很大的成功,也有非常多的研究,在入侵检测这方面的研究还是比较少的。文献[46]将遗传算法与神经网络结合用于入侵检测,先是通过遗传算法对神经网络的结构进行优化,然后对优化好的神经网络进行入侵检测的预测和预警。实验结果表明经过遗传算法训练过的网络进行入侵检测,能够发现新的网络攻击模式也就是新的网络攻击行为,然后向此网络输入这个攻击行为实例,然后再对此神经网络进行训练,这样优化好的网络能够检测出新的攻击模式,入侵检测系统就是这样形成了自适应能力。
我们也可以用选定好的攻击实例对神经网络进行训练,最大限度的逼近网络攻击模型,然后进行检测,此后能够对输入给此网络的检测数据做出相应的判断。我们知道要解决的任务决定神经网络中的输入节点和输出节点,得到最佳的神经网络结构和权值是非常重要的,影响着后面的检测结果。所以连接权值对神经网络的性能是非常重要的。在输入和输出节点已知的情况下得到最佳网络神经元结构和连接权值是本文选用遗传神经网络算法解决这个问题的所在,这个方法不仅能克服BP算法的一些不足地方,也能解决单独利用遗传算法不能够快速找到最优解的问题。
3.5 本章小结
本章主要对BP神经网络和遗传算法的原理及各自的优缺点进行了分析和概况,并将两种方法相结合应用到最优化问题的解决上,能够解决各自不足的地方,提高了解决最优解问题的速度。
第4章基于协议分析的入侵检测系统设计
本文提出的改进的网络入侵检测模型可以解决目前网络入侵检测系统的误检率和漏检率高的问题,此模型是在在规则检测技术中选用协议分析技术来全面检测入侵事件是否是已知的,来降低误检率;在行为检测技术中选用遗传神经网络的算法,对未知的入侵事件通过其关联事件进行检测分析,降低漏检率,从而提高检测系统的准确性。本章将详细介绍改进后的网络入侵检测模型的设计过程。
4.1 基于协议分析的网络入侵模型的基本框架
本文提出的改进的网络入侵模型是基于规则与行为的基础上进行的,此模型是由数据采集模块、数据分析模块、控制台模块、数据存储模块等四个部分组成。网络入侵模型框架如图4-1所示:
图4-1 入侵检测模型基本框架
Fig.4-1 The basic framework of intrusion detection model 下面对该系统的各个组成部分做一个简单的介绍: 1. 数据采集模块
该模块的主要功能就是从监视的指定以太网段上捕获高速网络数据包,为数据分析模块提供原始分析数据。
2. 数据分析模块
数据分析模块主要是对截获的数据包进行相应的分析,看是否有入侵行为或者异常行为。 本文中的入侵检测系统把规则检测技术和行为检测加入到数据分析这个模块中,在一定程度上弥补了现有入侵检测系统的过分依赖专家先验知识误检率、漏检率高等不足,提高了处理速度。结构如图4-2所示。
图4-2 数据分析模块结构
Fig.4-2 Data analysis module structure
把协议分析技术应用到规则检测器中解决误检问题;把遗传神经网络应用到行为检测器中,通过关联的入侵事件分析出未知的入侵事件,防止漏检的发生。
3. 数据存储模块
此模块主要是进行数据的存储,存储来自采集模块和数据分析模块的检测结果,为网络入侵检测后面分析以及攻击行为追踪提供充足的信息。
4. 控制台模块
控制台模块的主要功能是监控,对数据库的备份和还原,数据采集模块的配置,以及数据分析模块的规则管理和警告信息的处理,这些都是控制模块的工作。
根据检测模型的总体框架设计,下面将详细介绍各个模块的设计方案。 4.2 数据采集模块的设计
数据采集模块主要是用来采集入侵检测系统中的原始检测数据。由于本文研究的是基于网络的入侵检测系统,因此数据采集模块主要是从网络上捕获数据包。
网络数据包捕获的方法有很多种,可以利用原始套接字来实现,也可以通过Lipcap、Jpcap和Winpcap提供的网络接口函数来实现[47]。 Libpcap是基于Linux操作系统的网络抓包开发工具,Jpcap是Libpcap的一个Java版本,winpcap主要是在Windows操作系统下进行网络数据包的捕获,也提供了和linux进行通信的网络接口函数,在某种程度上也可以说它是Libpcap的一个window版本。
本文是在Windows XP的操作系统下进行实验的。因此,本文在基于winpcap技术的基础上进行相关数据包捕获函数的定义。
4.2.1 Winpcap的概念
Winpcap[48](windows packet capture)是windows平台下一个免费、公共的网络访问系统。WinPcap是用于网络封包抓取的一套工具,可适用于32位的操作平台上解析网络封包,包含了核心的封包过滤,一个底层动态链接库,和一个高层系统函数库,及可用来直接存取封包的应用程序界面。
Winpcap是一个免费公开的软件系统。它用于windows系统下的直接的网络编程。大多数网络应用程序访问网络是通过广泛使用的套接字。这种方法很容易实现网络数据传输,因为操作系统负责底层的细节(比如协议栈,数据流组装等)以及提供了类似于文件读写的函数接口。
4.2.2 Winpcap的功能及优缺点 1. Winpcap的功能 它提供了以下的各项功能:
(1) 捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包; (2) 在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉; (3) 在网络上发送原始的数据包; (4) 收集网络通信过程中的统计信息。 2. Winpcap的优点
Winpcap主要具有以下几个方面的优点:
(1) Winpcap为程序员提供了一套标准的网络数据包捕获的编程接口,并且与Libpcap兼容,可以将Linux平台下的网络安全程序很快的移植到Windows平台下;
(2) Winpcap可以提供高效的数据包捕获和过滤; (3) Winpcap还提供有效的数据包发送。 3. Winpcap的缺点
由于Winpcap是从主机的协议(如TCP/IP)独立收发数据包的,这意味着它不能阻塞、过滤或者处理同一主机上其他程序产生的数据包:它仅仅嗅探网线上传输的数据包。所以它不能应用于流量均衡、QoS调度和个人防火墙。
4.2.3 Winpcap的组成
Winpcap主要由一个内核层的数据包过滤模块,两个动态链接库组成。
内核层的数据包过滤模块NPF(Netgroup Packet Filter),主要是对应于Linux下的Libpcap使用的BPF过滤模块来设计的,用来实现高效的网络数据包捕获和过滤功能,其过滤规则与BPF的过滤规则一样。
动态链接库packet.dll,为开发者提供一个较底层的开发接口,使用此动态连接库可以调用WinPcap的函数。
动态链接库wpcap.dll,它为开发者提供了一个更高层的编程接口,且其调用与系统无关。wpcap.dll是基于Libpcap设计的。因此,基于Libpcap的程序可以通过wpcap.dll移植到Windows平台下运行。
4.3 基于规则检测器的设计
如前面入侵检测模型设计时所介绍的,在数据分析模块中运用了两种检测技术。因此,数据分析模块将分别对两个检测器进行设计。本节给出了基于规则检测器的设计过程。基于行为检测器的设计过程将在下节进行介绍。
4.3.1 设计原则
基于规则的入侵检测器的设计原则如下:充分利用协议的高规则性,根据不同协议的不同位置所代表的含义的不同,进行了规则检测器的设计,提高整个入侵检测系统的检测速度,降低入侵检测系统的误报率。
4.3.2 规则检测器的工作流程设计
根据网络结构分层的特点和处理时间的先后,可以将基于协议分析的规则检测器分为:底层模块、中层模块和高层模块。其中底层模块的任务是完成数据包的捕获。中层模块需要进行是协议解码和协议分析。协议解码主要是对捕获的数据包进行解码和预处理;协议分析将协议解码过的数据运用模式匹配算法和特征库中攻击模式进行比较分析,从而判断是否受到攻击。高层模块主要是实现数据包的统计和操作日志。规则检测器的基本结构如图4-3所示[49]:
图4-3 规则检测器的基本结构
Fig.4-3 The basic structure of the detector rule
根据规则检测器的基本结构图所示,主要针对其中层模块进行设计。 1. 协议树的构建
根据前面网络协议分层的介绍,了解到协议是按层次划分。按照协议的层次结构,我们将所有协议转化成为一棵协议树,其结构如图4-4所示。树中的一个节点代表一种协议。一个网络数据包的分析过程就是一条从根到某个叶子的路径。只要分析过程中动态地维护和配置协议树结构就可实现非常灵活的协议分析功能。
图4-4 协议分析树
Fig.4-4 Protocol analysis tree
协议分析树本质上是三维结构,除了平面上的协议分层结构外,树中的每节点都有一个链表,存储了本节点协议的分析算法等信息。在实现中,对于每个协议的分析都是利用链表中算法产生的进程队列中的一个进程来实现,每层的处理十分类似。每层都是根据不同协议的多分支结构。
2. 协议解码
由于数据在发送时是自上而下,逐层进行封装;因此,数据在接收时是自下而上,逐层进行解码。数据在发送过程中,发送方对数据包逐层添加一些首部信息 (有时还要增加尾部信息)的过程被称为数据封装。协议解码就是接收方按照数据封装的逆过程,逐层去掉每一层协议所对应的首部信息,进行解码。协议解码的过程如图4-5所示。
图4-5 协议解码过程
Fig.4-5 Protocol decoding process
3. 协议分析检测器的设计
由于网络通信的核心协议TCP协议和IP协议,在RFC0791和RFC0793文档中,分别定义了TCP数据包和IP数据包的格式。且这种格式定义只与协议相关,与网络的结构、类型无关,因此协议分析具有很广泛的适用性。
本文根据简单协议分析方法的原理,进行了协议检测具体步骤的设计。基于己知的包结构,通过对包中相应位置的信息进行分析,从而截取可能是攻击行为的特征码进行比较,大大减少了比较的计算量,避免了对内容的比较而产生的误报。
根据协议规范中不同协议的协议标识值,我们将协议分析算法用一棵带标识的协议树来表示,如图4-6所示:
图4-6 协议类型分类识别图
Fig.4-6 Classification chart of protocol type
根据上图所示各个协议的协议标识值,基于协议分析技术的规则检测器的具体实现步骤如下: (1) 根据协议规范中所指出的以太网数据包中第13字节处包含2个用作第三层协议标识的字节;可以在开始跳过前面12个字节,直接读取第13字节处的2个字节(协议标识)。如果值为0800,根据协议规范可以判断出这个网络数据包是IPv4包;若值为0806,则是ARP数据包;若值为8035,则为RARP数据包。
(2) 根据IP协议规定,IP包的第24字节有一个用作第四层协议规范标识的字节。系统可跳到第24字节去直接读取第四层协议标识;如果值为06,则这个数据包是TCP协议数据包;若值为11则为UDP协议数据包。
(3) TCP协议规定了第37、38两个字节用于应用层协议的标识(端口号)。根据这一规定,系统可以直接跳到第37字节直接读取端口号,如果值为80,则说明该数据包是一个HTTP协议的数据包。
(4) 在HTTP协议中规定了:第55字节是URL的开始处。因此,如果要检测基于HTTP URL的攻击的话,只需要检测这个URL就可以了。
4.4 基于行为检测器的设计
在第一章入侵检测技术的介绍中,我们了解到可以将神经网络用于基于行为的入侵检测系统中。第三章,针对神经网络入侵检测技术的不足,提出了遗传神经网络算法来实现基于行为的入侵检测。本节我们将详细介绍如何建立基于行为的异常检测器。
4.4.1 行为检测器的设计思想
在本文的数据分析模块中,利用遗传神经网络算法来实现基于行为的入侵检测(即异常检测)。遗传神经网络算法是将遗传算法和BP神经网络算法相结合。首先利用BP神经网络算法来确定网络的结构和一些相关参数,如:输入结点个数、各结点间的网络权值等。然后通过遗传算法来修正网络权值,学习的结果不需要再使用BP算法进行优化,而是直接输入到BP神经网络中进行训练并输出结果。
这种利用遗传神经网络算法构建的神经网络克服了单一的神经网络初始权值的随机性以及网络优化的局限性,从而有效的提高了神经网络的泛化能力;并且有效的克服了遗传算法局部调节能力较弱的问题。使得改进后的遗传神经网络神经网络既体现了网络的非线性,具有神经网络的鲁棒性和自学习能力;又继承了遗传算法的强全局随机搜索能力[50]。用于入侵检测模型中可以加强对未知入侵事件的学习能力,降低检测系统的漏检率。
4.4.2 行为检测器的实现步骤
在本文中,使用遗传神经网络构建的行为检测器主要有以下两个步骤:
1.针对前面介绍的神经网络特点,我们需要选择遗传神经网络的输入层结点,然后运用遗传算法进行神经网络的自学习过程。所以在本文中,我们首先需要收集完备的正常行为数据作为训练神经网络的规则集。我们根据此规则集运用遗传算法和BP算法来训练神经网络,从而建立一个正常的行为模式。这样被训练好的神经网络就可以作为一个基于行为的入侵检测器即异常检测器。
2.在实验网络上进行仿真攻击,我们用收集到的入侵事件集对训练好的神经网络进行测试,分析实验结果,然后根据具体的性能指标进行改进。
本文中基于遗传神经网络的行为检测器工作流程如图4-7所示: 图4-7行为检测器的工作流程
Fig.4-7 The work flow of behavior detection 4.4.3 遗传神经网络算法设计
1.遗传神经网络的算法描述
本文结合的第三章中所了解的BP网络和遗传算法的原理,设计了遗传神经网络算法的实现步骤,具体描述如下:
输入部分:神经网络的初始结点、规则集、遗传算法的控制参数; 输出部分:运用规则集训练好的神经网络。
Step1:设置控制参数:初始种群大小、网络各层的结点数、网络结点的编码方式、权值的取值范围、交叉概率、变异概率、算法的终止条件;
Step2:从rule.txt文件中读取规则集;
Step3:初始化神经网络,并将神经网络按照本文建议的编码方式进行编码,从而构成遗传算法的初始种群;
Step4:输入规则集训练神经网络,按照本文提出的适应度函数计算个体的适应度值; Step5:是否满足算法的终止条件;若未满足,则继续;否则,转向Step9;
Step6:根据交叉概率从父代中选择参加交叉操作的个体集,然后选择两个个体按照本文提出的交叉算子进行交叉操作;
Step7:根据变异概率,从经过交叉操作后得到的个体中选择参加变异的个体,然后按照本文提出的变异算子进行变异操作;
Step8:转向Step5,重新评价新一代种群的适应度值; Step9:输出训练好的神经网络。
根据遗传神经网络算法的实现步骤,下面将对该算法中各参数的确定方式进行介绍。 2.遗传神经网络中的个体编码方法
在本文中,采用二进制编码的方式,按照输入层和隐含层节点见连接权重—隐含层和输出层节点间的连接权重—隐含层节点偏值——输出节点偏值的顺序把各权值和偏值连成一串。通过不断的交叉、变异,获得全局意义上的最优的网络结构。本文中权值的取值范围设置为(-9.0,9.0)。
3.适应度函数的设计
在本文中,利用遗传算法训练神经网络的适应度函数采用如下方式:
(4-1)
其中:—针对给定的训练集,神经网络的正确输出个数; —训练集的样本个数;
越接近于1,则网络输出的准确率就越高。 4.交叉算子
在本文中,我们采用多点交叉的方式来产生新的个体。选择多个交叉点进行交换,但是在第一位变量在第一个交叉点之间的那段不做变换。
以如下的两个11位变量为例: 父个体1 0 1 1 1 0 0 1 1 0 1 0 父个体21 0 1 0 1 1 0 0 1 0 1 交叉点的位置选择:3 6 10 交叉后的新个体表示为:
父个体1 0 1 1 0 1 1 1 1 0 1 1 父个体21 0 1 1 0 0 0 0 1 0 0 5.变异算子
由于变异操作是交叉操作的一个辅助过程,所以本文中我们选择基本位变异的方法进行个体的更新。 以如下的两个11位变量为例,第五位发生变异: 变异前 0 1 1 1 0 0 1 1 0 1 0 变异后 0 1 1 1 1 0 1 1 0 1 0 6.控制参数的确定
根据前面讲到的,我们需要在实验之前选取遗传神经网络的控制参数,如:初始种群、交叉概率、变异概率、算法终止条件等。
(1)初始种群大小:当取值较小时,可提高遗传算法的运算速度,但却降低了群体的多样性,有可能会引起遗传算法的早熟现象;而当取值较大时,又会使得遗传算法的运行效率降低。一般取50~500,初始群体随机产生。
(2)交叉概率:交叉概率的取值过大,会破坏群体中的优良模式,对遗传运算产生不利影响;若取值过小,产生新个体的速度又较慢。一般取值为0.4。
(3)变异概率:的取值范围一般为0.0001-0.1。较大会破坏较好的模式,影响遗传算法的性能,使得遗传算法类似于随机搜索。若取值较小,则变异操作产生新个体的能力和抑制早熟的现象的能力就会较差。在本文的仿真实验中,取值为0.1。
(4)算法的终止条件:是表示遗传算法的运行结束条件的一个参数。在我们的实验中,当算法满足以下两个条件之一时,算法就结束:
①当某代的最优个体的适应度值预设的适应度值时,算法结束; ②已达到所预设的最大迭代次数时,算法结束。 4.4.4 两种检测技术的结合
本文的入侵检测系统数据分析模块中协议分析技术与遗传神经网络两种技术的结合点定义如下: 1. 当协议分析出是攻击,则通知遗传神经网络停止检测; 2. 当遗传神经网络检测出是正常,则通知协议分析停止检测;
3. 只有协议分析出事正常的,遗传神经网络检测出是攻击包时,才将数据包输出到规则生成器,由规则生成器根据攻击包的特征生成出符合协议分析标准的规则,并加入到协议分析规则库中。
4.5 数据存储模块的设计
数据存储模块主要是将检测到的事件(原始数据信息、分析检测后的结果等都称为事件)记录下来,便于事后分析。本文利用Access数据库系统来建立存储系统。进行数据的存储,存储来自采集模块和数据分析模块的检测结果,为网络入侵检测后面分析以及攻击行为追踪提供充足的信息。本文所采用的数据库类型是Access,它是微软公司开发的一个小型但功能强大的数据库,此数据库提供了C/C++语言编程接口,在C/C++语言中操作比较简单,容易实现,Access数据库插入的数据是非常快的,能够满足检测系统对数据的需求。
随着网络的不断扩大,网络中的数据越来越多,如何保存捕获的大量数据是需要解决的问题。本文的数据模块设计主要是采用一种策略对不必要的数据进行删减,设计了短期存储和精简长期数据库两种数据库。短期数据库用来存放在网络种截取的数据包,保存一段时间后就会删除;精简的长期数据库存放IP
地址、攻击特征、端口号、攻击时间等具有攻击特征的数据,这样无关的数据就被删除掉,只保留有关的数据,这样可以进行长期保存。
4.6 控制台模块的设计
控制模块的主要功能是控制,当攻击事件发生时能够做出一定的响应,这种响应方式比如发出声音报警或者通过其他的方式通知我们系统管理员,或者做出其他方式的响应,比如说直接通过后台把网络切断。控制台模块根据响应方式可以分为主动响应(Active Responses)和被动响应(Passive Responses)。
1.主动响应(Active Responses)
在主动响应中,系统自动地或在用户的控制下来阻断攻击过程或以其他方式影响攻击过程。主动响应主要有三种方式:针对入侵者采取反击等措施、修正系统环境、收集更详尽的信息。
(1)针对入侵者采取反击等措施
这是最具有侵略性的响应方式。它的基本思想是追踪入侵者的攻击来源,然后采取行动切断入侵者的机器或者网络的连接。但是,这种措施会带来一定的负面影响。首先,根据网络黑客最常用的攻击方法,被确认为攻击你的系统的源头系统很可能是黑客的另一个牺牲品。其次,简单的反击可能会惹来更大的攻击。攻击的开始可能只是对你的系统进行常规的监视或扫描,简单的反击有可能使其发展成为全范围的敌意攻击。最后,这种方法冒着很大的法律风险。如果因为反击入侵而使无辜者受害,这本身就是违法行为,可能受到起诉。
(2)修正系统环境
及时修正导致入侵发生的安全漏洞。在一些入侵检测系统中,这类响应可以通过改变分析引擎的一些参数设置和操作方式(如提高敏感级别);或者通过添加规则(如提高某类攻击的可疑级别和扩大监控范围)来达到目的。
(3)收集更详尽的信息
当被保护的系统非常重要时,可以为系统增加一个特殊的服务器,它用来营造环境使入侵者被转向。此服务器通常称为“蜜罐(honey pots)”、“诱饵(decoys)”或者“玻璃鱼缸(fishbowls)”。这些服务器装备着文件系统和其它带有欺骗性的系统属性,这些属性就是被设计用来模拟关键系统的外表表象和内容。“诱饵”服务器对那些正在收集关于入侵者的威胁信息或收集对入侵者采取法律行动的证据的安全管理者很
有价值。使用“诱饵”服务器,可以使入侵的受害者在实际系统的内容没有受到破坏的情况下确定入侵者的意图,记录下入侵者的入侵信息。
2.被动响应
被动的响应是指当系统检测到攻击事件的时候通过报警来告知用户,让用户来自行决定该采取什么样的对应措施。大部分入侵检测系统都是被动的响应方式。在具体实现中,把路由器和防火墙结合,来完成响应单元的功能。
本文拟采用这种响应方式,当检测到攻击后会在屏幕上显示出一些简单的报警文本信息。 4.7 本章小结
本章对基于规则的检测器与行为入侵检测模型的框架结构以及其中各个模块的设计方案进行了相信的介绍,着重介绍了数据分析模块。在规则检测器中,利用了协议的高规则性,进行了协议树、协议分析和协议解码过程设计,给出了其中的基本步骤。在行为检测器中在行为检测器中,结合遗传神经网络算法的思想设计了行为检测器,并详细分析了适应度函数、交叉算子、变异算子以及其他控制参数,给出了核心参数的确定方法。
第5章基于协议分析的入侵检测系统实现 5.1 开发工具简介
Ubuntu是侧重桌面应用的Linux开源操作系统,Ubuntu每隔半年就会出现一新版本,可以为用户提供最新的操作系统,而且是相当稳定的。Ubuntu是一款开源免费操作系统,涵盖了大量的免费软件,并且能够积极地在线安装升级,既适合家用又适用于商业环境。同时,Ubuntu系统具备较高的可靠性,适于充当服务器和开发平台。
C语言是计算机程序设计语言的一种。它不仅具备高级语言的特点,还包括有汇编语言的特点。它适用于多种OS平台,既能作为工作系统设计语言开发系统的应用程序,同时还能作为应用程序设计语言,开发与计算机硬件无关的应用程序。因此,由于C语言灵活的编程方式和强大的功能,所以它被广泛的应用,不仅应用在在软件开发方面,而且也被应用到各类科研中,例如单片机及嵌入式系统开发都要用到C语言。
Linux系统下的GCC(GNU C Compiler)是GNU(Gnu's Not Unix)最有代表性的产品,它是一款多平台编译器,具有强大的功能和出色的性能。GCC可在多种硬体平台上编译出exe程序,相比于其它编译器,它的平均效率要高20%~30%。 GCC编译器能可以处理C、C++、Fortran、Pascal、Objectiv-C、Java以及Ada等多种语言,可以将源程序、汇程式化序和目标程序编译、连接成可执行文件。GCC的各项优势和功能为本系统的开发提供了良好的条件,是非常理想的开发工具。
本文使用的Visual C++6.0由Microsoft开发工具, 它不仅是一个C++ 编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。Microsoft的主力软件产品。Visual C++是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了Visual C++.NET(Visual C++7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C++6.0为平台。
5.2 数据采集模块
在系统规则库构建完毕之后,开始读取数据包文件,并且开始启动检测引擎,来实现对数据包的监测。数据包的读取主要由文件decode.c中的函数完成,数据包的检测仍旧由文件myrules.c中的函数完成。
5.2.1 数据包格式
读取数据包之前,需要详细解释本系统的数据包源文件中模拟数据包的书写格式。如下例: IPH ip_ttl:128;ip_id:56;ip_src:192.168.1.5;ip_dst:192.168.1.6 $TCPH tcp_seq:67;tcp_ack:66;th_sport:34;th_dport:80 $OTHER dsize:90; content:thisisanexample
其中数据包中所包含的各项内容如下表所示5-1所示: 表5-1 数据包中包含的内容
Tab.5-1 The contents of data packet contains 数据包中所含内容
IPH 数据包的IP协议数据报
TCPH 数据包的TCP协议数据报 UDP 表示数据包的UDP协议数据报 ICMPH 表示数据包的ICMP协议数据报 ICMP 协议数据报
OTHER 表示数据包中的其他内容
每个数据包可能由这5个数据报头中的一个或几个组成,这5个数据报头所包含的协议字段如下表5-2所示:
表5-2数据报头所包含的协议字段
Tab.5-2 Protocol field of datagram header contains
IPH包含的协议字段 ip_tos服务类型ip_ttl数据报生存期ip_len报文总长度ip_id报文标识ip_src源IP地址ip_proto协议类型ip_ipcsm报头校验和ip_off段偏移量ip_dst目的IP地址
TCPH包含的协议字段 tcp_seq序号th_sport源端口号tcp_ack确认号tcp_flags控制字段th_dport目的端口号
UDPH包含的协议字段 uh_sport源端口号uh_dport目的端口号uh_len报文长度uh_chk校验和 ICMPH包含的协议字段 icmp_type报文类型icmp_code报文代码icmp_csum报文校验和icmp_id:ICMP请求/应答报文的标识符icmp_seq:ICMP请求/应答报文的序列号
其他包含的协议字段 dsize 数据包的长度content数据包载荷内容sp源端口值dp目的端口值 在模拟数据包的时候要注意:以上5个报头之间用符号“$”分隔开,报头名称与报头字段之间由空格符分开,而同一个报头内不同字段之间由分号“;”隔开,字段名与字段值之间,则有冒号“:”作为分隔符。
5.2.2 数据包的读取
在构造规则库完成后,主函数执行函数DecodeFile(),开始读取数据包,本模块的函数包含在文件decode.c中:
void DecodeFile(char *file) {
FILE * thefp;
Packet * p; ..........
if((thefp=fopen(file,“r”))==NULL) //打开数据包源文件 {
FatalError(“ERROR=>can’t open the source package file!\\n”); } .........
while((fgets(buf,STD_BUF,thefp))!=NULL) //逐行读取文件中的记录 { index=buf;
p=DecodePackage(index); //分析数据包 Preprocess(p); //检测数据包 } ........... fclose(thefp); }
程序打开数据包源文件之后,逐行读取其中的记录,每读到一条记录,就将其送入数据包的分析函数DecodePackage()中,把一条记录转化为象征着一个数据包的结构体Packet,便完成了数据包的读取任务。
Packet * DecodePackege(char *package) {
Packet *p;
p=(Packet*)calloc(sizeof(Packet),sizeof(char)); //分配空间 ........
toks=mSplit(package,“$”,4,&num_toks,0); //分解字符串 for(i=0;i if(!strcasecmp(toks[i],“IPH”,3)) DecodeIPH(toks[i],p); //分析IP报头 else if(!strcasecmp(toks[i],“TCPH”,3)) DecodeTCPH(toks[i],p); //分析TCP报头 else if(!strcasecmp(toks[i],“UDPH”,3)) DecodeUDPH(toks[i],p); //分析UDP报头 else if(!strcasecmp(toks[i],“ICMPH”,3)) DecodeICMPH(toks[i],p); //分析ICMP报头 else (!strcasecmp(toks[i],“OTHER”,3)) DecodeOTHER(toks[i],p); //分析其他内容 } ............ return p; //返回处理完毕的结构体Packet } 5.3 数据分析模块的实现 当数据采集模块读取到数据包,并且将其处理为可用的形式之后,检测引擎正式启动,本部分主要函数包括在源文件myrules.c中。 5.3.1 预处理器检测 数据包最先要通过的,是预处理器的检测,即执行函数Preprocessor(): void Preprocessor(Packet *p) { PreprocessFuncNode *idx; do_detect=1; //全局变量 idx=PreprocessList; //预处理函数队列 while(idx->next!=NULL) //遍历预处理函数队列 { idx->func(p); //执行每一个预处理检测函数 idx=idx->next; } if(do_detect) //若顺利通过预处理器,则进入规则库的检测 { Detect(p); } return; } 如果数据包被预处理器探测出异常,则直接调用响应系统,拉响警报,不再继续接受规则库的检测。反之,如果数据包通过了预处理器,则调用检测引擎入口函数Detect(),开始进一步的检测。 5.3.2 规则库检测过程 这是最核心的检测模块,执行函数Detect(),就会把数据包放入已经建立好的二维规则库的入口,开始细致的检测: int Detect(Packet *p) { int i; i=EvalPacket(&Alert,p); //调用数据包检测函数EvalPacket(); return i; } int EvalPacket(ListHead * List,Packet * p) { RuleTreeNode *rtn_idx; ........ switch(p->iph->ip_proto) //寻找合适的协议规则树入口 { case IPPROTO_TCP: if(p->tcph != NULL) rtn_idx = List->TcpList; //进入TCP规则树入口 break; case IPPROTO_UDP: if(p->udph != NULL) rtn_idx = List->UdpList; //进入UDP规则树入口 break; case IPPROTO_ICMP: if(p->icmph != NULL) rtn_idx = List->IcmpList; //进入ICMP规则树入口 break; default: break; } return EvalHeader(rtn_idx, p);//调用规则链表头检测函数 } 上面数据包检测函数EvalPacket( )的功能是通过规则链表对当前调用的数据包进行规则检测工作,这其中二维规则链表的选取则取决于其协议类型。 int EvalHeader(RuleTreeNode * rtn_idx, Packet * p) { int rule_match = 0; if(!rtn_idx->rule_func->RuleHeadFunc(p, rtn_idx, rtn_idx->rule_func)) //若数据包与当前规则链表头中的IP地址/端口值不匹配,则返回自身的递归调用,对下一个规则链表头进行检测 { return EvalHeader(rtn_idx->right, p); } else { rule_match = EvalOpts(rtn_idx->down, p); //若与规则头匹配,则调用规则选项检测函数 if(rule_match) CallAlertFuncs(p,rtn_idx->down->message); //若与规则选项匹配,即发现异常,则调用响应模块 else if(!rule_match) { return EvalHeader(rtn_idx->right, p); //若不匹配,再次递归调用自身,进行下一个规则链表头的检测 } } return 0; } 以上的规则链表头检测函数是实现整个规则检测工作的关键性环节,其功能就是在对二维规则链表进行遍历搜索的条件下,实现对当前数据包的规则检测匹配工作。 int EvalOpts(OptTreeNode * List, Packet * p) { ...... if(!List->opt_func->OptTestFunc(p, List, List->opt_func)) { return EvalOpts(List->next, p); //调用选项结点中的处理函数,判断是否与当前数据包匹配。 } else { otn_tmp = List; return 1; //若匹配,即发现异常,则向上一级函数返回匹配成功的信息 } return 0; //若失败,则返回0. } 上面的程序的功能是对规则链表选项进行检测,这里是对二维规则链表是通过函数EvalOpts( )来完成此任务的。它遍历整个规则选项链,并且判断是否存在与当前数据包匹配的规则。在该函数的执行过程中,同时实现了前文提到的使用插件的第三部——调用。 如果检测出异常,系统将会直接调用响应模块,发出警报。若没有异常,数据包即可安全通过检测引擎。 下面将对本文协议分析模块中各层协议的首部信息及其对应的核心数据结构和各协议的入侵检测流程做简单的介绍。 1.基于以太帧的入侵检测 以太帧是通过数据采集线程采集到的原始数据包,它是位于TCP/IP中数据链路层上的物理帧,其封装格式如表5-3所示。 表5-3 以太帧的封装格式 Tab.5-4 Encapsulation format of Ethernet frame 目的地址(6字节)源地址(6字节)类型(2字节)数据(46-1500字节)CRC(4字节) (1)以太帧头结构 以太帧头的数据结构定义如下: Struct ether_header { u_int shost[6]; //源以太网地址 u_int dhost[6]; //目的以太网地址 u_int type; //以太网地址类型 } (2)基于以太帧入侵检测流程 此部分我们主要是是对以太网数据帧头进行协议分析,其基本流程如图5-1所示。我们首先分析所捕获的网络数据包是否是以太网帧,如果是以太网帧我们就根据数据帧的第13和14两个字节组成协议标识来判断协议类型,按照分析出的协议类型把数据包传送到相应的下一级协议分析程序中,并把分析的结果记入数据存储模块中。若标识值为0800,则为IP协议;若标识值为0806,则为ARP协议;若值为8035,则是RARP协议。如果不是以太网帧则丢弃该数据包。 图5-1 以太帧的协议分析流程图 Fig.5-1 Protocol analysis flowchart of Ethernet frame 2.基于ARP协议的入侵检测 地址解析协议ARP(Address Resolution Protocol)和逆地址解析协议RARP是用来解决IP地址与MAC地址之间对应关系的问题的。ARP协议的工作原理是:在主机的ARP高速缓存中存放了一个从IP地址到MAC地址的映射表,并且这个映射表可以动态的实时更新。ARP和RARP协议的报文头格式如表5-4所示: 表5-4 ARP和RARP协议的报文头格式 Tab.5-4 The packet header format of ARP and RARP protocols 硬件类型协议类型 MAC长度协议长度操作类型 源MAC地址(0-3字节) 源MAC地址(4-5字节)源IP地址(0-1字节) 源IP地址(2-3字节)目的MAC地址(0-1字节) 目的MAC地址(2-5字节) 目的IP地址(0-3字节) (1)ARP报文头的数据结构 ARP报文头的数据结构定义如下: structARPPacketHead { u_char htype; //硬件类型 u_char arpproto; //协议类型 u_int hlength; //硬件地址长度 u_int prolength; //协议地址长度 u_int opecode; //ARP操作码 u_int arpshost[6]; //源以太网地址 u_int arpdhost[6]; //目的以太网地址 u_int soureaddr; //源IP地址 u_int destaddr; //目的IP地址 }; (2)基于ARP协议的入侵检测流程 这部分我们主要是对ARP或RARP协议数据包进行分析。由于与ARP/RARP协议相关的攻击较少,所以把我们将ARP/RARP协议规则集合并到了ICMP协议规则集中。ARP/RARP协议分析的流程,如图5-2所示。我们将分析后的数据送入基于ICMP协议规则集的匹配检测程序中进行检测,查看是否存在与ARP和RARP相关的攻击;若存在这纪录该数据包,并将该数据包丢弃。 图5-2 ARP数据包检测流程图 Fig.5-2 ARP packet inspection flowchart 3.基于IP协议的入侵检测 IP (Internet Protocol)协议是TCP/IP协议族中的核心协议,所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式为基础传输的。IP协议只是尽可能提供最好的传输服务但不保证IP数据报能成功地到达目的地。IP数据报格式如下表5-5所示: 表5-5 IP数据报格式 Fig.5-5 IP datagram format 32位 版本(4位)首部长度(4位)服务类型(8位)总长度(16位) 标识(16位)标志(3位) 片偏移(13位) 生存时间(8位)协议(8位)首部校验和(16位) 源IP地址(32位) 目的IP地址(32位) 可选字段(长度可变)填充 数据 (1)IP报文头的数据结构: IP报文头的数据结构定义如下: typedef struct ip_header{ u_char ver_ihl; //版本号 u_char tos; //服务类型 u_short tlen; // 总长度 u_short identification; //标识 u_short flags_fo; // Flags (3 bits) + Fragment offset (13 bits) u_char ttl; //生存时间 u_char proto; //协议类型 u_short crc; //校验和 u_int saddr; //源IP地址 u_int daddr; //目的IP地址 u_int op_pad; //选项+填充 }ip_header; (2)基于IP协议的入侵检测流程 此部分我们主要是对IP数据包进行协议分析,其基本流程如图5-3所示。首先我们IP头进行协议分析看是否有IP选项的存在,若存在IP选项,则对IP选项进行分析,看是IP的数据包是否分片;如不存在IP选项,则直接查该IP 数据包是否存在分片。IP数据包的第二个标识位DF是用来标识该数据包是否分片,若为0,则表示有分片,若为1则表示没有分片。然后将IP分片进行重组,进行IP协议规则检测,看是否存在攻击;若存在攻击事件,则记录并丢弃该数据包。若未发现攻击,则对该数据包进行协议类型判断,在IP协议中规定了IP包的第24字节有一个用作第四层协议规范标识的字节。其中6表示TCP协议,1表示ICMP协议,11表示UDP协议。 图5-3 IP数据包检测流程图 Fig.5-3 Detection flowchart of IP packet 4.基于ICMP协议的入侵检测 为了有效的转发IP数据报和提高成功交付的机率,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol)[RFC 792]。ICMP允许主机或者路由器提供有关差错情况和有关异常情况的报告。其报文格式如表5-6所示: 表5-6 ICMP报文格式 Tab.5-6 ICMP packet format 类型代码校验和 (这4个字节取决于ICMP报文的类型) ICMP的数据部分(长度取决于类型) (1)ICMP报文头的数据结构 本文中,ICMP报文头的数据结构定义入下: struct ICMPPacketHead { u_char type; //类型 u_char code; //代码 u_short chkSum; //校验码 }; (2)基于ICMP协议的入侵检测流程 此部分我们主要是针对ICMP数据包进行协议分析。其分析流程如图5-4所示。虽然ICMP报文类型很多,但是我们可以根据报文中的类型字段和代码字段来区分不同的ICMP报文类型,以达到检测的目的。 图5-4 ICMP数据包检测流程图 Fig.5-4 Detection flowchart of ICMP packet 5.基于TCP协议的入侵检测 在运输层使用协议端口号来指定最后的终点,只需将传送报文交到目的主机的某个合适的端口,剩下的交付工作可由协传输控制协议TCP(Transmission Control Protocol)[RFC 793]来完成。其报文头格式如下表5-7所示: 表5-7 TCP协议头 Tab.5-7 TCP protocol header 32位 源端口号(16位)目的端口号(16位) 序号(32位) 确认序号(32位) 数据偏移(4位)保留(6位) URG ACK PSH RST SYN FIN 窗口(16位) 校验和(16位)紧急指针(16位) 选项 数据 (1)TCP报文头的数据结构 TCP报文头的数据结构定义入下: struct TCPPacketHead { u_short SourPort; //源端口 u_short DestPort; //目的端口号 u_int SeqNo; //序号:指明了段在即将传输的段序列中的位置 u_int AckNo; //确认号:规定成功收到段的序列号,确认序号包含发送确认的一端所期望收到的下一个序号 u_char HLen; //段头长度 u_char Flag; //标记 u_short WndSize; //窗口大小 u_short ChkSum; //校验和 u_short UrgPtr; //紧急,指明段中包含紧急信息,只有当U R G标志置1时紧急指针才有效 }; (2)基于TCP协议的入侵检测流程 我们在这部分对TCP数据包进行了协议分析,此部分的实现流程如图5-5所示。我们首先针对读入的TCP数据包包头进行协议分析,检查是否存在TCP选项。如果存在TCP选项,就对TCP选项进行协议分析。然后,判断该TCP数据包是否发送了分段,如果发生了分段就对该TCP数据包进行分段重组;再将重组后的数据包进行TCP协议规则集匹配检测,看是否存在攻击事件。若检测到攻击,则记录下该攻击数据包后又返回,重新读取新的数据包;反之,若没有检测到攻击,则把该数据包送入下一级协议分析程序中,根据不同应用协议所对应的端口号不同作进一步的协议分析。 图5-5 TCP数据包检测流程图 Fig.5-5 The Detection flowchart of TCP packet 6.基于UDP协议的入侵检测 用户数据报协议UDP(User Datagram Protocol)[RFC 768]是运输层面向对象的运输协议,UDP在传输数据之前不需要建立连接。虽然UDP不提供可靠交付,但是在某些情况下UDP却是一种最有效的工作方式。其首部格式如表5-8所示。 表5-8 UDP报文首部格式 Tab.5-8 UDP packet header format 源端口号(16位)目的端口号(16位) 长度(16位)校验和(16位) 数据 (1)UDP报文头的数据结构 UDP报文头的数据结构定义入下: struct UDPPacketHead { u_short sport; // 源端口号 u_short dport; // 目的端口号 u_short len; // 数据长度 u_short crc; // 校验和 }; (2)基于UDP协议的入侵检测流程 本文在这部分主要是针对UDP数据包进行了协议分析,此部分程序实现流程如图5-6所示。我们将此数据包进行UDP规则集匹配检测,看是否存在攻击。若检测到攻击,则记录并丢弃该数据包,然后返回并读取下一个数据包;若没有攻击,就根据不同应用协议所对应的端口号不同作进一步的协议分析。 图5-6 UDP数据包检测流 Fig.5-6 The detection flow of UDP packet 5.4 系统运行结果与分析 1.数据分析模块 数据分析模块的可视化界面效果如图5-7所示。 图5-7 数据分析界面 Fig.5-7 Data analysis interface 2.控制台模块 控制台模块主要起监控作用,包括对数据采集模块的配置,数据分析模块中规则的管理,警告信息的处理,以及对数据库的备份和还原等等。 实验效果如图5-8所示: 图5-8控制模块界面 Fig.5-8 Control module interface 3.数据库模块 数据库模块主要是用于存储数据采集模块的数据和数据分析模块产生的临时事件,以备系统需要时使用。数据库中的存储形式如图5-9所示: 图5-9 数据库里的记录显示 Fig.5-9 Show of the database’ records 4. 结果分析 在入侵检测系统中,检测率、误报率和漏报率是衡量一个入侵检测算法性能好坏的重要标准。检测率是指检测出入侵事件的百分比,它等于正确检测出的样本数目比上样本总数;误报率是指正确事件被误检的概率,它为误检的样本数与样本总数的比值;漏报率是指将入侵事件当作正常事件放过的概率,它是用异常检测的样本数和样本总数的比值来表示的。 我们分别用相同的样本集单独对本文设计的协议分析检测器、遗传神经网络检测器、二者相结合的协议分析模块进行入侵检测实验,三种不同的方法预测的误差下降速度和检测率的对比如表5-9和表5-10所示。 表5-9 预测误差下降速度结果对比 Tab.5-9 Comparison of the results for rate of prediction error’decline 样本大小协议分析检测器遗传神经网络检测器二者相结合 500 0.037045 0.009422 0.002976 1000 0.002609 0.001129 0.000786 2500 0.002519 0.000791 0.000769 5000 0.002213 0.000717 0.000768 表5-10 各性能标准的对比(%) Tab.5-10 Comparison of the performance criteria (%) 协议分析检测器遗传神经网络检测器二者相结合 检测率 88.1 90.4 93 误报率 9.4 11.9 7 漏报率 10.7 9.3 6.8 从以上的实验结果我们可以看出本文数据分析模块中将两种技术相结合的方法可以有效的降低误差,并且在检测率、误报率和漏报率等方面都比单独使用一种检测技术有明显的改进。 第6章总结与展望 6.1 总结 本系统是基于协议分析的入侵检测系统的原型,能够对网络数据包的协议报头字段值和数据包载荷内容进行细致的检测,检测依据是由常见网络攻击特征编写出的检测规则。用户只需要下载新的检测规则,就可以不断更新该系统的功能。同样的,用户也可以根据自身需求,定制自己的规则,实现对外部攻击的警觉和对内部超越正常权限行为的监视。系统采用的插件模式允许用户不断的增加具备更多功能的插件,增强系统的性能。总而言之,本系统初步实现了入侵检测系统的各项基本功能,并且留有便捷地接口,为系统的进一步提高创造了良好条件。相信在本系统的基础上可以开发出功能更加强大,性能更加稳定的入侵检测系统。 系统的绝大部分的功能都是依靠链表完成的,尤其是规则库的构造,需要比较复杂的链表。常常因为一个参数甚至一个符号的错误导致整个模块的瘫痪,免不了花费很多时间编写和调试源程序。一分耕耘,一分收获,经过不懈努力,最终完成了该入侵检测系统的基本功能,成功开发了一个基于协议分析的入侵检测的系统原型。无疑,这是对我做的全部工作的最佳肯定和证明。 由于时间和可以投入的人力有限,本系统还有许多有待改进的地方: 1.预处理插件和响应插件数量太少,可以引入更加丰富的插件; 2.系统支持的网络协议太少,应该升级,支持更多的协议,如IGRP、GRE 、ARP、IPX 、RIP等; 3.系统目前只是读取模拟数据包,可以为其安装网络数据包的采集模块,使之能够直接处理网络数据包; 6.2 展望 使用协议分析技术来实现入侵检测系统是目前较为先进的入侵检测系统,它利用网络协议的高度规则性,快速地探测网络上的异常信息。它同传统的模式匹配技术相比,具有检测速度快、系统消耗低、降低误报率和探测碎片攻击等优势,协议分析技术在高速网络环境下的入侵检测系统中的主流技术得到更好的发展与应用。本文在研究的同时,也发现了一些存在的问题,这些将是未来研究所需要注意或者需要解决的几个方面: (1)协议的多样化问题。面对更多的网络协议(如FTP、HTTP、DNS等等),每一种协议都有各自的格式标准,所面临的攻击行为特征差异性较大,因此很难涵盖每一种协议特征,在未来复杂的网络环境中,更多未知攻击的存在,需要进行更加深入的分析与研究,提取更多的协议规则特征来进行处理。同时,建立更加标准化的规则描述语言以面对更加复杂化的网络入侵行为,也是今后将要面临的问题。 (2)多种入侵检测技术的融合问题。传统的入侵检测技术一般只局限于单一的主机或者网络框架,这不能很好的适应大规模的网络监测;而将不同类型的检测技术有着各自的检测原理,如何在不影响检测效率的前提下,将其融合利用也将是未来研究的一种方向。比如,将入侵检测系统与防火墙、数据加密、身份认证等网络安全技术有机地结合起来,在检测的同时又能做到有效的防范,共同构筑一个层次合理、实时动态的安全体系这是当今网络安全研究的一个热点。 (3)入侵检测模型的适应性问题。随着高速网络使用的不断普及,入侵检测的执行速率也成为系统设计所要考虑的因素之一,对于大规模分布式的网络环境,在高速的网络架构之下,攻击行为可能会更加复杂化,因此入侵检测系统的处理效率直接影响网络安全防护的状况。如何设计更加合理的入侵检测模型以适应网络大规模、分布式、高速率的特点,这也是入侵检测系统未来发展所面临的挑战。随着人工智能的不断发展,入侵检测系统也越来越向智能化的方向发展,如何将智能理论应用于实际的网络安全管理中,并真正做到高速网络环境下的入侵检测系统的实用性,需要更加深入地研究与实践。 致谢 从2009年迈入河南科技大学至今,四年的时光荏苒而逝,在论文完成之际,回顾这几年的时光,由衷的感谢在学习上、工作上给予我莫大帮助的的老师和同学们,你们是我一生最大的财富。 本论文是在我的导师黎蔚副教授的指导下完成的,在此我对黎蔚导师表示衷心的感谢,黎蔚老师渊博的知识、敏锐的科学洞察力,给我很大的启发,她在论文的选题和研究中给予我悉心指导,培养了我独立思考和解决问题的能力,我从老师那里不仅学习到了丰富的知识,而且收获了不少人生道理,获益匪浅。感谢黎蔚老师在这几年来对我的耐心培养、严格要求和无微不至的关怀,使本身基础不好的我,能够顺利完成硕士阶段的学习和科研任务,再次向我的导师表示崇高的敬意和衷心的感谢! 感谢我的同学和朋友们对我的帮助,他们热心帮我解决了一些问题。感谢家人多年来给我的无限宽容和支持,给我克服困难的决心,他们的支持是我学习最大动力。 最后,向百忙之中评阅本文并提出指正意见的各位专家、教授们表示感谢! 因篇幅问题不能全部显示,请点此查看更多更全内容