Suricata新增POP3协议解析(未完待续)
作者:互联网
1. 生成新协议的解析模板
例:创建pop3协议的解析模板
scripts
文件夹下 setup-app-layer_原版.py 文件适用于python3,setup-app-layer.py 适用于python2
cd suricata-6.0.3
python scripts/setup-app-layer.py Pop3
执行脚本后新增文件:
src/app-layer-pop3.c | pop3协议的应用层检测器和解析器 |
---|---|
src/app-layer-pop3.h | |
src/output-json-arp.c | pop3协议的JSON应用层事务记录器 |
src/output-json-arp.h |
修改的文件:
src/Makefile.am | 添加解析器和输出模块源码文件 |
---|---|
suricata.yaml.in | 添加协议解析配置,添加输出输出配置 |
src/suricata-common.h | 添加输出模块号枚举 |
src/output.c | 添加输出模块注册函数 |
src/util-profiling.c | 新增输出模块号与其等价字符串映射 |
src/app-layer-protos.h | 添加协议号枚举 |
src/app-layer-protos.c | 新增协议名与协议号映射 |
src/app-layer-detect-proto.c | 新增协议名与协议号映射 |
src/app-layer-parser.c | 添加解析器注册函数 |
问题记录
解决步骤:
-
用
autoscan
产生一个configure.in
的原型,执行autoscan
后会产生一个configure.scan
的文件,可以用它作为configure.in
的蓝本 -
执行
aclocal
和autoconf
,分别会产生aclocal.m4
和configure
两个文件 -
然后执行
automake --add-missing
-
最后执行
./configure
等继续其他步骤即可
2. 修改协议解析器的实现
协议识别
(1)字符串检索
添加 Pop3RegisterPatternsForProtocolDetection 函数为Pop3协议注册关键字"USER","PASS"和"APOP",在注册解析器时(RegisterPop3Parsers)调用 ,关键字注册函数 AppLayerProtoDetectPMRegisterPatternCI
(2)端口检测
修改 AppLayerProtoDetectPPRegister 端口注册函数,默认端口改为110
/* The default port to probe for echo traffic if not provided in the
* configuration file. */
#define POP3_DEFAULT_PORT "110"
/* The minimum size for a message. For some protocols this might
* be the size of a header. */
#define POP3_MIN_FRAME_LEN 3
还可在配置文件中添加多个端口,如下(需要注意的是,每一项必须严格用空格对齐,端口之前用空格间隔)
协议解析
3. 修改输出模块的实现
标签:未完待续,layer,src,协议,Suricata,POP3,添加,pop3,app 来源: https://www.cnblogs.com/cetacean/p/16178742.html