当前位置: 首页 > ds >正文

网络流量分析 | Snort

Snort 是一个基于规则的开源网络入侵检测和防御系统(NIDS/NIPS),它由 Martin Roesch、开源贡献者以及 Cisco Talos 团队共同开发和维护。

然而在认识 Snort 并使用它之前,我们需要了解一下什么是 IDS/IPS。

IDS/IPS

IDS

IDS,全称为 Intrusion Detection System,入侵检测系统,它是被动检测的。它会检测出恶意行为、异常事件和违反策略的行为,并对这些可疑行为做出警报。

IDS 可被分为以下两种:

  • NIDS(Network Intrusion Detection System),网络入侵检测系统。它会检测网络中所有子网的流量,如果有流量对应上了检测规则,那就会发起警报。
  • HIDS(Host-based Intrusion Detection System),基于主机的入侵检测系统。它只会检测特定终端设备的流量,如果有流量对应上了检测规则,那就会发起警报。

IPS

IPS,全称为 Intrusion Prevention System,入侵防御系统。与IDS不同,IPS是主动防御的。它们会预防恶意行为、异常事件和违反策略的行为,将可疑事件的连接终止。

IPS 可以被分为四种:

  • NIPS(Network Intrusion Prevention System),网络入侵防御系统。它会检测网络中所有子网的流量,如果有流量对应上了检测规则,那就会断开这个连接。
  • NBA (Network Behaviour Analysis,也叫 Behaviour-based Intrusion Prevention System),基于行为的入侵防御系统。它会检测网络中所有子网的流量,如果发生有异常,那就会断开这个连接。

乍一看 NIPS 和 NBA 非常类似,但是后者需要训练期(也被称为“baseline”),这使得 NBA 可以学习正常流量并区分开恶意流量和行为,NBA 能够更有效地应对未知的新威胁。所以为了避免NBA误报,训练期将至关重要。

  • WIPS(Wireless Intrusion Prevention System),无线入侵防御系统。顾名思义,它用于监控和保护无线网络,如果有流量对应上了检测规则,那就会断开这个连接。
  • HIPS(Host-based Intrusion Prevention System),基于主机的入侵防御系统。它只会保护特定终端设备的流量,如果有流量对应上了检测规则,那就会断开这个连接。

检测/防御技术

在 IDS/IPS 中使用到的检测/防御技术,无外乎这三种:

技术简介
基于签名这种技术依赖于识别已知恶意行为特定模式的规则。这种模式有助于检测已知威胁。
基于行为该技术可通过签名识别出具有新模式的新威胁。该模式将已知/正常行为与未知/异常行为进行比较。这种模式有助于检测以前未知的或新的威胁。
基于策略该技术将检测到的活动与系统配置和安全策略进行比较。该模型有助于检测违反策略的行为。

小结

IDS 主要用于检测威胁,但具体如何处理威胁需要用户自己操作。

IPS 可以检测威胁并且阻挡威胁,较少依靠用户自己处理。

Snort

转回 Snort,前文提到Snort是开源的NIDS/NIPS工具,实际上它还拥有其他功能:嗅探网络流量、记录日志、PCAP包分析等。要想使用这些功能也非常简易,只需要执行snort [对应参数]即可。

下面将逐一对其使用到的参数进行简单介绍。

嗅探网络流量

与嗅探网络流量相关的参数如下表所示:

参数介绍
-v在控制台展示TCP/IP协议的输出
-d展示应用层数据的输出
-e展示链路层的头信息(TCP/IP/UDP/ICMP)
-X以十六进制展示数据包的所有内容
-i指定要嗅探的网络接口

记录日志

此处需要先讲一讲Linux文件的所有权和权限。Linux的文件所有权的基本规则是:谁创建了文件,谁就是相应文件的所有者。而 Snort 需要 root 权限才能嗅探流量,因此Snort生成的日志也是在root权限下生成的。因此,我们需要拥有root权限才可以调查日志文件。

与记录日志相关的参数如下表所示:

参数介绍
-l日志模式,指定警报和日志输出的路径。默认输出路径是/var/log/snort
-K ASCII以 ASCII 格式记录日志,使人类可读
-r阅读模式,阅读由 Snort 生成的日志
-n指定要处理/读取的数据包数量,Snort 将在读取指定数量的数据包后停止

IDS/IPS

Snort 可以根据配置的规则来管理流量。

与 IDS/IPS 相关的参数如下表所示:

参数介绍
-c定义配置文件/规则文件
-T测试配置文件/规则文件
-N禁用日志模式
-D置于后台运行
-A指定“警报”的模式
- full:完全警报模式,提供警报的所有可能信息。这也是默认模式;一旦使用 -A 且未指定任何模式,Snort 就会使用这种模式
- fast:快速模式显示警报信息、时间戳、源IP、目标IP以及端口号
- console:在控制台展示“fast”模式的警报输出
- cmg:CMG 模式,在控制台显示完整的包信息,包括包的头部信息和十六进制、文本格式的包体内容
- none:停用警报
-Q --daq afpacket启用 IPS 模式

PCAP包分析

还可以利用 Snort 对 pcap 文件进行处理,一旦有了 pcap 文件并用 Snort 对其进行处理,就会收到默认的流量统计,并根据规则集发出警报。

pcap 包分析的相关参数如下表所示:

参数介绍
-r / --pcap-single=读取单个 pcap 文件
–pcap-list=" "读取多个 pcap 文件(以空格分隔)
–pcap-show处理过程中在控制台显示 pcap 文件名

