suricata之规则去重

一、环境和背景

1.1 环境

OS: Ubuntu 22.04.5 LTS
IDE: vscode
suricata: suricata 7.0.5

1.2 背景

在添加规则时,为了给规则分类,将不同类别的规则写入不同的文件。
在规则加载时两条不同的规则却被认为是重复的,因此记录一下去重逻辑。

a.rule

alert ip any any -> any any (msg:"SURICATA Applayer Mismatch protocol both directions"; flow:established; app-layer-event:applayer_mismatch_protocol_both_directions; flowint:applayer.anomaly.count,+,1; classtype:protocol-command-decode; sid:2260000; rev:1;)

b.rule

alert http any any -> any any (msg:"SURICATA HTTP unknown error"; flow:established; app-layer-event:http.unknown_error; flowint:http.anomaly.count,+,1; classtype:protocol-command-decode; sid:2260000; rev:1;)

suricata.yaml

rule-files:- a.rule- b.rule

请添加图片描述

二、 Suricata 规则去重

suricata 规则通过一个hashtable进行去重。

2.1 hashtable 建立

// src/suricata.c
PostConfLoadedDetectSetup// src/detect-engine.c-> DetectEngineCtxInit// src/detect-engine.c-> DetectEngineCtxInitReal// src/detect-parse.c-> DetectParseDupSigHashInit// src/suricata.c-> LoadSignatures
int DetectParseDupSigHashInit(DetectEngineCtx *de_ctx)
{de_ctx->dup_sig_hash_table = HashListTableInit(15000,DetectParseDupSigHashFunc,DetectParseDupSigCompareFunc,DetectParseDupSigFreeFunc);if (de_ctx->dup_sig_hash_table == NULL)return -1;return 0;
}

2.2 检测重复

// src/detect-parse.cSignature *DetectEngineAppendSig(DetectEngineCtx *de_ctx, const ch
{// 1. 解析规则Signature *sig = SigInit(de_ctx, sigstr);if (sig == NULL) {return NULL;}// 2. 检测重复/* checking for the status of duplicate signature */int dup_sig = DetectEngineSignatureIsDuplicate(de_ctx, sig);...
}static inline int DetectEngineSignatureIsDuplicate(DetectEngineCtxSignature *sig)
{/* we won't do any NULL checks on the args *//* return value */int ret = 0;SigDuplWrapper *sw_dup = NULL;SigDuplWrapper *sw = NULL;/* used for making a duplicate_sig_hash_table entry */sw = SCMalloc(sizeof(SigDuplWrapper));if (unlikely(sw == NULL)) {exit(EXIT_FAILURE);}memset(sw, 0, sizeof(SigDuplWrapper));sw->s = sig;/* check if we have a duplicate entry for this signature */sw_dup = HashListTableLookup(de_ctx->dup_sig_hash_table, (void *)sw, 0);/* we don't have a duplicate entry for this sig */if (sw_dup == NULL) {...}...
}

2.3 重复条件

static char DetectParseDupSigCompareFunc(void *data1, uint16_t len1, void *data2,uint16_t len2)
{SigDuplWrapper *sw1 = (SigDuplWrapper *)data1;SigDuplWrapper *sw2 = (SigDuplWrapper *)data2;if (sw1 == NULL || sw2 == NULL ||sw1->s == NULL || sw2->s == NULL)return 0;/* sid and gid match required */if (sw1->s->id == sw2->s->id && sw1->s->gid == sw2->s->gid) return 1;return 0;
}

sidgid作为重复条件,全部相等时则认为重复,不看具体的规则内容。

三、总结

  1. suricata规则通过sidgid进行去重,并不关注规则中的具体内容
  2. 通过sidgid唯一区分规则,整个工程里对规则的处理相较于字符串,整数值处理更简单高效
  3. 如果需要将规则拆分成多个文件时,需要注意sid的值

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

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

相关文章

vue vite 无法热更新问题

一、在vue页面引入组件CustomEmployeesDialog,修改组件CustomEmployeesDialog无法热更新 引入方式: import CustomEmployeesDialog from ../dialog/customEmployeesDialog.vue 目录结构: 最后发现是引入import时,路径大小写与目…

