被关联的状态或者联系;具体地说:现象或者事务之间、数学变量或者统计变量之间存在着某种联系,它们倾向与同时变化、相互联系或者同时发生,而这种同时发生的事情不被认为是偶然的。
对于日志分析来说:我们将多个相似或者不相似的事件联系起来,形成对更大事件将要发生的认识,而不是简单的关注单一事件,从而得到所发生的情况的不完整视图。 可以通过某种语言创建规则来实现,这些规则建立了安全和网络管理员和分析人员感兴趣的情况的模型。
状态规则引擎SRE 为管理员和分析人员提供了创建任意顺序或者模式的规则的能力,必须维护一个状态,以便这些测试,
实现方法之一是简单的使用存档数据存储作为持久化层,提供SBR引擎可以简单的挖掘数据库,寻找匹配一条或者多条规则的事件序列。不过要花费大量的SQL查询。
更好的解决方案是在事件数据进入长期存储之前获取它。 将数据发送到某种消息队列,在那里提供SBR引擎消费处理,不过内存占用比较大,这就是数据自身失效后事件过期的重要性。如果事件一直保存在内存中应为可能会耗尽内存的空间。
通过设置事件过期的生存时间可以解决。我们可以为规则的每一步设置TTL.。比如在eventType为portscan的事件才启动事件跟踪,开始计算TTL,如果没有看到符合规则下一阶段的事件,则放弃这一规则。
微观关联:关心的是单一事件或者一组事件中关联的字段,有时候称为原子关联。原始数据数据规范化对原子关联高效执行很重要。
- 字段关联:提供发现规范化事件数据中感兴趣的一个或者多个字段的机制。
例如:你可能对IDS何时检测到针对web服务器的活动感兴趣,最合乎逻辑的做法是搜索目标端口为80或者443的事件。
事件类型是另一个字段关联的来源。
例如:你关心特定服务器的有害访问企图,可以关联事件类型为Drop,目标IP地址为该服务器的事件。
实际上在实现时候就是通过关键字来搜索日志?
- 规则关联:编写一条能够建立某种行为模型的规则。
为了使规则关联变的高效,规则引擎至少应该有如下的功能:
•状态型行为:实施关联的系统有时称为引擎。规则关联引擎有时候称为状态型规则引擎或者状态型业务规则引擎。状态型规则可能由一个或者多个状态组成,可能是层层递进的,到达一个状态后进入下一个状态,有点像树的结构
•计数:一个非常有用的工具。等待一个事件发送一定次数,然后采取行动。
•超时:大部分状态型规则引擎实现使用内存分析等工作,如果一直等待某事件的发生可能导致内存空间不足,比如可以设置5分钟的默认老化期。
•规则重用:一条规则可能包括很多的条件,在你创建的其他规则中重用这类组件。
•优先级:可以描绘一条规则或者一组规则的执行顺序
•语言:所有规则引擎都实现某种用于指定规则的语言或者伪语言。 应该使用一种易于学习使用的。
•行动:必须有一种执行某种操作的机制,仅仅知道某件事往往还不够。
宏观关联:关心的是获取信息的来源,以便进一步验证或者得到事件流上的情报。有时称为融合关联。
比如:考虑漏洞扫描,并将其与进入分析系统的事件数据进行内联比较。
原始数据的规范化是很重要的,例如:以用户名做全名映射可能很有用,正如用户角色在特定系统上作用一样,称为上下文数据。Window或者Unix等操作系统将他们生成的日志消息中插入一些上下文信息,如果你需要获得更详细的信息,就需要从LDAP服务器或者活动目录服务器上获取他们。
- 规则关联
与微观关联的主要不同是,规则关联往往过度到一个宏观的关联规则中,后者可以用作其他微观规则的输入,或者引发写入文本文件、创建服务台工作单等行动
- 漏洞关联
帮助寻找容易遭到已知攻击的主机和其他系统。
••容易被攻击的主机
•容易被攻击的服务或者端口
•补救步骤
- 指纹关联
通过标识抓取,操作系统指纹,漏洞扫描和远程端口扫描收集信息都有好处,这种数据可以用于更加深入的了解对你发起攻击的人。作为常规关联的一部分,可以设置一个行动,当特点事件进入系统时发起取证收集任务。
- 反端口关联
大部分防火墙根据允许或者拒绝的实际包生成日志,反端口关联通过使用开发端口信息和防火墙数据,一便能够检测“慢速”“低”类别的攻击。
可以帮助检测攻击者何时尝试访问系统端口或者不存在的服务,
跟踪开放端口信息的方法,将来自防火墙和IDS的目标端口与一种的开发端口比较。
保留一个新的主机和端口列表。
- 观察列表关联
将攻击来源放在一个观察列表中
- 地理位置关联
生成警告时,地图上的节点发亮,以表示出现了问题。
使用环境中的数据
环境数据是数据关联的最佳来源之一,这些数据可以视为上下文。
9.4.4 简单事件关联器 SEC
简单事件关联器是一种基于Perl的工具,实现一个简单的关联系统。
它具备创建规则的健全语法,能够完成从简单到复杂的工作,规则链接起来组成行为模式,可以用于检测1已知的情况,帮助诊断或者发现未知的情况。 SEC核心的上下文的概念,上下文可以看作一个事件或者一系列事件发生的占位符,可以使得SEC可以状态型的风格运作,对于检测多种日志消息是非常关键的,
- SEC基础知识
SEC支持的各种规则类型
Single—匹配一个事件并执行一项行动
Singlewithscript—匹配一个事件并从它所运行的一个脚本或者程序中获得返回码
Singlewithsuppress—匹配一个事件,然后忽略后续匹配t秒
Pair—将给定事件范围内的多个事件组合为单一事件
Pairwithwindow—类似与pair,但为下一事件到达等待t秒
Singlewithtreshold—计算一个窗口匹配的事件数量,到达魔鬼阈值 触发某个行动
Singlewith2thresholds---计算时间窗口t1内匹配的事件数量,并达到第一个阈值执行行动 计数被重置并在t2秒内计算匹配的事件数量 如果t2秒低于阈值 执行另一个行动
Suppres—不匹配事件 也不执行行动
Calendar—在指定事件执行行动 类似与unix crontab条目
Action类别
Write 将事件文本写入指定文件
Shellcmd 执行一个shell命令或者程序
Spawn 和shellcmd相同 不过可以作用sec的反馈
Event 导致创建sec内部事件,可以作用与sec的反馈
- 例子
- 漏洞关联示例
如果你想执行漏洞关联,减少假阳性,意味着,使用nessus之类的工具定期扫描你的网络,寻找有漏洞的系统。扫描器输入放入一个数据库中,我们可以在SEC中编写一条检测端口扫描的规则,运行一个程序查询漏洞数据库,并返回系统是否有漏洞
- cisco ios配置变更
许多环境部署某种配置变更控制,例如,所有的硬件1和软件的变更在某几小时之间进行,如果你在正常之外接收到路由器的配置的变更,就需要担心所发生的事情了。
- 混杂模式检测
当网络接口被置于混杂模式时,所有的数据包都发生到内核处理,包括目标不是该网络接口卡mac地址的数据包, 在使用混杂模式网卡的系统上的用户可以所有嗅探器等工具 查看所有的网络数据包
可以检测主机上和主机进入混杂模式的网卡
- 需要寻找关键字
比如panic
Fatal 捕获致命消息
Password 或者 passwd 可能表示破坏密码维护正常渠道的恶意行为
- 应用程序退出码
应用程序退出时,通常向操作系统返回一个错误码,这个代码一般为0,表示正常程序结束,退出为1通过表示发生了某种异常行为1
9.2.6构建自己的规则引擎
1.使用jess的基于规则的引擎
Jess的核心是实现Rete算法,为了解决模式匹配问题,用于规则上下文或者规则引擎,传统的模式匹配相当低效,规则引擎实际改变的实际项来测试规则,这可以减少引擎所必须执行的工作量,规则通常有LHS条件 , RHS条件为真时采取的行动。
将数据组织为树形结构,基于rete的规则引擎很多。
演绎归纳:演绎:系统中规则依靠一组数据执行,归纳:系统查询一个数据集获取真实值
工作内存wm:规则引擎中一个区域,保留一条或者多头规则处理数据。
对象断言:数据通过断言的过程放入wm
对象回收:wm中数据删除
议程:是具有将被执行/触发的RHS的规则列表
冲突解决:是选择议程中的行动、并加以触发的过程, 规则引擎必须决定WM中的同一个数据满足两条规则时触发哪一条。可以通过设置优先级解决。
实际例子
假定日志聚合和规范化已经完成
编写java代码 主要为了保存数据 定义规则
我们从磁盘文件中加载规则文件,defclass f方法断言一个进入WM的新securityClass对象
最后通过run方法运行引擎。
在生产规则引擎中你应该在循环中断言对象和运行引擎,可能通过某种队列或者数据库中获取事件对象,到达一定数量后运行引擎。
另一种替代的方法是在一个线程中断言事件,然后用rete.rununtilhalt在专用线程内持续运行引擎。
- 使用Esper基于流的引擎
数据流通过一个CEP引擎可以从多个事件中发现复杂的模式,CEP引擎采用查询语言,允许你定义感兴趣的模式,理解CEP引擎最简单的收到是将其与一个数据库比较,数据库使用查询筛选数据,CEP引擎让数据流过查询,寻找有趣的现象。
首先搜索Loginfailures,我们将窗口设置为10秒,然后再这个窗口搜索5个login Failures。10秒的5次失败后接着有一个登陆成功。 然后发出警报。
常见的搜索模式
X次登陆失败有一次登陆成功 | 可能表示暴力破解成功, |
创建非管理员账户后进行权限提升 | 非管理员一般不会将其权限提升到管理员级别,或者其他高级用户级别 |
VPN用户再工作时间外登陆 并向网络之外传输大量数据 | 这可能表示数据外流,实现起来比较困难,因为需要使用netflow等工具 |
网络上的一条主机开始攻击或者探测网络上其他主机 | 这可能是源主机受到蠕虫 木马 恶意软件等的感染 你可以用防火墙日志确定 |
在很接近的时间内X次尝试访问用户没有权限的文件目录 | 可能表示用户账户入侵 如果发生在下班时间应该立即调查 |
同一个工作站以多个用户名登陆 | 某人正在使用多个不同的用户名访问网络上多个不同资源 |
多个系统上多个防病毒软件失败 | 可能表示病毒爆发 |
攻击DMZ系统 随后有出站连接 | 表示僵尸感染 |
攻击DMZ系统 随后在同一个系统上更改配置 | 攻击者获取系统访问权限并修改 |
在几分钟内有web 404 401 500 | 表示web服务器或者应用程序无法正常工作 |