每秒十万级安全日志的关联分析是怎么实现的?

安全分析 置顶 精帖
收藏
2 2405
Sunny912
Ethan 未认证 2019-07-09 14:53:39
付费话题:0 积分

        在网络安全领域中,关联分析是指对网络全局的安全事件数据进行自动、连续分析,根据用户定义的、可配置的规则来识别网络威胁和复杂的攻击模式,从而可以确定事件真实性、进行事件分级并对事件进行有效响应。关联分析可以用来提高安全操作的可靠性、效率以及可视化程度,并为安全管理和应急响应提供技术手段。关联分析引擎已经是态势感知系统或安全管理系统的必备组件。 

        赛博坦套件平台以独有的分布式计算框架ArcStream实现了分布式、全能力的关联分析引擎,并且在某国家级企业用户环境中以6个节点支撑了10万EPS级别的实时关联分析和历史回溯关联分析。本文中,我们将探究这样一个高性能、全方位的关联分析引擎是怎么实现的。 

        我们在考虑以分布式架构处理10万EPS安全日志实时关联分析时,有两个关键词,一是“流式数据处理”,另一个是“状态机”。 

        海量安全日志的关联分析采用状态机技术来实现,赛博坦关联分析引擎使用状态机来维持基本的关联条件,通过事件来触发状态迁移。每个规则场景都有数个状态构成,当通过状态迁移与状态机完成规约后,便表明攻击场景发生,以此来产生安全告警。 

        下面我们以具体的场景来探究状态机的运用。如下图是实际环境中非常实用的“暴力破解成功”场景:

        

        该场景中事件(Event)的说明如下:

        1)事件E0表示暴力破解尝试事件,这种事件本身也可以通过关联分析引擎检测获得(这种情况下需要处理更多类型的事件,维护更多的状态机),也有一些EDR设备可以提供这样的事件。 

        2)事件E1登录成功事件,这种事件可以采集各类系统(如操作系统、VPN、网络设备、应用系统等)的登录成功日志获得。事件E1需要满足这样的条件,包括E1的目标IP与E0的目标IP相同,E1的账户名与E0的账户名相同,E1的发生时间应该在E0之后。 

        3)事件E2表示状态超过阈值,即E1与E0的发生间隔小于指定时间,如一分钟。

        该场景中状态机(State machine)的说明如下:

        4)状态S0表示该场景的起始状态。起始状态好像什么都没有,但是后台已经要干事情了,起始状态表示场景启动,后台相关的数据表就要建立起来了。 

        5)状态S1表示发现暴力破解尝试事件状态。 

        6)状态S2表示暴力破解成功状态。

        单机条件下,基于状态机的关联分析引擎运行的关键是规则库与状态机池。规则库是将系统预制或者用户自定义的安全分析场景进行规则编译后放入内存中,当用户新增分析场景或者对现有场景进行编辑时,规则库需要实时同步以保证后续的日志关联计算采用新的参数条件。

        单机关联分析引擎为规则库中的每一条规则创建状态机,这些状态机分布在不同的线程中,并在内存中维护状态机池,这是对状态机进行计算与管理的支撑平台,同时,为了保证系统的应对各种情况,还需要考虑状态机的持久化问题,为了保证状态机判定的性能,也需要考虑判定树的设计。状态机池接收到范化后的事件,将该事件送到每一个状态机进行匹配,看是否满足迁移条件,则将该事件的相关属性保存至该状态机的状态特征变量表中,接着进入下一状态迁移条件的匹配,并将状态特征变量表中相关数据进行更新。在某状态机规约完成后,该状态机对应的关联规则将产生告警事件,同时将状态机的状态特征变量表清空,为新事件的关联计算做准备。单机关联分析系统的流程如下图:

        

        在分布式条件下,状态机池的管理模式无法适用,如何对状态机进行有效管理并发挥分布式计算的优势,这是分布式关联分析系统的关键命题,也是十万EPS甚至百万EPS的关联分析引擎的秘诀所在。赛博坦关联分析引擎将“状态机”管理与“流式数据处理”完美结合起来解决这一命题。

        基于前述关联分析运行机制的分析可以看到,有两个关键的数据要素,一是事件(Event),另一个是状态机(State machine)。事件(Event)的分布式流式处理已经是较为成熟的技术,那么如何让状态机数据也能在分布式计算环境里流动起来?首先,我们要解决关联分析系统中状态机的数据模型构建问题,其次,我们要让状态机匹配算子与判定算子能够分布式执行。 基于多年的安全分析实践项目积累,赛博坦关联分析引擎构建“关联状态机元数据模型”,该模型以精巧的设计为单事件关联、多事件关联、复杂长序列关联以及多要素情景关联构建了坚实的支撑。有了这样的状态机元数据模型,我们可以想象,分布式关联分析引擎中的各种数据流象水在不同管道中流动一样: 

       

        在实际运行中,我们需要面对四种数据,包括:原始日志、状态机元数据、关联事件、告警。每类数据都在不停的流动,关联分析引擎的各种分布式算子基于原始日志管道里的新数据产生状态机元数据管道里的新数据,关联事件数据流、告警数据流也依次产生并进行流动。

        当不同的数据模型流动起来之后,我们就要考虑如何将关联计算进行分布式。 什么是“分布式计算”?所谓分布式计算就是如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。关联分析计算的进行分布式的关键就是要将这个大的运算分为过滤、聚合、关联、判定、合并等不同的算子,并将这些算子的运算进行分布。能够将关联分析大运算进行分解、分布的关键支撑是关联状态机元数据模型和关联事件数据模型的建立,有了这样的数据模型作为桥梁,不同运算才能既分布式运算又能综合计算最终结果。赛博坦分布式关联分析的流程架构如下图:

        

        其中关联状态机模型在合理建模后就可以基于分布式消息系统如kafka或Zbus进行分布式流动,各个关联分析算子以该模型为桥梁进行分布式计算与最终结果的综合。            最后,给大家展示一个赛博坦平台在实际网络环境中运行的关联分析场景规则,借此更好地理解基于状态机的分布式关联分析技术。 

        

  •            
回帖
  • 一辉
    2019-07-10 11:51:13

    看重点:以6个节点支撑了10万EPS级别的实时关联分析和历史回溯关联分析

    0 回复
  • 一辉
    2019-07-09 15:28:24

    你太牛了!

    0 回复