Snort规则编写是一项复杂的工作,要编写有效Snort规则,不仅掌握Snort的语法,更多需要大家对网络协议和Attack 技术都有一定的了解。在编写规则之前,我们需建议学习相关的网络安全知识(熟悉常见网络Attack原理方法和防御手段)然后需要了解Snort规则语法。
新手刚接触Snort规则编写时会遇到各种“奇葩”的问题,表面上看规则语法和网络特征描述都没啥问题,但就是无法发出报警,在网上到处查找资料,即便是把官网下载的规则,放到系统里也无法达到预期,有几个典型问题总结如下:
Q1:为什么交换机上无法到数据抓包?
A:交换机在默认情况下,网络流量无法抵达Snort,自然无法报警。关键在于我们怎么让数据包发送到Snort系统?这就是如何在交换机上设置端口镜像,不解决这个问题,后面的案例都无从谈起。规则写的再好,没有流量过来也不行,在Snort课程中会详解这个问题。
Q2:简单的TCP协议检测报警
A :用户按语法写条规则,发现有时候报警有时候不报警,很是郁闷。
alert tcp any any <> any any (msg:"abc";content:"abc";sid:10002;)
1.
在我的Snort课程里学习过Snort会检查包的内容,只有包中内容完全符合content条件才会报警,但新手往往搞不清楚怎么回事,不知道怎么修改规则。成功或失败都不知道怎么回事。
又如例如:
在Wireshark抓包工具中,进行抓包分析,发现数据包含有大量的playload为“00ffeeaadd”的可疑数据包,希望能通过Snort能发现这种异常并报警,随后编写规则如下:
alert tcp any any -> any any (msg:"Test Packet!"; content:"|00ffeeaadd|"; sid:10003; rev:1;)
1.
启动Snort后,始终无法报警,规则语法没有问题,查找的特征也没有问题。遇到这类问题怎么解决?
Q3:FTP登录的报警
下面又遇到FTP抓包问题,我们先看实验环境:
操作系统: CentOS 7
2.应用软件VsFTP(保持默认配置)
以下是一个用于检测FTP登录成功的规则:
alert tcp any any -> any 21 (msg:"FTP Login Detected"; content:"230"; sid:10001; rev:1;)
1.
上述规则的解释如下:
alert:定义规则命中时的动作,这里是发出一个警报。
tcp:指定规则匹配的协议为TCP。
any any:指定源IP和源端口可以是任意值。
->:指定数据流的方向,这里是从任意源IP和源端口到目标IP的FTP端口(21)。
21:FTP端口号。
msg:"FTP Login Detected":规则命中时的警报消息。
content:"230":代码“230”表示登录成功
nocase:指定匹配时不区分大小写。
sid:10001:规则的唯一标识符。
rev:1:规则的版本号。
上面这条规则看上去没有什么问题,可是放到实验环境,却无法发出报警。新手该如何调整这条规则?该从什么地方入手?
类似情况还有很多,看似规则写的没有语法错误,IDS就是不报警,怎么快速解决经常遇到的这类问题?经过多年的Snort培训经验总结,本人整理出了一套行之有效的规则编写方法将其制作成为适合新人观看的视频教程。在 《手动构建Snort系统》 https://edu.51cto.com/course/23698.html 这门课中包含2.5小时的规则编写实战,能让新手迅速成长为Snort规则开发工程师。
作者每周都会对规则开发内容进行升级,并解答学员在实验过程中遇到的疑难问题。
课程学习方法
在首次学习Snort规则时,要听一节课立刻实践,课程听再多,都不如上机做一遍,我们也需要犯错并从中吸取教训的空间。有效的学习方法是听一遍课程,有了大致了解后,马上去实践。在过程中,就会得到反馈,慢慢积累经验,如果遇到问题,自己尝试解决,不行的话,我们带着问题,再去听课,很快就能找到解决方法,达到事半功倍的效果。