suricata7 rule加载(一)加载 action

suricata7.0.5

一、前提条件

1.1 关键字注册

main
|
--> SuricataMain
	|
	--> PostConfLoadedSetup
		|
		--> SigTableSetup

sigmatch_table是一个全局数组,每个元素就是一个关键字节点,是对关键字如何处理等相关回调函数。非常重要的一个结构,后续的规则加载处理都需要此结构。

/* Table with all SigMatch registrations */
SigTableElmt sigmatch_table[DETECT_TBLSIZE];

比如http协议的method注册

sigmatch_table[DETECT_HTTP_METHOD].name = "http.method";
sigmatch_table[DETECT_HTTP_METHOD].desc = "sticky buffer to match specifically and only on the HTTP method buffer";
sigmatch_table[DETECT_HTTP_METHOD].url = "/rules/http-keywords.html#http-method";
sigmatch_table[DETECT_HTTP_METHOD].Setup = DetectHttpMethodSetupSticky;
sigmatch_table[DETECT_HTTP_METHOD].flags |= SIGMATCH_NOOPT|SIGMATCH_INFO_STICKY_BUFFER;

最终的结果如下图
请添加图片描述
这里主要关注Setup回调,后续规则加载处理时会调用

1.2 DetectBufferType注册

DetectBufferType结构也是非常重要的,在加载规则处理过程需要使用。
通过HashListTable结构将所有注册的DetectBufferType进行
这里主要关注name和id, 其他字段暂时不关注

请添加图片描述

二、规则加载

后续将以alert http any any -> [192.168.1.27,1.192.137.27] 80 (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;) 为例,逐一分析加载流程。

DetectEngineAppendSig
|
--> SigInit
	|
	--> SigInitHelper

2.1 创建Signature

每条规则对应一个Signature对象

...
Signature *sig = SigAlloc();
...

请添加图片描述

2.2 解析action

SigParseAction(...)

请添加图片描述
后续继续header + options

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值