入侵检测课堂实验

实验目的

1.在linux平台建立基于Snort的IDS。

2.在部署snort的本机建立规则,实现对dos攻击、nmap扫描和ssh连接的检测。

实验环境

1.虚拟机:ubuntu、kali

2.工具:nmap、snort、hping3

实验过程与结果

步骤一:课前准备

1.安装snort

1
sudo apt install -y snort

下载完成后,会提示进行相应配置,按要求配置即可

首先是输入CIDR格式的本地网段(例如我的主机ip是192.168.204.136,所以配置为192.168.0.0/16)。其次是填写网卡位置,网卡位置可通过ifconfig指令查看,此图中即为ens33

图1

2.配置一些必要文件夹

(1)Snort的安装目录

1
2
3
4
sudo mkdir -p /etc/snort/rules/iplists
sudo mkdir -p /etc/snort/preproc_rules
sudo mkdir /usr/local/lib/snort_dynamicrules
sudo mkdir /etc/snort/so_rules

图2

(2)存储过滤规则和服务器黑白名单

1
2
3
sudo touch /etc/snort/rules/iplists/default.blacklist
sudo touch /etc/snort/rules/iplists/default.whitelist
sudo touch /etc/snort/rules/so_rules

图3

(3)创建日志目录

1
2
sudo mkdir /var/log/snort
sudo mkdir /var/log/snort/archived_logs

图4

(4)调整权限

1
2
3
4
5
sudo chmod -R 5775 /etc/snort
sudo chmod -R 5775 /var/log/snort
sudo chmod -R 5775 /var/log/snort/archived_logs
sudo chmod -R 5775 /etc/snort/rules/so_rules
sudo chmod -R 5775 /usr/local/lib/snort_dynamicrules

图5

3.修改默认配置

1
sudo nano /etc/snort/snort.conf

(1)首先根据自己的ip配置网络信息(45行左右),我的主机ip是192.168.204.136,所以配置为192.168.0.0/16

图6

然后修改默认文件路径(111行左右)

图7

(2)在配置完成后,可以通过sudo snort -c /etc/snort/snort.conf -A fast -l /var/log/snort -i ens33命令,简单测试配置是否正确。若正确,则将启动snort

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

图8

步骤二:Snort检测DoS(syn flood)攻击

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

1
2
sudo nano /etc/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)

图9

2.打开snort.conf,注释掉include $RULE_PATH/icmp-info.rules(608行)

1
sudo nano /etc/snort/snort.conf

图10

3.启动snort

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

图11

4.使用另一台kali使用hping3攻击(在dos实验中使用过的)。在日志中查看检测报告(cat /var/log/snort/alert)

1
2
sudo hping3
hping3 -c 10000 -d 10000 -S -w 64 -p 80 --flood 192.168.204.136

图12

5.可以看到检测报告。

1
sudo cat /var/log/snort/alert

图13

步骤三:Snort检测nmap扫描

1.以nmap NULL扫描为例:同理在local.rules中写下如下规则:

1
2
sudo nano /etc/snort/rules/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;)

图14

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

1
nmap -sN 192.168.204.136

图15

图16

3.查看snort报警信息。

1
sudo cat /var/log/snort/alert

图17

步骤四:Snort检测ssh连接

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

(1)kali开启ssh服务命令

1
sudo /etc/init.d/ssh start

图18

(2)先安装ssh服务,后启动

1
sudo apt install openssh-server -y

图19

(3)启动服务,查看服务状态

1
2
sudo systemctl enable --now ssh
sudo systemctl status ssh

图20

2.自主编写规则local.rules,检测ssh连接行为,从使用到的端口角度,并添加到rules中。

1
2
sudo nano /etc/snort/rules/local.rules
alert tcp any any -> $HOME_NET 22 (msg:“ssh connection”; sid:100000003)

图21

3.连接ssh

1
ssh ubuntu@192.168.204.136

图22

4.查看snort信息,可以看到成功检测到了ssh连接!

1
sudo cat /var/log/snort/alert

图23

实验总结

在本实验中,我成功在Linux平台上建立了一套基于Snort的入侵检测系统(IDS)。整个实验的核心在于部署Snort引擎后,通过自主编写和配置检测规则,赋予其识别特定网络威胁的能力。我们针对三种典型的恶意或可疑行为——具有洪水特征的DoS攻击、用于信息搜集的nmap扫描以及潜在的未经授权SSH连接——精心设计了相应的检测规则。这些规则能够实时分析流经本机的网络流量,一旦匹配到预设的攻击模式,系统便会立即生成详细的警报日志,从而实现对目标威胁的有效监控与发现。

通过亲手完成从环境搭建、规则编写到功能测试的全过程,我们不仅掌握了Snort这一经典IDS工具的基本配置方法,更深入理解了如何根据具体攻击的特征(如异常流量、特殊标志位、特定端口与载荷)来构建检测逻辑。这次实践将理论知识与应用技能紧密结合,显著提升了对网络安全主动防御机制的认知水平和实操能力,为后续应对更复杂的安全挑战奠定了坚实的基础。

入侵检测课后实验

实验目的

漏洞攻击检测实验:构造具有漏洞的目标环境(系统漏洞、软件漏洞、数据库漏洞、服务漏洞等),根据目标环境漏洞设计针对性攻击,达到攻击效果,并配置snort实现对漏洞攻击的检测。(heartbleed漏洞攻击)

实验环境

1.虚拟机:ubuntu、kali

2.工具:nmap、snort

实验过程与结果

1.设置规则

(1)进入Snort/rules目录下的local.rules文件中

1
sudo nano /etc/snort/rules/local.rules

设置以下规则

1
alert tcp any any -> $HOME_NET 8443 (msg:"HEARTBLEED ATTACK!";content:"|1803|";depth:2;content:"|01|";sid:1000001;rev:1;)

图1

规则解释:心脏出血漏洞主要通过攻击者模拟向服务器端发送自己编写的Heartbeat心跳数据包,主要是HeartbeatMessage的长度与payload的length进行匹配,若payload_lenght长度大于HeartbeatMessage的length,则会在服务器返回的response响应包中产生数据溢出,造成有用数据泄露。

HeartbeatMes sage的length为2^14字节即16384字节,协议是TCP,面向的端口是 443 即HTTP/HTTPS服务,本实验采用docker环境复现,因此端口使用8443。

(2)注意要注释掉自带对应规则库。

打开snort.conf,注释掉include $RULE_PATH/icmp-info.rules(608 行)

1
sudo nano /etc/snort/snort.conf

图2

2.启动snort

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

图3

图4

3.启动docker。

1
sudo systemctl start docker

图5

4.进入环境所在目录启动环境。

1
2
cd /home/ubuntu/Desktop/vulhub-master/openssl/CVE-2014-0160
sudo docker-compose up -d

图6

1
sudo docker ps

图7

5.打开浏览器输入https://192.168.204.136:8443,出现Heartbleed Test说明环境启动成功。

图8

6.使用msf利用漏洞。

1
msfconsole

图9

图10

7.打开msf后,查找heartbleed模块,查看需要设置哪些选项。

1
2
3
search heartbleed
use auxiliary/scanner/ssl/openssl_heartbleed
show options

图11

8.设置靶机地址RHOSTS和靶机端口号RPORT,同时设置verbose以看到泄露的信息。

1
2
3
set RHOSTS 192.168.204.136
set RPORT 8443
set verbose true

图12

9.exploit,可以看到泄露的数据,漏洞利用成功。

1
exploit

图13

图14

图15

10.在日志中查看检测报告

1
sudo cat /var/log/snort/alert

图16

图17

实验总结

在本实验中,我围绕备受关注的OpenSSL心脏出血漏洞展开了一次完整的漏洞攻击检测实践。我们首先利用Vulhub漏洞环境快速搭建了存在Heartbleed漏洞的OpenSSL 1.0.1c服务环境,通过Docker容器技术构建了包含Nginx和脆弱OpenSSL版本的目标系统,为后续攻击检测提供了真实的实验平台。这一环境的成功部署不仅还原了2014年该漏洞影响下的真实场景,也为我们理解漏洞原理和攻击特征奠定了坚实基础。

在攻击阶段,我使用了多种技术手段验证漏洞的存在性和可利用性。通过专门的心跳请求数据包构造,我们成功触发了OpenSSL的内存信息泄露机制,能够从目标服务器内存中提取出敏感信息片段,直观地演示了该漏洞对数据传输保密性的严重威胁。这一过程让我们深刻体会到,即使没有传统意义上的缓冲区溢出或代码执行,信息泄露类漏洞同样可能带来灾难性后果,特别是当内存中残留着会话令牌、用户凭证等关键数据时。

这次实验让我们从防御者视角深入理解了现代入侵检测系统的运作机制和规则设计哲学。面对不断演进的网络威胁,仅依靠传统的特征匹配已不足以应对高级攻击,需要结合协议分析、行为检测等多种技术手段。通过亲手实践从环境搭建、攻击模拟到检测防御的全流程,我们不仅掌握了具体工具的使用方法,更重要的是建立了主动安全防御的思维模式,为今后从事网络安全相关工作积累了宝贵的实战经验。