【php精品源码栏目提醒】:网学会员为广大网友收集整理了,【精品】入侵检测课程设计 - 其它资料,希望对大家有所帮助!
计算机科学学院入侵检测技术期末课程设计题 目 snort 入侵检测系统 学 号 xxx 班 级 xxx 姓 名 xxx 指导教师 xxx 成 绩 完成时间 2012 年 6 月 snort 入侵检测系统一、课程设计目的(1)通过实验深入理解入侵检测系统的原理和工作方式。
(2)熟悉入侵检测工具 snort 在 Windows 操作系统中的安装和配置方法二、课程设计的原理1 引言 snort 是一个免费的基于 libpcap 的轻量级网络入侵检测系统。
它能够跨系统平台操作,自带轻量级的入侵检测工具可以用于监视小型的 TCP/IP 网络,在进行网络监视时 snort 能够把网络数据和规则进行模式匹配, 从而检测出可能的入侵企图, 同时它也可以使用 SPADE 插件,使用统计学方法对网络数据进行异常检测,这些强大的检测功能为网络管理员对于入侵行为做出适当的反击提供了足够的信息。
snort 使用一种易于扩展的模块化体系结构,开发人员可以加入自己编写的模块来扩展 snort 的功能。
这些模块包括: TCP HTTP 解码插件、 数据流重组插件、端口扫描检测插件、FLEXRESP 插件以及各种日志输入插件等。
同时 snort 还是一个自由、简洁、快速、易于扩展的入侵检测系统,已经被移植到了各种 UNIX 平台和 Win98,Win2000 上。
它也是目前安全领域中,最活跃的开放
源码工程之一。
在 Snort.org 上几乎每天都提供了最新的规则库以供下载,由于 snort 本身是自由的
源码开放工程所以在使用 snort 时除了必要的硬件外软件上基本上不需要有任何额外的开销。
这相对于少则上千多则上万的商业入侵检测系统来说,无疑是最好的替代产品之一。
本文主要论述了 snort 的背景知识以及它的基于规则的入侵检测机制,同时对于如何使用也作了概括说明。
2 入侵检测技术简介 入侵检测就是一个监视计算机系统或者网络上发生的事件,然后对其进行安全分析的过程。
它可以用来发现外部攻击与合法用户滥用特权, 根据用户的历史行为基于用户的当前操作完成对入侵的检测记录入侵证据为数据恢复和事故处理提供依据。
入侵检测系统的原理如图 A 所示: 用户当前操 作的数据 用户的历史操 入侵检测 监测 作数据 攻击? 否 是 作出响应 图 A 入侵检测的原理图 大多数的入侵检测系统都可以被归入到基于主机、基于网络以及分布式三类。
基于主机的入侵检测系统是一种早期的 IDS 设计模型,它主要设计用来监视单一的服务器,因为 DNS、Email 和 web 服务器是多数网络攻击的目标,这些攻击大约占据全部网络攻击事件的 1/3 以上, 基于主机的入侵检测系统就是为了解决这些问题而设计的,它能够监视针对主机的活动(用户的命令、登录/退出过程,使用数据等等) ,它的特点就是针对性好而且,效果明显,误报率低。
基于网络的入侵检测系统是后于基于主机入侵检测系统而出现的, 它主要用于集中用于监控通过网络互连的多个服务器和客户机, 能够监视网络数据发现入侵或者攻击的蛛丝马迹。
分布式 IDS 通过分布于各个节点的传感器或者代理对整个网络和主机环境进行监视, 中心监视平台收集来自各个节点的信息监视这个网络流动的数据和入侵企图。
在入侵检测系统中系统将用户的当前操作所产生的数据同用户的历史操作数据根据一定的算法进行检测从而判断用户的当前操作是否是入侵行为然后系统根据检测结果采取相应的行动。
入侵检测的过程是一个机器检测工具与人黑客对抗的决策分析过程其技术基础是基于知识的智能推理需要用到人工智能的相关技术。
各种入侵检测系统使用的检测方法可以分为两类:基于特征码的检测方法和异常检测。
使用基于特征码检测方法的系统从网络获得数据, 然后从中发现以知的攻击特征。
例如:在某些 URL 中包含一些奇怪的 Unicode 编码字符就是针对IIS Unicode 缺陷的攻击特征。
此外各种模式匹配技术的应用,提高了这种检测方法的精确性。
使用异常检测的系统能够把获得的数据与一个基准进行比较, 检测这些数据是否异常。
例如:如果一个雇员的工作时间是上 9 点到下午 5 点,但是在某个晚上他的计算机记录了他曾经在半夜登录了公司的邮件服务器, 这就是一个异常事件,需要深入调查。
现在,大量的统计学方法用于这个领域。
3 Snort 简介 snort 是一个基于 libpcap 的轻量级网络入侵检测系统。
根据 snort.org,轻量级入侵检测系统是这样定义的: 首先它能够方便地安装和配置在网络的任何一个节点上,而且不会对网络运行产生太大的影响,同时轻量级入侵检测系统还应该具有跨系统平台操作,最小的系统要求以及易于部署和配置等特征, 并且管理员能够利用它在短时间内通过修改配置进行实时的安全响应。
Snort 是一个典型的轻量级入侵检测系统,首先可以运行在多种操作系统平台,例如 UNIX 系列和 Win9X,Win2000(需要 libpcap for Win32 的支持) ,与很多商业产品相比,它对操作系统的依赖性比较低。
它的分发
源码文件压缩包大约只有 100KB,在一台一般性能的计算机上编译安装时大约只需几分钟的时间,另外配置激活也大约只需要十几分钟的时间, 安装以后即便不对它进行维护也能长时间稳定运行。
其次用户可以根据自己的需要及时在短时间内调整检测策略。
就检测攻击的种类来说,据最新的规则包文件 snortrules-stable.tar.gz(Sep 402:15:18 2002)snort 共有 33 类,1867 条检测规则,其中包括对缓冲区溢出,端口扫描和 CGI 攻击等等。
3.1 Snort 规则 Snort 是基于规则的模式匹配的,这种体系结构非常灵活,用户可以到 在http://www.snort.org/dl/signatures/下载最新的规则, snort.org 上几乎每几天就会有新的规则被更新,同时用户也可以自己书写新的规则,Snort 规则文件是一个ASCII 文本文件,可以用常用的文本编辑器对其进行编辑。
规则文件的内容由以下几部分组成: 变量定义:在这里定义的变量可以在创建 Snort 规则时使用。
Snort 规则:在入侵检测时起作用的规则,这些规则应包括了总体的入侵 检测策略。
预处理器:即插件,用来扩展 Snort 的功能。
如用 portscan 来检测端口扫 描。
包含文件 Include Files:可以包括其它 Snort 规则文件。
输出模块:Snort 管理员通过它来指定记录日志和警告的输出。
当 Snort 调用告警及日志子系统时会执行输出模块。
规则具体的书写不再做说明,如果想想进行更进一步了解可以到 snort.org 的文档中心去下载 snort 的官方文档《Snort Users Manual》中的 Writing Snort Rules 。
章节(其链接是 http://www.snort.org/docs/writing_rules/chap2.htmltth_chAp2) 3.2 Snort 与 tcpdump 的比较 如果用尽量简单的话来定义 tcpdump,就是:Dump the traffic on a network.,即根据使用者的定义对网络上的数据包进行截获的包分析工具。
作为互联网上经典的系统管理员必备工具,tcpdump 以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的工具之一。
顾名思义,tcpdump 可以将网络中传送的数据包的“头”完全截获下来提供分析。
它支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句来帮助你去掉无用的信息。
从表面上看来,Snort 与 tcpdump 是非常相似的,Snort 与它的最大的共同之处在于都是基于 libpcap 的并且支持 BPF 过滤机制,所以本质上都是调用的捕获数据包的库函数,但是 snort 的目的不仅仅是在于记录这个数据包而是从安全的角度考虑出发来解析它, 并且 tcpdump 主要是分析第二层或者第三层的报文来进行网络故障诊断,而 snort 则主要针对于应用层的数据进行分析从而实现检测入侵行为。
除此之外,由于 tcpdump 旨在快速完整地记录流量,所以它制定了特殊的输出格式,速度快,但是不易看懂,而 snort 就提供了更为友好的输出格式,有利于系统管理员的直接分析。
4 snort 的体系结构 日志 数据包 解码器 检测引擎 报警 图 B snort 的体系结构 4.1 数据包捕获和解码子系统(Decoder) 该子系统的功能为捕获网络得传输数据并按照 TCP/IP 协议的不同层次将数据包进行解析。
Snort 利用 libpcap 库函数进行采集数据, 该库函数可以为应用程序提供直接从链路层捕获数据包的接口函数并可以设置数据包的过滤器以来捕获指定的数据。
网络数据采集和解析机制是整个 NIDS 实现的基础,其中关键的是要保证高速和低的丢包率, 这不仅仅取决于软件的效率还同硬件的处理能力相关。
对于解析机制来说,能够处理数据包的类型的多样性也同样非常重要,目前,snort 可以处理以太网,令牌环以及 SLIP 等多种类型的包。
4.2 检测引擎(the detect engine) 检测引擎是 snort 的核心,准确和快速是衡量其性能的重要指标,前者主要取决于对入侵行为特征码的提取的精确性和规则撰写的简洁实用性, 由于网络入侵检测系统是被动防御的——只能被动的检测流经本网络的数据, 而不能主动发送数据包去探测,所以只有将入侵行为的特征码归结为协议的不同字段的特征值,通过检测该特征值来决定入侵行为是否发生。
后者主要取决于引擎的组织结构,是否能够快速地进行规则匹配。
为了能够快速准确地进行检测,snort 将检测规则利用链表的形式进行组织,分为两部分:规则头和规则选项。
前者是所有规则共有的包括 IP 地址、端口号等,后者根据不同规则包括相应的字段关键字。
下图 C 是 Snort 的创始人 MartinRoesch 所作的检测规则的示意图。
规则链表头 规则链表头 规则链表头 源IP地址 源IP地址 源IP地址 目的IP地址 目的IP地址 目的IP地址 ...... 源端口号 源端口号 源端口号 目的端口号 目的端口号 目的端口号 规则链表选项 规则链表选项 规则内容 规则内容 ...... TCP标志位 TCP标志位 ICMP类型码 ICMP类型码 有效大小 有效大小 .... .... 规则链表选项 规则内容 TCP标志位 ICMP类型码 ...... 有效大小 .... ...... 图C 检测规则的结构示意图 当进行规则的匹配时,在链表的两个方向同时进行,检测引擎只检测那些在一开始在规则解析器中设置好了的规则选项。
当检测引擎检测到第一个与被解码的包相匹配的规则时,检测引擎触发相应的动作并返回。
4.3 日志/报警子系统 snort 对每个被检测的数据包都定义了如下的三种处理方式:alert发送报警信息log(记录该数据包)和 pass(忽略该数据包) 。
这其实是具体定义在检测规则中的。
其具体的完成是在日志/报警子系统中完成的,日志子系统允许你将包解码收集到的信息以可读的格式或以 tcpdump 格式记录下来。
报警子系统使其将报警信息发送到 syslog、flat 文件、Unix 套接字或数据库中。
三、课程设计任务1、Windows 环境下安装和配置 snort 、(1)安 装 Snort 和 Wincap 包2.AppServ(1)安装 AppServ启动 AppServ 安装文件后,出现如图所示的设置服务器信息界面:在 Server Name 中输入服务器 IP 地址:localhost:Administrators Email Address 中输入邮箱地址:1051466395qq.com监听端口设为 8080点击 next,进入下一界面:在出现的界面中输入密码(123) :Character Sets and Collations选择GB 2312Simplified Chinese如下图所示:然后单击Install进入安装过程,出现下图:安装完成后将 C:Appservphp5 目录下的
php.ini-dist 文件改名为
php.Ini,并启动Apache 和 MySql。
(控制面板—管理—服务 确保 Apache 和 MySql 已启动)安装完成后可以查看(MySQL 启动如下图)在浏览器中输入 http://localhost :8080 出现: 表示安装成功!(2)测试 AppServ首先查看控制面板/管理/服务确保 Apache 和 MySQL 已经启动,然后,在浏览器中输入 http://localhost :8080/phpinfo.
php(下图)可以了解
php 的一些信息。
最后打开浏览器,输入 http://localhost :8080/phpMyAdmin/index.
php下图)输入用户名 root 和密码,可以浏览数据库内容(3)配置 AppServ第一步,编辑 Apache 服务器配置文件。
打开 Apache2.2conf 文件中的httpd.conf检查相应的一些值进入 Apache 服务器配置文件需要检查一下一些值:LoadModule
php5_module D:/AppServphp5
php5apache2_2.dll Main server configuration The directives in this section set up the values used by the main server which responds to any requests that arent handled by a definition. These values also provide defaults for any containers you may define later in the file. All of these directives may appear inside containers in which case these default settings will be overridden for the virtual host being defined. ServerAdmin: Your address where problems with the server should be e-mailed. This address appears on some server-generated pages such as error documents. e.g. adminyour-domain.comServerAdmin 1051466395qq.com ServerName gives the name and port that the server uses to identify itself. This can often be determined automatically but we recommend you specify it explicitly to prevent problems during startup. If your host doesnt have a registered DNS name enter its IP address here.ServerName localhost:8080 DocumentRoot: The directory out of which you will serve your documents. By default all requests are taken from this directory but symbolic links and aliases may be used to point to other locations.DocumentRoot D:/AppServ/www Each directory to which Apache has access can be configured with respect to which services and features are allowed and/or disabled in that directory and its subdirectories. First we configure the default to be a very restrictive set of features. Options FollowSymLinks ExecCGI Indexes AllowOverride None Order denyallow Deny from all Satisfy all Note that from this point forward you must specifically allow particular features to be enabled - so if somethings not working as you might expect make sure that you have specifically enabled it below. This should be changed to whatever you set DocumentRoot to.第二步,编辑 phpMyAdmin 中的关键文件。
打开D:AppServwwwphpMyAdminlibraries 目录下的 config.default.
php 文件设置 phpMyadmin 的 URL,cfgPmaAbsoluteUri http://localhost:8080/phpmyadmin/cfgblowfish_secret 123cfgDefaultLang zh-gb2312cfgDefaultCharset gb2312cfgServersiauth_type cookie第三步,配置
php.ini。
打开 C:WINDOWSphp.ini 文件第四步,配置
php.ini。
打开 C:WINDOWSphp.ini 文件。
修改后的值如下图:第五步,对 Mysql 进行修改。
首先需要建立 Snort 运行必需的 Snort 库和Snort_archive 库: 创建表 schema 和 event 的代码如下所示: CREATE TABLE schema vseq INT UNSIGNED NOT NULL ctime DATETIME NOT NULL PRIMARY KEY vseqINSERT INTO schema vseq ctime VALUES 107 nowCREATE TABLE event sid INT UNSIGNED NOT NULL cid INT UNSIGNED NOT NULL signature INT UNSIGNED NOT NULL timestamp DATETIME NOT NULL PRIMARY KEY sidcid INDEX sig signature INDEX time timestamp执行结果如下图所示:第六步,使用 C:Snortschemas 目录下的 create_MySQL 脚本建立 Snort 运行必需的数据表。
在此,可以通过 MySQL 提示符下运行 SQL 语句 show tables 来检验配置的正确性其中 c:Snort 为 Snort 的安装目录,打开命令提示符,运行以下命令: mysql -D Snort -u root -p c:Snortschemascreate_mysql mysql -D Snort_archive -u root -p c:Snortschemascreate_Mysql每次提示输入 root 的密码,输入密码即可建立所需要的表。
通过 MySQL 提示符下运行 SQL 语句 show tables 来检验配置的正确性第七步,必须在 Appache 服务器主机上建立 ACID 和 Snort 用户,并且设置权限和密码(主要是根据课本步骤修改代码)代码如下:grant usage on . to acidlocalhost identified by acidtestgrant usage on . to snortlocalhost identified by snorttestgrant selectinsertupdatedeletecreate on . to snortlocalhost identified by snorttestgrant selectinsertupdatedeletecreatealter on snort. to acidlocalhostgrant selectinsert on snort. to snortlocalhostgrant selectinsertupdatedeletecreatealter on snort_archive. to acidlocalhostset password for snortlocahostpassword123set password for acidlocahostpassword123在 Mysql 中运行如下:在 Appache 服务器主机上建立 ACID 和 Snort 用户设置权限和密码设置结果如图所示: 、(3)安 装 AdodbjpGraph 和 ACID移动文件 adodb jpgraph acid 得到:Adodb 生成目录:d:AppServphp5adodbjpgraph 生成目录:d:AppServphp5jpgraphacid 生成目录:d:AppServwwwacid修改 d:AppServwwwacid 中的 acid-conf.
php 文件DBlib_path d:AppServphp5adodbalert_dbname snortalert_host localhostalert_port 3306alert_user acidalert_password 123archive_dbname snort_archivearchive_host localhostarchive_port archive_user acidarchive_password 123ChartLib_path d:AppServphp5jpggraphsrc打开 acid_conf.
php 文件修改并保存,结果如下图:在 mysql 命令端输入如下命令并回车,出现如下所示,表明运行成功:最后在浏览器中输入 http://localhost:8080/acid/acid-db-setup.
php 出现如下界面: 说明 安装成功 、(4)配 置 snort修改 d:snortetcsnort.conf 主要改绝对路径: 修改前 修改后然后还需要修改引用路径:dynamicpreprocessor directory d:/snort/lib/snort_dynamicpreprocessor/dynamicengine d:/snort/lib/snort_dynamicengine/libsf_engine.dll
上一篇:
【精品文档】EditPlus 使用技巧集萃
下一篇:
4种小菜缓解孕妈咪不适