随着网络攻击技术的发展,出现了IDS躲避和欺骗技术。某些工具软件的传播使这些技术得以广泛地用于实际的网络攻击中。其中比较典型的IDS躲避技术包括传输控制层和网络层的IDS躲避技术,如数据包分片、重叠、碎片超时等。由于操作系统之间的差异,给网络入侵检测系统检测采用这类躲避技术的网络攻击增加了难度。snort 2的出现为网络安全维护提供了良好的工具。
snort 2的新特性
在snort 2出现之前,由于snort本身存在的缺陷及网络入侵检测系统的先天不足,使snort在对抗使用了IDS躲避技术的网络攻击时完全处于下风。在这种背景下,以Martin Roesch为首的snort开发团队开始了snort 2的开发。snort 2采用了很多新的技术,大量代码被重写,体系结构也发生了根本性的变化。与snort-1.x(不包括snort-1.9,因为snort-1.9属于snort 2)相比,snort 2具有以下优点:
◆采用更高效的检测和模式匹配算法,使性能比旧版本提高了5倍以上。
◆具有更好的扩展性,采用插入式检测引擎,可以作为标准的网络入侵检测系统、主机入侵检测系统使用;与netfilter结合使用,可以作为网关IDS(Gateway IDS,GIDS);与nmap等系统指纹识别工具结合使用,可以作为基于目标的IDS(Target-based IDS)。
◆开发人员重写了协议分析代码,使snort 2具备出色的协议分析能力。
◆支持多种格式的特征码规则输入方式,如数据库、XML等。
◆把输出部分从主体代码中分离出来,由单独的程序barnyard处理snort的输出。
除了上面所叙述的特点之外,snort 2还有一个商业入侵检测系统所不具备的优点:费用低廉。这对于预算比较紧张的企业,无疑非常具有吸引力。而且,自由软件开发人员陆续开发了众多辅助性的软件。这些软件包括图形化的管理系统、日志分析工具、检测插件、图形化的规则编写软件,以及规则自动升级软件等。对这些软件进行合理地选择、集成,可以形成一套比较完善的分布式入侵检测系统。
分布式snort入侵检测系统
分布式snort入侵监测系统的主要组成部分包括中央分析服务器、IDS探针和协同代理。一般情况下,一个企业的网络可以分为外部网络、企业内部网络和DMZ区等。入侵监测系统既可以部署在防火墙之外,也可以部署于防火墙之内。部署于防火墙之外,可以获得更多攻击数据,但是误报警率也高。因此一般情况下,入侵检测系统部署于防火墙之后是比较明智的。
中央分析服务器
中央分析服务器是整个系统的心脏和灵魂。它一般由一个数据库系统和一个Web服务器组成,为系统管理员提供交互式Web管理界面。在中央分析服务器上,管理人员可以进行远程IDS探针管理、攻击数据查询、实时监视网络攻击及深入分析,如攻击方向的迁移、识别攻击模式等。MySQL数据库、Apache服务器、SnortCenter和ACID(Analysis Console for Incident Databases)是一个不错的snort平台系统组合。
SnortCenter是一个基于Web的snort探针和规则管理系统,用于远程修改snort探针的配置,起动、停止探针,编辑、分发snort特征码规则。如果与cron和curl结合使用,SnortCenter还可以定时为每个探针进行规则升级,自动从snort官方站点获得最新特征码规则 ()。SnortCenter的下载地址为。ACID(Analysis Console for Incident Databases)是一个基于PHP的分析引擎,用于查询、管理snort探针产生的数据库。ACID的下载地址为。
IDS探针和协同代理
代理是向中央分析服务器报告攻击信息的软件,是分布式入侵检测系统的一个重要部件。SnortCenter Agent和普通意义上的协同代理软件有些不同,它只是一个SnortCenter进行探针管理的代理工具。通过SnortCenter Agent,SnortCenter能够起动、关闭受保护主机上的snort探针;修改探针的配置和使用的特征码规则。SnortCenter Agent是用Perl语言编写的,可以在不同的平台上使用。为了防止登录过程中账户和密码的泄漏,它使用SSL和SnortCenter之间进行通信。snort探针是真正进行入侵检测的组件,其源代码可以从获得。
系统安装及部署
数据库的安装和设置
在分析服务器上,首先要建立记录snort报警和日志数据库及SnortCenter、ACID需要的数据库。在临时目录中解压缩snort的源代码,进入contrib目录,建立数据库,并进行相关的配置。代码如下:
# mysql -u root -p
create database snort;
connect snort
source create_mysql
grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort;
grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort@localhost;
grant CREATE, INSERT, SELECT, UPDATE on snort.* to acidviewer;
grant CREATE, INSERT, SELECT, UPDATE on snort.* to acidviewer@localhost;
connect mysql
set password for 'snort'@'localhost' = password('yourpassword');
set password for 'snort'@'%' = password('yourpassword');
flush privileges;
安装SnortCenter
把最新版的SnortCenter源代码解压缩,将目录里面的文件复制到Apache的DocumentRoot目录(如/usr/local/apache/htdocs)。下载SnortCenter需要的adodb(),安装到SnortCenter所在的目录,然后建立SnortCenter数据库。代码如下:
$ tar zxvf snortcenter-v0.9.6.tar.gz
$ cp snortcenter-v0.9.6/* /usr/local/apache/htdocs/
$ tar zxvf adodb250.tgz
$ cp -R ./adodb /usr/local/apache/htdocs/
$ echo "CREATE DATABASE snortcenter;" | mysql -u root -p
完成了基本的安装之后,需要根据系统的情况手工编辑/usr/local/apache/htdocs/config.php文件,从而结束SnortCenter的配置。一般情况下需要修改的参数见表1。
表1 /usr/local/apache/htdocs/config.php文件需要修改的参数
完成上面的配置后,启动Apache服务器,在浏览器的地址栏输入分析中心服务器的地址,将会得到图1所示的登录画面。
图1 SnortCenter登陆界面
系统缺省账户是admin,密码为change。登录进入系统以后,点击admin→Create DB Tables选单,完成SnortCenter的安装,如图2所示。
图2 创建SnortCenter数据库
安装ACID
ACID需要PHP支持gd,并对PHPLot()、ADODB进行支持。新版本的ACID(0.9.6b22以后版本)还需要JpGraph()的支持。ACID及相关软件安装到指定位置之后,编辑配置文件acid_conf.php完成其配置,参数设置如表2所示。
另外,ACID本身缺乏必要的访问控制机制,需要设置Apache对访问ACID的用户提供验证。
安装snort探针和SnortCenter Agent
分别进入需要保护主机,安装snort和SnortCenter Agent。SnortCenter Agent需要SSL的支持,所需模块可以从得到。安装代码如下:
$ ./configure -with-mysql
$ make
$ make install
$ tar -zxvf Net_SSLeay.pm.1.21.tar.gz
$ cd Net_ SSLeay.pm.1.21
$ perl Makefile.PL
$ make install
$ mkdir /opt/snortagent/
$ cp snortcenter-agent-v0.1.6.tar.gz /opt/snortagent
$ cd /opt/snortagent
$ tar -zxvf snortcenter-agent-v0.1.6.tar.gz
$ cd sensor
$ ./setup.sh
需要注意的问题
系统涉及到网络中的很多主机,各个snort探针需要通过网络时间协议(Network Time Protocol)实现时间的精确同步。有关NTP服务器的配置请参考相关的文档,这里就不赘述了。