suricata提供了组件式的开发方式,在SigTableSetup注册所有规则关键字。
通过接口可以看出,sigmatch_table变量为所有规则关键字的实例(可以作为gdb的调试参数)
文件
规则关键字的编译文件命名格式detect-xx.c detect-xx.h
生成文件
下载对应suricata主干版本的工具,本教程使用4.1.x版本,github地址: https://github.com/OISF/suricata/tree/master-4.1.x
解压完成后的路径结构
scripts目录里就有生成关键字和协议的脚本,我们执行工具+关键字(自己diy)名称
/bin/bash scripts/setup-simple-detect.sh test |
结果是这样的代表成功,让我们编译即可。
我们把生成的文件拿到编译环境中(这里生成后,也可以在script版本中使用,因为他是裁剪的所以我还是用主干)
这是生成的文件
复制进我们自己编译环境的src目录中。
编译
如何生效模板(成功编译)
- Makefile编译:src/Makefile 向am_suricata_OBJECTS成员中加入生成的文件
- 新增规则ID:每个规则拥有自己的index存在于sigmatch_table这个线性表里面。坐标声明在detect-engine-register.h文件中。加入DETECT_TEST宏
- 注册接口:在detect-engine-register.c中加入生成文件关键字的注册接口
在这里还要添加对应头文件
编译