移动安全 安全管理 应用案例 网络威胁 系统安全 应用安全 数据安全 云安全
当前位置: 主页 > 信息安全 > 移动安全 >

强大的网络入侵检测系统SNORT

时间:2011-05-01 17:17来源: 点击:
在网络日益普及的今天,网络安全变的越来越重要,作为网络安全的一个重要组成部分网络入侵检测系统(Network Intrusion Detection System,NIDS)也越来越显示出其重要性。NIDS用来监视网络数据流动。
TagsSNORT(8)  

  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任何组织和个人都可以自由使用。

  snort是一个轻量级的入侵检测系统

  snort虽然功能强大,但是其代码极为简洁、短小,其源代码压缩包只有大约110KB。

  snort的可移植性很好

  snort的跨平台性能极佳,目前已经支持Linux,Solaris,BSD,IRIX,-UX,WinY2K等系统。

  snort的功能非常强大

  snort具有实时流量分析和日志IP网络数据包的能力。能够快速地检测网络攻击,及时地发出报警。snort的报警机制很丰富,例如:syslog、用户指定的文件、一个UNIX套接字,还有使用SAMBA协议向Windows客户程序发出WinPopup消息。利用XML插件,snort可以使用SNML(简单网络标记语言,simple network markup language)把日志存放到一个文件或者适时报警。

  snort能够进行协议分析,内容的搜索/匹配。现在snort能够分析的协议有TCP、UDP和ICMP。将来,可能提供对、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能够主动断开恶意连接。

  扩展性能较好,对于新的攻击威胁反应迅速

  作为一个轻量级的网络入侵检测系统,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邮件列表,找出特征码,写出检测规则。因为其规则语言简单,所以很容易上手,节省人员的培训费用。

  遵循公共通用许可证GPL

  snort遵循GPL,所以任何、个人、组织都可以免费使用它作为自己的NIDS。

  3.安装

  如何获得snort

  可以从snort的站点http://www.snort.org获得其源代码或者RPM包。使用源代码安装snort需要libpcap库,可以从://ftp.ee.lbl.gov下载,

  安装snort

  RPM包,可以使用下面的命令进行安装:

  bash#rpm -ihv --nodeps snort-1.7-1.i386.rpm

  源代码:

  解压libpcap包:

  bash#uncompress libpcap.tar.Z

  bash#tar xvf libpcap.tar

  编译libpcap库:

  bash#./configure

  bash#make

  解压snort-1.7.0.tar.gz

  bash#tar zxvf snort-1.7.0.tar.gz

  进入到其所在目录,编译snort:

  bash# ./configure --with-libpcap-includes=/path/to/your/libcap/headers

  bash# make

  bash# make install

  configure脚本还有一些选项:

  --enable-smbalerts编译SMB报警代码;

  --enable-flexresp编译Flexible Response代码;

  --with-mysql=DIR支持mysql数据库;

  --with-postgresql=DIR支持postsql数据库;

  --with-odbc=DIR支持ODBC数据库;

  --enable-openssl支持。

  可以根据自己的实际情况选择这些选项。

  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 把规则测试顺序修改为:Pass|Alert|Log

  -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

  作为嗅探器

  所谓的嗅探器模式就是snort从网络上读出数据包然后显示在你的控制台上。首先,我们从最基本的用法入手。如果你只要把包头信息打印在屏幕上,只需要输入下面的命令:

  ./snort -v

  使用这个命令将使snort只输出IP和TCP/UDP/ICMP的包头信息。如果你要看到应用层的数据,可以使用:

  ./snort -vd

  这条命令使snort在输出包头信息的同时显示包的数据信息。如果你还要显示数据链路层的信息,就使用下面的命令:

  ./snort -vde

  注意这些选项开关还可以分开写或者任意结合在一块。例如:下面的命令就和上面最后的一条命令等价:

  ./snort -d -v -e

------分隔线----------------------------

推荐内容