入侵检测系统(IDS)是对计算机和网络系统资源上的恶意使用行为进行识别和响应的处理系统,它像雷达警戒一样,在不影响网络性能的前提下,对网络进行警戒、检测,从计算机网络的若干关键点收集
入侵检测系统IDS根据工作的重点不同,可分为基于主机的入侵检测系统和基于网络的入侵检测系统。入侵检测系统构成一般分为,两个部分一个部分是检测的部分(Sensor),一部分是处理报警结果的控制台。不同的入侵检测的构成也不太一样大致都具有控制台和Sensor两个基本部分,基于主机的入侵检测多半在主机上安装一个代理程序来收集系统信息向Sensor汇报。
入侵检测系统的检测信息来源都是通过自身的检测部分Sensor 得到的。 基于网络的入侵检测,主要是通过对网络数据包的截取分析,来查找具有攻击特性和不良企图的数据包的。在网络里基于网络的入侵检测系统的检测部分Sensor 一般被布置在一个交换机的镜象端口(或者一个普通的HUB任意端口),听取流经网络的所有数据包,查找匹配的包,来得到入侵的信息源。 基于主机的入侵检测系统的Sensor 不可能直接从系统内部获取信息的,它是要通过一个事先做好的代理程序,安装在需要检测的主机里的,这些代理程序主要收集系统和网络日志文件,目录和文件中的不期望的改变,程序执行中的不期望行为,物理形式的入侵信息。
基于网络的入侵检测系统的检测端Sensor一般被布置在网络的核心交换机,或者部门交换的交换机的镜象端口(采取把Sensor 放在核心交换机器的镜像端口还是部门交换机的镜像端口,主要由网络的流量和客户机的数量,以及入侵检测的处理能力和网络发生攻击的频繁程度来定的)在网管的机器上,安装上入侵检测系统的控制台,做报警处理,在重要的服务器或者有必要的客户端安装代理程序收集系统和网络日志等系统信息,寻找具有攻击特性的数据包。技术人员对来自主机的和网络的检测信息进行分析和监控。
Snort是目前应用最为广泛的一个IDS产品,它被定位为一个轻量级的入侵检测系统,它具有以下几个特点:
(1) 它是一个轻量级的网络入侵检测系统,所谓轻量级是指该软件在运行时只占用极少的网络资源,对原有网络性能影响很小。 (2) 从数据来源上看,它是一个基于网络入侵的检测软件,即它作为嗅探器对发往同一网络的其他主机的流量进行捕获,然后进行分析。 (3) 它的工作采用误用检测模型,即首先建立入侵行为特征哭,然后在检测过程中,将收集到的数据包和特征代码r进行比较,以得出是否入侵的结论。 (4) 它是用c语言编写的开放源代码网络入侵检测系统。其源代码可以被自由的读取、传播和修改,任何一个程序员都可以自由地为其添加功能,修改错误,任意传播。这使它能迅速发展完善并推广应用。 (5) 它是一个跨平台的软件,所支持的 操作系统非常广泛,比如 windows, linux, sunos等都支持。在windows下安装比较简单:首先下载windows下网络数据包捕获工具winp cap([url]www.winpc[/url] ap.org),然后下载snort安装包,直接双击安装即可。 (6) Snort有三种主要模式:信息包嗅探器、信息包记录器或成熟的入侵探测系统。 Snort的一些功能: 实时通信分析和信息包记录。 包装有效载荷检查。 协议分析和内容查询匹配。 探测缓冲溢出、秘密端口扫描、CGI攻击、SMB探测、操作系统入侵尝试。 对系统日志、指定文件、 Unix socket或通过Samba的winpopus进行实时报警。
Snort可以工作在3种工作模式,分别如下:
1) 嗅探器sniffer: 命令:snort -v [-d][-X]
Snort使用Libpcap包捕获库,即TCPDUMP使用的库。在这种模式下,Snort使用网络接口的混杂模式读取并解析共享信道中的网络分组。BPF表达式可用来过滤流量。
-v verbose -d 转储应用层数据 -X 转储从链路层开始的原始包 2) 分组日志模式 命令:snort -l dir [-h hn][-b] 这种模式下以ASC II格式记录解析出的分组。 -l directory snort将把日志放在这个目录下 -h X.X.X.X 设置本地子网号 -b 日志使用TCPDUMP二进制格式 3) 入侵检测模式 命令: snort -c snort.conf [-l dir] 必须载入规则库才能进入入侵检测模式。即 #./snort -c snort.conf snort将报警信息放入/var/log/snort目录下,可以用-l选项来改变目录。
当我们采用入侵检测模式时,必须载入规则库才能进行检测,载入规则库后,snort网络数据和规则集进行模式匹配,从而检测可能的入侵企图。
本文讲述Linux平台(这里是redhat 9.0)下snort的安装与配置,最后为snort配置一个ACID的web入侵事件
数据库分析控制台。在Linux环境下需要事先安装多种软件构建支持环境才能使用snort。表1列出了相关软件及它们的作用。
表1 安装snort所需软件
1.安装zlib1.1.4
tar -xzvf zlib-xx.tar.gz cd zlib-xx /configure; make install cd .. 2.安装LibPcap0.7.2 tar -xzvf libpcap.tar.gz cd libpcap-xx /configure Make make install cd .. 3.安装MySQL4.0.12 tar -xzvf mysql-xx.tar.gz cd mysql-xx /configure --prefix=/usr/local/mysql Make make install cd scripts /mysql_install_db chown -R root /usr/local/mysql chown -R mysql /usr/local/mysql/var chgrp -R mysql /usr/local/mysql cd ./support-files/my-medium.cnf /etc/my.cnf 向/etc/ld.so.conf中加入两行:/usr/local/mysql/lib/mysql /usr/local/lib 载入库,执行 ldconfig �Cv 测试mysql是否工作: 4.安装Apache2.0.45和PHP4.3.1 tar -zxvf httpd-2.0.xx.tar.gz cd httpd_2.xx.xx /configure --prefix=/www --enable-so make make install cd .. tar -zxvf php-4.3.x.tar.gz cd php-4.3.x /configure --prefix=/www/php --with-apxs2=/www/bin/apxs --with-config- filepath=/www/php --enable-sockets --with-mysql=/usr/local/mysql --with-zlibdir=/ usr/local --with- gd cp php.ini-dist /www/php/php.ini 编辑httpd.conf(/www/conf): 加入两行 LoadModule php4_module modules/libphp4.so AddType application/x-httpd-php .php httpd.conf中相关内容如下: # # LoadModule foo_module modules/mod_foo.so LoadModule php4_module modules/libphp4.so # AddType allows you to tweak mime.types without actually editing it, or ?$ # make certain files to be certain types. # AddType application/x-tar .tgz AddType image/x- icon .ico AddType application/x-httpd-php .php 测试一下Apache和PHP:
5.安装 Snort2.0
5.1建立snort配置文件和日志目录 mkdir /etc/snort mkdir /var/log/snort tar -zxvf snort-2.x.x.tar.gz cd snort-2.x.x /configure --with-mysql=/usr/local/mysql Make make install 5.2安装规则和配置文件 cd rules (在snort安装目录下) cp * /etc/snort cd ./etc cp snort.conf /etc/snort cp *.config /etc/snort 5.3修改snort.conf(/etc/snort/snort.conf) var HOME_NET 10.2.2.0/24 var RULE_PATH ./rules 修改为 var RULE_PATH /etc/snort/ 改变记录日志数据库: output database: log, mysql, user=root password=your_password dbname=snort host=localhost 5.4设置snort为自启动: 在snort安装目录下 cd /contrib. cp S99snort /etc/init.d/snort vi /etc/init.d/snort 修改snort如下: CONFIG=/etc/snort/snort.conf #SNORT_GID=nogroup (注释掉) #8194;$SNORT_PATH/snort -c ?$CONFIG -i ?$IFACE ?$OPTIONS chmod 755 /etc/init.d/snort cd /etc/rc3.d ln -s /etc/init.d/snort S99snort ln -s /etc/init.d/snort K99snort cd /etc/rc5.d ln -s /etc/init.d/snort S99snort ln -s /etc/init.d/snort K99snort 6 在mysql中建立snort数据库,结果如下: 7.安装ADOdb cp adodb330.tgz /www/htdocs/ cd /www/htdocs tar -xzvf adodb330.tgz rm -rf adodb330.tgz 8.安装JgGraph cp jpgraph-1.11.tar.gz /www/htdocs cd /www/htdocs tar -xzvf jpgraph-1.xx.tar.gz rm -rf jpgrap-1.xx.tar.gz cd jpgraph-1.11 rm -rf README rm -rf QPL.txt 9.安装配置数据控制台ACID cp acid-0.0.6b23.tar.gz /www/htdocs cd /www/htdocs tar -xvzf acid-0.9.6b23.tar.gz rm -rf acid-0.9.6b23.tar.gz cd /www/htodcs/acid/ 编辑acid_conf.php,修改相关配置如下: #8194;$DBlib_path = "/www/htdocs/adodb"; #8194;$alert_dbname = "snort"; #8194;$alert_host = "localhost"; #8194;$alert_port = ""; #8194;$alert_user = "root"; #8194;$alert_password = "Your_Password"; /* Archive DB connection parameters */ #8194;$archive_dbname = "snort"; #8194;$archive_host = "localhost"; #8194;$archive_port = ""; #8194;$archive_user = "root"; #8194;$archive_password = "Your_Password "; And a little further down #8194;$ChartLib_path = "/www/htdocs/jpgraph-1.11/src"; /* File format of charts ('png', 'jpeg', 'gif') */ #8194;$chart_file_format = "png"; 进入web界面: [url]http://yourhost/acid/acid_main.php[/url] 点"Setup Page"链接 ->Create Acid AG 访问[url]http://yourhost/acid[/url]将会看到ACID界面。
Snort 规则
Snort规则库是不断更新的,可以在[url]www.snort.org[/url]上下载到最新的snort规则库。snrot使用一种简单的轻量级的规则描述语言来描述它的规则配置信息,它灵活而强大。在版本1.8之前snort规则必须写在一个单行上,在现在的版本里可以用‘\’来进行折行。
Snort规则分成两个逻辑部分:规则头和规则选项。规则头包含规则的动作,协议,源和目标ip地址与网络掩码,以及源和目标端口信息;规则选项部分包含报警消息内容和要检查的包的具体部分。下面是一个规则范例: alert tcp any any -> 192.168.1.0/24 111 (content:"|00 01 86 a5|"; msg: "mountd access";)
括号前的部分是规则头,括号内的部分是规则选项。规则选项部分中冒号前的单词称为选项关键字。注意:不是所有规则都必须包含规则选项部分,选项部分只是为了使对要收集或报警,或丢弃的包的定义更加严格。组成一个规则的所有元素对于指定的要采取的行动都必须是真的。当多个元素放在一起时,可以认为它们组成了一个逻辑与(AND)语句。同时,snort规则库文件中的不同规则可以认为组成了一个大的逻辑或(OR)语句。
如下图是从[url]http://www.snort.org[/url]官方网站下载的Community-Rules-2.4中
mysql.rules中的一部分规则。我们查看其中的一条如下: alert tcp $EXTERNAL_NET any -> $SQL_SERVERS 3306 (msg:"MYSQL root login attempt"; flow:to_server,established; content:"|0A 00 00 01 85 04 00 00 80|root|00|"; classtype: protocol-command-decode; sid:1775; rev:2;)
它表示从外部网络的任意端口访问mysql服务器的3306端口时,如果数据流
里匹配到内容0A 00 00 01 85 04 00 00 80 root 00(其中数字表示2进制字节
码),那么就在记录中或报警“MYSQL root login attempt“。
通过对snort规则的分析,我们可以看出,其实snort规则中除了ip地址和端口号以外,最重要的还是模式匹配的内容,即关键字content中包含的内容。我们要提交漏洞攻击代码和工具被利用时的符合snort格式的网络检测特征,应该就是攻击代码中的特征字段。
通过对特征规则以及网上资料的分析,发现对于特征字段,运行攻击代码时用ethreal或其它sniffer工具来截获数据包,然后根据数据包的解码内容,来分析特征字段,然后书写snort的规则。在《用Snort从原理上检测MS05-051攻击》一文中,作者给出了针对MS05-051漏洞怎样通过攻击代码编写规则进而检测攻击的方法和步骤。从文中可以看出,主要是用ethreal截获数据包后,提取匹配的要点,然后用snort中的关键字来书写规则,这样就得到了snort的特征规则。
本文系统讲述了linux下snort的安装与配置,并讲解了snort规则库的相关知识,以及怎样书写自己的符合snort格式的规则库,希望大家学习和理解snort有帮助。
|
|||||||||||||||||||||||||||||