6.1什么是ACID?
ACID包括一些PHP脚本和配置文件,它们可以收集和分析数据库中的信息并通过web页面表示。用户通过web浏览器与ACID交互。为使ACID能够使用,你的系统中需要web服务器,MySQL以及PHP,这些都随RedHat一起分发。ACID的最近版本可以在http://www.cer.org/kb/acid下载。
ACID具有很多特性:
可以进行基于多种条件的查询,如源和目的地址、端口,时间等等,如图6-7所示。
包头部及载荷内容的察看,如图6-6所示的ICMP包。
告警可以按产生类别管理,输出,删除,或发送到某个e-mail地址。
可以基于时间、协议、IP地址、段口号等产生可视化图表。
可以产生数据库的快照,例如察看最后24小时的告警,单独的告警以及某种频率的告警等等,如图6-7所示。
可以通过Internet的whois数据库察看IP地址的所有者,如果某个IP正在攻击你,你可以联系负责人以采取措施。
你可以通过URL来访问ACID,例如http://www.conformix.com/acid/,ACID需要GD库和PHPLOT的支持,它们是用来绘图的。PHP连接到MySQL后台数据库并取得及更新数据,因此,你需要提供数据库的用户名和密码。
为了更好的表述,我们现在来看看当某个人试图入侵时,系统会发生一些什么:
入侵者试图进入你的网络
Snort探测器根据规则检测到入侵行为,根据snort.conf的设置,将信息记录到MySQL数据库。
用户启动浏览器,连接到MySQL所在的web服务器,并请求PHP页面。
PHP引擎连接到数据库,并从数据库服务器获取信息。
Web服务器处理信息,并向浏览器发送页面,这样用户就可以看到入侵信息。
这时用户可以通过web页面对数据进行各种操作。本章的后面叙述这些工具的安装和配置。

6.2安装和配置
ACID需要PHPLOT,GD库才能正常工作。幸好,这些组件是相互独立的,你可以在安装的时候不需要考虑安装顺序。下面是安装步骤:
安装并测试Snort。
安装并测试MySQL,建立相关的数据库和表。
安装Apache。
http://www.cert.org/kb/acid下载ACID,并解压到/var/www/html目录,在这个目录中会产生一个名为acid的目录。/var/www/html目录是apache服务器用来存放页面的,根据版本的不同,这个目录也许会不同。
安装PHP,你可以在http://www.php.net下载或者用RedHat的RPM包安装。将/etc/php.ini中的display_errors变量值设为off,如果你用rpm安装的Apache,那么PHP可能已经作为模块安装好了。
http://www.boutell.com/gd/下载并安装GD库,也可以用RedHat的rpm包安装,它被安装为/usr/lib.libgd.so文件。
http://www.phplot.com下载PHPLOT并解压到/var/www/html目录,它用来在web页面中产生图形。
http://php.weblogs.com/adodb下载ADODB并安装到/var/www/html目录,ADODB是用PHP写的面向对象的库,用来连接数据库。可以参考http://php.weblogs.com/adodb.com/adodb_faq来获得更多信息。

现在我们详细叙述安装过程,我假定你已经作了以下的事情:
MySQL数据库服务器已被安装。
Snort已经安装完成并配置好与数据库的接口。
已经安装完成Apache,GD库和PHP。

现在我们就可以下载并安装下面的软件
下载ACID文件并放在/opt目录下。
下载ADODB文件并放在/opt目录下。
下载PHPLOT文件并放在/opt目录下。
切换当前目录到/var/www/html目录。
运行命令“tar zxvf /opt/acid-0.9.6b21.tar.gz.”,这样会创建/var/www/html/acid目录,并将ACID文件存放至此。
切换当前目录到/var/www/html/acid。
运行命令“tar zxvf /opt/adodb221.tgz”将ADODB文件释放到/var/www/html/acid/adodb目录中。
用命令“tar zxvf /opt/phplot-4.4.6.tar.gz”释放PHPLOT文件到目录/var/www/html/acid/phplot-4.4.6中。
在mysql客户端中用命令“create database snort_archive;”创建一个新的数据库,这个数据库被ACID用来存放就得数据。Snort本身并不需要它来存放数据。如果你不需要备份旧的数据,可以跳过这一步。
把刚才创建的数据库的管理权限赋予用户,例如rr,在客户端用命令: “grant CREATE,INSERT,DELETE,UPDATE,SELECT on snort_archive.* to rr@localhost;”。
用命令“mysql -u rr –p snort_archive <contrib/create_mysql”为数据库创建所用到的表。
将/etc/php.ini中的display_errors变量的值设为off。

