自定义特征库
名词定义
- 特征码
特征码用于定义App的协议特征,一个App可能有多个特征码,特征码之间用逗号(英文)隔开。 - 特征库
所有App特征码的集合,还包括版本、App分类定义,特征库中还包括App图标。
App特征码定义
在特征库中,App按照以下格式描述,包括id、name和特征码,其中特征码可以包含多个。 以下为单个特征码的基本格式:
$id $name:[$proto;$sport;$dport;$host;$request;$dict]
以下为多个特征码格式:
$id $name:[$proto;$sport;$dport;$host;$request;$dict,$proto;$sport;$dport;$host;$request;$dict]
字段说明
字段 | 说明 | 示例 |
---|---|---|
$id | 唯一的APP编号,不能重复 | 1001 |
$name | APP的名称 | 抖音 |
$proto | 传输层协议,tcp或udp,必须设置 | tcp |
$sport | 源端口,1-65535,不设置表示匹配所有,一般不用设置源端口 | 12345 |
$dport | 目的端口,1-65535,不设置表示匹配所有 | 443 |
$host | http或者https请求的域名,比如www.baidu.com,可不设置 | www.baidu.com |
$request | http请求的地址,GET 或 POST后面的内容 | /api/xxxx |
$dict | 七层内容字典,可不设置, 格式xx:aa|yy:bb,其中xx,yy是位置,表示第几个字节,aa,bb表示十六进制内容。 示例:00:a0|02:08|03:0a,表示第0个位置为0xa0,第2个位置为0x08,第3个位置为0x0a。注意第一位从0开始,如果位置为负数,表示从最后一个开始,一般不要用负数表示。 | 00:a0|02:08|03:0a |
匹配机制
在所有字段中,匹配关系是与,必须各个字段都匹配成功,但是$host、$request、 $dict三个字段只用设置一个,即使设置了多个也只会匹配一个,当然也可以三个字段都不设置,那只要前面的$proto、端口匹配成功即可,可以达到端口过滤的作用。
示例:
1001 test:[tcp;;8000;;;]
匹配所有tcp 8000端口1001 test:[tcp;;443;baidu.com;;]
匹配https协议的baidu.com1001 test:[tcp;;80;;/video;]
匹配http 80端口并且GET或者POST请求为/video开头的报文1001 test:[tcp;;10000;;;00:02|01:0b|03:ff]
匹配tcp 10000端口,并且应用层payload第一个字节为0x02、第二个字节0x0b、第4个字节0xff(注意第一个从0开始)
如何自定义
解压
修改后缀.bin为.tar.gz,然后通过工具解压,这样会得到明文的.cfg特征库文件,该文件为文本文件,可以直接编辑。 建议在linux系统中操作,通过Windows的工具可能出现不兼容。修改特征库文件
可以在同一个分类中复制某个APP特征,追加到该分类的最后一行,这样用于保证appid中的分类字段是统一的。 appid的低3位表示分类中的编号,高位表示分类id,比如8001,其中8表示分类,而001为编号
复制后首先需要修改appid,保证组内唯一,最好是组内编号最大值加1,比如当前最大值为8012,那新的appid就设置成8013,这样方便统一管理。
比如现在要增加一个常用网站google,那新增的特征码定义如下:
8008 谷歌:[tcp;;;www.google.com;;]
如果只想匹配443端口,可以定义为
8008 谷歌:[tcp;;443;www.google.com;;]
增加图标
在图标目录增加对应App的图标文件,名称为${appid}.png打包
修改完成后将整个特征库目录中的文件打包成tar.gz压缩包,注意不包括文件夹本身,打包子目录和文件即可,保证解压后特征库文件在根目录。测试
在应用过滤特征库页面中选择新的文件升级,查看是否成功,如果没有成功,请检查目录结构是否则正确。