一般说来,一个典型的网络攻击是以大量的端口扫描等手段获取所攻击对象的信息的,这个过程必然产生大量异常的网络流量,它预示着即将到来的真正攻击。这就要求网管人员对网络运行状态进行实时监控,以便随时发现可能的入侵行为,并进行具体分析,及时、主动地进行干预,从而取得防患于未然的效果。完成这种功能的安全产品之一是网络入侵检测系统(Network Intrusion Detection Systems,NIDS)。
目前,NIDS产品可分为硬件和软件两种类型,但无论选择哪种,都有一个共同的特点: 昂贵。即便在单点安装的情况下,无论是硬件类型的费用,还是软件类型的许可费,动辄数万元乃至十余万元。相对于规模不是很大、费用支出有限的企业,承受起来勉为其难。是不是安全防御可以不搞了?答案是否定的。
事实上,互联网在给我们带来挑战的同时,也给我们带来无数的宝贵资源,只等我们去开发、利用。开放源代码软件(Open Source Software)便是其中之一。本文试图从这一角度,讲述利用互联网上免费的开放源代码软件实现构建完整NIDS的过程。
一、系统概述
本处描述的NIDS采用三层分布式体系结构,它包括网络入侵探测器、入侵事件数据库和基于Web的分析控制台。为了避免不必要的网络流量,本例将网络入侵探测器和入侵事件数据库整合在一台主机中,利用标准浏览器,异地访问主机上的Web服务器,并把它作为分析控制台,两者之间的通信采用HTTPS安全加密协议传输。
由于实现本系统所需的软件较多,笔者在此做一简要说明(见附表)。
上述软件都是开放软件,用户可以直接登录相应软件的正式网站下载源代码。
附表
软件名称 | 功能简述 | 正式网址 | 软件版本 |
Snort | 网络入侵探测器 | www.snort.org/ | 1.8.6 |
Libpcap | Snort所依赖的网络抓包库 | www.tcpdump.org/ | 0.7.1 |
MySQL | 入侵事件数据库 | www.mysql.org/ | 3.23.49 |
Apache | Web服务器 | www.apache.org/ | 1.3.24 |
Mod_ssl | 为Apache提供SSL加密功能的模块 | www.modssl.org/ | 2.8.8 |
OpenSSL | 开放源代码的SSL加密库,为mod_ssl所依赖 | www.openssl.org/ | 0.9.6d |
MM | 为Apache的模块提供共享内存服务 | www.engelschall.com | 1.1.3 |
ACID | 基于Web的入侵事件数据库分析控制台 | www.cert.org/kb// | 0.9.6b21 |
PHP | ACID的实现语言 | www.php.net/ | 4.0.6 |
GD | 被PHP用来即时生成PNG和JPG图像的库 | www.boutell.com/gd | 1.8.4 |
ADODB | 为ACID提供便捷的数据库接口 | php.weblogs.com/ | 2.00 |
PHPlot | ACID所依赖的制图库 | www.phplot.com/ | 4.4.6 |
需要特别说明的是,虽然本例中构建NIDS所采用的系统平台基于Solaris 8 for Intel Platform,但由于在其他种类的系统平台上(如Linux、OpenBSD以及Windows 2000等)构建NIDS的步骤大同小异,用户仍可学有所用。
二、安装与配置
在正式进行软件安装之前,请检查系统,确保拥有符合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 < 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.安装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=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库安装到/usr/local目录下; 然后采用PHP的Apache DSO安装模式将其安装到/usr/local/libexec目录,成为Apache的动态共享模块。另外,不要忘记把对MySQL的支持和GD库也编译到模块里。
5.安装分析控制台ACID
该部分的安装工作具体包括3个软件包:Adodb200.tar.gz、Phplot-4.4.6.tar.gz和Acid-0.9.6b21.tar.gz。安装过程十分简单,只需分别将这3个软件包解压缩并展开在Apache服务器的文档根目录下即可。
然后开始配置工作。转到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地址的网卡进行监听,以保证NIDS自身的安全; 通过另一块网卡接入内网,并为其分配内网所使用的私有IP地址,以便从内网访问分析控制台程序ACID。通过启用Apache服务器的用户身份验证和访问控制机制,并结合SSL,保证系统的访问安全。
另外,部署NIDS的关键是应当保证系统的监听网卡所连接的设备端口能够“看到”受监控网段的全部网络流量。在共享式网络中,这不是问题,但在交换式网络中,由于交换机的每个端口拥有自己的冲突域,因此无法捕获除广播和组播之外的网络流量,这就要求交换机提供监控端口,本网络使用的是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
这样,NIDS已开始运行,然后在内网的管理PC机上启动浏览器,在地址栏中键入:https://192.168.1.8/acid-0.9.6b21/,其中192.168.1.8是为该NIDS内网网卡分配的IP地址。首次运行时,控制台会提示用户对入侵事件数据库进行扩展,按照提示扩展完毕后,控制台主界面出现。如图1所示。
图1 一天之内的报警频率
主界面里显示的信息包括:触发安全规则的网络流量中各种协议所占的比例、警报的数量、入侵主机和目标主机的IP地址及端口号等。ACID控制台还提供强大的搜索功能,用户可根据时间、IP地址、端口号、协议类型以及数据净荷(payload)等多种条件的灵活组合,在入侵事件数据库中进行查询,以帮助网管人员进行分析。
入侵特征库是否丰富对一个NIDS非常重要,本系统同时支持多种有影响的入侵特征库,包括CERT/CC、arachNIDS和CVE等。在警报中除了列出入侵事件的命名外,还有到相应入侵特征库的Web链接,如果某个警报存在多个命名,则同时予以列出,以便参考。网络管理人员可通过这些链接去查找在线入侵特征库,以便获得关于特定入侵事件更加详细的信息和相应的解决办法。
应用ACID提供的制图功能可以直观地对网络入侵事件进行分析,而生成的图表又可进一步丰富网管人员编制的报告。例如ACID分析控制台可以按用户指定的时间段生成入侵事件的频率图,如图2所示。
图2 一周报警频率
结束语
网络安全是一个复杂的问题,只依靠1~2种网络安全产品是不能解决问题的,必须综合应用多种安全技术,并将其功能有机地整合到一起,进而构成统一的网络安全基础设施。
对于一些企业用户来说,安全产品并不是非买不可,当前在互联网上以开放源代码为代表的免费资源非常多,这些企业应该努力开发与利用。也许有人会怀疑这种资源的可靠性,请不要忘记互联网的3大应用都在由开放源代码软件支撑着:互联网上超过半数的站点是在运行Apache; BIND完成着几乎全部的域名解析;说不定您的电子邮件正通过Sendmail程序在互联网上传递。