防火墙可以比喻为办公室门口的警卫,用来检查进出者的身份。而入侵检测系统就像是网上的警报器,当发现入侵者时,指出入侵者的来历、他们正在做什么。入侵检测系统被视为防火墙之后的第二道安全闸门。
【实验目的】
1.掌握snortIDS工作机理
2.应用snort三种方式工作
3.熟练编写snort规则
【实验原理】
1.Snort IDS概述
Snort IDS(入侵检测系统)是一个强大的网络入侵检测系统。它具有实时数据流量分析和记录IP网络数据包的能力,能够进行协议分析,对网络数据包内容进行搜索/匹配。它能够检测各种不同的攻击方式,对攻击进行实时报警。此外,Snort是开源的入侵检测系统,并具有很好的扩展性和可移植性。
2.Snort IDS体系结构
Snort IDS体系结构如图8.1所示。
图8.1 SnortIDS体系结构
如上图所示,Snort的结构由4大软件模块组成,它们分别是:
(1)数据包嗅探模块——负责监听网络数据包,对网络进行分析;
(2)预处理模块——该模块用相应的插件来检查原始数据包,从中发现原始数据的“行为”,如端口扫描,IP碎片等,数据包经过预处理后才传到检测引擎;
(3)检测模块——该模块是Snort的核心模块。当数据包从预处理器送过来后,检测引擎依据预先设置的规则检查数据包,一旦发现数据包中的内容和某条规则相匹配,就通知报警模块;
(4)报警/日志模块——经检测引擎检查后的Snort数据需要以某种方式输出。如果检测引擎中的某条规则被匹配,则会触发一条报警,这条报警信息会通过网络、UNIXsocket、WindowsPopup(SMB)、SNMP协议的trap命令传送给日志文件,甚至可以将报警传送给第三方插件(如SnortSam),另外报警信息也可以记入SQL数据库。
3 snort的三种工作模式:
Snort拥有三大基本功能:嗅探器、数据包记录器和入侵检测。嗅探器模式仅从网络上读取数据包并作为连续不断的流显示在终端上,常用命令snort-dev。数据包记录器模式是把数据包记录到硬盘上,常用命令snort-b。网络入侵检测模式是最复杂的,而且是可配置的。我们可以让Snort分析网络数据流以匹配用户定义的一些规则,并根据检测结果采取一定的动作。
4.Snort规则
1)snort规则定义
Snort使用一种简单的规则描述语言,这种描述语言易于扩展,功能也比较强大。Snort规则是基于文本的,规则文件按照不同的组进行分类,比如,文件ftp.rules包含了FTP攻击内容。「注」Snort的每条规则必须在一行中,它的规则解释器无法对跨行的规则进行解析。
Snort的每条规则都可以分成逻辑上的两个部分:规则头和规则体。
规则头包括4个部分:规则行为;协议;源信息;目的信息。
图8.2是对于规则头的描述。
图8.2 snort规则头
Snort预置的规则动作有5种:
(1)pass—动作选项pass将忽略当前的包,后继捕获的包将被继续分析。
(2)log—动作选项log将按照自己配置的格式记录包。
(3)alert—动作选项alert将按照自己配置的格式记录包,然后进行报警。它的功能强大,但是必须恰当的用,因为如果报警记录过多,从中攫取有效信息的工作量增大,反而会使安全防护工作变得低效。
(4)dynamic—动作选项dynamic是比较独特的一种,它保持在一种潜伏状态,直到activate类型的规则将其触发,之后它将像log动作一样记录数据包。
(5)activate—动作选项activate功能强大,当被规则触发时生成报警,并启动相关的dynamic类型规则。在检测复杂的攻击,或对数据进行归类时,该动作选项相当有用。
除了以上5种预置的规则动作类型,用户还可以定制自己的类型。
规则体的作用是在规则头信息的基础上进一步分析,有了它才能确认复杂的攻击(Snort的规则定义中可以没有规则体)。规则体由若干个被分别隔开的片断组成,每个片断定义了一个选项和相应的选项值。一部分选项是对各种协议的详细说明,包括IP、ICMP和TCP协议,其余的选项是:规则触发时提供给管理员的参考信息,被搜索的关键字,Snort规则的标识和大小写不敏感选项。
5.Snort应用
Snort采用命令行方式运行。格式为:snort–[options]<filters>。options为选项参数;filters为过滤器。
1)Snort主要选项参数
-A<alert>设置报警方式为full,fast或者none。在full方式下,snort将传统的报警信息格式写入报警文件,报警内容比较详细。在fast方式下,snort只将报警时间,报警内容,报警IP地址和端口号写入文件。在none方式下,系统将关闭报警功能。
-a显示ARP包。
-b以tcpdump的格式将数据包记入日志。所有的数据包将以二进制格式记录到snort.log文件中。这个选项提高了snort的操作速度,因为直接以二进制存储,省略了转换为文本文件的时间,通过-b选项的设置,snort可以在100Mbps的网络环境中正常工作。
-c<cf>使用配置文件<cf>。文件内容主要控制系统哪些包需要记入日志,哪些包需要报警,哪些包可以忽略等。
-C仅抓取包中的ASCII字符。
-d抓取应用层的数据包。
-D在守护模式下运行snort。
-e显示和记录数据链路层信息。
-F<bpf>从文件<bpf>中读取BPF过滤信息。
-h<hn>设置<hn>(C类IP地址)为内部网络。当使用这个开关时,所有从外部的流量将会有一个方向箭头指向右边,所有从内部的流量将会有一个左箭头。这个选项没有太大的作用,但是可以使显示的包的信息格式比较容易察看。
-i<if>使用网络接口文件<if>。
-l<ld>将包信息记录到目录<ld>下。设置日志记录的分层目录结构,按接收包的IP地址将抓取的包存储在相应的目录下。
-n<num>处理完<num>包后退出。
-N关闭日志功能,报警功能仍然工作。
-p关闭混杂模式的嗅探(sniffing)。这个选项在网络严重拥塞时十分有效。
-r<tf>读取tcpdump生成的文件<tf>,snort将读取和处理这个文件。
-s将报警信息记录到系统日志,日志文件可以出现在/var/log/messages目录里。
-v将包信息显示到终端时,采用详细模式。这种模式存在一个问题:它的显示速度比较慢,如果你是在IDS网络中使用snort,最好不要采用详细模式,否则会丢失部分包信息。
-V显示版本号,并退出。
2)Filters过滤器
Snort的<filters>是标准的BPF格式的过滤器。
Snort应用了BPF机制,可以在探测器上书写和执行BPF规则的文件。BPF机制允许用户书写快速的包分析规则,这些规则主要基于源、目的、和其他的头信息。通过嗅探和BPF,我们可以只捕获需要的流量,这样就减轻了需要处理的数据量。
BPF机制很容易理解,可以用于分析TCP、UDP、IP和ICMP协议。规则语法很像自然的口语,使用“and”和“or”作为规则操作符,用“not”作为取反符,此处还可以用括号来告诉引擎将一系列数据作为一个整体来处理。
例如:ICMP捕获:icmp。
telnet请求数据包捕获:tcp and dst port 23。
记录所有源自网络192.168.0.0/24,目的是202.98.0.0/24的IP流量:ip and "src net 192.168.0 " and "dst net 202.98.0 " 。
【实验步骤】
本练习主机A、B为一组,C、D为一组,E、F为一组。
首先使用“快照X”恢复Linux系统环境。
一.Snort数据包嗅探
1.启动Snort
进入实验平台,单击工具栏“控制台”按钮,进入IDS工作目录,运行Snort对网络接口eth0进行监听,要求如下:
(1)仅捕获同组主机发出的icmp回显请求数据包。
(2)采用详细模式在终端显示数据包链路层、应用层信息。
(3)对捕获信息进行日志记录,日志目录/var/log/snort。
Snort命令:
本机执行上述命令,同组主机对当前主机进行ping探测
2.查看Snort日志记录。
「说明」默认snort日志记录最后一级目录会以触发数据包的源IP命名。可使用组合键Ctrl+C停止snort运行。
二.Snort数据包记录
(1)对网络接口eth0进行监听,仅捕获同组主机发出的Telnet请求数据包,并将捕获数据包以二进制方式进行存储到日志文件中/var/log/snort/snort.log)。
Snort命令:
(2)当前主机执行上述命令,同组主机telnet远程登录当前主机。
(3)停止snort捕获(Ctrl+C),读取snort.log文件,查看数据包内容。
Snort命令:snort -r
三.简单报警规则
(1)在snort规则集目录ids/rules下新建snort规则集文件new.rules,对来自外部主机的、目标为当前主机80/tcp端口的请求数据包进行报警,报警消息自定义。
snort规则:snort –c ids/rules/new.rules src any and dst port 80
(2)编辑snort.conf配置文件,使其包含new.rules规则集文件,具体操作如下:使用vim(或vi)编辑器打开snort.conf,切换至编辑模式,在最后添加新行包含规则集文件new.rules。
添加包含new.rules规则集文件语句
(3)以入侵检测方式启动snort,进行监听。
启动snort的命令 snort
以入侵检测方式启动snort,同组主机访问当前主机Web服务。
snort -dev -l ./log -h 192.168.1.1/24 -c snort.conf,它将会对每个包和规则集进行匹配,再把数据记录在主机192.168.1.1中。检测到的攻击在/var/log/snort下alert文件的记录。
如果你想snort启动时就载入可以编辑一个文件,放入/etc/rc.d/init.d/snortd这个文件中
# /etc/rc.d/init.d/snortd
Starting snort: [ OK ]
# ps awx | grep snort
【实验总结】
通过这次实验使我对Snort的强大功能有了最基础的了解,对它的工作机理有了深一步的认识,对它三种模式的语法也有了一定的掌握,学会了最基础的命令编写规则,为深入的学习打下了基础。
来源:oschina
链接:https://my.oschina.net/u/170799/blog/36994