Darktrace异常行为检测算法

算法架构

算法的输入是某个主机设备的网络特征数据,如流量、SMB读的请求次数、DNS请求次数等。主机的行为数据由两个部分组成:

  1. 原始网络特征数据;
  2. 计算数据,如平方根、对数、SVM支持向量机输出、偏离因子等;

对于历史数据,和实时监测到的数据,主要有三类算法进行计算:

  1. 正常行为建模:使用统计概率分布与极值分布模型。
  2. 新特征数据异常检测:使用贝叶斯定理。
  3. 异常程度计算:使用贝叶斯因子来衡量。

正常行为建模

行为数据是一个向量,如果用M表示一个数据采集点,用m表示任意一个可能的采集数据,用m(1)、m(2)、m(3)、……、m(N)表示N个历史采集数据,注意这些历史数据是按升序排列。那么正常行为模型由两个部分组成:

  1. 当m<u时,采用经验方式进行概率曲线拟合;
  2. 当m>u时,使用极值分布算法进行拟合:

具体算法就是对u这个值一个一个的试,直到两个曲线的积分和为1为止。

有了这个正常行为概率模型P(m)之后,对于任意一个采集数据m,其侧尾概率P(M>m)就有了含义:

  • P(M>m)是m数据异常的衡量度,值越小,表明异常的可能性越大。

异常行为检测

异常行为检测分为两个维度:

  • 单个采集点数据的异常;
  • 整个数据向量的异常;
单个数据的异常检测

依据贝叶斯定理单个数据的正常、异常概率分别为:

其中π(N),π(A)为主机所在的网络中,正常状态、异常状态的先验概率,这个值可以直接由安全人员设定,然后根据经验进行调整。

单个数据的的异常概率,并不能用来计算整个数据向量的异常的概率,因为整个主机的异常,是多个单数据异常的组合;因此,使用单个数据正常的概率来计算整个主机的异常。

整个数据向量的异常检测

计算思路:排除全部数据都是正常的情况,剩下的都是异常的,因此,整个主机的异常概率为:

这个算法有个假设:每个采集点都是独立不相关的,但是实际情况是,很多采集点数据都是相关的,因此需要计算历史采集数据的相关矩阵,这个过程算法和计算比较复杂。去除相关性的大体思路为:

  1. 计算每个数据采集点的概率密度函数
  2. 依据概率密度函数计算历史数据的转移矩阵
  3. 通过转移矩阵计算相关矩阵
  4. 通过相关矩阵计算某个概率阈值
  5. 对于每个数据向量,丢弃概率超过这个阈值的数据点,得到一个新的数据向量数量n’,n’<N
  6. 再次根据概率密度函数,构造一个n’个数据的转移向量,并构建一个相对应的新的概率分布函数。

结果就是,原来有N个输入数据,通过去除相关性之后,变换成了n’个转移向量数据和概率分布,结果就是对数据做了降维。

那么去除相关性的异常概率为:

异常度计算

Darktrace检测到异常概率之后,需要向管理员呈现可理解的的告警。概率的大小是一方面,另外一方面是要了解事件的严重程度。

通过贝叶斯定理,可以将异常事件概率公式中的贝叶斯因子用作严重程度的一个衡量因素,另外一个因素是网络环境中的事件正常概率π(N)和异常概率π(A),为了摆脱对这两个因素的依赖,可以找一个确定的参考事件,计算这两个事件的异常严重程度值,相减即可得到一个相对的严重程度值:

在实际使用中,需要设定一个阈值来判断哪些严重程度的事件需要优先处理,根据经验,采用以下函数对严重程度做了重新调节,方便在实际使用用调节成某个范围,如[0, 100]。

那么严重程度的值可以调节为:

其中αß为调节参数。

Leave a Reply

Your email address will not be published. Required fields are marked *