现在要配置ACID使之能够与MySQL数据库交互,并使Snort能够使用PHPLOT软件包。我们需要修改配置文件acid_conf.php中的一些参数,这个文件在你释放ACID文件的目录,你需要做以下设置:
ADODB文件的位置在这里是./adodb,你可以根据自己的情况修改。
数据库服务器的类型,在这里是mysql。
MySQL记录Snort数据的数据库名。
MySQL数据库服务器名称或者IP地址。
MySQL数据库用户名和口令。
备份数据库的名称,如果你备份数据的话。
备份数据库的服务器主机名或者IP地址,在这里,是与snort数据库相同的,都是localhost。
PHPLOT文件的位置,在这里是./phplot-4.4.6。
这些信息在acid_conf.php文件的开始部分,下面是一个实例:
<?php
$ACID_VERSION = “0.9.6b21″;
/* Path to the DB abstraction library
* (Note: DO NOT include a trailing backslash after the
* directory)
* e.g. $foo = “/tmp” [OK]
* $foo = “/tmp/” [OK]
* $foo = “c:\tmp” [OK]
* $foo = “c:\tmp\” [WRONG]
*/
$DBlib_path = “./adodb”;
/* The type of underlying alert database
*
* MySQL : “mysql”
* PostgresSQL : “postgres”
* MS SQL Server : “mssql”
*/
$DBtype = “mysql”;
/* Alert DB connection parameters
* – $alert_dbname : MySQL database name of Snort
: alert DB
* – $alert_host : host on which the DB is stored
* – $alert_port : port on which to access the DB
* – $alert_user : login to the database with
: this user
* – $alert_password : password of the DB user
*
* This information can be gleaned from the Snort database
* output plugin configuration.
*/
$alert_dbname = “snort”;
$alert_host = “localhost”;
$alert_port = “”;
$alert_user = “rr”;
$alert_password = “rr78x”;
/* Archive DB connection parameters */
$archive_dbname = “snort_archive”;
$archive_host = “localhost”;
$archive_port = “”;
$archive_user = “rr”;
$archive_password = “rr78x”;
/* Type of DB connection to use
* 1 : use a persistant connection (pconnect)
* 2 : use a normal connection (connect)
*/
$db_connect_method = 1;
/* Path to the graphing library
* (Note: DO NOT include a trailing backslash after the
directory)
*/
$ChartLib_path = “./phplot-4.4.6″;
在这里,我们设置的用户名、口令和数据库名和在snort.conf中是相同的,下面是对配置文件的解释:
下面的一行用来设置ADODB文件的路径:
$DBlib_path = “./adodb”;
下面的一行用来设置数据库的类型:
$DBtype = “mysql”;
下面的几行用来设置Snort的主数据库信息:
$alert_dbname = “snort”;
$alert_host = “localhost”;
$alert_port = “”;
$alert_user = “rr”;
$alert_password = “rr78x”;
下面的几行用来设置Snort备份数据库信息:
$alert_dbname = “snort_archive”;
$alert_host = “localhost”;
$alert_port = “”;
$alert_user = “rr”;
$alert_password = “rr78x”;
下面的一行用来这是PHPLOT文件的路径:
$ChartLib_path = “./phplot-4.4.6″;
配置完成后,你就可以用web界面访问ACID了。

