第1章 Snort简介
第2章 软件列表
第3章 Snort 安装与配置
第4章 Snort的操作与使用
第5章 常见问题与解决方法
第1章 Snort简介
Snort是一个免费的IDS(***监测系统)软件。它的一些源代码是从著名的tcpdump软件发展而来的。它是一个基于libpcap包的网络监控软件,可以作为一个十分有效的网络***监测系统。它能够监测多种网络***和探测,例如:缓冲器溢出***,端口扫描,CGI***,SMB探测等等。Snort具有实时的告警能力,将告警记入一个特别的告警文件--系统日志,或者将告警信息通过samba转发给另一台Windows PC机。
Snort首先根据远端的ip地址建立目录,然后将检测到的包以tcpdump的二进制格式记录或者以自身的解码形式存储到这些目录中.这样一来,你就可以使用snort来监测或过滤你所需要的包.
snort是一个轻量级的***检测系统,它具有截取网络数据报文,进行网络数据实时分析、报警,以及日志的能力。snort的报文截取代码是基于libpcap库的,继承了libpcap库的平台兼容性。它能够进行协议分析,内容搜索/匹配,能够用来检测各种***和探测,例如:缓冲区溢出、隐秘端口扫描、CGI***、SMB探测、OS指纹特征检测等等。snort使用一种灵活的规则语言来描述网络数据报文,因此可以对新的***作出快速地翻译。snort具有实时报警能力。可以将报警信息写到syslog、指定的文件、UNIX套接字或者使用WinPopup消息。snort具有良好的扩展能力。它支持插件体系,可以通过其定义的接口,很方便地加入新的功能。snort还能够记录网络数据,其日志文件可以是tcpdump格式,也可以是解码的ASCII格式。
第2章 软件列表
软件名称
功能简述
正式网址
软件版本
Snort
网络***探测器
[url]www.snort.org/[/url]
1.8.6
Libpcap
Snort所依赖的网络抓包库
[url]www.tcpdump.org/[/url]
0.7.1
MySQL
***事件数据库
[url]www.mysql.org/[/url]
3.23.49
Apache
Web服务器
[url]www.apache.org/[/url]
1.3.24
Mod_ssl
为Apache提供SSL加密功能的模块
[url]www.modssl.org/[/url]
2.8.8
OpenSSL
开放源代码的SSL加密库,为mod_ssl所依赖
[url]www.openssl.org/[/url]
0.9.6d
MM
为Apache的模块提供共享内存服务
[url]www.engelschall.com/[/url]
1.1.3
ACID
基于Web的***事件数据库分析控制台
[url]www.cert.org/kb/aircert/[/url]
0.9.6b21
PHP
ACID的实现语言
[url]www.php.net/[/url]
4.0.6
GD
被PHP用来即时生成PNG和JPG图像的库
[url]www.boutell.com/gd/[/url]
1.8.4
ADODB
为ACID提供便捷的数据库接口
php.weblogs.com/ADODB
2.00
PHPlot
ACID所依赖的制图库
[url]www.phplot.com/[/url]
4.4.6
第3章 Snort 安装与配置
在正式进行软件安装之前,请检查系统,确保拥有符合ANSI标准的C/C++编译器等软件开发工具。
1.安装***事件数据库MySQL
首先,以超级用户的身份登录系统,创建MySQL 用户和MySQL用户组; 然后,以MySQL身份登录,按照缺省配置将MySQL安装在/usr/local目录下;接下来,将源代码树中的缺省配置文件My.cnf拷贝到/etc目录下;再用超级用户身份执行源码树中Scripts目录下的可执行脚本文件Mysql_install_db创建初始数据库; 随后,用/etc/init.d/mysql.server命令启动数据库服务器,使用/usr/local/bin/mysqladmin程序改变数据库管理员的口令。
2.安装Snort
首先安装Snort所依赖的网络抓包库Libpcap,将其按照缺省配置安装在/usr/local目录下之后,开始正式安装Snort。
#gzip -d -c snort-1.8.6.tar.gz | tar xvf -
#cd snort-1.8.6
#./configure --prefix=/usr/local --with-mysql=/usr/local
--with-libpcap-includes=/usr/local \
--with-libpcap-libraries=/usr/local
#make
#make install
安装完毕后,将源码树中的Snort.conf文件、Classification.config文件和规则文件(*.rules)拷贝到系统的/etc目录下。
按照下列步骤配置Snort,以便将其捕获的网络信息输出到MySQL数据库。
(1)创建Snort***事件数据库和存档数据库。
#/usr/local/bin/mysqladmin -u root -p create snort
#/usr/local/bin/mysqladmin -u root -p create snort_archive
(2)执行Snort源码树下Contrib目录下的Create_mysql SQL脚本文件,创建相关表。
#/usr/local/bin/mysql -u root -D snort -p #/usr/local/bin/mysql -u root -D snort_archive -p (3)编辑/etc/snort.conf文件&#xff0c;在Output Plugin 段中加入如下一行&#xff1a; output database: alert, mysql, user&#61;root password&#61;abc123 dbname&#61;snort host&#61;localhost 3&#xff0e;安装Web服务器Apache (1)安装MM库 按照缺省配置将MM库安装在/usr/local目录下。 (2)安装OpenSSL 按照缺省设置将OpenSSL安装在/usr/local目录下。 (3)为Apache扩展mod_ssl代码 #gzip -d -c apache-1.3.24.tar.gz | tar xvf - #gzip -d -c mod_ssl-2.8.8-1.3.24.tar.gz | tar xvf - #cd mod_ssl-2.8.8-1.3.24 #./configure --with-apache&#61;apache-1.3.24 该命令运行成功之后&#xff0c;会有提示说明已经成功扩展了Apache的源代码。 (4)安装Apache #cd ../apache-1.3.24 #SSL_BASE&#61;/usr/local EAPI_MM&#61;/usr/local \ ./configure --enable-module&#61;so --enable-module&#61;ssl --prefix&#61;/usr/local #make #make certificate #make install 其中&#xff0c;Make certificate命令是为mod_ssl生成所需的安全证书&#xff0c;按照提示输入相应信息即可。这样&#xff0c;Apache就被安装在/usr/local目录下。 4&#xff0e;安装实现语言PHP 按照缺省配置&#xff0c;将为PHP提供即时生成PNG和JPG图像功能的GD库安装到/usr/local目录下; 然后采用PHP的Apache DSO安装模式将其安装到/usr/local/libexec目录&#xff0c;成为Apache的动态共享模块。另外&#xff0c;不要忘记把对MySQL的支持和GD库也编译到模块里。 5&#xff0e;安装分析控制台ACID 该部分的安装工作具体包括3个软件包&#xff1a;Adodb200.tar.gz、Phplot-4.4.6.tar.gz和Acid-0.9.6b21.tar.gz。安装过程十分简单&#xff0c;只需分别将这3个软件包解压缩并展开在Apache服务器的文档根目录下即可。 然后开始配置工作。转到Acid-0.9.6b21目录下编辑ACID的配置文件Acid_conf.php&#xff0c;给下列变量赋值&#xff1a; $Dblib_path&#61;"../adodb200" $DBtype&#61;"mysql" $alert_dbname&#61;"snort" $alert_host&#61;"localhost" $alert_port&#61;"3306" $alert_user&#61;"root" $alert_password&#61;"abc123" $archive_dbname&#61;"snort_archive" $archive_host&#61;"localhost" $archive_port&#61;"3306" $archive_user&#61;"root" $archive_password&#61;"abc123" $ChartLib_path&#61;"../phplot-4.4.6" $Chart_file_format&#61;"png" $portscan_file&#61;"/var/log/snort/portscan.log" 至此&#xff0c;网络***检测系统的软件安装工作结束。 三、系统部署及运行 本系统被部署在网络服务器所处的DMZ区&#xff0c;用来监控来自互联网和内网的网络流量。负责监控的网络探测器Snort使用无IP地址的网卡进行监听&#xff0c;以保证NIDS自身的安全; 通过另一块网卡接入内网&#xff0c;并为其分配内网所使用的私有IP地址&#xff0c;以便从内网访问分析控制台程序ACID。通过启用Apache服务器的用户身份验证和访问控制机制&#xff0c;并结合SSL&#xff0c;保证系统的访问安全。 另外&#xff0c;部署NIDS的关键是应当保证系统的监听网卡所连接的设备端口能够“看到”受监控网段的全部网络流量。在共享式网络中&#xff0c;这不是问题&#xff0c;但在交换式网络中&#xff0c;由于交换机的每个端口拥有自己的冲突域&#xff0c;因此无法捕获除广播和组播之外的网络流量&#xff0c;这就要求交换机提供监控端口&#xff0c;本网络使用的是Cisco Catalyst系列交换机&#xff0c;其监控端口是通过端口的SPAN特性来实现的&#xff0c;用交换机管理软件启用该特性即可。 为了运行该系统&#xff0c;以超级用户身份执行下列命令&#xff1a; #/etc/init.d/mysql.server start #/usr/local/bin/snort -c /etc/snort.conf -l /var/log/snort -I elx0 -D #/usr/local/bin/apachectl sslstart 这样&#xff0c;NIDS已开始运行&#xff0c;然后在内网的管理PC机上启动浏览器&#xff0c;在地址栏中键入&#xff1a;[url]https://192.168.1.8/acid-0.9.6b21/[/url]&#xff0c;其中192.168.1.8是为该NIDS内网网卡分配的IP地址。首次运行时&#xff0c;控制台会提示用户对***事件数据库进行扩展&#xff0c;按照提示扩展完毕后&#xff0c;控制台主界面出现。如图1所示。 图1 一天之内的报警频率 主界面里显示的信息包括&#xff1a;触发安全规则的网络流量中各种协议所占的比例、警报的数量、***主机和目标主机的IP地址及端口号等。ACID控制台还提供强大的搜索功能&#xff0c;用户可根据时间、IP地址、端口号、协议类型以及数据净荷(payload)等多种条件的灵活组合&#xff0c;在***事件数据库中进行查询&#xff0c;以帮助网管人员进行分析。 ***特征库是否丰富对一个NIDS非常重要&#xff0c;本系统同时支持多种有影响的***特征库&#xff0c;包括CERT/CC、arachNIDS和CVE等。在警报中除了列出***事件的命名外&#xff0c;还有到相应***特征库的Web链接&#xff0c;如果某个警报存在多个命名&#xff0c;则同时予以列出&#xff0c;以便参考。网络管理人员可通过这些链接去查找在线***特征库&#xff0c;以便获得关于特定***事件更加详细的信息和相应的解决办法。 应用ACID提供的制图功能可以直观地对网络***事件进行分析&#xff0c;而生成的图表又可进一步丰富网管人员编制的报告。例如ACID分析控制台可以按用户指定的时间段生成***事件的频率图&#xff0c;如图2所示。 图2 一周报警频率 结束语 网络安全是一个复杂的问题&#xff0c;只依靠1&#xff5e;2种网络安全产品是不能解决问题的&#xff0c;必须综合应用多种安全技术&#xff0c;并将其功能有机地整合到一起&#xff0c;进而构成统一的网络安全基础设施。 第4章 Snort的操作与使用 Snort采取命令行方式运行。格式为&#xff1a;snort -[options] 。options中可选的参数很多&#xff0c;下面逐一介绍。 首先介绍-[options]的内容&#xff1a; -A 设置告警方式为full,fast或者none。 在full方式下&#xff0c;Snort将传统的告警信息格式写入告警文件&#xff0c;告警内容比较详细。在fast方式下&#xff0c;Snort只将告警时间&#xff0c;告警内容&#xff0c;告警IP地址和端口号写入文件。在none方式下&#xff0c;系统将关闭告警功能。 -a 显示ARP包 -b 以tcpdump的格式将数据包记入日志。 所有的数据包将以二进制格式记入名为snort.log的文件中。这个选项提高了snort的操作速度&#xff0c;因为直接已二进制存储&#xff0c;省略了转换为文本文件的时间&#xff0c;通过-b选项的设置&#xff0c;snort可以在100Mbps的网络上正常工作。 -c 使用配置文件。这是一个规则文件。文件内容主要控制系统哪些包需要记入日志&#xff0c;哪些包需要告警&#xff0c;哪些包可以忽略等。 -C 仅抓取包中的ASCII字符 -d 抓取应用层的数据包 -D 在守护模式下运行Snort。告警信息发送至/var/log/snort.alert&#xff0c;除非特别配置。 -e 显示和记录网络层数据包头信息 -F 从文件中读取BPF过滤信息。 -h 设置(C类IP地址)为内部网络.当使用这个开关时,所有从外部的流量将会有一个方向箭头指向右边,所有从内部的流量将会有一个左箭头.这个选项没有太大的作用,但是可以使显示的包的信息格式比较容易察看. -i 使用网络接口文件 。 -l 将包信息记录到目录下。设置日志记录的分层目录结构&#xff0c;按接收包的IP地址将抓取的包存储在相应的目录下。 -M 向文件格式非常简单。文件的每一行包含一个目的地址的SMB名。 -n 处理完包后退出。 -N 关闭日志功能。告警功能仍然工作。 -o 改变应用于包的规则的顺序。标准的应用顺序是&#xff1a;Alert->Pass->Log&#xff1b;采用-o选项后&#xff0c;顺序改为&#xff1a;Pass->Alert->Log&#xff0c;允许用户避免使用冗长的BPF命令行来过滤告警规则。 -p 关闭混杂模式的嗅探(sniffing)。这个选项在网络严重拥塞时十分有效。 -r 读取tcpdump生成的文件。Snort将读取和处理这个文件。例如&#xff1a;当你已经得到了一个Shadow文件或者tcpdump格式的文件&#xff0c;想处理文件包含的内容时&#xff0c;这个选项就很有用了。 -s 将告警信息记录到系统日志。在其他的平台下&#xff0c;日志文件可以出现在/var/log/secure, /var/log/messages目录里。 -S ,n&#61;v> 设置变量n的值为v。这个选项可以用命令行的方式设置Snort规则文件中的变量。例如&#xff1a;如果要给Snort规则文件中的变量HOME_NET赋值&#xff0c;就可以在命令行下采用这个选项。 -v 将包信息显示到终端时&#xff0c;采用详细模式。这种模式存在一个问题&#xff1a;它的显示速度比较慢&#xff0c;如果你是在IDS网络中使用Snort&#xff0c;最好不要采用详细模式&#xff0c;否则会丢失部分包信息。 -V 显示版本号&#xff0c;并退出。 -x 当收到骚扰IPX包时&#xff0c;显示相关信息。 -&#xff1f; 显示使用摘要&#xff0c;并退出。 下面介绍一下 这里的"filters"与TCPDump中的filter相同&#xff0c;是标准的BPF格式的过滤器。一般来说&#xff0c;你可以指定过滤器的主机&#xff0c;网络或者协议&#xff0c;还可以给出逻辑表达式&#xff0c;定制特定的过滤器。例如&#xff1a; [root&#64;ice snort-1.6]# ./snort -h 192.168.1.0/24 -d -v host 192.168.1.1 表示记录从主机192.168.1.1发送和接收的所有包信息。 [root&#64;ice snort-1.6]# ./snort -h 192.168.1.0/24 -d -v net 192.168.1 and not host 192.168.1.1 表示记录子网192.168.1中从192.168.1.0到192.168.1.24的所有主机接收和发送的包信息&#xff0c;但不包括192.168.1.1的信息。 在1.3版本中&#xff0c;你可以使用选项-F从文件中读入自己的BPF过滤器。 前面将常提到规则文件&#xff0c;先面简单介绍一下规则。详细的内容可以从下面的站点得到。 [url]http://www.clark.net/~roesch/snort_rules.html[/url] 。系统生成的告警信息都记录在alert.log文件中。你可以简单的使用"tail -f"查看日志信息。同时这些日志信息还被记录在系统日志中&#xff0c;其缺省的目录是/var/log/snort.你可以使用-L选项来指定特定的目录.如果你设置了smbalert功能,那么这些告警就可以通过smbclient在windows的机子上弹出一个对话框. 实际上,在使用snort的过程中,大家一定感受到规则(rules)文件的重要性.如何构造高效全面的规则文件就成了重点.下面我们就介绍一下该文件. 在该文件中,一条规则必须在一行中,符号#是注释行.所有的ip地址和端口号都要使用数字形式,系统并不支持名字服务.一条规则的格式如下: func proto src_ip/mask src_port_range -> dst_ip/mask dst_port_range (options) 动作 协议 源地址 源端口 目标地址 目标端口 (选项) 动作包括三类:告警(alert),日志(log)和通行(pass).表明snort对包的三种处理方式. 在源/目的地址/端口中可以使用any来代表任意的地址或端口.还可以使用符号!来表明取非运算.同时,在目的和源地址之间可以使用标识符<>来指明方向. 选项包括: 1. msg -------将要放入alert或log文件中的输出信息; 2. flags-------tcp协议中的标志,如SYN,ACK等等,如果是0则表明全部标志. 3. ttl -------在ip包中的ttl值,有利于识别traceroute包. 4. content----数据包的应用层,查找缓冲区溢出***. 5. itype-------icmp包的类型; 6. icode-------icmp包的编码; 7. minfrag----最小的分片的有效载荷大小. 8. seg---------tcp包中的顺序号; 9. ack --------tcp包中的响应号; 10. id ------ip 包中分片的序号; . 11. logto---指定特殊的存放告警信息的文件; 12. dsize---指定特定的包的长度; 13. offset---在包中查找一定字节内容; 14. depth---在数据包中仅仅查找depth字节. 15. ipopts---查找一个特定的ip选项. 下面我们就举一些例子来说明规则的作用: 1. 下面这条规则记录了所有登录到一个特定主机的数据包: log tcp any any -> 192.168.1.1/32 23 2. 在第一条的基础上记录了双向的流量. log tcp any any <> 192.168.1.1/32 23 3. 这一条规则记录了所有到达你的本地主机的icmp数据包. log icmp any any -> 192.168.1.0/24 any 4. 这条规则允许双向的从你的机子到其他站点的http包. pass tcp any 80 <> 192.168.1.0/24 any 5.这条告警规则显示了本地主机对其他主机的111端口的访问,并在log中显示端口影射调用(&#39;portmapper call&#39;)信息: alert tcp 192.168.1.0/24 any -> any 111 (msg:"Portmapper call";) 6.记录其他任意地址的小于1024端口访问本地小于1024端口的流量: log tcp any :1024 -> 192.168.1.0/24 :1024 7.这条规则将会发现SYN FIN扫描: alert tcp any any -> 192.168.1.0/24 any (msg:"SYN-FIN scan!"; flags: SF;) 8.这条规则将会发现空tcp扫描: alert tcp any any -> 192.168.1.0/24 any (msg:"Null scan!"; flags: 0;) 9.这条规则将会发现Queso fingerprint扫描: alert tcp any any -> 192.168.1.0/24 any (msg:"Queso fingerprint";flags: S12;) 10.这条规则将进行基于内容的查找以发现溢出***: alert tcp any any -> 192.168.1.0/24 143 (msg:"IMAP Buffer overflow!"; content:"|90E8 C0FF FFFF|/bin/sh";) 11.这条规则将会发现PHF***: alert tcp any any -> 192.168.1.0/24 80 (msg:"PHF attempt"; content:"/cgi-bin/phf";) 12.这条规则将会发现traceroute包: alert udp any any -> 192.168.1.0/24 any (msg:"Traceroute"; ttl:1;) 13.这条规则将会发现其他主机对本地发出的icmp包. alert udp any any -> 192.168.1.0/24 any (msg:"Traceroute"; ttl:1;) 14.这条规则发现nmap的tcp 的ping扫描 alert tcp any any -> 192.168.1.0/24 any (flags: A; ack: 0; msg:"NMAP TCP ping!";) 15.这条规则将会发现源路由的数据包(源路由***): alert tcp any any -> any any (ipopts: lsrr; msg: "Source Routed packet!";) 由于snort也在不断的发展着,许多功能正在被开发出来,如果需要详细的信息,需要大家随时关注它的发展.希望以上的介绍会对大家有所帮助,利用snort可以建立一个有效的IDS系统. 第5章 常见问题与解决方法