eSOC项目的一个重要功能就是规则引擎,规则引擎的主要功能就是关联分析。规则引擎的最基本的功能就是计算表达的值(表达式是规则中的基础部分),为了选择一个合适的基础构件作表达式求值工具,前后比较了Drools, IKExpression,Aviator和Groovy,Drools为JBosss的开源规则引擎, IKExpression和Aviator都是轻量的Java表达式求值引擎(均为中国人开发的开源表达式求值引擎),Groovy是JVM上的动态语言,Java的官方弟弟。比较的基本要素是性能;第二是功能:支持常见的操作包括>,>=, ==, !=, <,<=,contains和正则表达式以及二元操作符&& ,括号等, ,其次是使用方便。
背景介绍
什么是关联分析
在如下的场景中,我们需要找出威胁程度最高的事件,也就是报警5,依靠的就是关联分析来完成,下图中所示的是交叉关联分析中的典型场景。
对应于这个场景,规则引擎需要做的事情是从收集到的IDS日志,防火墙日志,资产列表和漏洞库中发现如下的情况:
“IDS检测到Attack的行为,并且防火墙允许了这个行为,Attack的目标资产(服务器,网络设备等)非常重要,并且资产具有该攻击对应的漏洞;如果以上都匹配,并且在10分钟之内发生了一次以上,就产生一个高级别的实时报警”
为了能够分析出上述行为,需要一个或者规则来执行,那么上述文字描述可以转换为如下描述的规则,一个规则由表达式+聚合 + action三部分组成
表达式部分:
1. (Event1.devicetype == 'IDS' && Event1.eventtype=='Attack')
2. (Event2.devicetype == 'Firewall' && Event2.eventtype=='Accept')
3 ((Event1.attcaktype + Event1.destinationIP) in vulnerabilityList //事件的攻击目标地址具有该攻击类型所包括的漏洞
聚合部分:
1. (Event1.destinationIP == Event2.destinationIP) //事件1和2的目标地址是同一个
2. Event1和Event2 在10分钟内发生的次数 > 1次
action
if( Event1.destinationIP 是高价值资产) 产生报警,级别是10
else if(( Even