Bro NIDS的规则

创建时间:2005-09-28 更新时间:2005-09-28
文章属性:原创
文章提交: stardust (stardust_at_xfocus.org)

规则机制的引入
--------------

从初始的设计来看,Bro NIDS的实现方法是类似于NFR,实现一个脚本解析引擎,向用户提供完整编程接口,用户通过编写脚本来分析网络流量,这样的设计可以使用户有极大的灵活性,理论上可以实现足够精细的分析和处理。但是脚本的编写、调试、维护却是一个相当麻烦的过程,需要耗费相当多的时间,而且对于大多数基于单包的攻击检测并不需要编写复杂的脚本,因此Bro 0.8以后的版本中引入了规则引擎,支持通过指定报文的特征来检测网络事件。报文特征定义存放在规则文件中,Bro在启动时可以根据配置加载规则文件(如何打开规则支持及加载规则文件见《Bro NIDS的安装与配置》),对符合特征定义的报文告警。

规则文本的格式
--------------

Bro的规则定义采用简单的纯文本形式,单个规则的定义格式如下:

signature id {

规则选项列表

}

“signature”字串为规则定义的关键字,起始于每个规则定义块的头部,id为本规则定义的唯一标记字串,花括号内为规则相关的各个选项的具体定义,各个选项定义之间是且的关系。每个选项定义一般占据一行,每行的格式根据选项类型的不同有如下两种:

a. 选项名 操作符 参数值列表
b. 选项名 参数值列表
c. 选项名 模式

规则的操作符和选项
------------------

Bro支持的操作符有:

"<="  小于等于
">="  大于等于
"<"   小于
">"   大于
"="   等同于"=="
"=="  等于
"!="  不等于

对于不同的选项名对应有不同的参数值集,比如对应"ip-proto"选项名,其允许的参数值为"ip"、"tcp"、"udp"、"icmp",有的选项名允许指定以逗号分隔的多个参数值,之间是或的关系。

模式是用于匹配的目标串,一般来说可以是正则表达式。

目前Bro支持的选项分为两类:条件与动作。条件又分为四类:头部、内容、依赖关系、上下文。

头部条件:用于通过检查报文的协议类型、端口、地址等从报文头部中可以抽取出来的信息来过滤。目前预定义的很常用的选项名主要有:

ip-proto
含义:IP包内封装的协议类型
格式:ip-proto 操作符 参数值列表
允许的参数值:ip, tcp, udp, icmp

ip-options
含义:IP包头选项
格式:ip-options 参数值列表
允许的参数值:lsrr, lsrre, rr, ssrr

src-ip
含义:IP包的源地址
格式:src-ip 操作符 参数值列表
允许的参数值:IP地址,可以带子网标记

dst-ip
含义:IP包的目的地址
格式:dst-ip 操作符 参数值列表
允许的参数值:IP地址,可以带子网标记

src-port
含义:TCP或UDP包的源端口
格式:src-port 操作符 参数值列表
允许的参数值:端口数值

dst-port
含义:TCP或UDP包的目的端口
格式:dst-port 操作符 参数值列表
允许的参数值:端口数值

对于IP头中其它头字段可以使用header选项名,指定数据在header中的偏移和长度来进行匹配:

header proto[偏移:长度] 操作符 参数值

因此 header ip[16:4] == 1.2.3.4/16, 5.6.7.8/24 等价于
dst-ip == 1.2.3.4/16, 5.6.7.8/24

内容条件:用于通过检查报文的净载来过滤。目前支持的选项名有:

payload
含义:TCP或UDP包的净载
格式:payload 模式
允许的参数值:正则表达式

payload-size
含义:TCP或UDP包的净载长度
格式:payload-size 操作符 参数值
允许的参数值:正整数的数字

http
含义:HTTP协议报文的净载
格式:http 模式
允许的参数值:正则表达式

ftp
含义:FTP协议报文的净载
格式:ftp 模式
允许的参数值:正则表达式

finger
含义:FINGER协议报文的净载
格式:finger 模式
允许的参数值:正则表达式

依赖关系条件:用于关联同一会话内的几个规则,在一个规则内引用其他规则的结果。目前支持的选项名有:

requires-signature
含义:需要依赖某个其他的规则返回的结果为真
格式:requires-signature [!]id
允许的参数值:规则ID串,限于同一会话内,前导“!”字符的话表示依赖的那个规则返回结果需要为假

requires-reverse-signature
含义:需要依赖某个同一会话内匹配相反方向数据的其他规则返回的结果为真
格式:requires-reverse-signature [!]id
允许的参数值:规则ID串,限于同一会话内,前导“!”字符的话表示依赖的那个规则返回结果需要为假

