声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章
感谢泷羽sec 团队的教学
视频地址:蓝队基础之网络七层杀伤链_哔哩哔哩_bilibili
目录
一、什么是Snort
Snort的主要功能包括:
Snort的工作原理:
Snort的应用场景:
二、如何配置Snort
(一)安装依赖包
(二)安装和配置Snort
(三)示例规则
(四)测试Snort配置
(五)启动和监控Snort
三、如何使用Snort
(一)文件管理概述
(二)各字段详细描述
1.alert
含义:
示例用法:
2.icmp
含义:
示例用法:
3.any
含义
示例用法:
4.< >(方向运算符)
含义:
示例用法:
5.$HOME_NET
含义:
示例用法:
6.any(指定要检测的目标端口)
含义:
示例用法:
7.msg
含义:
示例用法:
8.sid
含义:
示例用法:
9.rev
含义:
示例用法:
10.classtype
含义:
示例用法:
四、本地账号与 Snort 条件子句
(一)概述
(二)具体 Snort 条件子句示例及解释
1.检查失败的 telnet 登录尝试
规则语句:
详细解释:
协议及源目标设定:
告警信息及分类相关:
(三)外部规则集
(四)In Line 部署及阻断操作
In-Line部署
阻断操作
应用场景
配置示例
一、什么是Snort
Snort是一个开源的网络入侵检测系统(NIDS)和入侵防御系统(IDS/IPS),由Martin Roesch于1998年创建,并在2000年发布了第一个版本。Snort被广泛用于实时检测和预防各种网络攻击,包括但不限于缓冲区溢出攻击、端口扫描、木马、蠕虫等恶意活动。
Snort的主要功能包括:
-
网络监控:
- 实时监控网络流量,检测潜在的恶意活动。
-
入侵检测:
- 通过预定义的规则集(称为签名)来识别和响应各种攻击。
-
数据包记录:
- 记录网络流量数据包,用于后续分析和取证。
-
警报和日志:
- 生成警报和日志,帮助安全分析师了解网络事件。
-
流量分析:
- 提供流量分析功能,帮助识别异常流量模式。
-
规则自定义:
- 用户可以自定义规则,以适应特定的网络环境和安全需求。
-
性能优化:
- 支持多种优化技术,如预处理模块和检测引擎优化,以提高性能。
Snort的工作原理:
-
规则引擎:
- Snort使用规则引擎来分析网络流量。规则定义了Snort应如何检测特定的网络行为。
- 规则可以指定要检测的协议、端口、数据包内容等。
-
检测方法:
- Snort可以执行多种检测方法,包括模式匹配、异常检测、应用层检测等。
-
响应机制:
- Snort可以配置为仅检测并报告可疑活动(IDS模式),或者主动阻止恶意流量(IPS模式)。
Snort的应用场景:
- 企业网络:
- 保护企业网络免受外部和内部威胁。
- 网络安全研究:
- 作为研究工具,帮助研究人员分析和理解网络攻击。
- 教育和培训:
- 用于网络安全教育和培训,帮助学生和专业人员学习网络攻击和防御技术。
Snort因其灵活性、强大的检测能力和开源特性而受到广泛欢迎,是网络安全领域的重要工具之一。随着网络威胁的不断演变,Snort也在不断更新和改进,以应对新的挑战。
二、如何配置Snort
在安装和配置网络安全工具如Snort时,确保系统具备必要的依赖包和库是非常重要的。以下是安装Snort及其依赖项的步骤,以及如何配置Snort以发出警报的示例:
(一)安装依赖包
-
DAQ数据采集库:
-
DAQ(Data Acquisition Toolkit)是一个用于网络数据包捕获的库,Snort使用它来捕获网络流量。
-
在基于Debian的系统上,可以使用以下命令安装DAQ:
sudo apt-get update sudo apt-get install libdaq1 libdaq-dev
-
-
内存分配器:
- Snort需要一个内存分配器来管理内存使用。通常,DAQ库已经包含了所需的内存分配器。
(二)安装和配置Snort
-
安装Snort:
-
可以从Snort的官方网站下载最新版本的Snort,或者使用包管理器安装。
-
在基于Debian的系统上,可以使用以下命令安装Snort:
sudo apt-get install snort
-
-
配置Snort:
- Snort的配置文件通常位于
/etc/snort/snort.conf
。 - 需要根据网络环境和安全需求自定义配置文件。
- Snort的配置文件通常位于
-
自定义规则:
- Snort规则定义了Snort应如何检测网络流量中的异常或恶意行为。
- 创建或修改规则文件,例如
/etc/snort/rules/local.rules
,并添加自定义规则。
(三)示例规则
以下是一个示例Snort规则,用于对发往特定网络($HOME_NET)的任何ICMP流量发出警报:
alert icmp any any -> $HOME_NET any (msg:"Test Ping Event"; sid:1000001; rev:1; classtype:icmp-event;)
- 字段解释:
alert
:指示这是一个警报规则。icmp
:指定协议为ICMP。any any -> $HOME_NET any
:源可以是任何IP和端口,目标是定义在配置文件中的$HOME_NET网络的任何端口。msg
:定义警报消息。sid
:规则的唯一标识符。rev
:规则的修订号。classtype
:分类警报类型。
(四)测试Snort配置
在应用新规则或配置更改后,应测试Snort配置以确保其正确无误:
snort -T -c /etc/snort/snort.conf
-T
:测试模式,检查配置文件和规则。-c
:指定配置文件路径。
(五)启动和监控Snort
-
启动Snort:
-
可以使用系统服务管理器启动Snort,例如使用
systemctl
:sudo systemctl start snort sudo systemctl enable snort
-
-
监控日志:
- Snort通常将警报和日志记录到指定的日志文件中,可以通过查看这些日志来监控网络活动。
通过这些步骤,可以成功安装、配置和测试Snort,以保护网络免受各种威胁。确保定期更新Snort规则和配置,以应对新的安全威胁。
三、如何使用Snort
(一)文件管理概述
在涉及网络安全监控工具(如 Snort)的文件管理中,有一系列重要的字段用于定义规则,这些规则能够帮助准确地检测和处理网络中的各类活动,并以特定方式进行告警等操作。
(二)各字段详细描述
1.alert
含义:
该字段明确告诉 Snort 此规则是一个告警规则。当网络流量符合此规则所设定的条件时,Snort 会发出相应的告警信息,以便管理员及时知晓可能存在的异常活动。
示例用法:
在规则配置文件中,如 alert icmp any any -> $HOME_NET any (msg"Test Ping Event: sid:1000001rev:1; classtype:icmp-event) ,“alert” 开头就表明这是一个用于产生告警的规则。
2.icmp
含义:
用于指定要标记活动的流量类型。除了 ICMP(Internet Control Message Protocol,互联网控制报文协议)之外,还可以是 TCP(Transmission Control Protocol,传输控制协议)、UDP(User Datagram Protocol,用户数据报协议)等其他常见的网络协议。通过指定具体的协议类型,能够精准地针对特定协议的流量进行监控和规则应用。
示例用法:
在规则 alert icmp any any -> $HOME_NET any (msg"Test Ping Event: sid:1000001rev:1; classtype:icmp-event) 中,“icmp” 明确了此规则是针对 ICMP 协议的流量进行相关操作。
3.any
含义
当用于指定源 IP 地址或 CIDC(无类别域间路由,Classless Inter-Domain Routing)时,“any” 表示任何地址。这意味着规则将对来自任何源 IP 地址的流量进行检测,不局限于特定的 IP 范围,从而实现对广泛来源的流量监控。
示例用法:
在规则 alert icmp any any -> $HOME_NET any (msg"Test Ping Event: sid:1000001rev:1; classtype:icmp-event) 中,第一个any
指定源IP地址可以是任何地址,第二个any
指定源端口可以是任何端口。这种宽泛的指定方式有助于全面捕捉可能存在问题的流量情况,不过在某些特定需求下,也可以根据实际情况将其替换为具体的端口号以实现更精准的监控。
4.< >(方向运算符)
含义:
方向运算符 “<>” 用于指定流量方向。它标识 IP 和端口同时作为来源和目的,明确了流量是从哪里来以及要到哪里去的路径关系。通过这种方式,可以准确地界定规则所适用的流量流向情况,以便更精准地检测符合特定流向要求的流量活动。
示例用法:
在规则 alert icmp any any ->$HOME_NET any (msg"Test Ping Event: sid:1000001rev:1; classtype:icmp-event) 中,“->” 就是方向运算符,表明流量是从由前面 “any any” 所指定的源(任何源 IP 地址和任何源端口)流向由 “HOME_NET any” 所指定的目标(配置文件中指定的本地网络的任何目标 IP 地址和任何目标端口)。
5.$HOME_NET
含义:
在 Snort 的配置文件中指定的本地网络。它可以通过具体的 IP 地址范围来表示,通常采用 CIDR 格式(如 192.168.0.0/16)。此外,也可以使用多个 CIDR 来更精准地界定本地网络的范围,以便根据实际需求对本地网络内的流量进行全面且精准的监控。
示例用法:
在规则alert icmp any any ->$
HOME_NET any (msg"Test Ping Event: sid:1000001rev:1; classtype:icmp-event) 中,“$HOME_NET” 就是指代在配置文件中已经定义好的本地网络范围,具体值需根据配置文件的设置来确定。
6.any(指定要检测的目标端口)
含义:
用于指定要检测的目标端口,同样表示任何端口。这使得规则能够对流向本地网络(由 “$HOME_NET” 指定)的任何目标端口的流量进行检测,与前面指定源端口的 “any” 配合,实现对流量在端口层面的全面监控。
示例用法:
在规则 alert icmp any any -> $HOME_NET any (msg"Test Ping Event: sid:1000001rev:1; classtype:icmp-event) 中,最后一个 “any” 就是指定要检测的目标端口为任何端口。
7.msg
含义:
报警名字段。用于给当网络流量符合规则时所发出的告警赋予一个特定的名称,以便管理员在查看告警信息时能够快速识别告警的大致内容和相关活动类型。这个名称应该具有一定的描述性,能够直观地反映出告警所对应的网络活动情况。
示例用法:
在规则 alert icmp any any -> $HOME_NET any (msg"Test Ping Event: sid:1000001rev:1; classtype:icmp-event) 中,“msg"Test Ping Event: sid:1000001rev:1; classtype:icmp-event)” 里的 “Test Ping Event” 就是报警名字段所设定的具体名称,用于标识此次告警与测试 Ping 事件相关。
8.sid
含义:
签名 ID 字段。它用于给每个规则赋予一个唯一的标识编号,取值范围通常有一定要求,一般来说,自定义报警必须大于等于 100000 且唯一。这个编号在 Snort 的规则管理和识别中起着重要作用,便于对不同规则进行区分、查询和管理。
示例用法:
在规则 alert icmp any any -> $HOME_NET any (msg"Test Ping Event: sid:1000001rev:1; classtype:icmp-event) 中,“sid:1000001” 就是指定的签名 ID 字段的值,表明此规则的签名 ID 为 1000001。
9.rev
含义:
规则更新时,作为版本号跟踪。当对规则进行修改、完善或更新等操作时,可以通过更新 “rev” 字段的值来记录规则的版本变化情况,以便在后续的规则管理和维护中能够清楚地了解到每条规则的演进历程,对于排查问题、分析规则效果等方面都具有重要意义。
示例用法:
在规则 alert icmp any any -> $HOME_NET any (msg"Test Ping Event: sid:1000001rev:1; classtype:icmp-event) 中,“rev:1” 就是指定的规则更新时的版本号,表明此规则当前的版本为 1。
10.classtype
含义:
Snort 有一个默认类型列表,可以帮助分类告警,便于搜索特定类型的活动。通过将规则的告警归类到不同的类型中,能够更高效地对大量告警信息进行筛选、分析和处理,使得管理员可以根据特定类型的活动快速定位和处理相关告警,提高网络安全监控和管理的效率。
示例用法:
在规则 alert icmp any any -> $HOME_NET any (msg"Test Ping Event: sid:1000001rev:1; classtype:icmp-event) 中,“classtype:icmp-event” 就是指定将此次告警归类到 “icmp-event” 这种类型中,以便后续根据该类型进行相关操作。
通过对这些字段的准确理解和合理运用,能够在 Snort 等网络安全监控工具的文件管理中,更加精准地定义规则,实现对网络活动的有效监控和管理。
四、本地账号与 Snort 条件子句
(一)概述
在网络安全监控领域,特别是涉及到本地账号相关活动的监控时,Snort 作为一款常用的网络入侵检测系统(NIDS),可通过设置特定的条件子句来检测各种异常情况。当满足或不满足这些设定的条件时,相应的触发子句就会被执行,从而实现对潜在安全威胁的告警或其他处理操作。
(二)具体 Snort 条件子句示例及解释
1.检查失败的 telnet 登录尝试
规则语句:
alert tcp $HOME_NET 23 -> any any (msg:"Failed login attempt"; content:"Login incorrect"; sid:1000002; rev:1; classtype:attempted-user;)
详细解释:
协议及源目标设定:
alert tcp:表明这是一个针对 TCP 协议的告警规则。Snort 会对符合后续条件的 TCP 协议流量进行监测并在满足条件时发出告警。
$HOME_NET 23:这里指定了源网络,$$HOME_NET 通常是在 Snort 配置文件中定义好的本地网络范围(如以 CIDR 格式表示的某个 IP 地址段),23 是 Telnet 服务所使用的端口号。这表示规则关注的是从本地网络的 Telnet 端口发出的流量。
-> any any:方向运算符,表明流量是从前面指定的源(本地网络的 Telnet 端口)流向任何目标 IP 地址和任何目标端口。
告警信息及分类相关:
msg:"Failed login attempt":msg 字段用于设置告警名字,在此处将告警命名为 “Failed login attempt”,以便管理员在查看告警信息时能快速了解到该告警与 Telnet 登录失败尝试相关。
content:"Login incorrect":content 字段用于指定在监测的流量中要查找的特定内容。在这里,当 Snort 在 TCP 流量中检测到包含 “Login incorrect” 这个字符串时,就会认为可能发生了 Telnet 登录失败的情况。
sid:1000002:sid 是签名 ID 字段,给这条规则赋予了一个唯一的标识编号 1000002。按照规定,自定义报警的sid 值通常要大于等于 100000 且唯一,方便在众多规则中对该规则进行区分和管理。
rev:1:rev 字段在规则更新时作为版本号跟踪。这里设置为 1,表示该规则当前的版本是 1,当后续对该规则进行修改等操作时,可以更新这个版本号来记录规则的演进历程。
classtype:attempted-user;:classttype 字段利用 Snort 的默认类型列表对告警进行分类,将此次告警归类到 “attempted-user” 类型中,便于后续搜索特定类型的活动,比如管理员可以通过查找 “attempted-user” 类型的告警来集中查看所有与用户登录尝试相关的情况。
(三)外部规则集
相关网址:
Enterprise Cybersecurity Solutions, Services & Training | Proofpoint US
这是一个可能提供与网络安全相关规则或其他资源的网址,也许可以从这里获取到一些补充的规则内容、安全建议等信息,用于进一步完善对网络活动的监控和安全防护。
https://rules.emergingthreats.netopen/
同样是一个与网络安全规则相关的网址,可能提供各种新兴威胁相关的规则集,通过参考这些外部规则集,可以拓宽 Snort 的检测范围,使其能够应对更多种类的潜在安全威胁。
(四)In Line 部署及阻断操作
In-Line部署和阻断操作是Snort等网络安全工具的关键功能,它们提供了更主动的防御措施,帮助保护网络免受恶意流量的侵害。
In-Line部署
In-Line部署模式允许Snort直接插入到网络流量路径中,这意味着Snort可以直接处理经过网络接口的流量,而不仅仅是被动地监控流量。这种部署方式使得Snort能够:
- 实时检测和响应:对经过网络接口的流量进行实时检测,并在检测到异常或恶意流量时立即采取措施。
- 主动防御:通过主动阻断恶意流量,防止攻击者进一步渗透网络。
阻断操作
Snort提供了多种阻断操作,用于处理检测到的恶意流量:
-
D drop:
- 当Snort检测到符合特定阻断规则的流量时,会直接丢弃该流量,阻止其在网络中继续传播。
- 这种方法适用于需要立即阻止恶意流量的场景。
-
sdrop:
- 类似于D drop,sdrop也是一种阻断方式,但可能在实现细节上有所不同,具体取决于配置和环境。
- 通常用于特定场景下的流量阻断。
-
reject:
- 这种方式不仅会阻断特定流量的传输,还会向发送该流量的源端发送一个拒绝响应。
- 这种方法可以向攻击者明确表示其流量已被拒绝,有助于维护网络秩序并提示用户进行相应的修正。
应用场景
- 入侵防御:在检测到潜在的攻击或恶意流量时,立即采取措施阻止其进入网络。
- 合规性要求:满足某些行业或法规要求,如PCI DSS,需要对网络流量进行实时监控和响应。
- 网络维护:在维护期间,通过阻断操作防止不必要的流量干扰维护工作。
配置示例
以下是一个简单的Snort配置示例,展示了如何配置In-Line部署和阻断操作:
var HOME_NET 192.168.1.0/24
var EXTERNAL_NET anyalert tcp $EXTERNAL_NET any -> $HOME_NET 23 (msg:"Failed login attempt"; content:"Login incorrect"; sid:1000002; rev:1; classtype:attempted-user;)
drop tcp $EXTERNAL_NET any -> $HOME_NET 23 (msg:"Drop failed login attempts"; content:"Login incorrect"; sid:1000003; rev:1; classtype:attempted-user;)
在这个示例中:
- 第一条规则是一个告警规则,用于检测来自外部网络到本地网络23端口(Telnet)的失败登录尝试。
- 第二条规则是一个阻断规则,用于在检测到失败的登录尝试时直接丢弃这些流量。
通过这些配置,Snort可以更有效地保护网络免受恶意流量的侵害。在实际部署中,需要根据具体的网络环境和安全需求进行详细的配置和测试。