深入理解 Linux 权限控制机制

引言 在 Linux 系统中,权限控制是保障系统安全的核心机制。通过限制用户对文件和资源的访问,它能有效防止未授权操作,保护数据不被篡改或泄露。合理设置权限不仅有助于实现用户隔离和最小权限原则,还能降低系统被滥用或攻击的风险…

Oracle版本、补丁及升级(12)——版本体系

12.1. 版本体系 Oracle作为最流行的一款关系数据库软件产品,其拥有自己一套成熟的版本管理体系。具体版本体系以12c为分界线,前后版本体系分别不同。 ​​​​​​​12.1.1. 12c之前版本 12c之前的Oracle,版本共有5位阿拉伯数字组成,其中的每位数字,都有各自的含义,具…

Maven 中的 pom.xml 文件

目录标题 1、根标签 <project> 的直接子标签顺序​2、常见子标签内部顺序​2.1、<build> 标签内部顺序2.2、<dependencies> 标签内部顺序 3、modelVersion 为什么是 4.0.0 &#xff1f;4、<parent> 标签&#xff1f;​​4.1、为什么需要 <parent>…

方案精读:华为与中软-智慧园区解决方案技术主打胶片【附全文阅读】

该文档是华为与中软国际的智慧园区轻量化解决方案推介&#xff0c;主要面向园区管理者、运营者及相关企业决策人。其核心围绕园区痛点&#xff0c;阐述智慧园区的发展趋势。 方案涵盖综合安防、便捷通行、设备管理等多领域应用场景&#xff0c;通过智能视频监控、人脸识别、远程…

# KVstorageBaseRaft-cpp 项目 RPC 模块源码学习

KVstorageBaseRaft-cpp 项目 RPC 模块源码学习 。 一、项目简介 KVstorageBaseRaft-cpp 是一个基于 Raft 一致性算法实现的分布式 KV 存储系统&#xff0c;采用 C 开发。项目的核心目标是帮助开发者理解 Raft 原理和分布式 KV 存储的基本实现。RPC 模块是分布式系统通信的关…

TeledyneLeCroy在OFC2025 EA展台上展示了其400G/800G的全包围的测试解决方案,满足了UEC联盟和UALINK联盟的技术需求

Teledyne LeCroy在OFC 2025上的EA展台 在2025年3月26日至28日于美国圣地亚哥举办的OFC&#xff08;Optical Fiber Communication Conference and Exhibition&#xff09;展会上&#xff0c;全球领先的测试测量解决方案提供商Teledyne LeCroy隆重展示了其最新研发的800G网络测试…

新一代电动门“攻克”行业痛点,远峰科技打造“智能出入”新标杆

在2025上海国际车展期间&#xff0c;远峰科技举办了一场面向车企合作伙伴和媒体的智能汽车解决方案实车展示会。 在这其中&#xff0c;远峰科技的新一代电动门首次亮相&#xff0c;突破性的解决了行业普遍存在的“运行抖动不平顺”、“窄车位车门开度过小”、“障碍物识别不准…

WEB UI自动化测试之Pytest框架学习

文章目录 前言Pytest简介Pytest安装Pytest的常用插件Pytest的命名约束Pytest的运行方式Pytest运行方式与unittest对比主函数运行命令行运行执行结果代码说明 pytest.ini配置文件方式运行&#xff08;推荐&#xff09;使用markers标记测试用例 pytest中添加Fixture&#xff08;测…

机器学习简单概述

Chatgpt回答&#xff1a; 机器学习&#xff1a;机器学习是人工智能的一个分支&#xff0c;侧重于通过数据训练模型&#xff0c;使计算机能够根据数据进行预测、分类、回归等任务。它通过算法从历史数据中学习规律&#xff0c;然后在新数据上进行推断。机器学习包括多种算法&…

openjdk底层汇编指令调用(一)——汇编指令及指令编码基础

