OSSEC研究-decoder规则语言


发布人:admin分类:网络安全浏览量:34发布时间:2017-12-12

OSSEC是一款开源的多平台的入侵检测系统,一个很显著的特点是容易定制,基于XML更改配置和增加规则。OSSEC通过规则实现数据的解码和分析。

用户可以根据自己的理解,编写解码规则,对数据进行解码和分析。在编写自己的规则之前,首先要了解decoder的规则语言。

研究一下decoder的规则语言。

decoder 中的关键字及含义:

  • decoder 是一个规则节点的标志,后面的属性包括name(规则名称)和status(程序中定义的为状态,已有规则中不包含)

  • program_name 进程名,是一棵规则树的根节点中包含的信息,与日志中的进程名进行匹配

  • parent 父节点,指明规则节点的父节点

  • prematch 匹配的字符串格式

  • regex 匹配的正则表达式

  • offset 是 prematch和regex中补充的条件:after_prematch、after_parent,说明匹配的条件

  • order 用在regex之后,定义解析的字段名称及匹配顺序

  • type 指明decoder的类型,包括:firewall、ids、web-log、windows、ossec、squid、syslog、host-information

  • use_own_name 标识:true,在设置decoder的id时,是否与根节点用一个id,对应后面的decoded_as

  • fts 判断(First Time Seen)的字段,计算得到rule中的if_fts条件标识

  • ftscomment 对(First Time Seen)的描述,程序中此处为空,在rule中实现

  • plugin_decoder 是decoder中的其他插件,系统本身定义的解码规则(代码中实现)

实例分析decoder规则的实现:

<decoder name="pam">
  <program_name>(pam_unix)$</program_name>
</decoder>
   
<decoder name="pam">
  <program_name></program_name>
  <prematch>^pam_unix|^(pam_unix)</prematch>
</decoder>
   
<decoder name="pam-user">
  <parent>pam</parent>
  <prematch>^session w+ </prematch>
  <regex offset="after_prematch">^for user (S+)</regex>
  <order>user</order>
</decoder>
   
<decoder name="pam-host-user">
  <parent>pam</parent>
  <prematch>rhost=S+s+user=S+</prematch>
  <regex>rhost=(S+)s+user=(S+)</regex>
  <order>srcip, user</order>
</decoder>
   
<decoder name="pam-host">
  <parent>pam</parent>
  <prematch> rhost</prematch>
  <regex offset="after_prematch">^=(S+)</regex>
  <order>srcip</order>
</decoder>

程序中如何实现规则树:decoder链表在内存中有两个:forpname;nopname。

如果规则节点有program_name,则保存到forpname链表中,否则保存到nopname链表中。

然后找规则节点中的parent关系,找到每一个规则节点的父节点,构建规则树。

匹配的时候,首先匹配program_name找到规则树的根节点,然后匹配prematch继续匹配child项,也就是父节点的子规则节点,prematch匹配成功后,继续匹配regex,如果没有prematch项,直接匹配regex。

当有offset条件时,AFTER_PARENT是在匹配完父节点的结果上继续匹配,如果没有offset,则匹配整条日志内容。AFTER_PREMATCH是在匹配完子节点的prematch的基础上继续匹配,如果没有,则匹配整条日志内容。(实现函数:void DecodeEvent(Eventinfo *lf))

order是要获取的字段的名称,根据order中定义的字段,获取日志中的信息(ReadDecodeXML)

然后看有没有插件解码规则: plugin_decoder(系统中实现的)

<decoder name="windows-date-format">
  <prematch>^dddd-dd-dd dd:dd:dd </prematch>
</decoder>
   
<decoder name="windows-firewall">
  <parent>windows-date-format</parent>
  <type>firewall</type>
  <use_own_name>true</use_own_name>
  <prematch offset="after_parent">^OPEN|^CLOSE|^DROP</prematch>
  <regex offset="after_parent">^(w+) (w+) </regex>
  <regex>(S+) (S+) (d+) (d+) </regex>
  <order>action, protocol, srcip, dstip, srcport, dstport</order>
</decoder>

有的decoder中还包含一些特殊的关键字,type表示decoder的类型,也就是日志的类型,表示特殊的日志,包括firewall、syslog、IDS、Apache等。这些特殊的日志,当获取到信息之后,可以通过算法实现进一步的分析,如firewall日志中,可以通过id和type分析得到防火墙的状态。

use_own_name为true时,为规则节点分配独立的ID,否则与父节点一样。这里主要是为了后面的rule匹配的decoded_as.

<decoder name="cisco-ios-ids">
  <parent>cisco-ios</parent>
  <type>ids</type>
  <prematch>^%IPS-4-SIGNATURE: </prematch>
  <regex offset="after_prematch">^Sig:(d+) .+[(S+):(d+) -> </regex>
  <regex>(S+):(d+)]</regex>
  <order>id, srcip, srcport, dstip, dstport</order>
  <fts>name, id, srcip, dstip</fts>
  <ftscomment>First time Cisco IOS IDS/IPS module rule fired.</ftscomment>
</decoder>
   
<decoder name="symantec-websecurity">
  <prematch>^dddddddd,ddd+,</prematch>
  <plugin_decoder>SymantecWS_Decoder</plugin_decoder>   插件解码规则(程序中实现)
</decoder>

fts(First Time Seen),对应rule中的if_fts,第一次触发的规则。(如第一次执行sudo命令)

Ftscomment这里没有用到。程序中为空。(与rule中description重复)


被黑站点统计 - 文章版权1、本主题所有言论和图片纯属会员个人意见,与本文章立场无关
2、本站所有主题由该文章作者发表,该文章作者与被黑站点统计享有文章相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和被黑站点统计的同意
4、文章作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、被黑站点统计管理员有权不事先通知发贴者而删除本文

免责声明

本站主要通过网络搜集国内被黑网站信息,统计分析数据,为部署安全型网络提供强有力的依据.本站所有工作人员均不参与黑站,挂马或赢利性行为,所有数据均为网民提供,提交者不一定是黑站人,所有提交采取不记名,先提交先审核的方式,如有任何疑问请及时与我们联系.

admin  的文章


微信公众号

微信公众号


Copyright © 2012-2022被黑网站统计系统All Rights Reserved
页面总访问量:21450153(PV) 页面执行时间:78.687(MS)
  • xml
  • 网站地图