1. Snort 简介
Snort 是一个强大的开源入侵检测系统(IDS)和入侵防御系统(IPS),在网络安全领域被广泛使用。本文将介绍如何使用命令行正确运行 Snort,以及排查常见问题的方法。Snort 是由 Cisco 维护的基于规则的网络检测工具,它能够:
- 实时检测网络攻击
- 记录网络活动
- 与自定义规则配合使用实现深度检测
Snort 可以工作在三种模式下:
- 嗅探模式(Sniffer):只监听数据包,不分析。
- 包记录模式(Packet Logger):将数据包保存到日志。
- 入侵检测模式(IDS):根据规则分析数据包并产生警报。
2. 常用命令解释
每条规则都应该包含操作类型、协议、源 IP 和目标 IP、源端口和目标端口以及一个选项。请记住,Snort 默认处于被动模式。因此,大多数情况下,您会将 Snort 用作入侵检测系统 (IDS)。您需要启动"内联模式"才能启用入侵检测系统(IPS)模式。但在开始使用内联模式之前,您应该熟悉 Snort 的功能和规则。
Snort 规则结构易于理解,但生成起来却比较困难。为了创建高效的规则,您应该熟悉规则选项及其相关细节。建议您针对不同的用例练习 Snort 规则和选项细节。
在本单元中,我们将介绍基本的规则结构,并帮助您逐步掌握 Snort 规则。您可以通过练习不同的用例并深入研究规则选项的细节,不断提升使用不同规则选项的规则创建技能。我们将重点介绍两种操作:IDS模式下的"警报 alert"和IPS模式下的"拒绝 reject"。
如果没有标头,规则将无法处理。规则选项是"可选"部分。 然而,如果不使用规则选项,几乎不可能检测到复杂的攻击。
操作
规则有多种操作。在为实际系统创建规则之前,请确保您了解这些功能并进行测试。以下列出了最常见的操作。
- alert:生成警报并记录数据包。
- log:记录数据包。
- drop:阻止并记录数据包。
- reject:阻止数据包,记录它并终止数据包会话。
协议参数标识了规则过滤的协议类型。
协议过滤器
请注意,Snort2 规则中仅支持四种协议过滤器(IP、TCP、UDP和 ICMP)。但是,您可以使用端口号和选项检测应用程序流量。例如,如果要检测FTP流量,则不能在协议字段中使用FTP关键字,而是通过调查端口 21 上的TCP流量来过滤FTP流量。
IP和端口号
IP Filtering | alert icmp 192.168.1.56 any <> any any (msg: "ICMP Packet From "; sid: 100001; rev:1;) |
---|---|
Filter an IP range | alert icmp 192.168.1.0/24 any <> any any (msg: "ICMP Packet Found"; sid: 100001; rev:1;) |
Filter multiple IP ranges | alert icmp [192.168.1.0/24, 10.1.1.0/24] any <> any any (msg: "ICMP Packet Found"; sid: 100001; rev:1;) |
Exclude IP addresses/ranges | alert icmp !192.168.1.0/24 any <> any any (msg: "ICMP Packet Found"; sid: 100001; rev:1;) |
Port Filtering | alert tcp any any <> any 21 (msg: "FTP Port 21 Command Activity Detected"; sid: 100001; rev:1;) |
Exclude a specific port | alert tcp any any <> any !21 (msg: "Traffic Activity Without FTP Port 21 Command Channel"; sid: 100001; rev:1;) |
Filter a port range (Type 1) | alert tcp any any <> any 1:1024 (msg: "TCP 1-1024 System Port Activity"; sid: 100001; rev:1;) |
方向
方向运算符指示 Snort 需要过滤的流量。规则左侧显示源,右侧显示目标。
->源到目标流。
<>双向流
请注意, Snort 中没有"<-"运算符。
Snort 中有三个主要规则选项;
常规规则选项 - Snort 的基本规则选项。
有效载荷规则选项 - 有助于调查有效载荷数据的规则选项。这些选项有助于检测特定的有效载荷模式。
非有效负载规则选项 - 专注于非有效负载数据的规则选项。这些选项有助于创建特定模式并识别网络问题。
常规规则选项
消息字段是规则的基本提示和快速标识符。一旦规则被触发,消息字段就会出现在控制台或日志中。通常,消息部分是一行概括事件的内容。
Snort 规则ID (SID) 具有预定义的范围,并且每条规则必须具有正确格式的 SID。SID 有三种不同的范围,如下所示。
<100: 保留规则
100-999,999: 规则随构建而来。
>=1,000,000: 由用户创建的规则。
简而言之,我们创建的规则的 SID 应大于 100.000.000。另一个要点是:SID 不应重叠,并且每个 ID 必须是唯一的。
每条规则都可以包含附加信息或参考信息,以解释规则或威胁模式的用途。这些信息可以是通用漏洞和暴露 ( CVE ) ID 或外部信息。规则的参考信息始终有助于分析师进行警报和事件调查。
Snort 规则可以根据性能和效率问题进行修改和更新。Rev 选项可帮助分析人员掌握每条规则的修订信息,从而轻松了解规则的改进情况。每条规则都有其唯一的修订编号,并且规则历史记录没有自动备份功能。分析人员应自行保存规则历史记录。Rev 选项仅指示规则的修订次数。
bash
alert icmp any any <> any any (msg: "ICMP Packet Found"; sid: 100001; reference:cve,CVE-XXXX; rev:1;)
有效载荷检测规则选项
有效载荷数据。它通过 ASCII、十六进制或两者匹配特定的有效载荷数据。可以在单个规则中多次使用此选项。但是,创建的特定模式匹配功能越多,调查数据包所需的时间就越长。
以下规则将为每个包含关键字"GET"的HTTP数据包创建警报。此规则选项区分大小写!
ASCII mode - alert tcp any any <> any 80 (msg: "GET Request Found"; content:"GET"; sid: 100001; rev:1;)
HEX mode - alert tcp any any <> any 80 (msg: "GET Request Found"; content:"|47 45 54|"; sid: 100001; rev:1;)
优先搜索内容以加快有效载荷搜索操作。默认情况下,Snort 使用最大的内容并根据规则进行评估。"fast_pattern"选项可帮助您选择与特定值匹配的初始数据包,以供进一步调查。此选项始终不区分大小写,并且每个规则只能使用一次。请注意,使用多个"content"选项时,此选项是必需的。
以下规则有两个内容选项,fast_pattern 选项告诉 snort 使用第一个内容选项(在本例中为"GET")进行初始数据包匹配。
bash
alert tcp any any <> any 80 (msg: "GET Request Found"; content:"GET"; fast_pattern; content:"www"; sid:100001; rev:1;)
非有效载荷检测规则选项
过滤TCP标志
F - FIN
S - SYN
R - RST
P - PSH
A - ACK
U - URG
bash
alert tcp any any <> any any (msg: "FLAG TEST"; flags:S; sid: 100001; rev:1;)
3. 结语
Snort 是学习网络安全的绝佳工具,通过掌握命令行运行方式与规则编写,你可以搭建属于自己的入侵检测实验环境。