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

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 IPS规则开发中常见问题清单,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

规则问题

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:深度

关键字 最大长度
msg 2048
content 2048
uricontent 2048
HTTP的max_header_buffer_len 2048

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

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

8:数据包

回环地址

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134239.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!