6.3使用ACID
完成前面的工作后,你可以用URL来访问ACID了: http://<你的web服务器>/acid/。例如,我的web服务器的地址是192.168.1.2,因此,我就用http://192.168.1.2/acid/
第一次访问的时候,你还需要通过web界面做一些设置,如图6-1所示。
在这个窗口,点击Setup页面连接,页面就会转到DB设置页面,如图6-2所示。
在这个页面,点击“Create ACID AG”连接,ACID就会在snort数据库中创建一些自己所需要的表,以支持Snort。图6-3显示了创建新表的结果。
在图6-3所示的页面,你可以点击“Main Page”到主页面。
6-1,6-2,6-3页面在你下一次使用ACID的时候就不会出现了。
6.3.1ACID主页面
ACID主页面显示当前数据的概要。它用不同的部分分组显示信息。你可以看到各个协议的流量概况,取得某个Snort感应器的快照信息,搜索数据等等,如图6-4所示。

点击图6-4上面的连接,你可以看到大量的信息。

向数据库记录数据的探测器列表。
告警的数量及详细信息。
所捕获的包的源地址,你可以从中察看谁在试图攻击你的网络。你也可以通过相关连接来察看whois数据库。
所捕获的包的目的地址。
源和目的端口。
与特定协议相关的告警,如TCP、UDP、ICMP告警。
查找特定类型的告警和日志条目。
频率最高的告警。
告警数据的图表,目前这个功能还在实验中。

在下面的屏幕截图中你可以了解一些重要的信息,但通过实践你可以了解,ACID能够提供给你更多的有用信息。
6.3.1协议相关数据列表
在主页面,你可以点击一个协议来取得所记录的关于这个协议的包的信息。图6-5显示的是关于ICMP协议信息的屏幕截图。在屏幕的下面,你可以看到15个包的信息被记录到数据库。你可以点击其中任意一个来获得关于这个包的详细信息。
6.3.3告警信息细节
图6 -6显示了某个你在图6-5看到的ICMP包的细节,其中包含很多部分,每部分显示了数据包的一个层面,最上面的部分是关于这个告警的总体信息。IP部分 显示了IP头部的所有部分,ICMP头部显示了ICMP数据,接着是载荷。载荷同时以16进制和ASCII码形式表示。
6.3.4 查询
ACID的一个重要特性是可以用一些参数来查询日志和告警,例如:
某个探测器
开始和结束的时间
源和目的地址
IP头部的不同字段
传输层协议
IP包载荷中的字符

如图6-7,执行查询是非常简单的,你只要点击“Query DB”就可以显示所查询的数据。
例如,如果你想在所有的告警信息中查询包含字符“ATTACK RESPONSE”的包,你可以像图6-8那样填充信息。
查询结果如6-9所示。
6.3.查询whois数据库
你可以点击任何一个IP地址并选择某个whois数据库来查询whois信息,例如你可以通过位于http://www.arin.net的ARIN,例如图6-11所示的66.236.16.52的查询结果。
在处理网络安全问题的时候,这种信息是非常有用的,往往在发生相关问题的第一步,你要查询入侵者是谁,这种信息会给你一些有用的帮助。
6.3.6产生图表
ACID的绘图功能仍然在实验中,ACID提供一个连接用来产生图表,你需要选择数据和图表类型。例如,你可以产生最近5天的告警的线图或者直方图,图6-12是一个实例。
PHPLOT被用来在后台产生图表,你也可以用其他如JPRAPH来代替它。
6.3.7Snort数据库存档
数据库snort_archive用来从主数据库存档数据,利用ACID,你可以将告警从主数据库复制或者移动到存档数据库。
你可以选择将整个关于数据库的查询存档或者存档某些查询。
6.3.8ACID的表
当你第一次运行ACID的时候,它在Snort数据库中创建了一些自己的表,这些表用作ACID的管理功能。
下面是运行ACID前后MySQL的snort数据库中表的对比:
之前:
mysql> show tables;
+——————+
| Tables_in_snort |
+——————+
| data |
| detail |
| encoding |
| event |
| flags |
| icmphdr |
| iphdr |
| opt |
| protocols |
| reference |
| reference_system |
| schema |
| sensor |
| services |
| sig_class |
| sig_reference |
| signature |
| tcphdr |
| udphdr |
+——————+
19 rows in set (0.01 sec)
mysql>

之后:
mysql> show tables;
+——————+
| Tables_in_snort |
+——————+
| acid_ag |
| acid_ag_alert |
| acid_event |
| acid_ip_cache |
| data |
| detail |
| encoding |
| event |
| flags |
| icmphdr |
| iphdr |
| opt |
| protocols |
| reference |
| reference_system |
| schema |
| sensor |
| services |
| sig_class |
| sig_reference |
| signature |
| tcphdr |
| udphdr |
+——————+
23 rows in set (0.00 sec)
mysql>
前面4个表是ACID新建立的。

6.4SnortSnarf
SnortSnarf是另外一个用web界面来显示Snort数据的工具。你可以在http://www.silicondefense.com/software/snortsnarf/index.htm找 到这个软件。它基本上是一个Perl脚本,你可以下载后直接运行,不需要任何的编译过程。它也可以从MySQL数据库提取并分析Snort数据。下面的命 令可以从/var/log/snort/alert文件中分析数据,并在/var/www/html/snortsnarf目录中生成新的网页,你可以通 过web浏览器来察看。
snortsnarf.pl /var/log/snort/alert -d /var/www/html/snortsnarf
下面的命令从localhost上的MySQL数据库提取数据,它用到了前面我们设置的用户名和口令。
snortsnarf.pl rr:rr78x@snort@localhost -d /var/www/html/snortsnarf
你可以用cron来使SnortSnarf定期运行,图6-15显示了SnortSnarf产生的主页面,它提供了告警信息的基本情况。
图6-16是关于某个告警的信息,你可以点击6-15所示的告警条目来得到这样的信息。
图6-17是whois查询的屏幕截图。

7第七章 其他一些工具
本章将介绍其他一些工具,并试图让你了解如何使系统更加安全。下面我们来介绍这些工具。

IDS Manager是基于Windows图形界面的Snort规则和配置管理工具,通过它你可以:

从一个正在工作的Snort探测器上下载当前的配置文件snort.conf和规则。
修改配置文件和规则。
将配置文件和规则上载到探测器上。

用IDS Manager你可以管理多个探测器,唯一要注意的事,你需要在Snort探测器上运行SSH服务器。

SnortSam是另外一个工具,它可以将Snort与防火墙整合在一起,通过它和Snort一起工作,你可以修改防火墙的设置。但是这个功能仍有很多争论,因为它可能会使防火墙遭受Dos攻击。

本章的另外一个论题是安装ACID的web服务器的安全性,到现在为止,我们还没有涉及到如何加强这个服务器的安全性,任何人都可以访问ACID控制台并删除Snort所收集的信息,我们稍后会解决这个问题。

7.1 SnrotSam
SnortSam可以使Snort与最常见的一些防火墙协同工作,提供防火墙/IDS整合解决方案。在IDS探测到入侵的时候,它可以设置防火墙来阻止恶意的数据或者IP地址。在http://www.snortsam.net/你可以得到最近的信息。这个工具包括两个部分:
一个安装到Snort探测器上的Snort输出插件。
一个安装到靠近防火墙或防火墙本身所在的机器上的代理。Snort通过安全连接与这个代理通讯。
到目前为止,这个工具支持以下的防火墙:
• 基于 IP filter的防火墙
• Checkpoint Firewall-1
• Cisco PIX
• Netscreen

它的输出插件需要与Snort一起编译,它会提供一些新的关键字,可以用来控制防火墙的行为。
在一个用CheckPiont防火墙的典 型方案中,你可以在防火墙本身运行SnortSam代理。如图7-1所示,一个Snort探测器正在控制两个CheckPoint防火墙。 CheckPoint防火墙可以运行在Linux、Windows和其他一些它所支持的Unix系统上。
如果你的防火墙并非CheckPoint这样的软件防火墙,你可以在靠近防火墙的机器上运行代理,为这个代理安装某种插件来控制一种特定的防火墙。例如,如果你需要控制Cisco路由器的访问列表,你可以在SnortSam网站上下载相关的插件。参见图7-2。
关于SnortSam的文档、示例以及如何安装的信息可以在它的网站找到。但是请注意如果配置不当,用这样的工具可能会导致DoS攻击,例如,某人发送构造特殊的信息,可能会使防火墙阻止合法的服务器的通讯,比如你的DNS服务器等。
7.2 IDS Policy Manager
IDS Policy Manager是基于Windows图形界面的工具它可以用来管理Snort配置文件和规则。你可以在http:// activeworx.com/idspm/下载。启动这个软件,你可以看到图7-3所示的窗口。
开始的时候,这个窗口是空白的,下面有3个标签,分别是:

“Sensor Manager”标签页,显示你用这个工具所管理的探测器。开始的时候,列表中没有,因为你并没有添加任何探测器。启动的时候,这个页面是默认页面。
“Policy Manager”标签页,显示所配置的策略。策略包括snort.conf参数和关于这个策略的规则列表。
“Logging”标签页显示日志信息

点击标签可以切换到相应的标签页。你可以点击Sensor菜单并选择“Add Sensor”来添加探测器,会出现一个如图7-4所示的弹出窗口,在这里你可以填充关于探测器的信息。

你需要输入下面的信息
探测器的名称,你可以填写你所需要的名字以方便管理
探测器的IP地址
IDS System文本框用来指定Snort的版本,因为Snort不同的版本的参数和插件以及关键字有一点不同,因此这个信息的正确性也是比较重要的。
“Upload Information”包括一些和探测器之间传输文件的参数。
SCP方式是登录探测器上的SSH服务器。“Upload Directory”指定Snort探测器上的snort.conf的位置。

在输入这些信息以后点击OK就添加了一个探测器。后面的第一项任务就是从你刚才添加的探测器上面下载策略。在Sensor菜单中选择 Download Policy from Sensor来实现这个目的。下载完成后,点击窗口下方的Policy Manager标签,你可以看到当前的策略的列表并在这里编辑策略,双击策略名字,就出现一个策略编辑窗口,如图7-5所示。

7.3加强ACID web控制台的安全性
第6章中,我们提到ACID还有一些安全问题,如果不采取相应的措施,那么可能任何人都能修改ACID所访问的数据库。
在ACID的配置文件acid_conf.php中,用户名和口令都已经经过高强度加密,所以任何访问ACID网页的人都无从知道数据库的用户名和口令。
我们有一些方法能使ACID得到安全的应用。
7.3.1 采用专用网络
防止ACID被任意访问的其中一个方法就是将IDS系统以及数据库放在一个专用网络中,并分配私网IP地址,这样它们对Internet是不可访问的。 但是这种方案仍然有些问题,就是内部网络用户可以任意的访问ACID并修改信息。
7.3.2 在防火墙上阻止外部对Web服务器的访问
另外一个方法就是阻止Internet用户对ACID的web服务器的访问,同上个方案一样,这个方案使系统容易受到内部的攻击。
7.3.3 iptables
另外一个方法就是用iptables使web服务器只供管理人员访问。这是最安全的方案之一,不仅可以阻止外来攻击,也可以防止内部的攻击。
例如,如果网络管理员的机器的IP地址是192.168.1.100,我们可以增加这样一条Iptables规则:
iptables -A INPUT -s ! 192.168.1.100 -j DROP
这样就会阻止所有不是来自192.168.1.100的连接。

相关文章

本文已有 2 个回复

  1. xian @ 2009/06/21 09:53

    有时候使用apt-get安装的包可能在编译的时候参数与要求的不一致,使用rpm也有可能遇到这个问题,你可以考虑卸载掉后,使用源代码重新安装

  2. lengfeng @ 2009/06/17 19:30

    您好
    我在做snort支持snmptrap的时候遇到了点问题,提示ERROR: unknown output plugin: ‘trap_snmp’Fatal Error。在网上搜索结果说是在编译snort的时候要加上openssl,但是我用的是debian系统,直接apt-get install安装的,请帮忙给予解答 谢谢 我的msn号:qilinlengfeng@hotmail.com

添加回复

支持 Ctrl+Enter 快速提交