第一部分 Snort 规则选项入门教程
一、先搞懂:Snort 规则选项到底是什么?
咱们先打个比方:
Snort 就像网络世界的“保安”,它的规则头部(协议、IP、端口)就像“通行证初步检查”,先筛一遍哪些流量要重点关注;而规则选项,就是保安手里的“放大镜+警报器”——决定了这个流量到底是不是攻击、要不要报警、报警之后该怎么办。
所有规则选项都写在圆括号() 里,用分号 ; 隔开,示例:
括号里的内容,就是本篇文章的核心学习内容。
更多详细知识请前往Snort官网Snort - 网络入侵检测与防御系统
二、规则选项的四大类:各司其职,分工明确
我们把规则选项分成 4 个大类,每个类作用不同,就像保安团队不同岗位:
三、通用选项:给规则“上户口”,方便管理和溯源
通用选项不影响规则检测,就像给规则办理身份证,记录编号、类型、漏洞信息,方便告警分析。
1. 最常用的通用选项
2. 避坑提醒
• sid 绝对不能重复,不然 Snort 启动会报错;
• msg 别写得太笼统,别只写“攻击”,要写清楚是什么攻击,例如“检测到针对登录接口的SQL注入”,否则告警过多无法区分。
四、载荷选项:Snort的“火眼金睛”,抓出恶意内容
载荷选项是 Snort 检测攻击的核心,专门检查数据包的数据部分,用来识别SQL注入、XSS、恶意软件等攻击。
1. 核心中的核心:content 选项
content 就是字符串匹配,在数据包中查找指定特征,是最常用的载荷匹配选项。
• 用法:content:"要匹配的内容";
• 示例:
content:"/etc/passwd"; // 检测目录遍历攻击
content:"|27 3B|"; // 十六进制匹配:单引号+分号,抵抗编码绕过
2. content 的“黄金搭档”:修饰符
修饰符用于优化匹配规则,解决大小写绕过、编码绕过、精准定位等问题。
3. 针对HTTP流量的专用选项
绝大多数Web攻击基于HTTP协议,Snort内置专用HTTP匹配选项,自动解码URL编码:
• http_uri:仅匹配HTTP请求URL;
• uricontent:"../etc/passwd";:匹配目录遍历特征;
• http_method:匹配请求方式,例如http_method:POST;。
4. 进阶:pcre 正则匹配
针对无固定格式的特征(如多变SQL注入),使用正则表达式匹配:
注意:正则匹配效率低,能使用content就不用pcre,避免占用CPU资源。
五、非载荷选项:检查数据包的“身份信息”,抓异常流量
非载荷选项不检测数据包内容,只检测IP、TCP、ICMP头部信息,多用于检测端口扫描、异常连接、伪造流量。
1. 常用非载荷选项
六、后检测选项:攻击被发现后,该怎么办?
规则触发后执行的动作,用来限流告警、主动防御、溯源记录,防止告警风暴。
1. 常用后检测选项
注意:resp、replace 仅在 NIPS 防御模式生效,NIDS 检测模式无法使用。
七、实战案例:一条能直接看懂的完整规则
整合以上所有选项,编写一条登录接口SQL注入检测规则:
规则逻辑:筛选访问登录接口的POST请求,匹配注入特征,命中后告警;限制单IP一分钟最多告警3次,避免告警风暴。
八、小白必看:常见问题与避坑指南
1. 规则不触发,无告警?
• 检查选项和协议是否匹配(flags只能用于TCP,不能用于ICMP);
• 检查content、十六进制格式是否书写错误;
• 使用命令 snort -c /etc/snort/snort.conf -T 检测语法错误。
2. 误报太多,正常流量也报警?
• 不要使用过于简单的特征(单独匹配select极易误报);
• 使用offset、depth缩小匹配范围;
• 搭配threshold限制告警次数。
3. Snort运行卡顿、CPU占用高?
• 多content规则必须添加fast_pattern;
• 尽量少用复杂pcre正则;
• 删除冗余无效选项。
写在最后
Snort 规则选项看起来繁多,只要记住逻辑:通用选项打标签→非载荷筛流量→载荷抓特征→后检测做处理。新手写规则不用追求完美,从简单content匹配开始,逐步叠加选项,多测试调试就能写出精准高效的检测规则。