IT产品热门报价
 手机 更多>>
 笔记本 更多>>
 数码产品 更多>>
 电脑硬件 更多>>

IT热点
  • 电脑硬件
  • 手机
  • MP4
  • 品牌机
  • 办公产品
  • 投影机
  • 服务器
  • 奥林巴斯
  • 尼康
  • 佳能
  • 阿尔卡特
  • 索尼
  • 微星
  • 七彩虹
  • 笔记本
  • 数码相机
  • 数码摄像机
  • 惠普
  • 戴尔
  • 联想
  • 诺基亚
  • 摩托罗拉
  • 索尼爱立信
  • LG
  • 西门子
  • 飞利浦
  • 华硕
  • 硕泰克
  • - - - - - - - - - -
    首页 >> 网络产品 >> 网络安全频道 >> 入侵检测
    轻量级网络入侵检测系统SNORT [入侵检测]
    网络收集
    2006-6-6 14:45:00 文/

    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,HP-UX,WinY2K等系统。

    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能够主动断开恶意连接。

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

      作为一个轻量级的网络入侵检测系统,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://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支持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 把规则测试顺序修改为: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从网络上读出数据包然后显示在你的控制台上。首先,我们从最基本的用法入手。如果你只要把TCP/IP包头信息打印在屏幕上,只需要输入下面的命令:

     

    ./snort -v


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

     

    ./snort -vd


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

     

    ./snort -vde


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

     

    ./snort -d -v -e


    记录数据包

    如果要把所有的包记录到硬盘上,你需要指定一个日志目录,snort就会自动对数据包进行日志:

     

    ./snort -dev -l ./log


      当然,./log目录必须存在,否则snort就会报告错误信息并退出。当snort在这种模式下运行,它会日志所有看到的包将其放到一个目录中,这个目录以数据包目的主机的IP地址命名,例如1192.168.10.1

    如果你只指定了-l命令开关,而没有设置目录名,snort有时会使用远程主机的IP地址作为目录,有时会使用本地主机IP地址作为目录名。为了只对本地网络进行日志,你需要给出home net:

     

    ./snort -dev -l ./log -h 192.168.1.0/24


      这个命令告诉snort把进入C类网络192.168.1的所有包的数据链路、TCP/IP以及应用层的数据记录到目录./log中。

      如果你的网络速度很快,或者你想使日志更加紧凑以便以后的分析,那么应该使用二进制的日志文件格式。所谓的二进制日志文件格式就是tcpdump程序使用的格式。使用下面的命令可以把所有的包日志到一个单一的二进制文件中:

     

    ./snort -l ./log -b


      注意此处的命令行和上面的有很大的不同。我们勿需指定home network,因为所有的东西都被记录到一个单一的文件。你也不必冗余模式或者使用-d、-e功能选项,因为数据包中的所有内容都会被记录到日志文件中。

      你可以使用任何支持tcpdump二进制格式的嗅探器程序从这个文件中读出数据包,例如:tcpdump或者Ethereal。使用-r功能开关,也能使snort读出包的数据。snort在所有运行模式下都能够处理tcpdump格式的文件。例如:如果你想在嗅探器模式下把一个tcpdump格式的二进制文件中的包打印到屏幕上,可以输入下面的命令:

    ./snort -dv -r packet.log

      在日志包和入侵检测模式下,通过BPF(BSD Packet Filter)接口,你可以使用许多方式维护日志文件中的数据。例如,你只想从日志文件中提取ICMP包,只需要输入下面的命令行:

     

    ./snort -dvr packet.log icmp

    作为入侵检测系统

    snort最重要的用途还是作为网络入侵检测系统(NIDS),使用下面命令行可以启动这种模式:

     

    ./snort -dev -l ./log -h 192.168.1.0/24 -c snort.conf

      snort.conf是规则集文件。snort会对每个包和规则集进行匹配,发现这样的包就采取相应的行动。如果你不指定输出目录,snort就输出到/var/log/snort目录。

      注意:如果你想长期使用snort作为自己的入侵检测系统,最好不要使用-v选项。因为使用这个选项,使snort向屏幕上输出一些信息,会大大降低snort的处理速度,从而在向显示器输出的过程中丢弃一些包。

      此外,在绝大多数情况下,也没有必要记录数据链路层的包头,所以-e选项也可以不用:

     

    ./snort -d -h 192.168.1.0/24 -l ./log -c snort.conf

      这是使用snort作为网络入侵检测系统最基本的形式,日志符合规则的包,以ASCII形式保存在有层次的目录结构中。

      网络入侵检测模式下的输出选项

      在NIDS模式下,有很多的方式来配置snort的输出。在默认情况下,snort以ASCII格式记录日志,使用full报警机制。如果使用full报警机制,snort会在包头之后打印报警消息。如果你不需要日志包,可以使用-N选项。

      snort有6种报警机制:full、fast、socket、syslog、smb(winpopup)和none。其中有4个可以在命令行状态下使用-A选项设置。这4个是:

    -A fast:报警信息包括:一个时间戳(timestamp)、报警消息、源/目的IP地址和端口。

    -A full:是默认的报警模式

    -A unsock:把报警发送到一个UNIX套接字,需要有一个程序进行监听,这样可以实现适时的报警

    -A none:关闭报警机制

      使用-s选项可以使snort把报警消息发送到syslog,默认的设备是LOG_AUTHPRIV和LOG_ALERT。可以修改snort.conf文件修改其配置。

      snort还可以使用SMB报警机制,通过SAMBA把报警消息发送到Windows主机。为了使用这个报警机制,在运行./configure脚本时,必须使用--enable-smbalerts选项。

    下面是一些输出配置的例子:

    使用默认的日志方式(以解码的ASCII格式)并且把报警发给syslog:./snort -c snort.conf -l ./log -s -h 192.168.1.0/24

    使用二进制日志格式和SMB报警机制:./snort -c snort.conf -b -M WORKSTATIONS

    snort规则简介

      snort最重要的用途是作为网络入侵检测系统,它有自己的规则语言。从语法上看,这种规则语言非常简单,但是对于入侵检测来说它足够强大。对于匹配特定规则的数据包,snort有三种处理动作:pass、log、alert。

    pass:放行数据包

    log:把数据包记录到日志文件

    alert:产生报警消息并日志数据包

      snort的每条规则都可以分成逻辑上的两个部分:规则头和规则选项。规则头包括:规则行动(rule's action)、协议(protocol)、源/目的IP地址、子网掩码以及源/目的端口。规则选项包含报警消息和异常包的信息(特征码),使用这些特征码来决定是否采取规则规定的行动。最基本的规则只是包含四个个域:处理动作、协议、方向、注意的端口。例如:

     

    log tcp any any -> 10.1.1.0/24 79


    这条规则表示:让snort记录从外部网络到C类网址10.l.1所有数据包。

      snort规则中还可以有规则选项(rule option),使用规则选项可以定义更为复杂的行为,实现更加强大的功能。下面是一条含有规则选项的规则(注意整个规则应该在一行,是出于版面的原因才分成两行):

     

    alert tcp any any -> 10.1.1.0/24 80 (content:

    "/cgi-bin/phf";msg "PHF probe!")

      这条规则用来检测对本地网络web服务器的PHF服务的探测,一旦检测到这种探测数据包,snort就发出报警消息,并把整个探测包记录到日志。

      在规则中,IP地址的定义也有很大的灵活性。使用any关键词表示任何IP地址或者端口。一般地,IP地址可以使用xx.xx.xx.xx/子网掩码的形式定义,其中xx.xx.xx.xx是由.分割的四个字节的数字。注意不能使用域名方式,snort不对域名进行解析,当然是出于效率的考虑^_^。还可以使用非操作符!对IP地址和端口进行操作,这个操作符就是逻辑非的意思。对于端口,还可以使用操作符:限制端口的范围。例如:

    alert tcp !10.1.1.0/24 any -> 10.1.1.0/24 6000:6010 (msg: "X traffic";)

      这条规则使snort对于从外部网络到内部网络X-window服务端口的数据包发出报警。

      在snort当前版本(1.7)中有23个规则选项关键词,随着snort不断地加入对更多协议的支持以及功能的扩展,会有更多的功能选项加入其中。这些功能选项可以以任意的方式进行组合,对数据包进行分类和检测。现在,snort支持的选项包括:msg、logto、ttl、tos、id、ipoption、fragbits、dsize、flags、seq、ack、itype、icode、icmp_id、content、content-list、offset、depth、nocase、session、rpc、resp、react。每条规则中,各规则选项之间是逻辑与的关系。只有规则中的所有测试选项(例如:ttl、tos、id、ipoption等)都为真,snort才会采取规则动作。

    如何编写规则

      由于snort的规则语言语法非常简单,所以可以对新发现的攻击作出快速的反应,迅速开发新的snort规则。编写新的规则,最重要的是知道新攻击的特征码。要得到一个新的攻击的特征码,一般的方法就是进行实际的测试。对一个测试网络进行攻击,使用snort记录在攻击主机和测试网络之间的数据流。然后,对记录的数据进行分析得到其唯一的特征码,最后把得到的特征码加入到规则中。我们以IMAP缓冲区溢出为例进行说明,图8是一个假想的IMAP缓冲区溢出攻击被记录下的数据包:

    052499-22:27:58.403313 192.168.1.4:1034 -> 192.168.1.3:143

    TCP TTL:64 TOS:0x0 DF

    ***PA* Seq: 0x5295B44E Ack: 0x1B4F8970 Win: 0x7D78

    90 90 90 90 90 90 90 90 90 90 90 90 90 90 EB 3B ...............;

    5E 89 76 08 31 ED 31 C9 31 C0 88 6E 07 89 6E 0C ^.v.1.1.1..n..n.

    B0 0B 89 F3 8D 6E 08 89 E9 8D 6E 0C 89 EA CD 80 .....n....n.....

    31 DB 89 D8 40 CD 80 90 90 90 90 90 90 90 90 90 1...@...........

    90 90 90 90 90 90 90 90 90 90 90 E8 C0 FF FF FF ................

    2F 62 69 6E 2F 73 68 90 90 90 90 90 90 90 90 90 /bin/sh.........


      这个攻击的特征码就是/bin/sh字符串及其前面的机器代码。这实际上是一个shellcode。四用这些信息可以很快开发出一条新的规则:

    alert tcp any any -> 192.168.1.0/24 143 (content:"|E8C0 FFF FF|/bin/sh";

    msg:"New IMAP Buffer Overflow detected!";)

      其中的特征码含有文本和16进制两种形式,它们以|分割,snort运行时都被转换为二进制形式。

    总结

      本文介绍了一个轻量级的入侵检测系统snort。主要讨论了其特点、如何安装,最基本的用法,以及如何开发新的规则。snort是一个高性能的入侵检测系统,适用于大中小型网络,尤其适合一些无力承受大型商业入侵检测系统高昂费用中小型公司。

     


    ·IT产品报价大全
    更多相关: 手机
    在百度中更多内容: 手机




    打印此 投稿与建议 返回顶部

    相关文章
  • 网络入侵检测的初步探测方法 2007年1月8日
  • 黑客技巧 浅谈网络入侵的提高方法 2006年12月18日
  • 无线入侵检测系统的应用及优缺点 2006年12月1日
  • ASP网站漏洞解析及黑客入侵防范 2006年11月20日
  • 安全课堂 教你如何预防DdoS攻击 2006年11月13日