二次开发suricata支持规则加解密(Centos7)
一、需求
-
支持AES对称加密算法的对应解密
-
支持规则base64解码
-
内置key,iv,暂不做配置文件配置支持
-
使用Zero填充算法
-
支持redis事件外发
-
不改变原有其他功能
-
二、开发思路
- github下载源码包
- /src目录下查找根据suricata.yaml配置加载规则路径,规则文件的处理入口
- 进一步定位到具体规则文件的读取、逐行处理函数,位置
- 编写aes解密函数,实现解密功能,提供对外调用函数
- 在定位的逐行处理位置插入解密调用,完成解密功能的插入
- 准备linux打包编译环境,根据官方指导完成编译打包
- 提取二进制文件,依赖的.so文件,在其他正常部署的服务器替换重启
三、具体实现
-
下载源码包
地址:https://github.com/OISF/suricata
-
明确规则文件加载模块:
/src/detect-engine-loader.c
-
明确规则文件读取函数DetectLoadSigFile:
static int DetectLoadSigFile(DetectEngineCtx *de_ctx, char *sig_file, int *goodsigs, int *badsigs, int *skippedsigs){ ...... }
-
明确规则文件打开,逐行处理位置
...... FILE *fp = fopen(sig_file, "r"); if (fp == NULL) { SCLogError("opening rule file %s:" " %s.",sig_file, strerror(errno)); return -1; } while(fgets(line + offset, (int)sizeof(line) - offset, fp) != NULL) { ...... } fclose(fp); ......
-
编写aes解密模块
-
aes.crypto.h
#ifndef _AES_CRYPTO_H_ #define _AES_CRYPTO_H_ #define AES_BLOCK_SIZE 16 int aes_cbc_decrypt(unsigned char *in, unsigned char *out, int out_ln, unsigned char *key, unsigned char *iv); unsigned char *Base64Decode(unsigned char *data,
-