在Windows环境下建立Snort+BASE入侵检测系统
Snort是一套非常优秀的开放源代码网络监测系统,在网络安全界有着非常广泛的应用。其基本原理基于网络嗅探,即抓取并记录经过检测节点以太网接口的数据包并对其进行协议分析,筛选出符合危险特征的或是特殊的流量。网络管理员可以根据警示信息分析网络中的异常情况,及时发现入侵网络的行为。其名称Snort(喷鼻息)也是来源于“嗅探”(sniff)的反义词。
Snort最开始是针对于Unix/Linux平台开发的开源IDS软件,后来才加入了对Windows平台的支持。但直至现在对于Snort的应用(尤其是Snort的前端传感部分)主要还是基于Unix/Linux平台的,因为现在的普遍观点都支持Unix内核的网络效率要大大高于Windows内核。不过由于Windows平台的易用性和普及性,在Windows Server上建立开放而又便宜的Snort IDS对于网络研究及辅助分析还是非常有意义的。
第一次在Windows系统下部署基于Snort的IDS是一个非常痛苦的过程,网络上充斥着过时的文档和以讹传讹的借鉴心得,一开始我就走了不少弯路。不过假如能够理清思路其实并不困难。
I.系统结构
基于Snort和BASE的入侵检测系统通常采用“传感器—数据库—分析平台”的三层架构体系。传感器即网络数据包捕获转储程序。
WinPcap作为系统底层网络接口驱动,Snort作为数据报捕获、筛选和转储程序,二者即可构成IDS的传感器部件。为了完整覆盖监控可以根据网络分布情况在多个网络关键节点上分别部署IDS传感器。
Snort获得记录信息后可以存储到本地日志也可以发送到Syslog服务器或是直接存储到数据库中,数据库可以是本地也可以是远程的,Snort2.8.0支持MySQL、MSSQL、PostgreSQL、ODBC、Oracle等数据库接口,扩展性非常好。
Snort的日志记录仅仅包含网络数据包的原始信息,对这些大量的原始信息进行人工整理分析是一件非常耗时而且低效率的事情,我们还需要一个能够操作查询数据库的分析平台。无论是从易用性还是平*立性考虑,WEB平台都是首选。ACID是Snort早期最流行的分析平台,使用PHP开发,不过之后的一段时间开发组不再更新和支持这套系统,现在已经由基于它再开发的BASE所取代。
这三种角色既可以部署于同一个主机平台也可以部署在不同的物理平台上,架构组织非常灵活。如果仅仅需要一个测试研究环境,单服务器部署是一个不错的选择;而如果需要一个稳定高效的专业IDS平台,那么多层分布的IDS无论是在安全还是在性能方面都能够满足。具体的部署方案还要取决于实际环境需求。
II. 安装环境
预安装环境:
主要硬件:HP DL140:Xeon 2.4GHz; 2G DDR; Broadcom NetXtreme Gigabit Ethernet X2;
操作系统:Windows Server 2003 Std SP2 R2
部署软件包:
传感器组件:
WinPcap 4.0;网络数据包截取驱动程序
[Link] http://winpcap.polito.it
Snort 2.8.0 for Win32;Sourcefire VRT Certified Rules Released 2007-08-27;
Windows版本的Snort安装包以及官方认证Snort规则库(须注册)
[Link] http://www.snort.org
数据库组件:
MySQL 5.0.45 for Win32;MySQL GUI Tools 5.0 r12 for Win32;
MySQL数据库及管理工具
[Link] http://www.mysql.com
ADODB 4.95a;(Active Data Objects Data Base for PHP5)
PHP5的数据库连接组件(支持MySQL/MSSQL/PostageSQL等)
[Link] http://sourceforge.net/project/showfiles.php?group_id=42718
分析平台:
Apache 2.2.6 for Win32-x86 with OpenSSL 0.9.8e;
[Link] http://apache.mirror.phpchina.com/httpd/binaries/win32/
PHP 5.2.4 for Win32 Non-install;PEAR 1.6.1;
[Link] http://www.php.net
WEB前端:
Basic Analysis and Security Engine 1.3.6 (各平台通用,基于PHP,目前最新版本为1.3.8,但是有一个比较麻烦的Bug,后面会解释)
[Link] http://sourceforge.net/project/showfiles.php?group_id=103348
III. 前期准备
作为一套入侵检测系统,自身安全自然是最重要的。对于Windows Server 2003系统安全配置及策略无需多说,假如是用作生产环境的IDS,应该使用专属的服务器并尽可能删除任何与配置管理IDS无关的服务和组件。如果条件允许,使用“传感器—数据库—分析平台”的三层独立架构可以获得更高的运行性能、稳定性与安全性。
确定了系统架构并获得所需要的软件包后,就可以正式开工了。由于我建立的是测试环境,所有的组件安装都在一台机器上完成。
IV. 部署过程
1. 传感器组件:
首先需要注意的是使用高性能的服务器网卡对于提高抓包性能和质量非常有效,我使用的是2张Broadcom NetXtreme千兆网卡,30分钟的抓包测试中,掉包率为0%,CPU占用率非常低。另外WinPcap和Snort应尽量使用最新的稳定版本,捕获数据包的质量对于IDS来说非常重要,当然这条准则同样适用于其他组件。
WinPcap和Snort都是现成的安装程序,过程非常简单。建议将snort安装在非系统分区内,这里为D:/snort/。安装完Snort后,rules目录下还是空的,需要将另外下载的snort规则包解压拷贝到snort安装目录下,注意规则包所对应的版本。
修改snort的设置文件:d:/snort/rules/var/snort.conf
#设置规则包路径:
var d:/snort/rules
#设置数据库连接:
output database: log, mysql, user=snortuser password=snort dbname=snortdb host=localhost
#设置动态预处理库目录
dynamicpreprocessor directory C:/Snort/lib/snort_dynamicpreprocessor
dynamicengine C:/Snort/lib/snort_dynamicengine/sf_engine.dll
2. 数据库组件
这次使用的是MySQL 5.0.45 for Win32的完整安装程序,为了更高的安全性和移植性也可以使用不带安装程序的软件包。
软件包的安装较简单,服务端和客户端程序是必选组件,其他可根据需要选择安装。建议安装在非系统分区。
设置数据库实例流程
:
另外,为了便于调试和管理MySQL服务,还安装了它的图形管理界面,MySQL GUI Tools 5.0 r12 for Win32。
使用GUI Tools建立snortdb和snortarc两个数据库,注意数据库和用户命名不要包含符号,由于Snort可能存在无法正确识别带符号数据库名或用户名的Bug,因此尽量使用英文字母和数字命名。BASE有数据库存档功能,这里建立的snortdb是snort存储的数据库,而snortarc是BASE的存档数据库。
然后对这两个数据库建立用户snortuser并授予CREATE/SELECT/INSERT/UPDATE/DELETE权限。
如果要使用MySQL命令行控制台设置上面的内容,可以参考:
建立数据库和数据库用户snort:
mysql> create database snortdb;
>Query OK, 1 row affected (0.01 sec)
mysql> grant INSERT,SELECT on root.* to snortuser@localhost;
>Query OK, 0 rows affected (0.02 sec)
mysql> SET PASSWORD FOR snortuser@localhost=PASSWORD(/'snortpassword/');
>Query OK, 0 rows affected (0.25 sec)
mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snortdb.* to snortuser@localhost;
>Query OK, 0 rows affected (0.02 sec)
mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snortdb.* to snortuser;
>Query OK, 0 rows affected (0.02 sec)
导入数据库信息
mysql -u root -p < ./snort/schemas/create_mysql snortdb
mysql -u root -p < ./snort/schemas/create_mysql snortarc
完成后查看数据库情况, 确认创建成功。
虽然ADODB是数据库连接组件,但是它依赖于WEB平台运行,因此有关的安装和设置放在后面的WEB平台部分。
3. WEB平台
之所以选择Apache+PHP搭建WEB平台主要是考虑到这个组合的运行效率较高而且安全配置更为简单。
使用支持SSL的Apache可以构建更加安全的WEB平台,不过这里对于Apache SSL的配置不作介绍,请参考相关资料。
i. Apache的安装配置:
编辑D:/Application/Apache/conf/httpd.conf 文件,
更改下面内容,注意在Apache配置文件中目录层次一律使用正斜杠分隔:
#设置网站根目录:
DocumentRoot "D:/Application/wwwroot"
<Directory "D:/Application/wwwroot">
#添加php默认目录索引:
DirectoryIndex index.html index.htm index.php
ii. PHP的安装配置
使用PHP非安装软件包可以避免开启不必要的功能和插件。解压软件包至目录D:/Application/php
在安装目录下,复制php.ini-dist为php.ini并编辑其内容:
;设置扩展库目录:
extension_dir = "D:/Application/php/ext"
;开启所需的扩展插件
extension=php_gd2.dll
extension=php_mysql.dll
;禁用http文件上传,封堵一切可能的不安全因素
file_uploads = off
iii. PHP与Apache的整合
其实也就是在Apache的设置文件D:/Application/Apache/conf/httpd.conf中添加对PHP的支持:
#自定义设置,注意使用正斜杠
PHPIniDir "d:/Application/php"
LoadFile "d:/Application/php/php5ts.dll"
LoadModule php5_module "d:/Application/php/php5apache2_2.dll"
AddType application/x-httpd-php .php
设置完成后重启Apache确认是否运行正常,假如出现错误,可以使用Apache的Test Configuration查找错误原因。
vi. PHP插件的安装设置
ADODB是用于PHP的数据库连接插件,因为它是基于php的,所以只需要将软件包复制到WEB发布目录下,即:D:/Application/wwwroot/adodb,后面在配置BASE时会需要设定这个目录进行调用。
Pear插件的安装脚本默认包含在PHP的主目录下,运行go-pear.bat对pear安装选项进行配置,安装前需要保证Internet连接正常。
设置好安装目录就会自动下载安装所需内容,完成安装后,还需要通过Pear安装图表支持的插件
在CMD中进入pear.bat所在目录,这里就是D:/Application/php。运行下面命令:
pear install image_color
pear install image_canvas-alpha
pear install image_graph-alpha
pear list (查看当前 pear 安装情况)
注意:假如在PHP连接MySQL时出现错误信息:"Call to undefined function mysql_connect()"
请参考链接:http://forge.mysql.com/wiki/PHP_FAQ
问题可能可能出在PHP对MySQL的链接库文件上,可以使用官方的Connector修正:
http://dev.mysql.com/downloads/connector/php/
我用相应版本的补丁覆盖原有的链接库文件就搞定了。
4. BASE安装调试
复制BASE软件包至WEB发布目录:D:/Application/wwwroot/base
在浏览器中输入http://localhost/base/setup/进行初始配置。
假如提示PHP的Logging Level过高可以根据提示内容修改PHP.ini中的内容为:
error_reporting = E_ALL & ~E_NOTICE
BASE支持多国语言其中也包括简体中文,但似乎目前中文支持还不是很完善,为确保系统稳定还是选择英文。然后输入adodb组件的安装目录,BASE会对它进行调用。
输入前面设置好的数据库相关信息
设置BASE的用户认证与管理员账号信息
最后创建BASE的AG数据库,完成设置。
使用http://www.2cto.com /base/地址可以登录使用BASE。不过由于还没开启Snort的抓包服务,此时的IDS数据库中是没有可用信息的,当然BASE中也看不到任何数据。
注:虽然BASE的最新版本为1.3.8,这个版本目前存在一个致命的Bug,在与adodb连接时出现错误提示:Fatal error: Call to undefined function: base_header()。要解决这个问题必须修改几十处PHP源代码函数名,不推荐使用,还是等到1.3.9出来后再更新吧。
4. Snort监控服务
使用 d:/snort/bin/snort.exe –W可以查看主机上的所有NIC的信息,以便在设置抓包接口时能够选择正确的监听网卡。
使用 d:/snort/bin/snort -v –i2 测试网络抓包是否正常,(-i2中的数值就是前面使用-W参数查看到的网卡的编号)。注意完成后的统计信息,确保掉包率为0%。
使用 d:/snort/bin/snort -c d:/snort/etc/snort.conf -l d:/snort/log -K ascii -i2 测试最终使用的命令行参数运行正常。
在命令行下进入Snort程序目录执行:
snort /SERVICE /INSTALL -c d:/snort/etc/snort.conf -l d:/snort/log -K ascii -i2
收到'[SNORT_SERVICE] Successfully added the Snort service to the Services database. '信息就表示Snort已作为系统服务安装到主机中,进入services.msc启动Snort服务并设置为自动启动。查看系统Eventlog无错误信息以确认Snort服务运行正常。此时Snort以Windows系统服务的方式执行网络监听。Snort 2.6存在内存占用过大的问题,不过在最新的2.8中已经解决。在任务管理器中可以看到通常情况下snort占用内存137M左右。
登录BASE即可看到记录下来的数据包和报警信息了。
V. 总结
在Windows系统上部署Snort IDS的过程并不复杂,但我第一次的尝试还是花了不少时间。主要还是因为一开始为图方便直接在网上找了一些安装实例,还没有理解其中某些步骤的意图就直接上工,导致安装过程中照搬了很多错误的方法。在静下心认真看完官方的Manual和FAQ后,大部分问题都能迎刃而解,而某些顽固的问题用好google也能得到解决。
这里推荐几个参考资料来源,好的资料和前期准备可以事半功倍:
Snort的Manual和FAQ(必看),安装目录doc下就有。
BASE的docs,安装目录下:../wwwroot/base/docs/
Windows下部署Snort的首选资料站点,提供的安装手册非常有参考价值:
http://www.winsnort.com/
Snort 安装指南(Windows2003平台)
http://comic.sjtu.edu.cn/bbs/forum_posts.asp?TID=4100
至于Snort和BASE的使用,另外再讨论吧。
下一篇: 甘肃站长年会专题访谈:探寻交流的重要性
推荐阅读
-
从windows转向Linux(在Windows下建立Deepin、Windows10双系统)
-
在PHP+Apache+MySQL环境下(windows系统),连接SQLServer数据出现“can not find driver”问题的解决办法
-
在Windows环境下建立Snort+BASE入侵检测系统
-
在VR环境下使用Windows系统是什么体验?
-
MacBook Pro装mac os和windows 8双系统,在window环境下时间自动_MySQL
-
MacBook Pro装mac os和windows 8双系统,在window环境下时间自动_MySQL
-
Hadoop在Windows7操作系统下使用Eclipse来搭建hadoop开发环境
-
从windows转向Linux(在Windows下建立Deepin、Windows10双系统)
-
Hadoop在Windows7操作系统下使用Eclipse来搭建hadoop开发环境
-
在Windows环境下建立Snort+BASE入侵检测系统