网络入侵检测系统之Suricata(十四)--匹配流程

其实规则的匹配流程和加载流程是强相关的,你如何组织规则那么就会采用该种数据结构去匹配,例如你用radix tree组织海量ip规则,那么匹配的时候也是采用bit test确定前缀节点,然后逐一左右子树查询,Suricata也是如此,让我给大家简单介绍一下匹配流程。

1. run the IPonly engine

运行纯ip规则引擎匹配,由于是纯ip规则,所以只要目的ip和源ip可以匹配,我们就可以认为这条纯ip规则是可以命中的,我们把命中的规则sid加入到alert array中作为输出

2.get our rule group

这一步是获取该报文属于哪个规则分组,在规则加载中我们分别将规则的上下行端口进行分组,例如:

alert ip 1.1.1.1 80 -> 1.1.1.2 80:90(sid:1;),

alert ip 1.1.1.1 80 -> 1.1.1.2 80:85(sid:2;)

这两条规则就会以上行80:85新建一个分组包含sid为1和2,86:90再新建一个分组包含sid为1。那么这个函数的目的就会根据上下行,用当前报文的目的端口号或源端口号去匹配得到规则分组。

3.run the prefilters for packets

这一步是进行prefilter规则过滤,我们在第2步的时候获取分组sgh,这个分组包含了很多prefilter引擎列表,例如content prefilter, 它是同属该组的规则的content会以hyperscan的多模数据库的形式组织,这样运行content prefilter时可快速得到匹配到候选者。

SCHSSearch(&mpm_ctx, &mpm_thread_ctx, &pmq, (uint8_t *)buf, strlen(buf));

4. inspect the rules against the packet

经过第3步一系列的prefilter过滤,会得到很少量的候选者sid,这个时候我们需要逐一遍历这些规则看看是否可以真正命中。首先会匹配五元组及协议,然后会对规则option一一匹配,例如pcre,threshold等等,如果这些option全部命中,我们才认为这个报文命中了该条规则,并会产生相关告警和日志。

/* if prefilter didn't already run, we need to consider transformations */
const DetectEngineTransforms *transforms = NULL;
if (!engine->mpm) {transforms = engine->v2.transforms;
}
//->
const InspectionBuffer *buffer = engine->v2.GetData(det_ctx, transforms,f, flags, txv, list_id);
/* Inspect all the uricontents fetched on each
* transaction at the app layer */
int r = DetectEngineContentInspection(de_ctx, det_ctx, s, engine->smd,NULL, f,(uint8_t *)data, data_len, offset, ci_flags,DETECT_ENGINE_CONTENT_INSPECTION_MODE_STATE);
//->
(void)sigmatch_table[smd->type].Match(det_ctx, p, s, smd->ctx);

5. append a signature match to a packet

记录规则匹配结果

整体流程图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/729003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Spring Boot的图书个性化推荐系统 ,计算机毕业设计(带源码+论文)

源码获取地址: 码呢-一个专注于技术分享的博客平台一个专注于技术分享的博客平台,大家以共同学习,乐于分享,拥抱开源的价值观进行学习交流http://www.xmbiao.cn/resource-details/1765769136268455938

Doris实战——特步集团零售数据仓库项目实践

目录 一、背景 二、总体架构 三、ETL实践 3.1 批量数据的导入 3.2 实时数据接入 3.3 数据加工 3.4 BI 查询 四、实时需求响应 五、其他经验 5.1 Doris BE内存溢出 5.2 SQL任务超时 5.3 删除语句不支持表达式 5.4 Drop 表闪回 六、未来展望 原文大佬的这篇Doris数…

离散数学——(3)联结词及对应的真值指派,最小全功能联结词集,对偶式,范式,范式存在定理,小项

目录 1.联结词及对应的真值指派 2.最小全功能联结词集 3.对偶式 4.范式 1.析取范式 5.范式存在定理 6.小项 1.联结词及对应的真值指派 2.最小全功能联结词集 3.对偶式 4.范式 1.析取范式 5.范式存在定理 6.小项

hfish蜜罐搭建与使用

本次是对自己在学习蓝队过程中的一次对安全设备 hfish蜜罐的搭建和使用考核记录,距离之前已 经过去很久了,对之前在考核过程中的操作进行回顾和总结. 蜜罐在这里我进行免费分享 hfish-3.1.4-windows-amd64.zip官方版下载丨最新版下载丨绿色版下载丨APP下载-123云…

Visual Studio如何进行类文件的管理(类文件的分离)

大家好: 衷心希望各位点赞。 您的问题请留在评论区,我会及时回答。 一、问题背景 实际开发中,类的声明放在头文件中,给程序员看类的成员和方法。比如:Dog.h(类的声明文件) 类的成员函数的具体…

继承,切片,隐藏

定义: 子类(派生类)继承了父类(基类)的成员函数和成员变量(类层次的复用) 赋值 子类可以赋值给父类。父类不可以直接复制给子类 (不像不同内置类型的赋值要转化为临时变量&#xf…

U盘上文件夹突然空了?掌握3个方法,轻松找回数据!

“我的u盘插上之后,不知道为什么就空了,里面所有的文件都没有了,有什么方法可以找回u盘里丢失的文件吗?” 在日常使用U盘的过程中,我们有时会遇到一个令人头疼的问题,U盘上的文件夹突然空了。这究竟是怎么回…

Windows系统安装MongoDB并结合内网穿透实现公网访问本地数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

DHCP部署与安全

在当今快速发展的网络世界中,动态主机配置协议(DHCP)扮演着至关重要的角色。这项技术不仅简化了网络管理,还提高了网络资源的利用率。本文旨在深入探讨DHCP的工作原理、优势以及如何有效部署和保护DHCP服务器。 一、DHCP作用 自…

Flutter的线程模型

在Flutter框架中,Embedder层负责把Flutter嵌入到各个平台上去,其所做的主要工作包括线程设置、渲染Surface设置,以及插件等。因此, Embedder负责线程的创建和管理,并且提供Task Runner给Engine使用。Engine则是负责提供…

Mysql深入学习 基础篇 Ss.05多表查询语法及案例

世界总是在推着我走,我自己一个人也能站稳 —— 24.3.7 一、多表关系 1.概述 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个…

Croissant:Google新推出的一个为机器学习准备的数据集元数据格式

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

【易飞】易飞ERP自动审核程序功能

易飞ERP自动审核程序功能 一、 使用场景二、 操作说明三、 安装方式 一、 使用场景 OA系统集成 与第三方OA系统软件集成,在OA软件审核完成后,直接将ERP中的单据审核。MES系统集成 MES系统生成单据写入到易飞ERP中,并需要自动审核单据&#x…

如何学习、上手点云算法(三):用VsCode、Visual Studio来debug基于PCL、Open3D的代码

写在前面 本文内容 以PCL 1.14.0,Open3D0.14.1为例,对基于PCL、Open3D开发的代码进行源码debug; 如何学习、上手点云算法系列: 如何学习、上手点云算法(一):点云基础 如何学习、上手点云算法(二):点云处理相…

跟无神学AI之Tensorflow笔记搭建网络八股

虽然Pytorch在论文中使用较多,但是像Alphafold在蛋白质结构预测的模型,仍然是用Tensorflow写成,遂近期在学其中的语法。 本系列来自慕课北大软微曹健老师的Tensorflow笔记,摘选其中重要部分。 1.导包 2.定义训练集测试集和数据…

Android随手记

activity的生命周期 创建时 onCreate() - onStart() - onResume() - onPause() - onStop() - onDestroy() 切换时 a切换到b a.onCreate() - a.onStart() - a.onResume - a.onPause - b.onCreate() - b.onStart() - b.onResume() - a.onStop() b切换回a b.onPause() - a.onR…

C#与python交互(flask发送Get/Post请求)

先运行python,再运行C# **ps: 注意修改端口号**python发送Get/Post请求 # -*- coding: utf-8 -*- # Time : 2024/1/25 15:52 # Author : YY # File : post_test.py # Content:提交数据给客户端 from flask import Flask, request, jsonify, redirect…

华为OD机试 - 字符串统计(Java 2024 C卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题&a…

智慧灯杆-智慧城市照明现状分析(2)

作为城市照明的主体,城市道路照明伴随着我国城市建设的高速发展,获得了快速的增长。国家统计局数据显示,从2004年至2014年,我国城市道路照明灯数量由1053.15万盏增加到3000万盏以上,年均复合增长率超过11%,城市道路照明行业保持持续快速发展的趋势。 近几年,随着中国路灯…

如何排查合并问题——《OceanBase诊断系列》之七

1. 前言 OceanBase数据库的存储引擎以 LSM-Tree 架构为基础,区分静态基线数据(存储在只读SSTable)和动态增量数据(存储在可读写MemTable)。其中 SSTable 是只读的,一旦生成就不再被修改,存储于…