@IT·互联网大数据计算

如何设计信息安全领域的实时安全基线引擎

2022-03-17  本文已影响0人  Flink中文社区

摘要:本文整理自奇安信集团高级技术专家覃永靖在 Flink Forward Asia 2021 行业实践专场的分享。本篇内容主要分为四个部分:

  1. 什么是安全分析
  2. 计算框架的选择
  3. 引擎设计
  4. 实践与展望

点击查看直播回放 & 演讲PDF

如何设计信息安全领域的实时安全基线引擎 FL.jpg

一、什么是安全分析

img

近 10 年来,大数据技术发展日新月异。安全分析场景和方法也更新换代。目前,常用的安全分析流程大概分为三个流程:

  1. 日志采集解析。通过各种方法,从服务器、网关设备、终端、数据库或其它数据源采集各种流量日志、威胁日志、运行日志,和终端日志等数据;

  2. 实时安全分析。分析过程主要有安全基线、关联分析、安全规则、威胁情报,和安全知识库;

  3. 安全运营和态势感知。这个流程基于安全分析的结果来实现态势可视化、安全运营、多设备安全联动、安全编排等能力。

img

如上图所示,安全领域主要有三个特点:

img

在实时数据安全方面,一共有五点需求:

img

传统的安全分析方法一般是基于先验知识,采用基于特征检测技术来进行异常检测,一般是通过分析检测对象的数据或日志特点,然后人工归纳和统计出可检测特征,建立安全模型,比如安全规则、威胁情报等。这种方式比较简单和可靠,可以很好的应对已有的攻击方法,但是它对未知的没有对应检测特征的攻击方法则不能有效的进行检测。

安全基线采用基于行为的检测方法,使用检测对象数据和日志,采用各种方法学习出行为特征,建立安全基线,并用于异常检测。

img

为了让大家能更好的理解安全基线的使用场景,这里列了三个真实场景:

二、计算框架的选择

目前主流实时计算框架主要有两个,Spark 和 Flink。我们当初设计这个引擎是在 2018 年左右,当时我们研究了 Storm、Spark、Flink 这三个计算框架,综合各方面因素最终选择了 Flink 作为底层计算框架。当时使用的 Flink 是 1.4 版本左右,是一个比较成熟的版本,相比其它框架,它的 API 以及它的底层分布式和流计算实现方式比较符合我们的使用场景。

img

Flink 的优势点比较突出,它是分布式计算框架,部署灵活,适配目前常见大数据平台。它拥有很好的处理性能,能达到高吞吐低延迟,这非常适合进行实时安全分析。它还提供灵活的 DataStreaming API,方便实现定制化需求。另外,还支持简单易用的检查点和保存点机制。并且,作为目前非常热门的计算框架,社区活跃,有丰富的文档和场景样例。

img

虽然Flink有很多优势,但当企业资源受限,规则集数量上千规模的情况下。Flink 在满足业务及性能需求上遇到了很多问题。比如无大规模规则语义/流优化,缺乏安全场景定制窗口和逻辑,无安全基线相关算子以及无资源保护机制等。

三、引擎设计

img

引擎应用框架分为三层:

  1. 底层是部署层,通常是一个大数据集群;
  2. 第二层是安全分析层,基于 Flink DataStreaming API 来构建安全基线引擎,Flink 负责底层的分布式计算和事件流发送,具体的业务计算由安全基线引擎来完成。安全基线引擎向用户提供的使用接口为规则和 DSL,用户通过界面来下发规则 DSL 给引擎,引擎根据规则和 DSL 来对事件流进行分析和计算,同时根据规则语义使用外部的数据,比如知识数据、威胁情报、资产和漏洞等;
  3. 用户通过第三层的应用层来管理和使用引擎。并基于引擎数据结果态势分析,安全运营,资源监控等具体安全业务。
img

引擎的业务流程分为三块,即用户界面,引擎服务和引擎分析任务。用户通过用户界面来进行规则配置、基线管理和运行监控。引擎服务以 RESTfull API 的方式向用户提供规则下发、基线下发、状态监控等服务。引擎服务在接收到用户的规则下发请求后需要对下发的规则集进行解析、优化之后生成分析任务代码包,分析任务代码提交大数据集群运行,分析任务在运行过程中接收引擎服务的基线发下数据,对运行时基线进行增删改操作。分析任务还向引擎服务报告任务运行状态,引擎服务将任务运行状态映射成业务监控信息,提供给用户查询和分析使用

img

由于大部分用户不是研发人员,所以需要提供一种针对安全分析场景,进行特定优化的安全分析语言。它需要具备以下几点:

img

安全分析语言需要设计一个专门的编译器来对安全分析人员设计的安全分析语句和规则进行编译和优化。编译器需要提供一些特性和优化的支持:

img

分析语句和规则编译之后生成运行子图,每一条语句和规则对应一个子图,此时需要集中所有规则进行图优化,分为四个流程:

  1. 第一步是图融合,图融合涉及子图融合,即将规则集中所有子图融合成一个运行图,然后进行图节点语义融合、时间窗口归并、引用公共资源优化;
  2. 第二步是数据流优化,降低图规模,减少传输数据量,主要进行 Key 前置、语义等价节点融合、网络吞吐均衡,减少数据倾斜、节点归并,大幅压缩超大图节点数量等操作;
  3. 第三步是字段裁剪,降低传输事件大小,进而降低网络 IO 压力,主要包含图上字段推导和裁剪以及字段归并;
  4. 最后是代码生成,将分析语句和规则语义生成代码,并将执行图映射到 Flink DataStream API。
img

