Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

如何编写snort的检测规则

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

log udp any any -> 192.168.1.0/24 1:1024

记录来自任何端口,其目的端口号在1到1024之间的UDP数据包

log tcp any any -> 192.168.1.0/24 :600

记录来自任何端口,其目的端口号小于或者等于6000的TCP数据包

log tcp any :1024 -> 192.168.1.0/24 500:

记录源端口号小于等于1024,目的端口号大于等于500的TCP数据包

表5.端口范围示例

你还可以使用逻辑非操作符!对端口进行非逻辑操作(port negation)。逻辑非操作符可以用于其它的规则类型(除了any类型,道理很简单)。例如,你如果要日志除了X-window系统端口之外的所有端口,可以使用下面的规则:

log tcp any any -> 192.168.1.0/24 !6000:60 10

表6.对端口进行逻辑非操作

2.5 方向操作符(direction operator)

方向操作符->表示数据包的流向。它左边是数据包的源地址和源端口,右边是目的地址和端口。此外,还有一个双向操作符<>,它使snort对这条规则中,两个IP地址/端口之间双向的数据传输进行记录/分析,例如telnet或者POP3对话。下面的规则表示对一个telnet对话的双向数据传输进行记录:

log !192.168.1.0/24 any <> 192.168.1.0/24 23

表7.使用双向操作符的snort规则

activate/dynamic规则

activate/dynamic规则对扩展了snort功能。使用activate/dynamic规则对,你能够使用一条规则激活另一条规则。当一条特定的规则启动,如果你想要snort接着对符合条件的数据包进行记录时,使用activate/dynamic规则对非常方便。除了一个必需的选项activates外,激活规则(activate rule)非常类似于报警规则(alert rule)。动态规则(dynamic rule)和日志规则(log rule)也很相似,不过它需要一个选项:activated_by。动态规则还需要另一个选项:count。当一个激活规则启动,它就打开由activate/activated_by选项之后的数字指示的动态规则,记录count个数据包。

下面是一条activate/dynamic规则对的规则:

activate tcp !$HOME_NET any -> $HOME_NET 143 (flags:PA;content:"|E8C0FFFFFF|in|;activates:1;

表8.activate/dynamic规则对

这个规则使snort在检测到IMAP缓冲区溢出时发出报警,并且记录后续的50个从$HOME_NET之外,发往$HOME_NET的143号端口的数据包。如果缓冲区溢出成功,那么接下来50个发送到这个网络同一个服务端口(这个例子中是143号端口)的数据包中,会有很重要的数据,这些数据对以后的分析很有用处。

3.规则选项

规则选项构成了snort入侵检测引擎的核心,它们非常容易使用,同时又很强大和容易扩展。在每条snort规则中,选项之间使用分号进行分割。规则选项关键词和其参数之间使用冒号分割。截止到写本文为止(snort 1.7版),snort有23个规则选项关键词:

  1. msg:在报警和日志中打印的消息
  2. logto:把日志记录到一个用户指定的文件,而不是输出到标准的输出文件
  3. ttl:测试IP包头的TTL域的值
  4. tos:测试IP包头的TOS域的值
  5. id:测试IP分组标志符(fragment ID)域是否是一个特定的值
  6. ipoption:查看IP选项(IP option)域
  7. fragbits:测试IP包头的分片位(fragmentation bit)
  8. dsize:测试数据包包数据段的大小
  9. flags:测试TCP标志(flag)是否是某个值
  10. seq:测试TCP包的序列号是否是某个值
  11. ack:测试TCP包的确认(acknowledgement)域是否为某个值
  12. itype:测试ICMP数据包的类型(type)域
  13. icode:测试ICMP数据包的编码(code)域
  14. icmp_id:测试ICMP回送包的标志符(ICMP ECHO ID)是否为某个值
  15. content:在数据包的数据段中搜索模式(pattern)
  16. content-list:在数据包的数据段中搜索模式清单
  17. offset:设置开始搜索的偏移量
  18. depth:设置搜索最大深度
  19. nocase:大小写不敏感匹配内容字符串
  20. session:剥离一个对话的应用层信息
  21. rpc:观察RPC服务对特定应用程序的调用
  22. resp:激活反应措施(断开连接等)
  23. react:激活反应措施(阻塞WEB站点)

3.1 msg

msg规则选项告诉日志引擎在复制包时同时打印的信息,以及让报警引擎输出的警告消息。它只是一个简单的文本字符串,使用作为转义符。

格式:

msg:"";

3.2 logto

logto选项告诉snort把触发某条规则所有的数据包都记录到指定的文件。使用这个选项,对处理来自nmap扫描、HTTP CGI扫描的数据非常方便。注意如果使用二进制日志模式,这个选项会失效。

格式:

logto:"<文件名>";

3.3 ttl

这个选项设置要测试的生命周期(time-to-live)值。只有数据包的TTL和这个选项设置的值精确匹配,测试才会成功。这个选项主要用来检测路由企图。

格式:

ttl:"";

3.4 tos

你可以使用tos关键词检查IP包头的TOS(type of service)域是否是一个特定的值。也是只有在被检测包TOS域的值和给定的值精确匹配时,这个测试才会成功。

格式:

tos:"";

3.5 ID

这个选项关键词用来测试IP分片包头的ID域。一些黑客工具为了不同的目的把这个域设置为特殊的值,例如:31337是在一些黑客中比较流行的值。使用这个选项就可以阻止这种攻击。

格式:

id: "";

3.6 lpoption

如果IP包中有选项域,可以使用这个规则选项搜索IP包头的特定选项,例如源路由。这个规则选项可以使用的参数如下:

更多相关文章
Power by linux-cn.com 粤ICP备05006655号