一、 前言
互联网的普及给网络管理人员带来了极大的挑战:随处可得的黑客工具和系统漏洞信息使我们的网络无时无刻不处于危险之中。一般说来,一个典型的网络攻击是以大量的端口扫描等手段获取关于攻击对象的信息为开端的,这个过程必然产生大量的异常网络流量预示着即将到来的真正攻击,然而当前被广泛使用的网络产品都具有一个普遍的弱点--被动防御,即对这些重要的网络攻击先兆熟视无睹,错过了非常好的的防御时间。为了扭转这种不利的局面,变被动防御为积极防御,就要求网管人员对网络的运行状态进行实时监控以便随时发现入侵征兆并进行具体的分析,然后及时进行干预,从而取得防患于未然的效果。完成这种功能的安全产品就是网络入侵检测系统(Network Intrusion Detection Systems,NIDS)。
目前,市场上的这类产品可分为硬件和软件两种类型,但无论选择那种都有一个共同的特点:昂贵。即便在单点安装的情况下,无论是硬件类型的费用还是软件类型的许可费都需要数万元乃至十余万元。如果无法承受这笔开支该怎么办?难道网络安全工作就不去搞了吗?答案是否定的。
正如所带给我们的巨大挑战一样,互联网也同时带给我们无数的宝贵资源,只等我们去开发、利用。开放源代码软件(Open Source Software)便是其中之一,免费可得的软件发布形式,使其具有广大的用户群;众多志愿者的协同开发模式使其具有卓越的兼容性;大量的网上社区弥补了缺少商业服务的不足。本文试图论述利
用互联网上免费可得的开放源代码软件实现一个完整的网络入侵检测系统的过程。
二、 系统概述
本系统采用三层分布式体系结构:网络入侵探测器、入侵事件数据库和基于Web的分析控制台。为了避免不必要的网络流量,本例将网络入侵探测器和入侵事件数据库整合在一台主机中,用标准浏览器异地访问主机上的Web服务器作为分析控制台,两者之间的通信采用HTTPS安全加密协议传输。
由于实现本系统所需的软件较多,有必要在此进行简要的说明:
Snort
功能简述:网络入侵探测器;
正式网址:http://www.snort.org/
软件版本:1.8.6
Libpcap
功能简述:Snort所依赖的网络抓包库;
正式网址:http://www.tcpdump.org/
软件版本:0.7.1
MySQL
功能简述:入侵事件数据库;
正式网址:http://www.mysql.org/
软件版本:3.23.49
Apache
功能简述:Web服务器;
正式网址:http://www.apache.org/
软件版本:1.3.24
Mod_ssl
功能简述:为Apache提供SSL加密功能的模块;
正式网址:http://www.modssl.org/
软件版本:2.8.8
OpenSSL
功能简述:开放源代码的SSL加密库,为mod_ssl所依赖;
正式网址:http://www.openssl.org/
软件版本:0.9.6d
MM
功能简述:为Apache的模块提供共享内存服务;
正式网址:http://www.engelschall.com/sw/mm/
软件版本:1.1.3
PHP
功能简述:ACID的实现语言;
正式网址:http://www.php.net/
软件版本:4.0.6
GD
功能简述:被PHP用来即时生成PNG和JPG图像的库;
正式网址:http://www.boutell.com/gd/
软件版本:1.8.4
ACID
功能简述:基于Web的入侵事件数据库分析控制台;
正式网址:http://www.cert.org/kb/aircert/
软件版本:0.9.6b21
ADODB
功能简述:为ACID提供便捷的数据库接口;
正式网址:http://php.weblogs.com/ADODB
软件版本:2.00
PHPlot
功能简述:ACID所依赖的制图库;
正式网址:http://www.phplot.com/
软件版本:4.4.6
上述软件都是开源软件,可以直接登录相应软件的正式网站,下载源代码。此外,需要特别说明的一点是虽然本例中网络入侵检测系统所采用的系统平台是Solaris 8 for Intel Platform,但是在其它种类的系统平台上,如Linux 、OpenBSD以及Windows 2000等,其具体的实现步骤大同小异,因此就不在另行说明了。
三、 安装及配置
在正式进行软件安装之前,请检查系统,确保拥有符合ANSI标准的C/C++编译器等软件开发工具。
1、 安装MySQL
首先,以超级用户的身份登录系统,创建mysql 用户和mysql用户组;
然后,以mysql身份登录,执行下列命令:
$gzip -d -c mysql-3.23.49.tar.gz | tar xvf -
$cd mysql-3.23.49
$./configure
$make
$make install
这样,就按照缺省配置将MySQL安装在/usr/local目录下。然后将源代码树中的缺省配置文件my.cnf拷贝到/etc目录下。接下来,以超级用户身份执行源码树中scripts目录下的可执行脚本文件mysql_install_db来创建初始数据库。用/etc/init.d/mysql.server命令启动数据库服务器后,使用/usr/local/bin/mysqladmin程序来改变数据库管理员的口令。
2、 安装Snort
首先安装Snort所依赖的库libpcap:
#gzip -d -c libpcap-0.7.1.tar.gz | tar xvf -
#cd libpcap-0.7.1
#./configure
#make
#make install
这样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 < create_mysql
#/usr/local/bin/mysql -u root -D snort_archive -p < create_mysql
3) 编辑/etc/snort.conf文件在output plugin 段中加入如下一行:
output database: alert, mysql, user=root password=abc123
dbname=snort host=localhost
3、 安装Apache
1) 安装MM库
#gzip -d -c mm-1.1.3.tar.gz | tar xvf -
#cd mm-1.1.3
#./configure
#make
#make install
MM库被按照缺省配置安装在/usr/local目录下。
2) 安装OpenSSL
#gzip -d -c openssl-0.9.6d.tar.gz | tar xvf -
#cd openssl-0.9.6d
#./config
#make
#make test
#make install
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=apache-1.3.24
该命令运行成功之后,会有提示说明已经成功扩展了Apache的源代码。
4) 安装Apache
#cd ../apache-1.3.24
#SSL_BASE=/usr/local EAPI_MM=/usr/local ./configure -enable-module=so --enable-module=ssl --prefix=/usr/local
#make
#make certificate
#make install
其中,make certificate命令是为mod_ssl生成所需的安全证书,按照提示输入相应信息即可。这样,Apache就被安装在了/usr/local目录下。
4、 安装PHP
首先安装为PHP提供既时生成PNG和JPG图象功能的GD库:
#gzip -d -c gd-1.8.4.tar.gz | tar xvf -
#cd gd-1.8.4
#make
#make install
按照缺省配置,将其安装到/usr/local目录下。接下来开始正式安装PHP:
#gzip -d -c php-4.0.6.tar.gz | tar xvf -
#cd php-4.0.6
#./configure -with-mysql=/usr/local --with-apxs=/usr/local/bin/apxs --with-gd=/usr/local
#make
#make install
此处采用的是PHP的Apache动态模块DSO安装模式,完成之后,将会在/usr/local/libexec目录下生成Apache DSO模块libphp4.so。然后,还需将源码树中的PHP缺省配置文件php.ini-dist拷贝到/etc目录下并更名为php.ini;最后为了通知Apache启用PHP模块,编辑Apache的配置文件httpd.conf加入如下两行:
AddType application/x-httpd-php .php
LoadModule php4_module libexec/libphp4.so
至此完成PHP的安装。
5、 安装ACID
该部分的安装工作具体包括三个软件包:adodb200.tar.gz、phplot-4.4.6.tar.gz和acid-0.9.6b21.tar.gz。安装过程十分简单,只需分别将这三个软件包解压缩并展开在Apache服务器的文档根目录下即可,具体操作如下所示:
#cd /usr/local/htdocs
#gzip -d -c adodb200.tar.gz | tar xvf -
#gzip -d -c phplot-4.4.6.tar.gz | tar xvf -
#gzip -d -c acid-0.9.6b21.tar.gz | tar xvf -
#chown -R root:other *
#chmod -R 755 *
然后开始配置工作,转到acid-0.9.6b21目录下编辑ACID的配置文件:acid_conf.php给下列变量赋值:
$Dblib_path="../adodb200"
$DBtype="mysql"
$alert_dbname="snort"
$alert_host="localhost"
$alert_port="3306"
$alert_user="root"
$alert_password="abc123"
$archive_dbname="snort_archive"
$archive_host="localhost"
$archive_port="3306"
$archive_user="root"
$archive_password="abc123"
$ChartLib_path="../phplot-4.4.6"
$Chart_file_format="png"
$portscan_file="/var/log/snort/portscan.log"
至此,网络入侵检测系统的软件安装工作结束。
四、 系统部署及运行
本系统被部署在网络服务器所处的DMZ区,用来监控来自互联网和内网的网络流量。负责监控的网络探测器Snort使用无IP地址的网卡进行监听以保证网络入侵检测系统自身的安全;通过另一块网卡接入内网并为其分配内网所使用的私有IP地址,以便从内网访问分析控制台程序ACID。通过启用Apache服务器的用户身份验证和访问控制机制并结合SSL以保证系统的访问安全。
另外,布署网络入侵检测系统的关键是应当保证系统的监听网卡所连接的设备端口能够"看到"受监控网段的全部网络流量。在共享式网络中这不是问题,但在交换式网络中由于交换机的每个端口拥有自己的冲突域,因此无法捕获除广播和组播之外的网络流量。这就要求交换机提供监控端口,本网络使用的是Cisco Catalyst系列交换机,其监控端口是通过端口的SPAN特性来实现的,用交换机管理软件启用该特性即可。
为了运行该系统,以超级用户身份执行下列命令:
#/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
这样,网络入侵检测系统已开始运行,然后在内网的管理PC机上启动浏览器,在地址栏中键入:https://192.168.1.8/acid-0.9.6b21/ 其中192.168.1.8是为该网络入侵检测系统的内网网卡分配的IP地址。首次运行时,控制台会提示用户对入侵事件数据库进行扩展,按照提示扩展完毕后,控制台主界面出现。如下图:
主界面里显示的信息包括:触发安全规则的网络流量中各种协议所占的比例、警报的数量、入侵主机和目标主机的IP地址及端口号等;
ACID控制台还提供强大的搜索功能,用户可根据时间、IP地址、端口号、协议类型以及数据净荷(payload)等多种条件的灵活组合在入侵事件数据库中进行查询,以帮助网管人员进行分析;
入侵特征库是否丰富对一个网络入侵检测系统非常重要,本系统同时支持多种有影响的入侵特征库包括CERT/CC、arachNIDS和CVE等。在警报中除了列出入侵事件的命名外还有到相应入侵特征库的Web链接,如果某个警报存在多个命名则同时予以列出以便参考,网络管理人员可通过这些链接去查找在线入侵特征库以便获得关于特定入侵事件的更加详细的信息和相应的解决办法;
应用ACID提供的制图功能可以直观地对网络入侵事件进行分析,而生成的图表又可进一步丰富网管人员编制的报告。例如ACID分析控制台可以按用户指定的时间段生成入侵事件的频率图,如下所示:
(图一:一天之内的报警频率)
(图2:一周报警频率)
五、 结束语
网络安全是一个复杂的问题,只依靠一、两种网络安全产品是不能解决问题的。必须综合应用多种安全技术,并将其功能有机地整合到一起进而构成统一的网络安全基础设施。而安全产品并不是非买不可,当前在互联网上以开放源代码为代表的免费资源非常多,我们应当努力去利用。也许有人会怀疑这种资源的可靠性,请不要忘记互联网的三大应用都在由开放源代码软件支撑着:互联网上超过半数的站点是在运行Apache;BIND完成着几乎全部的域名解析;说不定你的电子邮件正通过sendmail程序在互联网上传递。
转载地址:http://www.netsp.com.cn/Article/netsafe/idsips/200506/20050602135946.html