1.简介
在网络日益普及的今天,网络安全变的越来越重要,作为网络安全的一个重要组成部分网络入侵检测系统.network intrusion detection system,nids)也越来越显示出其重要性。nids用来监视网络数据流动情况,当入侵发生时能够提供报警。现在已经出现了很多商业的nids,但是它们大多比较复杂,比较难以掌握,而且比较昂贵,比较小的公司无法承受。本文将介绍一个出色的免费nids系统---snort,它基于gpl,作者是martin roesch。最新版本是1.70版。本文将介绍snort的技术特点及如何使用snort作为nids。
2.snort的特点
snort是一个强大的轻量级的网络入侵检测系统。它具有实时数据流量分析和日志ip网络数据包的能力,能够进行协议分析,对内容进行搜索/匹配。它能够检测各种不同的攻击方式,对攻击进行实时报警。此外,snort具有很好的扩展性和可移植性。还有,这个软件遵循通用公共许可证gpl,所以只要遵守gpl任何组织和个人都可以自由使用。
1).snort是一个轻量级的入侵检测系统
snort虽然功能强大,但是其代码极为简洁、短小,其源代码压缩包只有大约110kb。
2).snort的可移植性很好
snort的跨平台性能极佳,目前已经支持linux,solaris,bsd,irix,hp-ux,winy2k等系统。
3)。snort的功能非常强大
snort具有实时流量分析和日志ip网络数据包的能力。能够快速地检测网络攻击,及时地发出报警。snort的报警机制很丰富,例如:syslog、用户指定的文件、一个unix套接字,还有使用samba协议向windows客户程序发出winpopup消息。利用xml插件,snort可以使用snml(简单网络标记语言,simple .network markup language)把日志存放到一个文件或者适时报警。
snort能够进行协议分析,内容的搜索/匹配。现在snort能够分析的协议有tcp、udp和icmp。将来,可能提供对arp、icrp、gre、ospf、rip、ipx等协议的支持。它能够检测多种方式的攻击和探测,例如:缓冲区溢出、秘密端口扫描、cgi攻击、smb探测、探测操作系统指纹特征的企图等等。
snort的日志格式既可以是tcpdump式的二进制格式,也可以解码成ascii字符形式,更加便于用户尤其是新手检查。使用数据库输出插件,snort可以把日志记入数据库,当前支持的数据库包括:postgresql、mysql、任何unixodbc数据库,还有oracle(对oracle的支持目前处于测试阶段)。
使用tcp流插件(tcpstream),snort可以对tcp包进行重组。snort能够对ip包的内容进行匹配,但是对于tcp攻击,如果攻击者使用一个程序,每次发送只有一个字节的tcp包,完全可以避开snort的模式匹配。而被攻击的主机的tcp协议栈会重组这些数据,将其送给在目标端口上监听的进程,从而使攻击包逃过snort的监视。使用tcp流插件,可以对tcp包进行缓冲,然后进行匹配,使snort具备了对付上面这种攻击的能力。
使用spade(statistical packet anomaly detection engine)插件,snort能够报告非正常的可疑包,从而对端口扫描进行有效的检测。
snort还有很强的系统防护能力。使用flexresp功能,snort能够主动断开恶意连接。
4).扩展性能较好,对于新的攻击威胁反应迅速
作为一个轻量级的网络入侵检测系统,snort有足够的扩展能力。它使用一种简单的规则描述语言。最基本的规则只是包含四个个域:处理动作、协议、方向、注意的端口。例如:
log tcp any any -> 10.1.1.0/24 79 。还有一些功能选项可以组合使用,实现更为复杂的功能。将有一篇单独的文章讨论如何写snort规则。用户可以从http://www.snort.org得到其规则集。另外,著名的黑客max vision在http://www.whitehats.com提供在线的技术支持。
snort支持插件,可以使用具有特定功能的报告、检测子系统插件对其功能进行扩展。snort当前支持的插件包括:数据库日志输出插件、碎数据包检测插件、端口扫描检测插件、http uri normalization插件、xml插件等。
snort的规则语言非常简单,能够对新的网络攻击做出很快的反应。发现新的攻击后,可以很快根据bugtraq邮件列表,找出特征码,写出检测规则。因为其规则语言简单,所以很容易上手,节省人员的培训费用。
5).遵循公共通用许可证gpl
snort遵循gpl,所以任何企业、个人、组织都可以免费使用它作为自己的nids。
3.安装
3.1.如何获得snort
可以从snort的站点http://www.snort.org获得其源代码或者rpm包。使用源代码安装snort需要libpcap库,可以从ftp://ftp.ee.lbl.gov下载,
3.2.安装snort
3.2.1.rpm包,可以使用下面的命令进行安装:
bash#rpm -ihv --nodeps snort-1.7-1.i386.rpm
3.2.2.源代码:
1).解压libpcap包:
bash#uncompress libpcap.tar.z
bash#tar xvf libpcap.tar
2).编译libpcap库:
bash#./configure
bash#make
3).解压snort-1.7.0.tar.gz
bash#tar zxvf snort-1.7.0.tar.gz
4).进入到其所在目录,编译snort:
bash# ./configure --with-libpcap-includes=/path/to/your/libcap/headers
bash# make
bash# make install
5).configure脚本还有一些选项:--enable-smbalerts编译smb报警代码;--enable-flexresp编译flexible response代码;--with-mysql=dir支持mysql数据库;--with-postgresql=dir支持postsql数据库;--with-odbc=dir支持odbc数据库;--enable-openssl支持ssl。可以根据自己的实际情况选择这些选项。
4.使用
现在,snort已经安装完成。我们将在这一节讨论如何使用snort。作为一个网络入侵检测的软件,snort有三种用途:数据包嗅探器(packet sniffer)、数据包分析器(packet analyser)以及网络入侵检测系统。让我们从最简单的命令开始,输入一个简单的命令列出所有的命令行开关。
bash# snort -?
-*> snort! <*-
version 1.7
by martin roesch (roesch@clark.net, www.snort.org)
usage: snort [-options]
options:
-a 设置报警模式:fast、full、none(只是使用报警文件)、
unsock(使用unix套接字记入日志,出于测试阶段)
-a 显示arp(address resolution protocol,地址解析
协议)包
-b 日志文件使用tcpdump格式(更快)
-c 使用规则文件rules
-c 只使用字符方式打印负载信息(不使用hex方式)
-d 复制应用层
-d 在后台运行snort(精灵状态)
-e 显示第二层(数据链路层)包头信息
-f read bpf filters from file
-g 初始化完成后,使snort的gid为gname
-h home网络为hn
-i 在接口if上监听
-i 把界面名加入到报警输出界面。
-l 设置目录ld为日志目录
-m 把smb消息发送到文件wrkst列出的工作站中
(requires smbclient to be in path)
-n 收到cnt个包后退出
-n 关闭日志功能(警报功能仍然有效)
-o 把规则测试顺序修改为:passalertlog
-o 打乱被日志的ip地址
-p 关闭混杂嗅探模式
-p 设置复制的包的长度为snaplen(默认: 1514)
-q 安静模式。不输出banner和状态报告。
-r 读取并处理tcpdump文件tf(回放功能)
-s 把所有警告信息记入syslog
-s 设置规则文件中的n的值等于v的值
-t
初始化完成后chroot到dir目录
-u 初始化完成后,把snort的uid设置为uname
-v 设置冗余模式
-v 显示版本号
-x 从链路层开始复制包的数据
-? 显示帮助信息
<包过滤选项>基于bpf,可参考tcpdump
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器