汇编指令 计算机在执行过程时只识别代表0或者1的电信号。因此为了让计算机能够执行则须向计算机输入一系列01构成的指令。 例如在x64平台下&#xff0c;0x53&#xff0c;二进制为01010011&#xff0c;表示将rbx寄存器中的值压栈。 但是&#xff0c;对于程序员而言&#xff0c;…

Python Day 22 学习

学习讲义Day14安排的内容&#xff1a;SHAP图的绘制 SHAP模型的基本概念 参考学习的帖子&#xff1a;SHAP 可视化解释机器学习模型简介_shap图-CSDN博客 以下为学习该篇帖子的理解记录&#xff1a; Q. 什么是SHAP模型&#xff1f;它与机器学习模型的区别在哪儿&#xff1f; …

48.辐射发射RE和传导发射CE测试方法分析

辐射发射RE和传导发射CE测试方法分析 1. 所有测试项目总结2. 辐射发射RE测试方法3. 传到发射CE测试方法 1. 所有测试项目总结 所有EMC测试项目都是基于模拟现实的。 模拟现实中可能发生的各种真实场景&#xff0c;然后统计总结出各种场景下的真实应力&#xff0c;并通过制造测…

在 Vue 3 中实现刮刮乐抽奖

&#x1f389; 在 Vue 3 中实现刮刮乐抽奖 当项目中需要做一些活动互动页时&#xff0c;需要实现刮刮乐&#xff0c;请看如下效果&#xff1a; 这里感谢github用户Choicc分享的组件&#xff0c;具体可点击传送门查看 1. 引入组件 将/src/components下ScratchCard.vue复制到自…

c语言第一个小游戏:贪吃蛇小游戏01

hello啊大家好 今天我们用一个小游戏来增强我们的c语言&#xff01; 那就是贪吃蛇 为什么要做一个贪吃蛇小游戏呢&#xff1f; 因为这个小游戏所涉及到的知识有c语言的指针、数组、链表、函数等等可以让我们通过这个游戏来巩固c语言&#xff0c;进一步认识c语言。 一.我们先…

实战项目1(02)

目录 任务场景一 【sw1和sw2的配置如下】 任务场景二 【sw3的配置】 【sw4-6的配置】 任务场景一 某公司有生产、销售、研发、人事、财务等多个部门&#xff0c;这些部门分别连接在两台交换机&#xff08;SW1和SW2&#xff09;上&#xff0c;现要求给每个部门划分相应的V…

Kubernetes生产实战(十四):Secret高级使用模式与安全实践指南

一、Secret核心类型解析 类型使用场景自动管理机制典型字段Opaque (默认)自定义敏感数据需手动创建data字段存储键值对kubernetes.io/dockerconfigjson私有镜像仓库认证kubelet自动更新.dockerconfigjsonkubernetes.io/tlsTLS证书管理Cert-Manager可自动化tls.crt/tls.keykube…

Linux: 信号【阻塞和捕捉信号】

Linux&#xff1a; 信号【阻塞和捕捉信号】 &#xff08;一&#xff09;阻塞信号1.信号其他相关的概念2.在内核中表示3.sigset_t4.信号集操作函数5.sigprocmask&#xff08;设置阻塞&#xff09;6.sigpending&#xff08;得到未决状态&#xff09; &#xff08;二&#xff09;捕…

MySQL 数据库集群部署、性能优化及高可用架构设计

MySQL 数据库集群部署、性能优化及高可用架构设计 集群部署方案 1. 主从复制架构 传统主从复制&#xff1a;配置一个主库(Master)和多个从库(Slave)GTID复制&#xff1a;基于全局事务标识符的复制&#xff0c;简化故障转移半同步复制&#xff1a;确保至少一个从库接收到数据…

Java 多态:原理与实例深度剖析

一、多态概述 在 Java 面向对象编程体系中&#xff0c;多态是构建灵活、可扩展程序的核心机制之一&#xff0c;与封装、继承并称为面向对象的三大特性。其本质是同一操作作用于不同对象&#xff0c;产生不同的执行结果&#xff0c;这使得程序在运行时能根据实际对象类型动态调…