IPS规则开发中常见问题清单

规则问题

1:研判

请确认规则是否勾选了研判,以及虚拟机在跑规则的时候,是否开启了研判

显示(尝试)(成功)
ips rule_judge config judge_rule_alert switch on	

只显示(尝试)
ips rule_judge config judge_rule_alert switch off

2:http请求与响应

  • http头的content使用http_headerpcre使用H

  • http请求体的content使用http_client_bodypcre使用P

  • http响应体的contentpcre前面使用file_data

警告,由于file_data后面的内容一律视为http响应体的内容,此时不能把响应头的内容写到file_data后面。请按照要求,使用上面的修饰符,有不少设备不告警问题是由于没有正确使用修饰符导致的,但与此同时,承认,偶尔,可能出现使用修饰符会导致设备不告警。

例如:

tid60515不告警的反馈结果是:http头解析异常,按照普通content匹配,去掉http_header和pcre末尾的’\H’

tid67287不告警的反馈结果是:http头解析异常未解析出uri,urilen无法匹配

3:http头与http正文

如下图,“请求/响应”头 与 “请求/响应”主体部分之间是0d 0a 0d 0a

在这里插入图片描述

如果使用http_client_body匹配请求体,或者file_data匹配响应体时:

  • 头与体不能连在一起

  • 主体部分不能以0d 0a开始,然后紧跟主体部分

    ❌ file_data; content:"|0d 0a d0 cf|";

    ❌ file_data; content:"|0d 0a 0d 0a d0 cf|";

    ✅ content:"|0d 0a 0d 0a d0 cf|";

    ✅ file_data; content:"|d0 cf|";

  • 不能在主体中使用distance等关键字来联系头部

    ❌ content:“ms-powerpoint”; http_header; file_data; content:"|d0 cf 11|"; distance:4;

    ✅ content:“ms-powerpoint”; http_header; file_data; content:"|d0 cf 11|";

  • 对规则取逆的时候,请看清楚需要取逆的数据所在的位置,不要乱放位置

4:关键字

flow

flow关键字作用于tcp协议的规则,不能使用在udp类型的数据包上

tcp.option

【根据反馈结果显示:如果一个cve对应的数据包存在不同的tcp.option,就只能逐个匹配了】

描述

这个选项直接匹配tcp选项的内容,格式类似content的形式,在引号双竖线中以十六进制形式依次将每个字节罗列。比较的是tcp选项。最大有效范围是30个字节。超过只比较前30个字节。

格式

tcp.option: "|hex|";

示例

例如要检测一个特定tcp选项的规则选项可以写为:

tcp.option:"| E3 56 3B 2D 49 58 AC 7E 37 45|";

其中第一个引号前可以有空格,每一个十六进制数之间只用一个空格,"|"与第一个十六进制数之间可以有空格。即上面的规则选项可以写为:

tcp.option: "| E3 56 3B 2D 49 58 AC 7E 37 45|";

约束

  1. 十六进制数个数必须为偶数,且每两个十六进制之间必须有空格
  2. hex与管道(”|”)之间不能有空格
  3. 至多有30个十六进制对

注:tcp.option指定的"|hex|"会从报文中tcp选项的第一个字节开始对比,如下图所示报文:

tcp.option:"|03 03 02 01 05 00 01 00|"; ➡ 可匹配成功

tcp.option:"|03 03 02 01 05 00|"; ➡ 可匹配成功

tcp.option:"|02 01 05 00 01 00|"; ➡ 匹配失败

在这里插入图片描述

dsize

引擎暂不支持dsize=0的数据包

http.host_len

引擎暂不支持http.host_len

http_header

http 的请求是按行处理,若开始第一行中包含换行符会导致uri解析失败,会按照普通content处理

【解决方式】http头域对应匹配,直接指定content,不需加http_header修饰

offset/dsize

涉及重组报文,请尽量不使用offset和dsize之类会失效的选项

释义

众所周知,TCP是面向字节流的。“面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。TCP对数据包的分割、重组就是NG设备里的重组报文的含义。比如http就是典型的会流重组的报文,简单来说就是http协议慎用offset/dsize关键字

5:协议

加密协议

  • tls处理为service https, service ssl
  • dtls协议的写service dtls

ftp协议

对于ftp协议,写为metadata:service ftp, service ftp-data, service http

注意添加ftp-data,http,这两个是产品部要求的

telnet协议

对于telnet协议的数据包,匹配数据包中的16进制数据时,需要加上rawbytes关键字。

以tid 61813 为例,不加rawbytes关键字设备无法告警

6:明文匹配

有些规则,虽然规则明文与数据包内容不完全匹配,但是snort可以告警,需要手动检查规则。

7:深度

关键字最大长度
msg2048
content2048
uricontent2048
HTTP的max_header_buffer_len2048

对于超长http请求头,注意匹配深度不要超过2048,否则无法匹配成功!

pcre:"/GET \x2f HTTP\x2f1\x2e1[\s\S]{12000,}/iD"

8:数据包

回环地址

数据包地址为环回地址时,设备无法检测。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值