一、背景介绍

安全运营人员每天都会收到海量的攻击事件告警信息,这些告警涉及大量实体,导致安全运营人员无从下手,运营效率极低。另外,这些告警信息一般以列表的形式展示,无法直观地展示攻击关系,不利于安全运营人员快速感知异常。最后的结果就是,虽有海量告警,但绝大多数都没有得到及时处理,这样对企业造成的安全隐患极大。

网络环境本身具有典型的图结构,网络安全问题也因此很自然的与图数据结构、图算法结合起来。在Google提出知识图谱的概念之后,以知识图谱技术为基础的智能应用方案,已经在推荐系统、问答系统、搜索引擎、社交网络、风控等领域广为使用。在安全领域,最常见的图就是各大安全产品中的可视化界面中资产关系图、攻击向量图等。通过图进行数据关联和推理方面,国内外厂商也在不断的进行深入的尝试。很自然的,腾讯安全智能团队也决定用图挖掘来解决安全运营人员遇到的困境:

二、目标

图结构的天然优势是可以非常直观地展示安全问题中的攻击链路,方便安全人员进行事件调查。但我们还需要确定安全事件的优先关注顺序,帮助安全运营人员用最小的精力解决最重要的问题,而不是淹没在安全事件的海洋中。因此,我们的目标确定为:从海量安全事件中提取最值得关注的事件,并以图谱形式反馈,协助安全人员快速定位问题,提升运营效率。

这里最值得关注的事件有两个特征:恶意程度高、波及范围广,这两个特征将作为对子图进行打分排序的最重要依据。换句话说,我们的主要目标是用最合适的方法抽取子图,并基于以上特征对子图进行排序。

三、数据特征描述

基于管家现有的安全日志,我们目前主要研究的是IP攻击关系图。节点表示IP,边表示攻击事件。

其中,IP节点的特征包括:出度,入度,内外网类型。边的特征包括:事件次数,事件整体频次,严重性,置信度,端口号,关联的md5、漏洞及domain信息。基于以上特征,再联系业务场景,计算出IP节点和边的权重分值。

四、 子图抽取算法探索及应用

如果把网络安全场景下所有的IP攻击链路画出来,会发现整体的攻击网络是由很多个不同的社区组成的。这样的社区在安全场景中是有意义的:同一个社区内的节点联系紧密,可能出现了大量类似的攻击事件或同一个节点受到了大量不同节点的攻击,也可能发生了大量的互相攻击。而不同社区间的节点联系较弱。

如果可以找到这样的社区,既不丢失全局视角,又可以通过关键节点快速锁定调查范围。我们主要尝试了以下三种抽取子图的方法:

1. 全路径子图抽取

主要思路是先利用pagerank算法结果对所有起始节点排序,然后对每个起始节点依次不断拓展子图,直到不能继续拓展为止。对于被多个起始点直接或间接攻击的目的节点,优先划分到起始点排序较高的子图中去,但保留和其他起始点的攻击关系,如下图中的B1节点,同时被A1,A2节点攻击,但A1>A2,所以B1只保留在A1的攻击链条子图1中,同时A2->B1的关系也保留到子图1中,这样可以保证没有损失任何一个攻击关系。

对实验数据进行处理,筛掉仅有1条边的简单子图后,最后得到30+个有结构的子图,覆盖了全部节点的75%,子图规模不等,涉及的节点数范围:3~1800。代入节点和边权重进行计算后,得到排名第1的子图结构最复杂,最长路径是3,包含3个中间节点,如下:

该方法在保证尽可能减少整体信息损失的情况下,为每个子图攻击链提供了一个全局视角。但缺点是起始点排序越高的节点,所生成的子图信息越完整,排名较后的起始点丢失信息较多。

2. Louvain社区发现算法

社区发现算法的主要思想是通过不断迭代计算模块度,最终得到模块度最大的社区划分。模块度用来衡量社区内部成员的紧密度,所以通过运行该算法,连接紧密的节点会形成一个社区,连接不紧密的边可能会被截断。

模块度计算公式如下:

但这样的话,很有可能断掉一些安全场景下有意义的边,比如下面这种情况:

为了保证这种边不被断掉,我们对模块度计算公式进行了修正,为所有的边都赋予权重,尤其是上图这种边会赋予较高权重,修正后的模块度增益公式如下:

基于修正后的模块度公式,我们取得了较为理想的社区划分结果。下图是攻击链路全局图,有颜色的部分代表排名TOP10的社区:

TOP10社区中比较有代表性的图如下:

该方法通过全局视角,用图谱展示攻击链路,非常直观;生成的TOP10社区威胁程度最高,覆盖了93%+的攻击事件;覆盖范围很广,可以覆盖到75%左右的节点和边,其中外网ip覆盖比例高达99%。

3. 基于k-core的子图抽取算法

从上图可以看出,基于改进模块度的社区发现算法存在子图超大的问题,top子图中可能存在上千个节点,其中包含了大量的叶子节点,然而这些叶子节点并不是最值得关注的。将它们全部展示会对web页面的性能造成挑战,同时会引入很多干扰信息,不利于运营人员快速决策。

安全运营人员更关注的是图中的复杂的结构以及高权重的边,因此我们又尝试了K-Core算法。K-Core算法是简化复杂网络并得到核心子网络的算法之一,可以帮助我们从复杂的关系网络中提取高度相关的子结构。一个图的K-Core是指反复去除“度”小于k的节点后,所余下的子图所有的节点度数都为k,如下所示:

具体做法是,将全局图拆分成2-core和1-shell两部分,然后对2-core部分的图使用前面的社区发现算法进行切割,对1-shell部分的图直接生成连通子图。最后将两部分子图合并后按照统一的规则进行打分。

最终达到的效果:关注子图的量级大大降低,将top子图的节点数量从1000+降到不到100,并且能覆盖到全部的高危节点。这个方法也是目前产品最终采用的算法。

五、 子图评分

以(源ip,目的ip,事件)构成的三元组作为子图的基本组成单位,因此计算三元组的得分就变得非常重要。跟安全运营人员充分讨论后,三元组的得分主要由1).是否告警,2).事件发生频次,3).源端口号数量,4).目的端口号数量,5).是否关联用户名、md5、domain以及脆弱性信息等决定。做法是:先对每一个特征进行统计,然后给出1-3的评分,最后累加得到该三元组的总得分。

1.边得分:

即为两个节点之间所有三元组的得分累加和。

2.节点得分:

主要从两个方面来衡量节点的重要程度:1).节点所在的网络复杂度,用core_number来衡量;2).节点和周围节点的联系,主要通过累加所有包含该节点的三元组得分后得到。

得到两个维度的分数后进行相乘计算,然后根据统计分布进行打分:1,2,3,从而获得每个节点的严重性标识。如下:

3.子图得分:

主要从三个方面衡量子图严重性:

1).子图结构复杂度,主要用平均core_number来衡量;2).最长路径严重程度,主要由最长路径边权重累加得到;3).子图规模及整体权重,主要通过所有边权重累加获得。

得到的三个指标在量级上差异较大,因此需要进行对数处理,接下来将对数处理后的指标进行相乘,得到子图的总得分。最后再通过分段函数对总得分进行归一化处理,得到0-100的分值。如下:

六、结论及展望

1.结论

本文通过对安全运营场景下的事件攻击链进行图挖掘分析与探索,将海量安全事件聚合成重点突出的top子图社区,并以可视化的形式展示:既有全局视角,又可以轻松抓住重点关注事件,大大提升了安全运营人员的工作效率。

目前探索版的图分析结果已经得到了运营人员的认可,正式版本还没有部署给客户,因此上线效果还有待时间验证。目前产品上线效果图如下:

2.展望

目前诸多国际安全厂商正在加紧智慧安全技术的布局,其中的核心就是网络安全领域知识图谱的构建工作,分为四层:基于资产、用户等信息的环境数据图,基于告警、安全日志的行为数据图,基于外部威胁情报的情报数据图和基于各类知识库(如ATT&CK、CAPEC、CWE等)的知识数据图。现在这方面国际领先的产品是IBM Watson,它主要基于企业数据和威胁情报信息,通过机器学习获得的训练系统支持理解、推理、学习及自然语言交流的能力,从而实现自动化快速、准确地定位和响应威胁的能力,大大提升了安全运营人员的效率。

现在我们还只是利用了告警日志进行优先级评估及场景预测,距离自动化分析及推理还有一些距离。接下来我们需要做的是不断补充安全大数据,构建完备的安全知识图谱,然后结合人工经验去做建立一套安全事件调查系统,从根本上解放人力。(宜娜、毛婷伟)

声明:本文来自腾讯安全智能,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。