Snort 规则结构

在这里插入图片描述
Snort 的规则分为两个部分:规则头和规则选项

规则头由七个部分组成:

  • Action:对符合规则的流量作何处理
  • Protocol:定义要捕获的流量的协议
  • Source IP:定义要捕获的流量的源IP地址
  • Source Port:定义要捕获的流量的源端口
  • Direction:定义要捕获的流量的流向
  • Destination IP:定义要捕获的流量的目标IP地址
  • Destination Port:定义要捕获的流量的目标端口

而规则选项则有三大类:

  • 常规规则选项:Snort 的基本规则选项
  • 有效载荷(Payload)检测规则选项:用于检测带有特定 Payload 的流量
  • 非有效载荷检测规则选项:有助于创建特定模式以及识别网络问题

接下来简单讲讲这三类规则选项中包含的内容。

常规规则选项

常规规则选项是 Snort 的基本规则选项,其包含的内容如下表所示:

选项介绍
msg触发规则后,这个选项中的字段会显示在控制台或日志中。通常,这部分是对事件进行总结的单行文字
sidSnort 规则的 id。sid有三种不同范围:
- < 100:保留规则
- 100 - 999,999:内置规则
- >= 1,000,000:用户创建的规则
我们创建的规则的sid都应该大于1,000,000,且每个规则的sid是不同的,都是唯一的
reference每条规则都可以有附加信息或参考,以解释规则或威胁模式的目的。这可以是 CVE ID 或外部信息。在警报和事件调查过程中,为规则提供参考始终会对分析人员有所帮助
revSnort 规则可针对性能和效率问题进行修改和更新。该选项可帮助分析人员获得每条规则的修订信息。因此,很容易理解规则的改进。每条规则都有唯一的修订号,规则历史没有自动备份功能。分析员应自行保存规则历史。该选项是唯一指示规则修订次数的指标
Payload检测规则选项

Payload 检测规则选项是用来检测带有特定 Payload 的流量的,其包含的内容除了常规规则选项,还包含了以下内容:

选项介绍
contentPayload 数据。它通过 ASCII、HEX 或两者皆可的方式匹配特定的Payload数据。可以在一条规则中多次使用该选项。不过,创建的特定模式匹配功能越多,调查数据包所需的时间就越长
nocase禁用大小写敏感性,用于加强内容搜索
fast_pattern指定优先搜索内容,加快Payload的搜索操作。默认情况下,Snort 使用最大的内容并根据规则进行评估。该选项不区分大小写,每条规则可使用一次。请注意,在使用多个 "content "选项时,必须使用该选项。
Non-Payload 检测规则选项

有一些规则选项侧重于non-payload数据。这些选项有助于创建特定模式和识别网络问题,其包含的内容除了常规规则选项,还包含了以下内容:

选项介绍
id过滤 IP 的 id 字段
flags过滤了 TCP flags
- F:FIN
- S:SYN
- R:RST
- P:PSH
- A:ACK
- U:URG
dsize过滤包的大小,有三种:
- dsize:[min]<>[max]
- dsize:>[some_number]
- dsize:<[some_number]
sameip过滤重复的源 IP 地址和目标 IP 地址

小结

通过上面的介绍,可以将 Snort 的使用总结为以下两张图。这两张图由 TryHackMe 总结得到:

在这里插入图片描述
在这里插入图片描述

http://www.xdnf.cn/news/4967.html

相关文章:

  • LeetCode 216.组合总和 III:回溯算法实现与剪枝优化
  • SpringBoot快速入门WebSocket(​​JSR-356附Demo源码)
  • 为何Google广告频繁拒登?常见原因与解决方法
  • 图表制作-折线图堆叠
  • 允许别的电脑连接我电脑wsl下5001、5002端口
  • 枚举 · 例13-【模板】双指针
  • 《Scala基础》
  • DeepSeek 赋能金融:从智能分析到高效服务的全链路革新
  • WHAT - react-query(TanStack Query) vs swr 请求
  • VUE——自定义指令
  • LabVIEW 2019 与 NI VISA 20.0 安装及报错处理
  • IEEE PRMVAI Workshop 17 | 智能医疗数据分析与应用
  • Baklib云中台赋能企业内容智管
  • Kubernetes外部访问服务全攻略:生产级方案详解
  • 12.hbase 源码构建
  • PFC(Power Factor Correction)功率因数校正电路
  • 金蝶api对接沙箱环境python代码调试
  • SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理标准)-(一)
  • 【Bluedroid】蓝牙 SDP(服务发现协议)模块代码解析与流程梳理
  • linux动态占用cpu脚本、根据阈值增加占用或取消占用cpu的脚本、自动检测占用脚本状态、3脚本联合套用。
  • java使用MinIO,虚拟机时间异常
  • 低秩适应(LoRA)与量化LoRA(QLoRA)技术解析
  • ‌CDGP|数据治理:探索企业数据有序与安全的解决之道
  • Web 自动化之 HTML JavaScript 详解
  • OpenCV-Python (官方)中文教程(部分一)_Day22
  • 云服务如何简化物联网设备生命周期(How Cloud Services Simplify IoT Device Lifecycles)?
  • 摄像头模组AF、OIS模组
  • 接口-DAO模式
  • 65.微服务保姆教程 (八) 微服务开发与治理实战
  • 车载网络TOP20核心概念科普