Snort 入侵检测系统
Snort 入侵检测系统
一、实验目的
1.掌握snort IDS工作原理
2.应用snort 三种方式工作
二、实验环境
系统环境:Windows环境, kali环境
三、实验原理
1.snort IDS概述
Snort IDS(入侵检测系统)是一个强大的网络入侵检测系统。它具有实时数据流量分析和记录IP网络数据包的能力,能够进行协议分析,对网络数据包内容进行搜索/匹配。它能够检测各种不同的攻击方式,对攻击进行实时报警。此外,snort 是开源的入侵检测系统,并具有很好的扩展性和可移植性。
2.snort IDS体系结构
Snort IDS体系结构图,如下图所示:
如上图所示,snort的结构由4大软件模块组成,它们分别是:
(1) 数据包嗅探模块——负责监听网络数据包,对网络进行分析;
(2) 预处理模块——该模块用相应的插件来检查原始数据包,从中发现原始数据的“行为”,如端口扫描,IP碎片等,数据包经过预处理后才传到检测引擎;
(3) 检测模块——该模块是snort的核心模块,当数据包从预处理器送过来后,检测引擎依据预先设置的规则检查数据包,一旦发现数据包中的内容和某条规则相匹配,就通知报警模块;
(4) 报警/日志模块——经检测引擎检查后的snort数据需要以某种方式输出。如果检测引擎中的某条规则被匹配,则会触发一条报警,这条报警信息会通过网络、UNIXsocket 、Windowspopup(SMB)、SNMP协议的trap命令传送给日志文件,甚至可以将报警传送给第三方插件(如snortSam),另外报警信息也可以记入SQL数据库。
3.snort应用
Snort采用命令方式运行。格式为:snort-[options]
Snort命令 | 选项参数 |
---|---|
-A | <A=alert>报警方式:full(报警内容比较详细),fast(只记录报警时间),none(关闭报警功能) |
-a | 显示ARP包 |
-b | 以tcpdump的格式将数据包记入日志 |
-c | |
-C | 仅抓取包中的ASCLL字符 |
-d | 抓取应用层的数据包 |
-D | 在守护模式下运行snort |
-e | 显示和记录数据链路层信息 |
-F | |
-i | |
-N | 关闭日志功能,报警功能仍然工作 |
-p | 关闭混杂模式的嗅探 |
-s | 将报警信息记录到系统日志,日志文件可以出现在/var/log/messages目录里 |
-V | 显示版本号 |
四、实验步骤
1.启动kali虚拟机,在终端中输入命令:apt-get install snort 进行安装。(此处kali已安装snort)
Snort安装完成后,输入命令:snort -v,查看snort的版本信息,如下图所示:
2.自定义规则
使用自定义规则需要对snort配置文件进行配置工作,输入命令:leafpad/erc/snort/snort.conf
,打开snort配置文件snort.conf,如下图所示:
在打开文件51行做如下修改,将IP变量HOME_NET的值改为本机kali主机的IP地址,如下图所示:
观察snort.conf配置文件可以发现规则文件都在路径RULE_PATH中,文件113行可以看到,RULE_ PATH 的值为/etc/snort/rules,所以规则文件都在/etc/snort/rules
目录下,如下图所示:
在终端中输入命令进入目录:cd /etc/snort/rules,如下图所示:
在/etc/snort/rules 中开始自定义自己的规则文件,在/etc/snort/rules中打开终端,输入命令touch 70.rules
创建新的规则文件,如下图所示:
返回snort.conf文件中,将578行至696行全部添加#号注释,在697行处添加如下内容用于在配置文件中包含自定义规则文件70.rules,此配置的目的是入侵检测模式使用snort的时候,snort仅以规则文件70.rules中自定义的规则来进行工作。如下图所示:(在配置文件snort.conf中包含自定义规则文件70.rules完成配置文件snort.conf修改后,保存文件)
接下来打开70.rules文件,添加一条简单的规则,如下图所示:
内容如下:alert tcp $EXTERNAL_NET any -> $HOME_NET 80 (msg:"Web Access";sid:1)
[注释]:此条规则的含义为任何源地址不为kali本机地址,目标地址为kali本地地址,目标端口为80的TCP数据包都将触发报警
- alert:生成一个告警,然后记录这个包
- tcp:规则匹配数据包协议的类型为tcp
- $EXTERNAL_NET:IP地址,在snort.conf文件中定义
- any:跟随在IP地址之后的any表示任意端口号
- $HOME_NET:IP地址,在snort.conf文件中定义
- 80:表示80端口
- msg:在报警和包日志中打印的消息
- sid:规则的id号
报警输出文件为/var/log/snort
目录下alert文件,打开一个新的终端,cd到报警文件所在目录/var/log/snort,使用tail -f
命令动态的查看alert文件,即有新的报警信息存入alert文件时,新添加的报警信息将输出至终端显示,如下图所示:
在另一个终端中,启动apache2命令为:/etc/init.d/apache2 start
,使得其它主机可以访问kali主机Web主页,如下图所示:
以入侵检测方式启动snort并添加-c命令使用配置文件snort.conf,命令为:snort -A full -c /etc/snort/snort.conf
(配置文件中包含了自定义规则文件70.rules),如下图所示:
打开本地主机,使用浏览器访问kali主机Web主页(http://192.168.70.137/),如下图所示:
返回kali主机,可以得知alert文件中新添加了报警信息,从报警信息可知,IP为192.168.70.1的主机访问了kali本机的Web页面,如下图所示:
3.在70.rules文件中继续添加FTP规则,如下图所示:
FTP规则命令如下:
alert tcp $EXTERNAL_NET any -> $HOME_NET 21 (msg:"USER LOGIN";content:"USER";sid:10000002;tag:host,10,packets,src;rev:1;)
snort.conf保存后,输入命令:snort -d -A full -c /etc/snort/snort.conf
启动snort服务,这里使用-d 参数是为了抓取应用层的数据包,如下图所示:
Kali 主机中使用命令/etc/init.d/vsftpd start
开启ftp服务,如下图所示:
在本机中,使用用户名:uftp
,密码:123456
对kali主机FTP服务器进行登录,登录成功后输入命令quit退出登录,如下图所示:
返回kali主机,可以看到alert新添加FTP报警信息如下图所示:
在/var/log/snort目录下可以看到新增日志文件snort.log.163929377,输入命令snort -dr snort.log.163929377,在终端打开新增加的日志文件,日志文件中已捕获用户登录的用户名及密码,且日志中保存的数据包个数刚好为11(触发规则的数据包和随后包触发规则源地址的数据包)。如下图所示:
4.在70.rules文件中继续添加新的规则,如下图所示:
alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"We are being pinged!";icode:0;itype:8;sid:10000003;rev:1;)
在kali终端输入命令:snort -e -A full -c /etc/snort/snort.conf
启动snort, -e 命令用于抓取链路层数据包,如下图所示:
在本地主机对kali 主机进行ping操作,如下图所示:
返回kali主机,可以看到新添加的报警信息,报警信息中还包含了ping操作的主机MAC地址,如下图所示:
[验证]:打开本地cmd输入命令ipconfig /all
查看是否一致,结果一致,如下图所示: