一、实验目的

  1. 在linux平台建立基于Snort的IDS。
  2. 在部署Snort的本机建立规则,实现对DoS攻击、Nmap扫描和SSH连接的检测。
  3. 针对heartbleed漏洞的攻击的检测实验。(选做)

二、*实验环境*

实验1:

服务器:kali

客户机:kali

软件:snort

三、*实验过程与结果*

*安装Snort*

img

修改默认配置

img

在部署Snort的本机建立规则,实现对DoS攻击、Nmap扫描和SSH连接的检测
主机互相ping通
img

img

*Snort检测DoS(syn flood)攻击*

Snort/rules目录下的local.rules文件中,设置如下规则:

alert tcp any any -> $HOME_NET 80 (msg:”DoS attack”; flags:S; threshold:type threshold, track by_dst, count 100, seconds 60; sid:2000003)

img

打开snort.conf,注释掉

include $RULE_PATH/icmp-info.rules(608行)

img

之后启动snort

sudo snort -c /etc/snort/snort.conf -A fast -l /var/log/snort -i eth0

img

使用另一台kali使用hping3攻击(在dos实验中使用过的)

img

在日志中查看检测报告(cat /var/log/snort/alert):

img

*Snort检测nmap扫描*

以nmap NULL扫描为例:

同理在local.rules中写下如下规则:

alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:”Nmap Null PortScan!”; flags:0; threshold:type both,track by_dst,count 20,seconds 60; sid:10000012; rev:1;)
img

nmap NULL扫描是nmap秘密扫描的一种,相对比较隐蔽,通过向目标主机端口发送标志位flags为0的包进行扫描。

img

使用kali中的nmap对主机进行NULL扫描。查看snort报警信息。

img

Snort检测ssh连接

首先将两台机器(可以是主机和虚拟机)的ssh服务开启。

kali开启ssh服务命令:sudo /etc/init.d/ssh start

查看服务状态:sudo systemctl status ssh

img

之后自主编写规则local.rules,检测ssh连接行为。

alert TCP any any ->$HOME_NET 22 ( msg:“ssh connection”; sid:100000003)

img

成功链接

img

连接成功日志

img

*选做实验*

借鉴网络扫描实验中对Heartbleed漏洞的利用

启动docker环境,启动待攻击网站

img

同样在kali中使用msf,msf在进行到“exploit“时投放攻击载荷实现攻击。

img

自主编写规则实现针对Heartbleed漏洞攻击的检测

分析包结构可知,控制0x18、0x03、0x01和倒数2比特的0x01后只要0xffff位的内容大于0x0003位的内容则发出警告

img

报告中要说明自定义规则的意义。

alert tcp any any -> $HOME_NET 8443 (msg:”Heartbleed Attack”; content:”|18 03 01 00 03 01 ff ff|”; sid:1000001; rev:1;)

攻击成功

img

四、实验总结

Snort是一个领先的开源网络入侵预防和检测系统。这个软件主要用来监测网络流量,以便发现潜在的不良数据包、恶意活动,和网络攻击。Snort基于规则来分析网络数据,并且有能力进行实时流量分析及包日志记录。在本次实验中使用Snort并自定义规则实现了对DoS攻击、Nmap扫描、SSH连接和heartbleed漏洞攻击的检测。

通过实验可以看出,Snort可以对多种多样的攻击实现检测和警报,但是使用Snort进行网络监测和攻击检测需要合理配置规则来识别不同类型的恶意流量。要有效地实施这些检测,网络管理员需要定期更新Snort规则,并适当调整规则的阈值(thresholds)和条件以匹配网络环境的特点。还需要定期查看Snort的日志和警报来评估潜在的威胁,并根据需要调整规则的严格性。