分类: 网络与安全
2008-10-11 17:59:07
1.什么是入侵检测
2.什么是snort
3.什么是日志分析
4.snort的日志格式
4.1.基于文本的格式
4.2.tcpdump格式
4.3.数据库
5.工具
5.1.管理基于文本日志的工具
5.2.基于tcpdump日志文件的分析工具
5.3.数据库分析工具
总结
参考
简介
snort是一个轻量级的网络入侵检测系统,它可以记录所有可能的入侵企图。记录信息的文件可以是文本、XML、libpcap格式,也可以把把信息记录
到syslog或者数据库。本文将介绍一些用于snort日志管理的工具。不过,本文无法囊括所有的分析工具。因为snort作为一个自由、健壮的入侵检
测系统,受到很多人的关注,因此针对它开发的工具层出不穷。
本文将介绍的工具主要针对三种输出格式:文本、libpcap(也就是tcpdump格式)和数据库。我们将主要介绍这些工具的安装和功能。
1.什么是入侵检测
入侵检测就是一个监视计算机系统或者网络上发生的事件,然后对其进行安全分析的过程。大多数的入侵检测系统都可以被归入到基于网络、基于主机以及分布式三
类。基于网络的入侵检测系统能够监视网络数据发现入侵或者攻击的蛛丝马迹;基于主机的入侵检测系统能够监视针对主机的活动(用户的命令、登录/退出过程,
使用的数据等等),以此来判断入侵企图;分布式IDS通过分布于各个节点的传感器或者代理对整个网络和主机环境进行监视,中心监视平台收集来自各个节点的
信息监视这个网络流动的数据和入侵企图。
各种入侵检测系统使用的检测方法可以分为两类:基于特征码的检测方法和异常检测。使用基于特征码检测方法的系统从网络获得数据,然后从中发现以知的攻击特
征。例如:在某些URL中包含一些奇怪的Unicode编码字符就是针对IIS
Unicode缺陷的攻击特征。此外各种模式匹配技术的应用,提高了这种检测方法的精确性。使用异常检测的系统能够把获得的数据与一个基准进行比较,检测
这些数据是否异常。例如:如果一个雇员的工作时间是上9点到下午5点,但是在某个晚上他的计算机记录了他曾经在半夜登录了公司的邮件服务器,这就是一个异
常事件,需要深入调查。现在,大量的统计学方法用于这个领域。
2.什么是snort
snort是一个基于libpcap的轻量级网络入侵检测系统。它运行在一个“传感器(sensor)”主机上,监听网络数据。这台机器可能是一台简陋的运行FreeBSD系统的Pentium100
PC,并且至少有一个网卡。不过建议使用最好的机器作为进行入侵检测的主机。snort能够把网络数据和规则集进行模式匹配,从而检测可能的入侵企图;或者使用SPADE插件,使用统计学方法对网络数据进行异常检测。
snort使用一种易于扩展的模块化体系结构,感兴趣的开发人员可以加入自己编写的模块来扩展snort的功能。这些模块包括:HTTP解码插件、TCP数据流重组插件、端口扫描检测插件、FLEXRESP插件以及各种日志输入插件等。
snort还是一个自由、简洁、快速、易于扩展的入侵检测系统,已经被移植到了各种UNIX平台和WinY2K上。同时,它也是目前安全领域中,最活跃的开放源码工程之一。snort还是昂贵的商业入侵检测系统最好的替代产品之一。
3.什么是日志分析
入侵检测系统(例如:snort)安装成功后,并不表示一切都万事大吉了,你还有许多事情要做。snort启动后,它会在的硬盘上记录大量的报警信息。因
此,你需要工具对日志或者报警文件进行分析。不同你的需要和安全形势,要求你使用不同的工具。你可能只要一个日志汇总,或者你的经理要求你提供一个最近
15次攻击的报告。还有,对于某个报警你可能需要获取更多的信息,以便做进一步的研究。不管是出于什么目的,日志分析可以帮助你从日志中获取有用的信息,
使你可以针对攻击威胁采取必要措施。
4.snort的日志格式
你可以通过修改配置文件来设置snort的报警形式。基于文本的格式、libpcap格式和数据库是snort最重要的三种报警形式。本文中,我将主要对每种报警形式及其配置进行介绍,然后我将针对这些数据格式介绍一些分析工具。
4.1.基于文本的格式
报警文件
如果在启动snort时,你使用了-A [fast|full|none]选项,snort就会把报警信息保存到一个文件中。例如:
[**] INFO - ICQ Access [**]
[Classification: content:"MKD / "] [Priority: 0]
05/10-10:02:31.953089 10.1.1.1.:54835 ->
10.2.2.5:80
TCP TTL:127 TOS:0x0 ID:13690 IpLen:20 DgmLen:482
DF
***AP*** Seq: 0x112BDD12 Ack: 0x11B38D8A Win:
0x4510
TcpLen: 20
其中,[Classification: content:"MKD / "] [Priority:
0]是报警的分类和优先级,这是snort 1.8beta版开始加入的新特征。
syslog文件
取消snort.conf文件中以下几行的注释,可以使snort向系统日志文件中日志数据:
output alert_syslog: LOG_AUTH LOG_ALERT
输出格式如下:
May 10 00:03:38 xxxxxx snort: INFO - ICQ Access
[Classification:
content:"MKD / " Priority: 0]: 10.1.1.1:54352 ->
10.2.2.5:80
CSV文件
Brian Caswell为snort编写了CSV输出插件。通过这个插件,snort可以使用CSV格式记录数据。它的配置非常容易,只要在snort.conf文件中加入以下的配置行:
output CSV: /your/filename
timestamp,msg,proto,src,dst
然后,这个输出插件就会向/your/filenames文件输出如下格式的信息:
05/10-10:02:31.953089, INFO - ICQ Access,
TCP,10.1.1.1,10.2.2.5
你可以使用默认配置选项default,而勿需指定任何域。在配置文件中,你可以使用复合CSV输出,建立多个输出文件,在每个文件中记录需要记录的域。
XML格式
snort的XML输出插件是Jed Pickel和Roman Danyliw开发的,是AIRCERT(Automated
Incident-Reporting)工程的一个组成部分。snort使用这个插件可以把日志数据或者报警信息以XML格式保存到本地文件和输出到一个
中心数据库,或者发送到CERT进行处理。这些数据使用SNML格式,SNML是简单网络标记语言(Simple Network Markup
Language)或者snort标记语言(SNort Markup
Language)的缩写。你可以从获得更为详细的信息。
XML输出插件支持HTTP、HTTPS和IAP(入侵报警协议,Intrusion Alert
Protocol)协议。它的数据可以使用HEX、BASE64或者ASCII编码。
下面是XML输出插件的配置示例:
output xml: log, file=/var/log/snort/snortxml
这一配置行使snort把产生的日志信息输出到以/var/log/snort/snortxml-MMDD@HHMM命名的文件中,其中MMDD是月、日,HHMM是时、分。
output xml: alert,protocol=https host=your.server.org
file=yourfile cert=mycert.crt key=mykey.pem ca=ca.crt
server=srv_list.lst
这一配置行使snort使用HTTPS协议把产生的输出送到远程服务器your.server.org的文件yourfile。cert、key、ca与SSL有关。server参数可以设置连接的服务器列表。
下面是一个输出示例:
5A97E73C0000000000000002000186A00000000200000004000000000000000000000000
4.2.tcpdump格式
报文捕获库(libcap)是Lawrence Berkeley
National实验室的网络研究小组开发的,应用非常广泛,许多的报文捕获程序都是基于这个库的,例如:tcpdump和snort。在snort.conf文件中加入下面的配置行,你就能够把日志以tcpdump二进制格式记录到指定的文件中:
output log_tcpdump: snort_dump.log
然后,你可以使用snort或者tcpdump从这个文件中读取信息。
4.3.数据库
早在2000年3月Jed Pickel就为snort编写了数据库输出插件,这个插件支持MySQL、PostgreSQL、unixODBS和Oracle数据库。
在snort.conf文件中加入:
output database: log, mysql, user=snortuser
password=snortpass dbname=snortdb host=localhost
就可以使snort把日志数据输出到名为snortdb的MySQL数据库中,这个数据库位于本地主机,用户名为snortuser,验证密码是
snortpass。针对不同的数据库系统,mysql可以改为postgresql、unixodbc或者oracle。
在使用数据库之前,需要做建立数据库和用户/密码等准备工作。还要为用户这是适当的权限,然后使用contrib目录下的create_mysql、create_postgresql、create_oracle.sql建立数据库的表。
5.工具
在本节中,我将介绍一些用于snort日志分析的工具,这些工具也是按照上一节那样分类。这里将主要讲述它们的功能以及如何使用。
5.1.管理基于文本日志的工具
snort_stat
是本文作者(Yen-Ming Chen)与1999年写的一个perl脚本,可以周期性地产生snort日志文件的统计结果。这个脚本可以产生如下信息:
具有同样特征码的源/目的对的数量
具有相同源/目的对的特征码的数量
具有相同源地址和特征码的企图的数量
具有相同特征码的目的地址的数量
特征码分布
portscan和SPADE插件的日志
这个脚本能够能够周期性给系统管理者发送email或者把产生的信息保存为HTML格式的文件。在/etc/crontab文件中加入以下条目,就可以实现上述功能:
59 23 * * * root cat /your/snort/logfile |/your/snort_stat.pl
-r | sendmail someone@somewhere
这样,snort_stat.pl脚本就能够在每天晚上11:59解析/your/snort/logfile,然后把结果发给someone@somewhere。使用-h选项可以产生HTML输出。这个脚本的下载地址在:
你还可以从下面地址得到一个HTML输出的例子:
example.html
这个脚本的最新版本是1.15。作者将针对snort1.8对其进行改进。
SnortSnarf
这也是一个perl脚本,可以处理snort的日志文件然后产生HTML格式的输出,帮助你分析snort日志,发现可能的攻击威胁。SnortSnarf的输出包括可以进行WHOIS和DNS查询的连接。你也能够发现向特定IP地址的攻击。
除了日志分析之外,SnortSnarf还有其它的功能。有一个nmap2html脚本能够从日志文件中抽取nmap端口扫描的报警信息,将其保存为HTML页面。最新的版本加入了SISR(SnortSnarf
Incident Storage and Reporting
mechanism)机制。使用这项功能你可以方便地建立和保存事件报告或者通过email发送事件报告。
你可以从以下地址下载SnortSnarf:
使用SnortSnarf需要Time::JulianDay模块,这个Perl模块包含在SnortSnarf压缩包中。完成SnortSnarf的安
装之后(具体的安装步骤可以参考README文档),你需要为HTML格式机的输出文件准备一个目录,接着运行如下命令:
snortsnarf.pl -d /where/is/html/output /var/log/messages
/var/log/snort/alert
这个命令将使SnortSnarf解析/var/log/messages和/var/log/snort/alert文件,把产生的HTML格式文件输
出到/where/is/html/output目录。SnortSnarf还有其它的选项,用户可以参考其README文档了解这些选项的用法。
从以下地址可以得到一个SnortSnarf的输出示例:
snort-sort
这个perl脚本的编者是Andrew R.
Baker,它能够为snort报警进行排序。从snort源代码的contrib目录下,你可以找到这个脚本。它能够进行反向DNS查询,并且能够对每个IP地址进行WHOIS查询。目前这个脚本无法处理snort1.8版的报警(作者完成本文时)。
只要使用以下命令就可以了:
snort-sort.pl /your/alert/file > result.html
然后,你就可以使用浏览器查看result.html。
snort2html
是Daniel Swan编写的perl脚本,能够把snort记录到syslog文件中的报警信息抽取出来,转换为HTML格式。从Max
Vision的ArchNIDS数据库中,你可以获得更多关于特征码的信息。这个脚本不能进行日志分析,同样也不能处理snort1.8版的报警格式。
使用时,你需要改变$logfile和$outputfile两个变量,然后在/etc/crontab文件中加入一个条目,周期性执行这个脚本。snort2html没有命令选项。
snortlog
这个perl脚本的作者Angelos Karageorgiou,它的功能类似于snort-sort和snort2html。也是把snort报警文件转换为HTML页面。用法如下:
Snortlog.pl /var/log/snort/alert machinename
它目前也不能处理snort1.8版报警格式。下载地址在http://packetstorm.securify.com/sniffers/snort/snortlog.pl
ARIS Extractor
ARIS基于攻击登记和智能服务(Attack Registry and Intelligence
Service)。这是http://www.securityfocus.org推出的一项免费安全服务,它能够提供IDS和防火墙日志的广泛关联。
ARIS
Extractor程序能够从你的snort日志中提取信息,然后以XML格式送到SecurityFocus的ARIS数据库做深入分析。要使用这项服
务,你首先要在http://www.securityfocus.org注册,获得一个用户名和密码。他们会对对数据进行安全处理,以保护你的隐私,不
过为了进行关联处理不可避免地要泄露你的某些信息。通过这种方式,他们可以建立一个世界范围的数据库,在宏观层进行攻击趋势分析。你可以从http://aris.securityfocus.com/获得更多细节。
5.2.基于tcpdump日志文件的分析工具
目前还没有专门用于snort的分析工具,不过,你可以使用tcpreplay和tcpshow等工具,查看日志信息。
5.3.数据库分析工具
ACID
ACID是入侵数据库分析控制台(Analysis Console for Intrusion
Databases)的缩写。编者Roman Danyliw,是一个基于PHP的分析引擎。主页:
ACID具有搜索、分组、维护和图示数据库的数据。这些数据既可以是snort的日志/报警,也可以是其它防火墙产品产生的信息,例如ipchains。它能够现实各种统计数据,包括:
按照协议划分报文
Unique alerts
最近/最频繁的报警
最频繁出现的地址
ACID也提供了一个IP地址的whois查询连接。你可以使用它为数据分组和从数据库删除报警。如果想使用ACID你还需要ADODB、gd-1.8和PHPlot-4.4.6。ACID的简要安装过程如下:
安装支持PHP的Web服务器
安装ADODB、GD和PHPlot
安装ACID
更为详细的过程可以参考构建基于snort的入侵检测系统。
安装完成后,你需要设置acid_config.php文件:
$DBlib_path = "/opt/ids/share/acidsupport/adodb";
/* ADODB的安装路径 */
$DBtype = "postgres"; /* 数据库类型 */
$alert_dbname = "snort"; /* 记录snort日志信息的数据库 */
$alert_host = "localhost"; /* 数据库所在的地址 */
$alert_port = "5432"; /* 数据库服务器监听的端口 */
$alert_user = "snort"; /* 数据库用户 */
$alert_password = "123456"; /* 用户的密码 */
$ChartLib_path = "/opt/ids/share/acidsupport/phplot/";
/* PHPlot的安装路径 */
然后,你就可以通过浏览器执行acid_main.php了。
总结
显然,现在还没有一种非常成功的日志分析软件。如果你要处理基于文本的日志信息,可以使用SnortSnarf获得更多的信息以及对日志进行搜索;如果你
只需要周期性汇总事件的发生情况,使用snort_stat就可以了;而其它的工具则只能进行格式转换,没有分析能力。
如果使用数据库,ACID是当前最好而且几乎是唯一的选择;还有其它一些perl脚本,可以用来维护你的snort数据库;如果你希望获得SecurityFocus的帮助可以使用ARIS
Extractor。
这些日志分析工具只能为你更好地跟踪可能的入侵企图或者实际的攻击,然而更重要的是,你需要时刻保持警惕。
参考
1. Rebecca G. Bace, "Intrusion Detection", MTP
Technology Series, 2000. (Return to text.)
2.snort主页:
3.AIRCERT工程主页:
4.Snortdb插件主页:
5.SnortSnarf主页:
6.Snort_stat主页:
7.ARIS:http://aris.securityfocus.com/
8.ACID: