声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章
感谢泷羽sec 团队的教学
视频地址:蓝队基础之网络七层杀伤链_哔哩哔哩_bilibili
本文主要分享入侵检测与防御系统(IDS/IPS)中Snort的工作原理、配置方法以及一些常见的规则和操作方式。
一、入侵检测与防御概述
Snort是一个广泛应用的网络入侵检测和防御系统(IDS/IPS),它能够实时检测并响应网络中的各种威胁。网络安全专业人员需要理解并能根据具体需求修改Snort的规则。Snort支持配置为IDS模式(入侵检测系统)或IPS模式(入侵防御系统),根据规则检测和响应网络流量。
- IDS模式:用于监控网络流量并发出告警,不干预流量本身。
- IPS模式:通过阻断恶意流量,实现实时防御。
此外,像Fortinet等防火墙设备支持导入Snort规则,实现入侵检测和防御。
入侵检测系统(IDS)与入侵防御系统(IPS)
- IDS:通常采用带外监视的方式部署,主要用于检测攻击并发出警报。
- IPS:可以串联部署到网络流量路径中,能够主动阻止威胁,适用于需要快速响应的场景。
二、安装 Snort 和相关依赖涉
1. 安装 DAQ(数据采集库)
Snort 使用 DAQ(Data Acquisition)库来捕获和处理网络流量。不同平台可能有不同的安装方法,以下是通用的步骤:
安装 DAQ:
-
下载 DAQ 源代码:
wget https://github.com/snort3/snort3/releases/download/daq-3.0.0/daq-3.0.0.tar.gz
-
解压文件:
tar -xzvf daq-3.0.0.tar.gz cd daq-3.0.0
-
编译并安装 DAQ:
./configure make sudo make install
-
验证 DAQ 安装: 确认 DAQ 是否正确安装,可以运行:
daq --version 这会显示 DAQ 的版本信息,确保安装成功。
2. 安装内存分配器(如 libpcap)
内存分配器在网络流量处理过程中起着重要作用,常用的内存分配器是 libpcap
。Snort 会使用它来捕获和处理数据包。
安装 libpcap:
-
安装 libpcap(Debian/Ubuntu 系统):
sudo apt update sudo apt install libpcap-dev
-
安装 libpcap(Red Hat/CentOS 系统):
sudo yum install libpcap-devel
-
验证 libpcap 安装: 确认安装:
pkg-config --cflags --libs libpcap
3. 安装Snort 3
Snort 3 是 Snort 的新版本,具有更多的特性和改进。安装 Snort 3 前,确保您的系统已经安装了 DAQ 和 libpcap。
-
下载 Snort 3 源代码: 访问 Snort 官方 GitHub 页面,下载 Snort 3 的最新版本:
wget https://github.com/snort3/snort3/releases/download/3.1.0/snort3-3.1.0.tar.gz
-
解压 Snort 3 文件:
tar -xzvf snort3-3.1.0.tar.gz cd snort3-3.1.0
-
编译与安装 Snort 3:
./configure --enable-sourcefire make sudo make install
-
配置环境变量: 添加 Snort 到环境变量中,编辑
~/.bashrc
文件:export PATH=$PATH:/usr/local/snort3/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/snort3/lib
然后运行:
source ~/.bashrc
-
验证 Snort 安装: 运行以下命令检查 Snort 是否安装成功:
snort -V
4.配置Snort 3
Snort 3 配置需要编辑相关的配置文件,定义网络接口、规则路径等。
-
创建配置文件: Snort 的配置文件通常位于
/usr/local/snort3/etc/snort/
目录下,可以参考示例配置文件进行修改。常见的配置文件包括:snort.lua
:主配置文件,用于配置 Snort 的网络接口、规则路径等。
-
配置规则集: Snort 3 使用规则集来定义检测的网络活动。可以从 Snort 官方、Emerging Threats 等资源下载最新的规则集。
-
启动 Snort: 配置完成后,启动 Snort 进行流量分析:
snort -c /usr/local/snort3/etc/snort/snort.lua
-
验证配置: 使用以下命令检查 Snort 是否能够正确加载规则并分析流量:
snort -T
5. 自定义 Snort 规则
Snort 3 提供了强大的规则引擎,可以根据需要自定义规则,以检测特定的网络威胁。
编辑 Snort 规则:
-
规则文件路径: Snort 3 的规则文件通常存储在
/usr/local/snort3/etc/snort/rules/
目录下。您可以在此目录下添加、修改规则文件。 -
自定义规则示例: 以下是一个简单的规则示例,它检测来自特定 IP 的 HTTP 请求:
alert tcp 192.168.1.100 any -> $HOME_NET 80 (msg:"HTTP Request from 192.168.1.100"; sid:1000001;)
-
更新规则集: 在 Snort 配置文件中指定规则集的路径,Snort 会定期自动更新规则集,以应对新的威胁。
6. 配置和管理日志
Snort 可以生成日志以记录检测到的事件。在 snort.lua
配置文件中,可以设置日志格式、日志存储路径等。
配置日志:
在 snort.lua
中,您可以配置日志类型(如统一日志格式、标准日志等)并指定输出路径。例如:
output unified2: filename snort.u2, limit 128
三、Snort规则解析
Snort的规则由多个字段组成,每个字段的功能明确,有助于精确控制检测行为。以下是一些常见字段的解释和示例:
1. alert(告警规则)
- 含义:指定规则是一个告警规则,当网络流量符合条件时,Snort会发出告警。
- 示例:alert icmp any any -> $HOME_NET any (msg:"Test Ping Event"; sid:1000001; rev:1; classtype:icmp-event;)
该规则监控ICMP协议(Ping)流量,并在符合条件时发出告警。
2. icmp(协议类型)
- 含义:指定监控的协议类型,常见的有ICMP、TCP、UDP等。
- 示例:alert icmp any any -> $HOME_NET any
该规则监控所有ICMP流量。
3. any(通配符)
- 含义:
any
表示匹配任意IP地址或端口,通常用于较为宽泛的流量监控。 - 示例:alert icmp any any -> $HOME_NET any
any
表示源IP、源端口、目标IP和目标端口都可以是任意值。
4. 方向运算符(->)
- 含义:指定流量的方向。
->
表示从源到目标,<->
表示双向流量。 - 示例:
alert icmp any any -> $HOME_NET any
表明流量是从任意源流向本地网络($HOME_NET)。
5. $HOME_NET(本地网络)
- 含义:表示本地网络的IP范围,通常在配置文件中定义。
- 示例:
alert icmp any any -> $HOME_NET any
$HOME_NET
是配置文件中定义的本地网络IP范围。
6. msg(告警信息)
- 含义:设置告警的名称,便于管理员识别。
- 示例:
msg:"Test Ping Event"
当该规则被触发时,告警信息为“Test Ping Event”。
7. sid(签名ID)
- 含义:为每条规则分配一个唯一的ID,以便标识和管理规则。
- 示例:
sid:1000001
规则的唯一签名ID。
8. rev(版本号)
- 含义:用于标识规则的版本,以便追踪和管理规则的更新。
- 示例:
rev:1
表示该规则的版本为1。
9. classtype(告警分类)
- 含义:对告警进行分类,帮助管理员更高效地处理告警。
- 示例:
classtype:icmp-event
将告警归类为ICMP事件。
示例规则解析
规则1:Telnet登录失败检测
alert tcp $HOME_NET 23 -> any any (msg:"Failed login attempt"; content:"Login incorrect"; sid:1000002; rev:1; classtype:attempted-user;)
- 协议:tcp,协议为TCP。
- 源和目标:$HOME_NET 23 -> any any,监控源自本地网络23端口(Telnet)的流量。
- 告警信息:msg:"Failed login attempt",告警名称为“Failed login attempt”。
- 检测内容:content:"Login incorrect",检测流量中是否包含“Login incorrect”字符串,表示Telnet登录失败。
- 签名ID:sid:1000002,该规则的唯一标识。
- 分类:classtype:attempted-user,分类为“用户登录尝试”。
四、外部规则集资源
外部规则集为网络安全专家提供了更多的规则和更新,以帮助应对不断变化的安全威胁。以下是两个有用的外部规则集资源:
1.Proofpoint
- 网址:Enterprise Cybersecurity Solutions, Services & Training | Proofpoint US
- 内容:Proofpoint 提供了与网络安全相关的规则和其他资源,尤其专注于电子邮件安全、网络钓鱼检测、恶意软件防护等方面。通过该资源,用户可以获取关于如何防范网络攻击、提高监控效果的建议。这个资源可以帮助补充 Snort 的规则集,增强其对复杂威胁的检测能力。
2.Emerging Threats
- 网址:https://rules.emergingthreats.netopen/
- 内容:Emerging Threats 提供了大量针对新兴安全威胁的规则集。该资源包含了各种与最新攻击手段和漏洞相关的规则,能有效拓宽 Snort 的检测范围,使其能及时应对日益复杂的安全挑战。这些规则通常基于社区的贡献,具有高时效性和广泛的适用性。
五、Snort In Line部署与流量阻断
1. In Line 部署
In Line 部署是一种使 Snort 直接介入网络流量传输路径的部署方式,意味着 Snort 不再仅仅作为一个被动的监测系统,而是能够主动处理流量。通过将 Snort 部署在网络的流量路径上,当其检测到可疑流量时,可以立即采取响应措施,而不只是发出告警。这种方式适用于需要快速响应、实时阻断攻击的网络环境,能够有效防止恶意流量对网络造成影响。
优势:
- 实时干预:Snort 在流量经过时即可实时检测和处置恶意流量。
- 提高响应速度:与传统的被动检测不同,In Line 部署可在攻击发生时迅速做出反应,及时阻断威胁。
- 避免传播:直接拦截攻击流量,避免恶意流量传播到网络其他部分。
2. 阻断操作相关
Snort 提供了几种阻断流量的方式,确保在检测到恶意活动时可以采取合适的应对措施:
-
D drop:
- 定义:D drop 是 Snort 中的一种阻断操作,当规则触发时,Snort 会直接丢弃符合条件的流量,防止其继续在网络上传播。
- 应用场景:适用于已明确为恶意的流量,如 DoS 攻击、网络扫描等,直接丢弃恶意流量,避免对网络造成进一步的威胁。
- 优点:高效直接地拦截威胁,避免恶意流量的扩散。
-
sdrop:
- 定义:sdrop 是另一种丢弃流量的方式,其功能与 D drop 类似,但通常会与一些细节设置有所不同,可能与规则的优先级或特定配置相关。
- 应用场景:sdrop 更适用于在某些情境下进行流量丢弃,但具体实现可能根据不同部署方式和需求有所变化。
- 优点:提供了灵活性,可以根据网络环境或特定需求做出调整。
-
reject:
- 定义:reject 操作不仅会阻断流量,还会向源主机发送一个拒绝响应(如 ICMP 的 "destination unreachable" 消息),通知源端流量被拒绝。
- 应用场景:这种方法适用于攻击源是可识别的并且希望与其进行交互的情况。通过返回拒绝响应,源端会知道其流量被阻断,可以增加透明度和反馈,有时有助于防止进一步的攻击。
- 优点:不仅阻止了恶意流量,还可以为源端提供有意义的反馈,有助于维护网络秩序。
3. 结合条件子句、外部规则集与阻断操作
通过综合利用 Snort 的条件子句设置、外部规则集以及上述的 In Line 部署和阻断操作,您可以更全面地监控和防御网络中的恶意活动。例如:
- 规则定制:根据网络环境和实际需求定制 Snort 规则,设置适当的条件子句来触发不同的响应。
- 外部规则集:结合外部规则集,如 Proofpoint 和 Emerging Threats,增强 Snort 的检测能力,使其能够应对更复杂的攻击和威胁。
- 部署和响应:选择合适的部署方式(如 In Line 部署)和阻断策略(如 D drop、sdrop、reject),以确保在检测到威胁时能够快速、有效地采取行动,保护网络不受影响。