2.4 异常检测

2.4.1 异常检测的定义

对异常检测的问题描述可简化为如何定义与发现异常。关于异常的定义,Hawkins D M[188]曾提到:异常是在所观测集合中与大多数观测值不一致且可疑,并由完全不同的机制而产生的特殊样本或模式。其实异常就是与数据集中正常行为不一致的样本,可能是由数据本身的潜在特性所决定的,也可能是由系统错误或测量错误所造成的,或者是由客体的异常行为所造成的。

本书主要检测大数据平台中存在的网络异常。在互联网大背景下,从个体到公司层面,从用户到服务器端,常常面临着各种异常状况,如木马与病毒、DDoS攻击、突发流等。其中,木马与病毒是早年互联网个体用户常遭遇的异常情况,随着安全软件的不断发展,木马与病毒所带来的风险也越来越小。DDoS攻击代表网络攻击异常,突发流代表瞬间大量访问异常,因此,DDoS攻击与突发流事件是当前互联网面临的最主要威胁。这两种异常都能使访问流量急剧增大,从而导致网络性能下降,它们的主要区别在于DDoS攻击是网络黑客对Web服务器的恶意行为,而突发流则是海量用户大量访问网络的非恶意行为。因此,如何设计异常检测算法来检测异常数据,对大数据平台的安全保障有重大意义。

2.4.2 几类常见的异常检测算法

针对异常的发现,需要构建相应的异常检测算法。异常检测算法只能找出可疑且不一致的数据,使用户提高警惕,起预防或事后发现处理的作用。异常样本的处理方式依赖于不同的场景,由相关领域的专家负责进行相应的决策。根据不同的技术路线来分类,异常检测算法可在统计分析、规则领域、数据挖掘这三个方向上进行划分,具体如下。

(1)基于统计分析的异常检测算法,该类算法通过对给定初始数据集进行全面统计与分析,假定待测数据服从某一随机分布,通过不一致性检测算法来识别异常。该类算法的重点是对待测数据集进行全面的统计与分析,需要建立在概率统计理论的基础上,结合数据集统计特征、特征采样、分布情况与期望离群点范围等,从而建立行为模型。对于网络数据而言,系统将每次检测建立得到的行为模型与当前数据的统计特征合并,从而增量式地得到正常的行为模型。在算法运行过程中,通过将待测数据与正常行为模型比对来判断是否存在异常,当统计度量高于所设定的阈值时,进行异常告警。

①以基于高斯分布的一元异常检测算法为例

若当前存在n个数值数据 (e1,e2,…,en) ,则可求得这组数据的均值与方差。均值μ定义为

img

(2.1)

方差σ定义为

img

(2.2)

数据服从高斯分布,区域μ±3σ包含99.7%的数据,若计算后新的数据点不落在该区域内,则标识为异常点。

②以多元高斯分布下的异常检测算法为例

若给定数据为n维集合向量e=(e1,e2,…,en) ,可求出n维的均值向量imgn×n的协方差矩阵

img

(2.3)

假设在线情况下接收到新的数据e,该数据的异常概率值p(e) 如式(2.4)所示,通过p(e) 的大小,结合统计规律可判定该数据是否正常

img

(2.4)

基于统计分析的异常检测算法能通过分析历史数据提取宏观特征,构建正常行为的模型,能较好地应用于在线异常检测场景,具备优良的实用价值,其局限性是检测精度较低。

(2)基于规则领域的异常检测算法,该类算法通过结合专家经验建立相应规则库,采用规则库信息完成模式匹配过程,进而判定是否异常,常用于误用检测系统中。所谓的规则,主要是在某领域的专家提供的经验及业务知识的基础上,通过推理、判断及决策的方式而提炼出来的。该类算法的基本思想在于通过计算机能理解的语言描述异常的特征或模式,将真正的异常情况与日常的正常行为进行有效的区分。利用基于规则领域的异常检测算法的检测精度高、误报率小的优势,可以明确对异常进行解释。因此,当前产业界中的大部分异常检测系统都是依赖于规则进行建立的,规则库是否健全代表了检测能力的高低。

基于规则领域的异常检测算法虽然具有检测精度高、误报率低、易解释的优势,但是其局限性也是显而易见的。此类算法适用于对已知晓的异常进行检测,无法检测出未知的异常。此外,各种各样的网络攻击方式也使得基于规则领域的异常检测系统难以维持规则库的及时更新。随着海量数据的演变及系统环境的不断变化,构建规则库的代价也与日俱增,在维护规则库的同时容易出现冗余规则、矛盾规则、不相容规则的情况。此外,系统中的规则是通过专家人员的经验进行设定的,在系统中该条规则也是固定不变的,然而层出不穷的网络攻击手段使得基于规则领域的异常检测系统需要频繁更新规则库,这大幅增大了人工维护的代价。

(3)基于数据挖掘的异常检测算法,该类算法结合数据挖掘思想,首先将待测数据进行预处理使其转换为适用于算法挖掘的形式,再对这种数据进行相应的模式提取,若提取出的模式不满足正常行为判定,则归类为异常。基于数据挖掘的异常检测算法能够很好地排除在检测中人为干涉的成分。由于基于规则领域的异常检测算法存在种种局限性,且随着大数据技术的飞速发展,依赖于数据挖掘的异常检测算法已经成为异常检测研究领域中的热门。

基于数据挖掘的异常检测算法根据其检测方式,可进一步划分为如下三类。

①基于聚类分析的异常检测算法。聚类是一种无监督的学习,它将相似的对象归到同一个簇中,簇内的对象越相似,聚类的效果就越好。该算法的优势在于不必对数据目标类别进行人工标注,从而减小了异常检测算法在训练过程中的代价。现阶段的基于聚类分析的异常检测算法大体可分为两种:第一种主要是根据待测数据与正常数据的聚类中心距离来检测异常;第二种则是假定异常数据在总体中的占比较小,对数据进行聚类后,通过分析其聚类规模从而得出是否异常,聚类规模大的簇被标识为正常数据,剩下的则被标识为异常数据。该类算法虽然易于理解与实现,但是在大规模数据情况下,其时间复杂度过大且对异常数据敏感,从而会影响聚类的效果。

②基于分类分析的异常检测算法。该类算法主要通过有监督的方式训练大量数据,建立输入/输出关系的非线性映射,进而对待测数据进行分类判定。不同的分类算法决定了不同的分类效果,利用分类算法训练已有的数据,可构造出对应的分类器,因此,根据不同的数据类型采取不同的分类算法,是该类算法的关键。在分类分析中常用的算法有AdaBoost、决策树、人工神经网络等,此类算法不需要先验假设且对尚未出现的异常有良好的检测能力。不过基于分类分析的异常检测算法依赖于足够的数据样本,且训练过程较慢、计算代价较大。

③基于关联序列的异常检测算法。该类算法的重点在于通过发现数据中隐藏的关系模式,分析数据间存在的关联,进而提取正常行为的序列模式。当待测数据与序列无法配对时,则表示出现异常。通过构建关联规则或频繁集等方式可表达样本间存在的关联。这里所提到的规则区别于前面Snort系统所用到的规则,Snort系统所使用的规则是将专家经验总结并人工添加而成的,而在基于关联序列的异常检测算法中,用到的规则根据的则是算法自动提取出的数据之间的序列关系。基于关联序列的异常检测常用算法有Apriori、ARIMA等,该类算法简单且直观,但是存在一定的局限性,某些异常机制无法通过关联序列机制进行描述。