实时计算一个核心要素是时间,不同的时间处理方法和实现方案会带来差异很大甚至完全不同的计算结果。实时分析中,时间主要影响两个功能,即时间窗口和时间线。

在安全分析场景里,时间窗口需要支持通用滑动时间窗口、也要支持自然时间滑动时间窗口,比如每年,每月,每星期等自然,甚至是变长时间、需要支持层叠窗口重复数据融合,降低数据存储量、能自动进行重复计算消除,避免重复告警、时间定时器归并、事件乱序正确处理,避免事件乱序引起错误计算。

时间线可分为事件发生时间和时间处理两类,进而延伸出时间精度,不同的时间精度会对处理性能和存储造成很大的压力,比如需要对时间进行排序的场景。由于实时分析中事件可能是乱序的,因此需要支持延迟时间,解决大部分因为乱序而造成的计算不准确问题。部分计算场景涉及系统时间<->事件时间之间的相互转换,需要能提供两种时间的转换计算方法。由于执行图是大量子图融合而来,因此需要同时支持对全局和局部时间水位进行管理,保证图上时间线能正确推进。

img

安全基线分为三类:

img

基线处理流程主要分为三个部分:基线学习、基线检测和基线路由,其中穿插事件过滤、时间窗口、基线降噪、基线管理等流程。基线学习流程包含从消息队列和存储中读取事件流,经过事件过滤和时间窗口聚合,事件流中可能包含噪音数据,还需进行数据降噪流程,最后基线学习流程学习输入的事件流程,生成对应的安全基线。学习完成的安全基线在进行基线管理流程之后用于异常检测,用于预测和异常检测,如果发现异常行为,则产生异常事件,输出到后续的处理流程,用于后续的业务的使用。用户在使用过程中可能需要修改或删除一些学习好的基线或者自己新建一个基线,这些基线的增删改操作通过基线路由功能来完成,基线路由流程将用户编辑的基线在图上路由之后正确的分发到对应的图节点实例中。

img

基线的周期分为 learn,ready,close,expire 四个阶段:

基线的计算由两种情况触发:

基线的输出分为基线异常事件输出和基线内容输出:

img

用户在使用过程中,可能会经常编辑已有基线或者自己根据一些分析和数据来新建特定场景的安全基线。基线编辑之后需要能下发到基线引擎中,这就涉及如何在线编辑和更新基线。

img

在基线学习过程中,通常学习周期是比较长的,比如最近一周、最近一个月等,长周期的学习通常会面临一个数据割裂的问题,比如学习最近一周的数据,但是现在是星期三,也就是说最近一周的数据分成两个部分,其中从星期一到星期二的数据是保存在历史数据存储中,星期三及之后的数据是实时发生的,这里会涉及历史和实时数据融合学习的问题。这里可以分为三种情况:

img

基线学习的数据中通常会有一些噪音,这些噪音可能是某一次异常操作,比如用户某一次的异常登录,也可能是数据采集的过程中引入的错误数据,因此需要对噪音进行消除,来增加基线准确性,减少误报。

数据降噪根据数据类型可以简单分为数值类数据降噪和非数值类数据降噪两种,这两种处理方式会有不同。噪音的判定主要有四种:

数据降噪时候通常会需要保存相关数据,比如要用历史的数据来进行噪音判定,那么就需要存储一些历史的关键数据,历史数据通常非常多,为了降低存储,需要进行优化降噪数据结构的优化,比如最小化降噪关键数据,字段裁剪等。

img

引擎运行中一个非常重要的部分是如何监控以及保护资源。涉及到三个方面的内容:

img

用户在使用过程中经常要对规则进行操作,这些操作会引起运行任务的启停,启停过程中数据需要前后保证一致,不能因为启停而导致保存的数据丢失。

Flink 本身支持任务重启时重新加载数据,但是在基线引擎这里问题会比较复杂,因为用户可能会停用、启用或者修改规则,这会引起规则集发生变化,进而引起执行图发生变化,为了保证任务重启时不变的规则能正确从 savepoint 加载到到正确的数据,需要支持图局部状态稳定,即在图优化过程中图局部变化不影响其它子图,同时在代码生成过程中保证稳定子图生成稳定的执行代码,变化规则只影响与其相关的子图,其它不变的规则不受影响。

基线学习过程中通常保存大量的中间数据,为了加快 savepoint 和 checkpoint 速度,需要对复杂数据结构的序列化和反序列化进行优化,还需支持增量状态。引擎服务通常需要对多用户提供分析服务,因此还需对多用户多任务的状态进行管理,保证每个任务都能准确关联到其对应的状态数据。

img

四、实践与展望

分析引擎提供的实时安全分析能力服务于公司大部分大数据产品,比如大数据与安全运营平台、态势感知、EDR、云安全、工控互联网、智能安全等。随着这些产品部署了近千个客户,包括央企、政府、银行、公安等,同时还支持常见国产化系统和各类私有云。部署的环境从一到几百台集群规模,事件量从几百到上百万 EPS,还参加和支持了上百次部委和央企的专项行动。

img

随着知识的扩散和各类安全漏洞的频发,各种攻击手法和安全威胁也层出不穷,这对安全分析能力的要求也越来越高,需要引擎能持续进行更新和优化,以提高对安全攻击的检测能力,后续需要继续将更多更好的行为学习算法和技术与安全基线集成,提高安全基线的检测能力。同时期望能将引擎的一些实践通过某些渠道回馈到社区,让更多的人能使用其中好的设计和实践。

点击查看直播回放 & 演讲PDF

上一篇下一篇

猜你喜欢

热点阅读