上下文条件:用于测试规则匹配时的上下文情况。目前支持的选项名有:

tcp-state
含义:检查规则匹配时TCP会话是否处理所指定的状态
格式:tcp-state 参数值列表
允许的参数值:established, originator, responder, stateless

eval
含义:执行某个策略脚本提供的函数,获取返回的成功或失败标记
格式:eval 策略脚本的某个函数名
允许的参数值:已加载的策略脚本的某个功能函数名,返回成功或失败

same-ip
含义:检查IP包的源目的地址是否相同
格式:same-ip
允许的参数值:不需要参数

动作选项:当规则的条件选项全部匹配上后,应该执行的动作。目前只支持一种选项名:

event
含义:产生告警事件
格式:event msg
允许的参数值:msg为传递到日志中的字符串

规则实例:

signature s2b-356-5 {
  ip-proto == tcp
  dst-port == 21
  event "FTP passwd retrieval attempt"
  tcp-state established,originator
  payload /.*[rR][eE][tT][rR]/
  payload /[/x20/x09/x0b//.]*passwd[/x20/x09/x0b]*$/
  requires-reverse-signature ! ftp_server_error
}

此规则匹配发往TCP/21端口的客户端请求中是否包含试图获取passwd文件的命令操作,而且服务器返回成功,那么规则生成告警,在日志中记录"FTP passwd retrieval attempt"。

Bro规则的特点
-------------

与新版的Snort相比,Bro的规则在内容条件类的匹配选项(payload, payload-size等)并没有什么特别的,新版Snort提供的匹配选项相较以前有了很大的改进,通过引入相对位移和按包内数据实时跳转匹配的机制,Snort其实变通地实现了部分协议解码能力,具体细节可参考《Snort 2.x数据区搜索规则选项的改进》一文。所以单从内容条件类的匹配选项来看,Bro规则选项的灵活性远不如Snort,但是Bro提供的依赖关系及上下文相关的选项则体现出Bro规则更有意义的高级特性。

requires-signature 依赖性选项使关联同一会话中并不在同一个报文中的多个攻击必须的几个请求序列成为可能。
eval 上下文选项可以使规则调用策略脚本中预定义的功能函数,由此可以扩展出几乎无限制的功能。

以上两点在《Bro:一个开放源码的高级NIDS系统》文中有例子。

requires-reverse-signature 依赖性选项使关联同一会话的请求和回应成为可能:

例如:

--------------------------------------------------------------------------
signature s2b-654-13 {
  ip-proto == tcp
  dst-port == 25
  event "SMTP RCPT TO overflow"
  tcp-state established,originator
  payload /((^)|(/n+))[rR][cC][pP][tT] [tT][oO][/x20/x09/x0b][^/n]{300}/
  requires-reverse-signature ! smtp_server_fail
}

signature smtp_server_fail {
        ip-proto == tcp
        src-port == 25
        payload /.5[0-9][0-9]../  # 5xx permanent failure
        tcp-state established
}
--------------------------------------------------------------------------

此规则检测带超长参数的RCPT命令并检查服务器的回应,如果服务器不是回应错误的话则生成告警。这类直接的关联可以极其方便地判断一个攻击及其结果。

规则相关的几个支持策略脚本
--------------------------

在配置Bro使能规则匹配支持时,需要指定加载几个必要的策略脚本,主要有如下4个:

signatures.bro
处理规则得到匹配后的操作,根据每个规则所设置的对应动作不同,执行各种操作,比如产生告警、写入日志、记录数据、执行其他预定功能等。

sig-functions.bro
预定义一些根据报文内容判断应用程序类型及版本和其他的简单功能,这些功能函数可能在规则文本中通过 eval 选项被调用到。比如规则匹配到一个针对IIS服务器的溢出攻击,在规则中可以调用 isIIS 功能检查一下目标是否为IIS服务器,如果不是,那么目标并不受攻击影响,可以不产生报警,这样可以有效降低次要告警的数量。

sig-action.bro
一个告警ID与相应应该采取动作的对应表,不在表里的规则按默认设置的动作处理,如果要求对一个规则采取特别的动作,可以在表里添加相应的条目。

sig-addendum.sig
定义一些经常可能会被其他规则引用到的一些匹配情况,比如通过检查HTTP、SMTP、POP等常见网络协议的服务程序回应码来判断请求是否成功的规则,那么其他很多检测CGI攻击的规则可以引用这些预定义的规则来大致确认攻击的结果,根据情况不同采取不同的动作。

用户还可以编写自己的策略脚本来进行扩展出许多功能,甚至根据流量和连接情况检测到某些未知攻击,这些需要我们掌握Bro最复杂也是最灵活的工具策略脚本,这一系列的下一篇将会介绍它。

(转载)Bro NIDS的规则相关推荐

  1. (转载)Bro NIDS的安装与配置

    Bro NIDS的安装与配置 创建时间:2005-09-09 更新时间:2005-09-09 文章属性:原创 文章提交: stardust (stardust_at_xfocus.org) Bro是一 ...

  2. (转载)Bro:一个开放源码的高级NIDS系统

    Bro:一个开放源码的高级NIDS系统 创建时间:2003-10-12 文章属性:原创 文章提交: stardust (stardust_at_xfocus.org) 在介绍Bro之前先总结一下几个常 ...

  3. 【转载】MISRA C-2012规则中文版

    原文地址:MISRA C-2012规则中文版_WJKING3的博客-CSDN博客_misra c 一.简介 MISRA C是由汽车产业软件可靠性协会(MISRA)提出的C语言开发标准.其目的是在增进嵌 ...

  4. 【转载】【Unity规则】【模型】Unity3D模型制作规范

    本文提到的所有数字模型制作,全部是用3D MAX建立的模型,即使是不同的驱动引擎,对模型的要求基本是相同的.当一个VR模型制作完成时,它所包含的基本内容包括:场景尺寸.单位,模型归类塌陷.命名.节点编 ...

  5. 转载CSDN积分获取规则

    下载积分攻略: 个人设置里进行手机绑定CSDN账户 奖励50分 (右上角设置-账户安全-手机绑定) 完成任务送若干分积分 http://task.csdn.net/ 上传有效资源获取积分(上传非法,广 ...

  6. arcgis fishnet 单位_【转载】ArcGIS生成规则网格(Fishnet)

    在利用ArcGIS处理数据时,有时需要对整个工作区域进行规则网格划分,这个在ArcGIS中是一件非常简单的事情,现在就将利用ArcGIS生成规则网格的步骤详细的介绍一下. 首先我有一个工作的范围,比如 ...

  7. 电影数字服务器里播放文件字母意思,[转载]数字电影命名规则

    2.3 内容类型和版本号 (1)内容类型和版本号 内容类型和版本信息将标识DCP包含的内容的种类--是正片.预告片.短片等等,以及该内容的版本情况.这一部分信息可以占据7个字符.所有内容都应该以以下规 ...

  8. oracle 定义atp规则,[转载]ATP新积分规则详解

    过去52周内,共计18站比赛成绩之和,如果上一个赛季参加了年终总决赛--大师杯,则大师杯的积分作为额外一站计入世界积分(大师杯小组赛胜一场200分,半决赛胜得400分,决赛胜得500分,所有输球比赛均 ...

  9. 国内黑客组织及代表性人物

    转载一篇http://blog.csdn.net/zhanghandong/article/details/1270087 先介绍零三年之前的组织. 安全焦点 http://www.xfocus.ne ...

最新文章

  1. 更换用installshield打包生成exe文件的图标
  2. 每天一个知识点linux(八)手动创建交换分区
  3. Mysql 瓶颈优化
  4. 门户网站负载均衡技术的六大新挑战
  5. linux 修改网卡报错xe,centos修改端口出现Failed to start OpenSSH server daemon 启动报错和-xe报错的解决方法...
  6. DBFace升级,模型仅1.3M的轻量级高精度人脸检测模型
  7. 山东科技职业学院单招计算机,山东科技职业学院单招
  8. udp广播收到重复包
  9. 分组码--原理,码率,软硬判决,编码增益
  10. 萤火虫算法_第二十二章 萤火虫算法(Firefly Algorithm,FA)补充和答疑
  11. 干货!CRM绩效考核指标(KPI)整理
  12. jquery自动监测输入字数,自动截取,输入框
  13. 照片查看器找不见的解决办法
  14. php无法访问_php网站无法访问可能是什么原因
  15. 720°VR全景网站制作
  16. 编译原理:LL(1)文法 语法分析器(预测分析表法)
  17. PointNet++等3D点云中用到的.cu、.cpp文件的编译的简单理解
  18. IE8调试工具详解2
  19. 二维vector的创建
  20. 高速数字PCB板设计中的信号完整性分析

热门文章

  1. redis 迁移工具 redis-port 从阿里云迁移到aws
  2. 【转】ASP六大对象介绍
  3. 待业一年多,我终于找到工作啦,月薪1.5万,双休不加班
  4. 由浅至深探探webpack(初)
  5. 使用new bing来阅读文献
  6. ESP8266—01模块的3种工作模式
  7. Electron学习笔记 4 添加系统功能
  8. altium designer 制作元器件封装库
  9. spring data redis 配置
  10. Log4j详细使用教程