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

suricata7 rule加载(三)加载options

suricata7.0.5

加载options

(msg:“HTTP Request Example”; flow:established,to_server; http.method; content:“POST”; http.uri; content:“query.php”; bsize:>9; http.protocol; content:“HTTP/1.1”; bsize:8; http.host; content:“360”; bsize:>3; classtype:bad-unknown; sid:25; rev:1;)

SigParseOptions(...)

大致逻辑:

  • 通过;拆分,获取单个的关键字以及值
  • 通过:拆分,获取关键字名称以及值
  • 调用SigTableGet函数,通过关键字名称获取对应的提前注册好的关键字节点
  • 调用节点中设置的Setup回调函数进行处理
    请添加图片描述
    以下按照rule中的顺序依次进行解析

msg

"msg" -> sigmatch_table[DETECT_MSG] -> DetectMsgSetup
请添加图片描述

flow

"flow" -> sigmatch_table[DETECT_FLOW] -> DetectFlowSetup
请添加图片描述

http.method

"http.method" -> sigmatch_table[DETECT_HTTP_METHOD] -> DetectHttpMethodSetupSticky

请添加图片描述

content

"content" -> sigmatch_table[DETECT_CONTENT] -> DetectContentSetup
这里的content是关联前面http.method,通过sig->init_data->list进行关联,SigMatch节点是挂在id=g_http_method_buffer_id的位置,如果后面还有bsize等关键字关联http.method的则会链式的继续挂在后面。如下图
请添加图片描述

http.uri

"http.uri" -> sigmatch_table[DETECT_HTTP_URI] -> DetectHttpUriSetupSticky
请添加图片描述

content

请添加图片描述

bsize

"bsize" -> sigmatch_table[DETECT_BSIZE] -> DetectBsizeSetup
请添加图片描述

http.protocol

"http.protocol" -> sigmatch_table[DETECT_AL_HTTP_PROTOCOL] -> DetectHttpProtocolSetup
请添加图片描述

content

请添加图片描述

bsize

请添加图片描述

http.host

"http.host" -> sigmatch_table[DETECT_HTTP_HOST] -> DetectHttpHostSetup

请添加图片描述

content

请添加图片描述

bsize

请添加图片描述

classtype

"classtype" -> sigmatch_table[DETECT_CLASSTYPE] -> DetectClasstypeSetup

请添加图片描述

sid

实际上代码里,sid是第一个解析的,因为每个rule都必须有sid,如果没有则可以快速的跳过。
"sid" -> sigmatch_table[DETECT_SID] -> DetectSidSetup
请添加图片描述

rev

"rev" -> sigmatch_table[DETECT_REV] -> DetectRevSetup
请添加图片描述

总结

sig->init_data->buffers中的每个节点对应一个关键字,其中的id对应g_buffer_type_hash中的关键字编号
请添加图片描述

到这里,第一步将rule加载到内存中算是完成。
接下来就是最关键的如何将其构建成匹配树。

http://www.lryc.cn/news/395879.html

相关文章:

  • 【电路笔记】-C类放大器
  • c++语法之函数重载
  • EtherCAT主站IGH-- 11 -- IGH之fmmu_config.h/c文件解析
  • 如何使用IDEA快速清理无效代码(荣耀典藏版)
  • ELK优化之Filebeat部署
  • 蝙蝠优化算法(Bat Algorithm,BA)及其Python和MATLAB实现
  • vscode运行java中文乱码,引发的mac配置问题
  • MySQL之备份与恢复(五)
  • 离线运行Llama3:本地部署终极指南_liama2 本地部署
  • 【YOLO8系列】(二)YOLOv8环境配置,手把手嘴对嘴保姆教学
  • MFC常见问题解决
  • 学生管理系统 | python
  • opencv读取视频文件夹内视频的名字_时长_帧率_分辨率写入excel-cnblog
  • js对象的方法速览---数组的静态方法,实例方法和属性合集,各包含一个示例
  • Redis基础教程(十四):Redis连接
  • GraphRAG——一个基于图的检索增强生成的开源项目【送源码】
  • 什么是 VueQuill(前端的富文本编辑器)?
  • 从海上长城到数字防线:视频技术在海域边防现代化中的创新应用
  • 《信息技术与信息化 》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • 【最新版】手把手Claude 3.5 Sonnet 详细步骤注册方法!
  • 代理模式和Java中的动态代理【开发实践】
  • 【Linux】进程间通信——匿名管道
  • React Native与React Native Web:跨平台开发的新选择
  • 【从零开始实现stm32无刷电机FOC】【理论】【3/6 位置、速度、电流控制】
  • 使用MySQLInstaller配置MySQL
  • 命令执行(RCE)面对各种过滤,骚姿势绕过总结
  • 复杂的数仓项目,涵盖了从数据采集、处理、存储到可视化的整个流程
  • 三相感应电机的建模仿真(3)基于ABC相坐标系Level2 S-Fun以及定子串不对称电抗起动过程仿真分析
  • 了解Adam和RMSprop优化算法
  • 对于配置LLM,集显和独显的具体区别和影响