目 录
摘 要 I
Abstract II
引 言 1
1 入侵检测与Snort概述 3
1.1入侵检测系统概念 3
1.2 Snort系统 3
1.3 Snort的特点 3
1.4 Snort规则 4
1.4.1 规则的结构 4
1.4.2 规则头部 5
1.4.3 规则选项 6
1.5 本章小结 6
2 需求分析与总体设计 7
2.1 必要功能需求分析 7
2.2 数据库的设计 7
2.3 Snort的整体框架 10
2.3.1工作流程 12
2.3.2 Snort的运行模式 12
2.4本章小结 14
3 SIDS的详细设计与实现 15
3.1 SIDS实现方案 15
3.2准备工作 17
3.2.1环境的准备 17
3.2.2各软件的准备 17
3.3SIDS的实现 19
3.3.1数据获取功能实现 19
3.3.2数据存储功能实现 20
3.3.3 规则编写功能实现 21
3.3.4 告警显示功能实现 23
3.3.5 控制台功能实现 25
3.4 本章小结 26
4系统测试与检测结果分析 27
4.1搜集入侵数据 27
4.2检测与解析 27
4.3 本章小结 29
结 论 30
致 谢 31
参考文献 32
摘 要
互联网的普及已经深深的影响了整个世界,使得整个世界变得更加的紧密。虽然给生活在地球村的人带来了便利,但是也威胁到了人们的日常。因此入侵检测系统作为一个具有主动性和实时性的安全措施,对入侵检测的研究起到十分重要的作用。它主要是通过收集和分析计算机外部和内部的信息,判断是否有可疑的入侵的现象,来完成对入侵的警告和达到防御的作用,使得网络入侵的伤害减少到最低的程度。
本课题主要论述了基于Linux系统下,介绍了入侵检测系统的概念。从入侵检测系统的结构和运行流程方面对Snort做了深入的解析来对相关的规则做了扩展和实现。在设计中用Lipacp对网络数据包进行获取,snort作为入侵探测器对数据包进行实时的解析。用MySQL数据库用于存储入侵检测的日志。用Apache作为HTTP的服务器,用BASE作为基于Web入侵事件数据库分析台,用Barnyard将报警日志存入到数据库中。在这其中为实现BASE,用Apache为其提供网络的服务,同时BASE作为查看分析MySQL数据库的分析台。最后对调试的结果进行记录和总结。
关键词:Snort;入侵检测;IDS;网络安全
Abstract
The popularity of the Internet has deeply affected the whole world, making the whole world more closely. Although it brings convenience to people living in the global village, it also threatens people’s daily life…Thus,intrusion detection system plays an essential role in the research of intrusion on detection,as an active and real-time security measure. role in the research of intrusion detection. It is mainly through the collection and analysis of computer external and internal information, to determine whether there is a suspicious intrusion phenomenon, to complete the warning of intrusion and achieve the role of defense, so as to reduce the harm of network intrusion to the lowest degree.
This paper mainly discusses the overview of intrusion detection system based on Linux. Snort is deeply analyzed from the aspects of the related technology and operation process of the structure of the intrusion detection system to expand and implement the relevant rules. In the design, we use lipacp to get the network packets, Snort as the intrusion detector to analyze the packets in real time. Mysql database is used to store intrusion detection logs. Apache is used as HTTP server, base is used as web-based intrusion event database analysis platform, and barnyard is used to store the alarm log in the database [1]. In order to realize base, Apache is used to provide network services, and base is used as the analysis platform to view and analyze MySQL database. Finally, the debugging results are recorded and summarized.
Keywords: snort; intrusion detection; IDS; network security
引 言
随着人类进入21世纪以来,由于计算机网络是开放的和互联的,所以会经常受到网络“黑客”的攻击和其他一些具有病毒程序和活动的入侵。人们为了能够阻止和减小这些危害,同时最大限度的让伤害降到最低,入侵检测技术已经成为当前研究的重点和难点,Snort入侵检测系统就随之诞生了。它具有支持多平台的扩展性,主要功能是通过对网络数据包的获取来解析,然后对其进行规则匹配,然后记录下不同的攻击规则,在下一次遇到时,直接从规则库中获取进行匹配。该系统可以有效的减少入侵检测的失误,大大提高入侵检测的效率,可以对入侵检测模型进行二次开发,具有完整的功能结构,因此基于Linux平台下的Snort的开发越来越关键了。
但是Snort系统界面对用户不友好,用户的使用界面依然是基于命令行的字符方式,所以对系统的配置和使用都十分麻烦,容易出现错误的情况。由于Snort系统设计中包含了许多的模块,而且各个模块之间都是相互联系的,所以在对每个模块进行安装时,要求每一步都要正确,其中一步错误那么整个系统配置都会出现错误,所以对于用户来说无法简单的,一次性正确的安装完成。
Snort检测系统发展至今已经拥有了最基本了检测框架,同时具有部署第三方插件的功能。它的源代码是由C语言编写的,所以具有二次开发的功能,已逐渐引起人们的重视,许多国家已经开始研究对Snort的解析和研究,并运用与中小企业当中。现在主流的研究包括:
(1)不断的扩展对检测攻击的第三方的插件,比如支持各种网络协议的检测功能和优化更加人性化的主界面,让人机交互更加的方便,使检测的能力不断的扩大。
(2)将机器学习和深度学习融入到系统中,通过自主学习的手段不断强化检测的能力,学习到更多的规则集,然后通过提高规则匹配的通过率从而提高了检测的效率。
本课题是在基于Linux平台下的智能入侵检测系统的设计与实现。在Linux下的Centos主机提供实时入侵检测的功能。目的在于减少用户对于主机的干预,从而方便用户去控制。为了便于用户去操作Snort系统,提供了一套基于Web的控制台,减少了部署上的麻烦,使得操作更加的简单了。本文一共分三个章节。
第一章:介绍了基于Linux下的入侵检测的相关概念,然后以Snort为原理对相关的技术原理进行了阐述。同时介绍了规则集。本章将要从原理上对SIDS进行介绍。
第二、三章:分别介绍了整个系统的需求、数据库的设计和完成对Linux平台下的入侵系统的实现。主要是对SIDS进行实现,SIDS功能十分的丰富和齐全,本课题是选择一个带有Web界面控制台和数据库,实现入侵检测和日志记录的功能。
第四章:对完成的系统进行验证和分析结果。在实现的基础上对系统所实现的功能进行逐个的测试。验证系统是否能够对攻击进行相应的检测,保证系统能够正确的运行。
1 入侵检测与Snort概述
入侵检测是计算机从网络中获取接收的数据,然后对收集到的信息对其检测[1]。如有发现对主机用户有威胁的攻击和入侵现象,则系统会通过软硬件结合的方式,主动的为主机提供全方位的保护。在众多的入侵检测安全管理工具中,Snort是目前最主流和具有应用前景的系统。
1.1入侵检测系统概念
入侵检查是对防火墙(防火墙)的合理补充,可以帮助系统应对网络攻击,并扩展了系统管理员的安全管理功能(包括安全审核,监视,攻击识别和响应),以增强信息安全基础架构的完整性。它从计算机网络系统中的若干关键点收集信息,并分析这些信息,确定网络中是否有违反安全策略的行为和遭到袭击的迹象[2]。
对于入侵检测系统而言,最重要的是如何对其进行检测。 一般分类为异常检测误用检测。根据信息来源的不同,可以分为主机入侵检测系统(HIDS)和网络入侵检测系统(NIDS)[3]。HIDS根据主机系统的系统日志和审计记录来进行检测分析。NIDS是根据网络的数据包来分析的。HIDS的部署比较的麻烦,所以花费代价很大,而部署比较的简单,有较低的成本。HIDS有特定监视行为的功能,但是太过依赖于主机的日志。NIDS具有更好的实时性和可移植性。但是缺点是无法检测大量的数据。所以完整的入侵检测系统需要主机和网络两种系统合二为一。
1.2 Snort系统
Snort是一个由C语言开发的免费的开源的软件和基于Lipacp的轻量级网络入侵检测系统。它可以在多个不同的平台进行跨平台的部署像Linux和Windows系统。并且可以对数据和规则等功能同时的进行,来检测可能存在的危险。由于Snort是开源的,所以开发者们可以随意的对Snort的源码进行二次的开发,不断扩充了Snort的功能。对于使用者来说变得更加的简单和方便。Snort的典型运行环境如图1.1所示[4]。
1.3 Snort的特点
Snort具有多平台性和扩展性的入侵检测系统,由于从网络获取数据,所以Snort被定义为基于网络的入侵检测。针对每一种入侵行为,都提炼出它的特征并按照规范写成规则,从而形成一个规则库,将捕获的数据包对照规则库逐一匹配,若匹配成功,则认为该入侵行为成立[5]。Snort入侵检测系统的
特点如下:
(1)Snort系统在多个平台进行部署,它具有在不同系统的扩展性;
(2)具有实时分析功能和获取网络数据包的能力。能够对网络入侵做出迅速的反应,发出报警提示,同时系统还提供多告警的方式。
(3)Snort具有灵活的日志格式,支持Topdump的二进制格式,也支持ASCII字符形式,也支持XML格式的,更便于维护和检查[6];
完备的Snort具有强大的功能是任何一款入侵检测系统无法对比的。如今Snort的发展正值顶峰,很多研究人员都在不停的对Snort进行更多的扩充。不久以后Snort将成为最大的检测系统。
图1.1 搭建Snort实体图
1.4 Snort规则
Snort实际上就是基于规则匹配的入侵检测系统,其实质就是把数据包解析获得该规则然后与规则库中的规则链进行匹配。那么规则集就是一条条规则所组成的。而规则是根据源IP、目标IP、源端口范围和目标端口范围等属性分类组织成为规则集的[9]。因此可以把入侵检测分为两步。第一步就是先网络获取数据包,第二步就是和规则集进行匹配。如果匹配成功了,那说明存在威胁,Snort系统会对威胁做出报警。当入侵的规则都检测完毕后,发现没有与之匹配的,说明这些数据十分的安全。
- 4.1 规则的结构
一般情况下,Snort规则按照逻辑可以分为两个部分:规则头和规则选择[10]。如图1.2表示。
图1.2 Snort规则结构
Snort规则最重要的部分是规则标题。 它由七个部分组成:规则操作,网络协议,源网络地址和端口,方向标志,目标地址和端口。Snort通过规则头部的协议来限制发生的动作。Snort规则头部的基本结构如图1.3所示:
图1.3 Snort规则头部结构
- 4.2 规则头部
1.规则动作
规则操作位于Snort规则的开头,并执行与规则条件匹配的规则操作。Snort自带了5个已经定义好的动作种类,自己也可以定义不同的规则动作。定义好的动作有Log、Pass、Activate、Alert和Dynamic。Log表示对日志进行记录,Pass表示通过,Activate表示对检测结果反应,Alert表示对结果报警,最后Dynamic表示动态动作,与Activate一起运行。
2.协议
协议字段是Snort规则头的第二个部分,可以看到协议的类型。目前研究的类型只有四种:TCP、UDP、IP和ICMP。后续会有IPX和OSPF等协议。当协议处于头部的时候,那么就会启动协议的作用。
3.网络地址段
一般地址都为两种,一个是源网络地址和目的网络地址。某一个特定地址可以指的是IP地址。任意地址被定义可以用关键字“any”。
用斜杠加一个数字来表示这是哪一种网络地址比如,B类网络地址用/16表示,C类网络地址用/24表示,特定网络地址用/32表示。在操作符中,有一个操作符可以通知Snort系统获取所有的IP地址,排除规则中的IP地址。这个操作符就是“!”。
4.端口号
端口号有许多的运行规则,比如任何有效的端口号可以用any关键字来表示像log tcp any any-> 192.168.17.0/24。也可以用单个静态端口号来表示端口号,比如有源端口号80来代表超文本传输协议,远程登录协议Telnet可以用端口号23表示。可以用“:”符号来表示范围像1:1024代表1到1024号。alert tcp 192.168.2.0/24 23 -> any any (content: “confidential”; msg: “Detected confidential”😉
5.方向段
方向端表示的是规则所确定的源和目的的方向。用操作符的左边“->”的表示源地址而右边表示端口号。操作符的右边“<-”的表示目的地址和左边表示端口号。为了方便更好的同时表示源和目的可以用操作符“<>”来表示。 - 4.3 规则选项
规则选项是启动Snort检测系统中最重要的组成部分。它的作用是对告警的信息和检验数据包的特征进行定义。Snort规则的选项是在括号中,并且每一个规则选项必须用“;”分隔开。当执行规则动作的时候,选项所需要的条件就会达到。一个选项包括两个主要部分:一个关键字和变量值[11].其中关键字有许多比如:msg,flow,ack等。
1.5 本章小结
本章介绍了Snort系统的整个概念,并分别介绍了Snort系统的功能。 然后我介绍了Snort的主要规则。规则的结构主要是由两个部分组成的。然后就继续这两个部分的特点和结构。
2 需求分析与总体设计
本章主要通过系统的分析决定模块的分割与各模块之间的关系,说明功能结构的设计,并明确说明各功能模块所要完成的工作,提供系统整个设计和功能结构的设计。最后,各模块的特定设计流程,主要商务活动和系统的主要设计部分,详细信息,数据库表的设计基础,并决定表的结构和特定内容。
2.1 必要功能需求分析
功能的需求分析是一个项目最基础的工作,它指的是确定系统的需要哪些必备的功能。然后根据必要功能对这些功能模块进行开发。本文根据项目调查的结果实现了以下的功能:
(1)获取网络数据包。作为网络检测的第一步,也是最基础的一步。它是整个系统运行的前提,网络数据包被Lipacp包获取之后,被分析检测,是否存在含有威胁的特征。
(2)分析数据包信息。分析数据信息是整个系统中最重要的模块。它是整个系统的核心部分,主要功能是检查和分析捕获的数据路径以验证入侵的风险。
(3)对威胁的行为告警。检测数据和捕获数据,原本用户是无法看到入侵检测的情况,所以需要通过告警信息,来展示是否已将入侵的信息检测到。
(4)对检测信息的保存模块。入侵检测到的信息并不能直接检测就丢弃,后面需要调用其数据和做分析,所以需要将其存入到数据库中,这样用户需要信息时,可以从数据库中直接观看,为后续统计和显示数据作了铺垫。
2.2 数据库的设计
该系统采用MySQL作为数据库。 由于检测和分析的数据包存储在数据库中,因此有必要根据数据包信息设计数据库表。表单的域和协议头有关信息对应。分别对四种网络协议进行分析,同时建立对应的数据库表,分别为ARP、ICMP、UDP、IP、TCP等表。下图2.1是各个表的关系示意图。其中signature包括规则形式的报告通知信息,如果按类型分类,它会指示诸如报告类型的主要编号,报告类型,报告类型的主要信息,报告优先级,版本号以及报告类型等字段。event表示的是告警的元数据的信息,Sid和cid共同作为主码,告警事件发生的系统时间等字段。
图2.1 数据库模型图
下面介绍每一个协议所对应的相关的数据表:
(1)ICMP协议信息表
如表2-1所示为ICMP协议数据包首部信息表,记录ICMP数据信息,主要包括有传感器识别符、事件识别符、种类和标识符等ICMP协议数据包信息。
表2-1 ICMP数据表
字段名称 类型 长度 备注
Sid int 20 传感器识别符
Cid int 20 事件识别符
Icmp_type tinyint 20 类型
Icmp_code tinyint 20 代码
Icmp_csum smallint 20 校验码
Icmp_id smallint 10 标识符
Icmp_seq smallint 10 序列号
(1)UDP协议信息表
如表2-2所示UDP协议数据包首部信息表,有目标端口等UDP协议信息。
表2-2 UDP数据表
字段名称 类型 长度 备注
Cid int 20 传感器识别符
Sid int 20 事件识别符
Udp_sport smallint 10 源端口 长度不超过1024
Udp_dport smallint 10 目标端口 长度不超过1024
Udp_len smallint 20 数据报长度 长度不超过1024
Udp_csum smallint 20 校验码
(3)TCP协议信息表
如表2-3所示为TCP协议数据包首部信息表。主要有偏移量、序号、标志位等TCP协议信息。
表2-3 TCP数据表
字段名称 类型 长度 备注
Sid INT 20 传感器识别符
Cid INT 20 事件识别符
tcp_sport SMALLINT 10 源端口
tcp_dport SMALLINT 10 目的端口
tcp_seq INT 20 序号
tcp_ack INT 20 确认号
tcp_off TINYINT 10 偏移量
tcp_res TINYINT 10 首部长度 长度不超过1024
tcp_flags TINYINT 10 标志位
tcp_win SMALLINT 10 接收窗口
tcp_csum SMALLINT 20 校验码
tcp_urp SMALLINT 20 紧急数据偏移
(4)IP数据包信息表
如表2-4所示IP数据包首部信息。记录了传感器识别符、源IP、目的IP、协议版本等数据包信息表。
表2-4 IP数据表
字段名称 类型 长度 备注
Sid INT 20 传感器识别符
Cid INT 20 事件识别符
ip_src INT 10 源IP
ip_dst INT 10 目的IP
ip_ver TINYINT 20 协议版本
ip_hlen TINYINT 20 头部长度 长度不超过1024
ip_tos TINYINT 10 服务类型
ip_len SMALLINT 20 总长度 长度不超过1024
ip_id SMALLINT 20 数据编号
ip_flags TINYINT 10 标志位
ip_off SMALLINT 20 偏移量 长度不超过1024
ip_ttl TINYINT 10 生存时间
ip_proto TINYINT 20 协议类型
ip_csum SMALLINT 10 校验码
(5)告警的元数据的信息表
如表所示2-5告警的元数据的信息表。记录了主要有签名名称、发生时间等告警的元数据的信息。
表2-5 event数据表
字段名称 类型 长度 备注
Sid INT 20 传感器识别符
Cid INT 20 事件识别符
signature Varchar 10 签名名称
timestamp Varchar 10 发生时间
(6)规则形式的告警信息表
如表2-6所示为规则形式的告警信息表。主要有编号、名称、类编号、权限等级等规则形式的告警信息。
表2-6 signature数据表
字段名称 类型 长度 备注
sig_id INT 10 编号
sig_name VARCHAR 50 名称
sig_class_id INT 10 类编号
sig_priority INT 10 权限等级
sig_rev INT 10 终端编号
sig_sid INT 10 告警种类的总数
2.3 Snort的整体框架
Snort的体系结构是由数据包获取模块、预处理模块、检测模块和报警模块4个插件构成的,体系的结构如图2.2所示:
图2.2 体系结构图
(1)捕获网络数据
嗅探器就是指对网络数据进行获取。获取网络中的包需要两个程序,第一个程序是将主机的网卡改为混杂模式;第二个程序是根据部署主机的系统选择不同的抓包器,Windows用Winpcap,Linux用Lipacp。本课是基于Linux下的选用Lipacp。
(2)预处理模块
获取完网络数据后,将数据放入到预处理模块中,通过已有的规则对其匹配,而不是直接放入到检测模块中,如果遇到没有匹配成功的规则,则将其规则放入到规则库中。Snort的处理器是单独分离出来的,它需要不同的插件组合而成。用户可以根据自己的需求来开发不同的插件来完成。这样大大提高了系统的实用性,使得系统每一块都是一个独立的部分,方便去维护。
(3)检测模块
数据处理完后,将数据传给检测引擎,通过检测来判断数据是否存在攻击的行为,如果有就发出报警的信息,没有就将数据舍弃。所以检测引擎模块成为Snort系统的核心。它是带动整个系统的关键。检测引擎模块分为两步,第一步是先对数据的特征进行提取,第二步在规则库中匹配与其相对应的特征。
(4)报警模块
输出模块是根据用户的需求选择将警告信息存入到数据库MySQL或Oracle中或者以日志的形式显示。日志可以以文本和TCPdump格式存放。为了方便用户去管理和观察这些日志,输出模块也做成了类似于插件的辅助工具。
2. 3.1 工作流程
Snort的工作流程是从抓包开始到解析、输出等步骤。Snort的工作流程如图2.3。
图2.3 Snort的工作流程
Snort系统第一步是进行初始化操作,然后解析规则文件,从规则文件中形成一条规则链存入到规则库中,为后续进行规则匹配做准备后通过Lipacp库从网络中获取数据包,放入预处理器中,在预处理器中用解码包对数据分析。然将分析后的结果放入到探测器中,与规则库中的规则链,互相的比较。如何检查完后发现有异常的结果,那么久将其放入输出模块中,以日志或者警告的形式告知用户,否则丢弃包。
- 3.2 运行模式
Snort的运行模式可以分为3种:嗅探运行模式、数据包记录运行模式、网络入侵检测运行模式。其中最基础的也是主要的是嗅探运行模式。它与数据包记录模式是相互关联的,实质上是相似的,但是输出的格式不同。网络入侵检测运行模式是最常规的,需要加入一定的插件功能,根据需求选择不同的插件。
1.嗅探器运行模式
嗅探运行模式是指从网络中嗅探出数据包,然后将数据包进行分析,最后显示在主机上,如图2.4。
图2.5 Snort网络入侵检测模式
在Linux下以可以使用命令行启动该模式:
snort –v
当嗅探运行模式启动成功时,会从网络中获取数据进行分析和统计,统计的信息包括网络协议比如TCP、UDP、ICMP等数据流。当嗅探运行模式停止的时候,会将统计的信息在主机上显示。
2.数据包记录运行模式
数据包记录运行模式是在嗅探模式的基础上对获取的数据不是简单的显示在屏幕上,而是将数据存储到主机的内存中。在Linux下,新建一个log目录,将Snort获取的数据信息以文本的格式保存[7],可以根据用户的需求保存不同的格式。
3.网络入侵检测运行模式
如图2.5,当Snort处于网络入侵检测运行模式下时,首先从网络中获取网络包的数据进行解析,解析后将发现的入侵的规则与规则库中有与之相对应的规则,那么就将数据包记录日志并产生警告,反之则将不匹配的数据包丢弃。
在Linux平台下运行Snort的网络入侵检测模式,在命令行下输入一下字符:
snort -i eth0 -c /etc/snort/snort.conf -A fast
snort.conf是配置文件,其中eth0表示的是系统中对应的网口,Snort系统会对每一个数据包和规则集进行匹配,发现这样的数据包就采取相应的行动[8]。
图2.5 Snort网络入侵检测模式
2.4本章小结
本章主要介绍的是系统的需求分析、数据库设计、组成结构和它工作的整体的流程。通过对系统的需求分析,来设计出所需要的相关的功能。根据对应的功能设计相应的数据库。然后是Snort系统每一步的架构,了解了其运行的模式。通过具体的规则来判断检测信息。后续将通过此步骤来设计系统。
3 SIDS的详细设计与实现
Snort本身是一个非常优灵活的入侵检测系统,它可以根据用户的需求来对系统进行扩展,构成一个丰富和全面的入侵检测系统。但是扩充的同时,也增加了系统完成的复杂度。本文选择的是基于Linux下搭建来更好的显示Snort全面的功能。
3.1 SIDS实现方案
构建SIDS需要根据运行环境的不同,而选择不同的实现方式。Snort系统可以只有一个嗅探模式,只获取到以二进制显示的数据格式。也可以用文本编辑器gedit来查看。但是这样数据并没有被保存在下来,只能在启动Snort时,才能看到。Snort停止运行时,就看不到入侵数据的信息,但是这样体验是很不好的。对于这样状态,可以选择带有其软件扩展的系统。例如可以选择一个数据库软件和分析台软件,将嗅探器获取的数据传送给数据库软件,然后再有数据库传给分析台。这样入侵数据不仅被保存下来,而且用户可以更加清晰的看到入侵检测的情况。这样大大减轻了数据的繁杂度,增加对数据处理的灵活性。
根据用户的选择,网络入侵检测系统一般有如下几种组合方式:
(1)如果仅仅是获取数据包,只要安装一个Snort单独的嗅探器来进行测试。
(2)安装嗅探器和一个日志保存系统。
(3)单个嗅探器和管理员系统。
(4)安装一个数据库软件和分析控制台的嗅探器。
为了让网络入侵检测系统的功能更加的全面,除了必要的硬件设施,软件方面就选择带有数据库和分析台的第四个组合。
在此系统中,有4台主机分别取名为A,B,C,D计算机。然后还一个主机为E的计算机,连接在计算机D的网络上,与D可以在网络上联通。计算机D不仅仅是一台主机,同时还是带有BASE、MySQL和Apache等软件的一个Snort嗅探器的服务器的Centos7的系统。最后一个主机为F的计算机是在外网上的。它可以对内网内的任何一台主机发动攻击。
在系统拓扑图3.1中,为每一个设备都设置了别名,方便在接下来的设计和实现系统的步骤。
图3.1 带有数据库和web分析台的嗅探器部署方式
按照系统拓扑图,需要实现以下的功能第一SIDS需要能够检测对内网中被攻击的主机。第二是将被攻击的日志记录通过Barnyard储存到数据库MySQL中,这样管理员可以清晰看到数据。可以安装phpMyAdmin,它是一款开源的的数据库管理工具,有助于对数据进行分析和研究。根据用户需要,选择不同启动模式,同时可以对数据进行编辑、删除等功能。更加的贴近用户。
在本文中,运用了许多的第三方插件,这些插件让Snort系统更加的强大,用户使用起来更加的方便,让检测更加的高效。选择的插件和作用以下:
(1)用Lipacp来获取网络数据包。
(2)用Mysql数据库来存储告警信息,
(3)用Apache作为网络页面分析台的服务器
(4)用PHP作为连接Mysql和网络页面分析台的服务器之间的联通。
(5)用BASE作为前端展示界面。
(6)用ADODB将储存数据库的方式统一。
(7)Barnyard被BASE用来连接MySQL数据库。
简单的说,第一步先通过Lipacp抓包器将获取的网络数据包送到MySQL数据库中,第二步通过Apache服务器作为传递数据给网络的接口,第三步入侵检测数据库分析台BASE可以用通过Apache访问MySQL数据库。第四步管理员通过BASE分析台显示详细的数据和对数据进行相关的操作。
图3.2 系统工作流程
3.2准备工作
本课题是要设计一个全面的Snort入侵检测系统。第一步要认清目标对象。第二步根据目标对象,来选择所需要的需求功能,最后就是根据需求来选择对应的插件。
3. 2.1 环境的准备
Snort可以在不同的系统中进行二次开发的入侵检测系统,比如像Linux、Windows等系统。本课题选择的是在Linux系统下,这样可以很好为系统添加必要的插件。
如图3.1,在系统拓扑图中,部署一个Snort系统需要必备的软件和硬件的条件。选择主机D作为SIDS的计算机。主机D的系统是Linux 下的Centos7的计算机。同时硬件是一个网卡来连接到内网中。需要安装的软件有MySQL数据库、Apache服务器、Barnyard工具、BASE框架和其他所需要的插件。被检测的数据可以被管理员用计算机E分析。需要两台计算机作为测试机在内网中,选择B和C主机。计算机F是所在内网外的主机,用计算机F去入侵内网中的主机,主要是测试Snort系统是否可以检测到外网主机对内网的主机的入侵。结果验证Snort可以检测到内网的入侵,从而证明系统可行性。
2. 3.2 各软件的准备
为了减少系统成本,选择开源和免费的第三方插件。如图表3.3中在官方网站中可以进行下载,下载得到的源码都是开源,根据用户的需求,在此基础上进行二次的开发。因为系统的原因,要选择相对的版本,才能更好的去配置,不同的版本会导致和系统的不兼容行,容易导致适配出错。
表3.3 各辅助软件的信息
软件名称 官方网站 作用
Apache http://httpd.apache.org/ WEB服务器
PHP http://www.php.net/ PHP脚本支持
MySQL http://www.microsoft.cn/ 数据库支持
Lipcap https://www.tcpdump.org/ 网络抓包工具
Snort2.9 http://www.snort.org Linux下的Snort安装包
BASE http://www.cert.org/kb/acid 基于PHP的数据分析控制台
ADODB http://adodb.sourceforge.net 为PHP提供数据库连接函数
Barnyard http://www.securixlive.com/barnyard2/download.php Snort连接MySQL服务
这些软件都是更新过的,本课题选择了比较稳定的版本去配置。有的版本跨度很大,所以差别也就越大,选择与Snort版本相贴近的插件更容易的实现。为了系统能够稳定的运行选择表3.4软件的版本进行SIDS的实现[12]。
表3.4 选定的软件
名称 压缩包
MySQL mysql-5.7.29-linux-glibc2.12-x86_64.tar
Lipcap libpcap-1.0.0.tar.gz
Snort snort-2.9.7.0.tar.gz
PHP php-7.2.2.tar.gz
Apache httpd-2.4.32.tar.gz
BASE base-1.4.5.tar.gz
ADODB adodb519.tar.gz
Barnyard barnyard2-1.9.tar.gz
Dap daq-2.0.4.tar.gz
3.3SIDS的实现
在这个章节中,将具体的介绍SnortIDS构建的全过程,为了保证每一步的安装都是成功的,在每安装一步的基础上,对其进行功能的检测,如果成功,则继续安装,否则重新安装本次过程。这样保证了系统的可行性和健壮性。第一步是建立一个Snort的嗅探器,这个嗅探器已经具备了入侵检测最基本的功能,在后面的章节中将通过构建需要的第三方插件来进一步的完善整个系统。
3. 3.1 数据捕获功能实现
本节,将建立一个具有嗅探功能的基本的Snort入侵检测系统,一开始先部署Snort、Lipacp抓包器和daq,两个安装包不像在Windows系统直接的安装,需要用命令行tar -zxvf 将其解压到/usr/local/src目录中,然后在此目录下输入命令行./configure和make && make install。其中./configure是来检测是是否有gcc,make是来对其进行编译,make install是Makefile中读取命令来安装的。
当上述的操作完成后,一个简单的网络入侵检测系统就可以启动了,它具备了获取数据包和记录数据包的两个最基本的功能。但是这样并不能完全显示告警信息。需要安装规则库,先解snortrules-snapshot-2970.tar.gz到/usr/local/src/下,之后将解压好的Snort文件夹移动到 /etc/snort/目录下。
#cd /etc/snort/
#cp /usr/local/src/snort-2.9.7.0/etc/* .
//为目录/etc/snort及其下所有文件设置属主和属组。
#cd /etc/snort
#chown -R snort:snort *
// 新建黑白名单规则文件。
#touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules
在/etc/snort/rules下新建white_list.rules和black_list.rules这两个文件。这样规则库就部署成功了。在命令行输入“snort -T -i eth0 -u snort -g snort -c /etc/snort/snort.conf”,这时入侵检测系统就启动了,任何网路的入侵都将会被记录在如图3.5,在图3.5中Snort将数据包的信息都显示出来了。
现在这个嗅探器,已经能够实现一个简单IDS的功能,如果要实现SIDS的功能,还需要添加其他的辅助软件和部件[13]。
图3.5 用嗅探器模式进行测试的数据包头信息
3. 3.2 数据存储功能实现
MySQL是一种关系型数据库管理系统,在Web应用方面是最好和为Snort网络入侵检测系统提供了数据库的支持。在启动数据库后,需要让Snort系统连接到数据中。在Linux中系统中,直接在命令行输入:
#yum install -y mysql-server mysql-devel
可以直接安装MySQL,大大减少了在其他系统的配置过程。安装完后为数据库root用户设置密码,进入MySQL命令中。因为要将入侵的日志存入到数据库中,所以为Snort建议一个snort数据库,同时新设置一个用户名snort为Snort访问。设置与root相同的密码,便于用户去记忆。Snort可以通过数据库插件将预处理器的日志输出写入数据库,但是以下配置将警报写入警报文件,而预处理器的日志输出以Unified2格式写入二进制文件。以供Barnyard2读取使用。
将第521行修改成如下内容:
output unified2:filename snort.log,limit 128
//在/usr/sbin/目录下新建名为Snort的软链接文件
#ln -s /usr/local/bin/snort snort
上述准备做完之后,就是为snort这个数据库建立表。查看了Snort的源码,了解了Snort需要几个表,需要哪些字段,编写了Snort的系统的sql脚本文件。用sql语句“source+文件位置”,导入到snort用户中的snort数据库视图里。通过phpMyAdmin管理工具可以查看到数据库可视化的界面。可以清晰的看到创建的所有表,如图3.6中这些表分别存储了Snort检测到入侵的TCP、UDP、ICMP等数据信息[14]。
图3.6 snort中的视图表
3. 3.3 编写规则功能实现
为Snort配置完数据库后,需要将Snort系统连接的snort用户的snort数据中,这里需要Barnyard2作为Snort连接数据库的接口,修改配置文件barnyard2.conf,文件中定义了6种连接数据库的方式,本文中用到是MySQL数据库,所以在barnyard2.conf文件中修改为如下所示:
output database: log,mysql,user=snort password=123456 dbname=snort host=localhost。
其中output表示是输出的意思,database表示的是选择的数据包的类型,user表示的是数据包的用户,password表示的是数据库的密码,dbname表示的是user用户数据库的名称,host表示的是域名。
这样配置完之后,Snort系统可以把检测到的数据存入到MySQL数据库中。到这个步骤之后,可以直接存储在数据库中,但是用户并不能直观的在界面显示,这里编辑一个Snort规则,用于测试Snort系统是否可以检测到入侵的信息。
添加测试规则:#vi /etc/snort/rules/local.rules规则如下:
alert icmp any any -> $HOME_NET any (msg:“ICMP Packet Detected”;sid:1000003;rev:1;)
规则头的规则工作包括:1. Alert-使用选中的警告方法创建警告并写入此包。2.记录此包3. Pass-请将此包废弃。4. activate告警并激活其它动态规则。5. 根据激活规则,这个系统会一直保持闲置状态直到被激活,然后按日志规则运行。tcp, udp, icmp和ip有四种类型。规则头的下列部分处理给定规则的IP地址和端口信息。关键词“any”可以用来定义所有的地址。运算者方向运算者"- "是表示遵循规则的流动方向。方向操作符左侧的IP地址和端口被认为是发生流速的源主机,而方向操作符右侧的IP地址和端口信息则是目标主机。然后规则选项是入侵检测引擎的核心,选项是半邀请的数字。规则选项关键字以及相关参数可分为:colon。snort有42个规则选项关键字。主要内容有:将信件打印到msg-告警和分组日志中。sid-snort规则ID。这些关键词用于识别唯一规则、rev-rule版本的固有版本。该规则的意思是检测内网中的ICMP包,可以通过ping命令产生的数据包,最后将结果存入到MySQL数据库中。输入如下的命令:
snort -i eth0 -c /etc/snort/snort.conf -A fast
启动Snort入侵检测系统。
当出现如图3.7时,最后一行出现“successful vaildatedthe configuration”是那就表明了Snort系统已经启动成功,正在运行当中,下面就可以对系统进行简单测试。
图3.7 Snort运行网络入侵检测模式
在Snort系统正常工作时,在主机A的命令行输入:
Ping 192.168.17.148
其中192.168.17.148是C的主机地址,此时主机A向主机C发送连续的ICMP包,当主机C接收这些数据包的时候,Snort系统就会对这么ICMP包进行检测,然后存入到数据库中。由于这里是测试系统能否正常的检测入侵的数据,所以选择了比较简单的ICMP协议,确认是否IP数据包达到了目的地址。同时也可以选择TCP报文或者是UDP报文来对系统进行入侵数据的检测。打开phpMyAdmin管理器,不仅有ICMP表,还有其他对应网络报文的数据库表,选择关于ICMP的表,将会看到图3.8所示信息,总共有12条信息,说明将刚刚入侵的数据成功的存储到数据库中,表示系统搭建到现在运行正常[13]。
图3.8 表icmphdr中的数据
3. 3.4 告警显示功能实现
Snort系统增加了数据库的功能后,只能将其存入到数据库中,并不能直观的反应出入侵检测的效果。所以为Snort系统配备了web交互界面,用户可以在网页中,查看到入侵检测的效果图。用Apache作为网页的服务器,用PHP作为引擎读取MySQL数据库。
1.构建Web服务器
在Linux中用命令行输入yum install –y httpd,直接安装Apache服务器,减少了在其他系统需要配置的程序,提供快捷、方便的安装方式。使用命令行:chkconfig --add httpd,配置Apache服务为自动启动,减少了繁杂的操作。
这样管理员可以在管理员主机上E的浏览器中输入以下网址:
http://loalhost
其中localhost为主机D的网络地址,如图3.9是管理员主机E的网址,显示Apache安装成功。
图3.9成功安装Apache界面
2.配置服务器文件
由于BASE是用PHP编写的程序,所以需要配置Apahce支持PHP。
用命令行yum install –y mysql-server php php-mysql php-mbstring php-mcrypt mysql-devel php-gd 安装php所需要的插件。安装完配置后,PHP支持了对Apache的服务,用以下方式测试:
在/var/www/html目录下新建test.php,文件内容为:
在PHP中使用该行代码,来表示输出PHP安装信息的语句。在管理员主机E上使用:
http://localhost/test.php
测试Apache对PHP的支持,展示3.10提示界面,标明Apache已经可以支撑PHP的运行。
图3.10 配置Apache支持PHP成功提示界面
3.配置服务器对MySQL和图形界面的支持
在Linux命令行下输入:
pear channel-update pear.php.net
pear install Image_Graph-alpha Image_Canvas-alpha Image_Color
Image_graph前身是GraPHPit,它是用于图表操作的包,也是一个开源项目,为了安装方便,于是被整合到了Pear之中,被命名为Image_Graph(-alpha是他的版本号),所以它是通过pear命令来完成安装[15],简化了安装的繁杂。
3. 3.5 控制台功能实现
BASE是用PHP编写的查看Snort输出到数据库中的数据的工具,而且提供了图形分析工具,使管理员能够非常清晰地分析入侵检测数据[16],提高了数据分析的功能,大大减少了因为数据的繁杂,而导致的数据的冗余。
解压缩base-1.4.5.tar.gz至/var/www/html目录下。BASE需要拥有访问数据库的用户,在前面的章节中已经为此建好了用户snort。打开BASE的配置文件php.ini,修改如下配置:
error_reporting = E_ALL & ~E_NOTICE
测试BASE,在计算机E的网页浏览器重输入:
http://localhost/base/setup/index.php
如图3-11,是BASE配置成功的界面。从界面可以看到“Config Writeable”显示为“Yes”那说明配置成功了。“PHP Version”表示的是当前的版本号。
图3.11 BASE连接数据库成功
然后进入BASE的主页面,如图3.12中,在ICMP中显示100%,说明每一个数据包都被检测到了。一共检测了8269个入侵信息。表示BASE连接数据库已成功。这样一个比较完备的SIDS已经搭建完成。
图3.12 Snort捕获的数据在BASE中的显示
3.4 本章小结
本章主要讲述了Snort入侵检测程序设计的各个模块的实现。从数据存储模块、规则编写模块、数据存储模块、告警显示功能和分析台控制模块。讲述了系统需要的开发平台和使用各种的第三的插件。
4系统测试与检测结果分析
完成上述所有功能的配置后,要为SnortIDS做最后的检测的测试。首先要自己编辑一个规则,然后通过编写的规则于规则库中的规则相互匹配,产生告警信息,然后将告警信息简单的分析的结果存入数据库中。规则如下:
alert icmp any any -> any any (msg:“ICMP Packet Detected”; sid:1000003; rev:1;)
通过这个规则,可以检测到ICMP包,检测到的同时给出提示信息“ICMP Packet Detected”。
4.1搜集入侵数据
规则设置完之后,用内部局域网的三台主机,分别是主机A、主机B和主机C作为本次测试的主机作为入侵的源地址。在计算机D中,输入以下命令:
snort -i eth0 -c /etc/snort/snort.conf -A fast
//Snort系统启动入侵检测模式
在计算机C的命令行中输入以下命令:
Ping 192.168.17.148
这个命令的意思是使主机C一直发送TTL的ICMP数据包给主机D,这些ICMP数据包被SIDS将收到的数据包视为入侵信息,然后将这些告警信息存入到数据库中。
4.2检测与解析
BASE查看入侵信息的方式有很多种,分别查看不同方面的内容,比如时间、源IP、数据包内容等,通过对数据的查看,管理员可以取得有关攻击的所有信息[17]。下面罗列几项查看方式对数据进行分析,并以此作为测试的方法。
1.总计信息的展示
进入BASE的首页,如图4.1右侧所示是得到3种协议的数据的比例。页面包括侦测器全部、单项警告数、全部警告数、来源IP地址、目的IP地址、传输情况、单一IP连接数等对数据处理的信息。如图4.1右侧表示的是有连接的同一攻击18次,一共有8269次检测到的入侵,都是由ICMP产生的包,对于其他的协议,可以根据不同的需求来获取。
图4.1 统计信息查询
2.详细数据信息查询
点击任意一条入侵信查看如图4.2显示,有ID、时间标记、来源地址、目的地址和通讯级别这些的信息。作为管理员,为了找到入侵的来源。可以在“通讯级别”找到,通过这个找到来源的入侵。
图4.2 详细查看入侵数据的信息
3.数据包内容的显示
每一个被检测的数据包,都有详细的信息如图4.3。其中Meta部分包括该数据包的硬件信息,包括编号、捕获时间、警告群组、捕获时发出的信息、探测器接口等[18];IP部分是数据包地址的信息。
图4.3 查看单个数据包的内容
4.图表分析方式
大量的数据显示,并不能直观的反应出入侵信息的分析,对于用户来说需要逐个的统计。这里提供了图表显示的方法。功能也十分的强大。如图4.4和4.5。可以图表的方式、图表的形状、X和Y轴的参数以及名称。
图4.4 图表查看方式的选项
图4.5 图表查看方式的种类选择
图表的形状是有很多样式的,比如圆形、线形、饼状形等。图表的方式也有很多种,比如时间和警告数、来源IP和警告数、目的IP和警告数等。如图4.4和4.5。用户可以根据具体的需求来确定选择的图表。
从以上入侵数据的查看和分析中,可以看出,依据规则捕获数据是很准确的,对入侵数据的内容分析也是很全面的[19]。
4.3 本章小结
本章主要讲的是对Snort入侵检测系统整体功能的测试,上一章主要是完成一个模块测试一个模块,而这一章是对整个系统测试。
结 论
IDS可以在多个平台进行设计和部署,由于互联网的快速的普及,网络入侵的危险对用户的威胁也就越来越大了,所以人们对Windows下的入侵检测有了深入了研究和发现,但是在其他平台下的研究不并没有达到一定的程度。本文选择了在Linux系统下设计和实现IDS入侵检测系统,研究内容如下:
(1)本文首先介绍下互联网信息安全的状态,用户面临网络入侵的威胁。然后由此产生的网络入侵检测(Snort)的技术,同时提出了Snort系统的一些问题和不足。
(2)根据SIDS系统设计了整体的结构和编写了用于入侵检测的规则。为详细设计Snort系统做了准备。
(3)介绍SIDS系统完备的设计和实现。同时对单一系统进行了功能的扩充,让系统的功能更加的完善,从而提高了入侵检测的效率和用户使用系统的快捷。本文在实现阶段,对于每一个步骤的完成,都进行了测试。确保了系统在正确的情况下运行。
虽然SIDS已经有了很多优点,但是随着技术的不发展,功能的不断补强,还有很多地方需要完善:
(1)由于互联网的数据量和维度特别的大,增加了入侵检测的负担,使得效率越来越低,针对这样的情况将机器学习和深度学习运用到入侵检测,得到相对于的模型,提高了检测的效率。
(2)Snort系统本身的匹配算法BM有不足之处,由于匹配算法的不足,这样也会使得检测的效率降低,所以针对BM算法的不足,对BM算法进行优化。
致 谢
历时一个学期完成了毕设,最终能够顺利完成。在此,我要感谢我的指导老师王飞老师和陈佳美老师自始至终对我的指导,无论是在论文选题、开题、写作阶段还是在项目的完成过程,老师们都对我们加以悉心指导。老师渊博的学术知识,严谨的治学作风和求实的工作态度都深深地影响着我,是我终生的榜样。
另外,还要感谢我的同学们,在项目的完成和论文的写作的过程中,
为我提供了很多帮助,并且我们并肩战斗,这段永恒的经历见证了我们大
家风雨同舟、共同奋斗的日子。本文的完成是借阅了很多书籍、期刊、论
文文献,在此向这些书籍、期刊、论文文献的作者致以谢意!
大学四年快要结束,回顾前几年的求学生涯,还要感谢母校,感谢母
校为我们提供了一座象牙塔,可以让我们在这座象牙塔里享受着学习的快
乐,运动的酣畅,同学的相互关怀,老师的谆谆教导。这座象牙塔承载了
我们四年的欢声笑语!即使未来再辛苦,母校仍然是我心中的乐土!
感谢在百忙之中为毕业生审查论文以及相关毕业材料的各位老师们!
感谢参与答辩的各位评审老师们!最后,再次衷心感谢所有为我提供帮助
和支持的老师们、同学们!
参考文献
[1]韩东海, 入侵检测系统实例剖析[M]. 北京:清华大学出版社, 2002:63-82
[2]唐正军. 网络入侵检测系统地设计与实现[M]. 北京:电子工业出版社, 2002:112-136
[3]唐正军. 黑客入侵防护系统源代码分析[M]. 北京:机械工业出版社, 2002:73-97
[4]董玉格, 金海, 赵振, 攻击与防护-网络安全与实用防护技术[M]. 北京:人民邮电出版社, 2000:9~81
[5]聂元铭, 丘平. 网络信息安全技术[M]. 北京:科学出版社, 2001:154-162
[6]王德山, 王科超. 试论计算机网络安全中的防火墙技术[J]. 网络安全技术与应用, 2013.07:61-62
[7]吴果, 陈雷, 司志刚等. 网络安全态势评估指标体系优化模型研究[J]. 计算机工程与科学, 2017.05:861-869
[8]叶振新. 防火墙与入侵检测系统联动模型的研究[D]. 上海交通大学, 2008
[9]尹西杰, 徐建国. 多防火墙技术在企业网络安全中的研究及应用[J]. 计算机应用与软件, 2015.08:292-295
[10]李善平,刘文峰,王焕龙等. Linux与嵌入式系统[M]. 北京: 清华大学出版社,2002:121-143
[11]陈晓华, 罗代升, 何小海. 数据挖掘技术在网络入侵检测中的应用[J]. 西南民族大学学报(自然科学版), 2003.06:762-765
[12]任铮, 陈志刚. 基于数据挖掘和规划的智能网络入侵检测系统[J]. 计算机工程与科学, 2006.03:5-7+16
[13]覃英琼. 浅析防火墙技术在计算机网络安全方面的具体应用[J]. 网络安全技术与应用. 2013.11: 77-81
[14]Pandeeswari N, Kumar G. Anomaly Detection System in Cloud Environment Using Fuzzy Clustering Based ANN[J]. Mobile Networks and Applications, 2015: 1-12
[15]Ponsam J G, Srinivasan R. Multilayer Intrusion Detection MANET[J].International Journal of Computer Application. 2014.98(20)s
[16]张翔, 张吉才, 王韬等. 开放源代码入侵检测系统——Snort 的研究[J]. 计算机应用, 2002, 22(11): 96-97.
[17]彭钊. 基于联动的网络入侵防御系统研究与实现[D]. 北京邮电大学, 2010.
[18]史国振, 张萌, 付鹏 et al. Ids 设备检测工具的设计与实现. 信息网络安全, 2016, 5: 23-29.
[19]李威, 杨忠明. 入侵检测系统的研究综述[J]. 吉林大学学报(信息科学版), 2016,34(5):657-662.