• 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加载到内存中算是完成。
    接下来就是最关键的如何将其构建成匹配树。

  • 相关阅读:
    高版本Mac系统如何打开低版本的Xcode
    互联网摸鱼日报(2023-10-19)
    主要控制系统之间的逻辑关系
    LC 239.滑动窗口最大值
    SVG鼠标漫游
    【机械仿真】基于matlab GUI直齿圆柱齿轮应力计算【含Matlab源码 2077期】
    Windows主机信息收集
    数商云:加强供应商管理,助推航空运输企业与供应商高效协同
    说透常见设计模式之代理模式
    PHP禁止单个用户多设备同时登陆,限制单个用户在多端重复登录
  • 原文地址:https://blog.csdn.net/happytree001/article/details/140234872