码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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加载到内存中算是完成。
    接下来就是最关键的如何将其构建成匹配树。

  • 相关阅读:
    C语言学习--结构体与联合体
    动态调整系统主题色(4): CssVar 与 Variant 方案的探索
    (七)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
    结构体-时间的计算
    c++图像腐蚀操作
    物联网基础建设-园区智能微电网设计方案
    伺服第二编码器数值链接到倍福PLC的NC虚拟轴做显示
    斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 10 Mining Social-Network Graphs
    IDEFICS 简介: 最先进视觉语言模型的开源复现
    C++-哈希Hash
  • 原文地址:https://blog.csdn.net/happytree001/article/details/140234872
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号