APP下载

融合密度聚类与集成学习的数据库异常检测

2021-03-21刘昕禹高明慧

小型微型计算机系统 2021年3期
关键词:离群分类器聚类

李 勃,寿 曾,刘昕禹,高明慧,马 力,徐 剑

1(南瑞集团有限公司(国网电力科学研究院有限公司),南京 210061) 2(北京科东电力控制系统有限责任公司,北京 100192) 3(国网辽宁省电力有限公司,沈阳 110003) 4(东北大学 软件学院,沈阳 110169)

1 引 言

在网络空间安全领域,数据库系统是对攻击者最有吸引力的目标之一,许多网络攻击的最终目的就是获取数据库中的敏感信息.为此,数据库安全一直为企业界和学术界所关注[1,2].根据相关研究显示,数据库安全的最大威胁来自于系统内部,而不是外部攻击者[3].然而,传统的数据库安全技术更多的是采用被动防御的思想,无法有效地检测并阻止数据库系统内部用户的攻击行为.因此,研究数据库系统内部攻击检测方法就变得尤为重要[4-6].

异常检测是入侵检测研究领域中的一个重要课题,也是针对系统内部攻击的有效方法[7-9].但是,目前的异常检测方法主要是面向操作系统和计算机网络,针对数据库系统的研究成果相对较少.在早期的数据库异常检测研究中,是将数据库系统中数据、语义等特征和异常检测系统研究结合起来.Hu等人[10]利用数据依赖性挖掘器挖掘数据库日志中的数据关联关系,将不符合所挖掘的数据依赖性的行为识别为恶意行为;Kamra等人[11]构建了一种面向DBMS的异常用户请求检测方法.该方法的核心思想是对与数据库交互的用户配置文件进行学习,将偏离这些配置文件的用户请求视为异常;Panigrahi等人[12]提出一种融合信息源和信度更新的数据库异常检测方法,使用事务间和事务内特征进行异常检测,并使用了3种不同的表属性敏感度级别,以便跟踪高度敏感属性的恶意修改行为.但是,早期的数据库用户行为异常检测方法的误报率和漏报率都比较高.

为此,部分学者将机器学习、深度学习等方法引入到数据库入侵检测中来.Ronao等人[13]提出了面向关系数据库的基于加权投票随机森林的异常查询检测方法.利用加权投票对随机森林进行改进,使整个系统的性能得到进一步提升.但是,该方法仅针对的是关系数据库中的查询请求,在通用性方面有一定限制.Bu等人[14]提出基于深度学习和学习分类器的数据库入侵检测系统.但是,该系统的建模过程复杂,并且不能很好地支持动态更新.Brahma等人[15]利用人工神经模糊推理系统来获取用户行为特征,并以此为基础构建了数据库入侵检测系统.在该系统中,利用模糊推理方法和人工神经网络来生成了一些if-then规则.对于不符合这些模糊规则,用户行为则被标记为恶意的.Singh等人[16]利用关联规则和聚类分析在数据库使用模式中发现异常行为.在该方法中,通过聚类算法,根据用户的角色生成常规配置文件.如果新的用户行为不符合现有规则,则会被标记为异常.Bu等人[17]利用卷积神经网络(Convolutional Neural Network,CNN)和学习分类器系统(Learning Classifier System,LCS)提出了一种混合的数据库入侵检测系统.在该系统中,LCS用来设计新的事务规则,以便识别数据库审计日志中的任何异常事件,而CNN则用于分类.Guevara等人[18]利用了Markov链,通过分析用户执行的操作序列,构建出用户的行为模式.但是,该方法需要大量的用户操作记录作为训练集.Sallam等人[19]采用朴素Bayesian分类和二分类两种方法进行数据库异常检测,该方法检测准确率较高,但是误报率较高.Jayaprakash等人[20]提出基于朴素贝叶斯监督分类器的数据库入侵检测系统,通过对具有侵入性的SQL语句进行分析来检测异常行为.

密度聚类[21]能够根据数据集的稠密度来实现任意形状的聚类,并能有效处理噪声点,这些特点较好地符合数据库用户行为特征,可以用于数据库用户行为异常检测[22].但是,密度聚类受监测样本的稳定性影响较大,如果监测样本出现一定程度的随机性突变,则聚类效果不佳,进而导致异常检测方案出现较高的误报率.

集成学习方法以学习过程中的良好性能而著称,相比于单分类器,其在异常检测工作过程中具有更高的检测精度.目前,已有不少学者将其应用到入侵检测中来.Gaikwad等人[23]利用Bagging方法实现网络入侵检测系统.之后,Gaikwad等人[24]又将改进后的决策树REPTree作为Bagging方法的基类,从数据集中选择相关特征以提高分类准确性并减少检测的误报率.

综述所述,目前数据库异常检测方法所使用的技术方案相对单一,例如仅应用聚类或仅应用机器学习分类器,缺少多种方法的融合运用,进而导致已有方案的效率和检测准确率较低.为此,提出了一种基于密度聚类与集成学习的数据库异常检测方案.在该方案中利用OPTICS聚类算法[25]对数据库用户的SQL操作进行聚类,获取用户的异常行为特征,并形成先验知识;对于未能获得簇标签的行为数据,交由集成学习作进一步分析,集成学习中采用使用Bagging、Boosting和Stacking方法组合多种个体分类器(朴素贝叶斯(Naive Bayes,NB)分类器、决策树(Decision Trees,DT)分类器、k-近邻(k-NearestNeighbor,kNN)分类器、多层感知器(Multilayer Perceptron,MLP)分类器进行分类,并创建用户行为特征库.以用户行为特征库为基础,在尽可能减少误报的情况,实现异常检测.

2 预备知识

2.1 OPTICS算法

OPTICS是一种不需要用户提供特定密度阈值的密度聚类算法,是对DBSCAN算法(Density-Based Spatial Clustering of Applications with Noise)的改进,其并不显式地产生数据集聚类,通过对输出簇进行排序,来表达数据的基于密度的聚类结构.和DBSCAN不同,OPTICS算法可以获得不同密度的聚类,因为OPTICS算法输出的是样本的一个有序队列,从这个队列可以获得任意密度的聚类.

OPTICS算法的核心思想是:对于簇Ci中任意对象p,在其ε邻域Nε(p)中,至少存在MinPts-1个其他对象,其中ε代表欧里几何距离半径,MinPts表示使得对象p作为核心对象在它的ε邻域中至少应含有的对象数量.

OPTICS算法中,存在核心距离core-distance(cd)和可达距离reachability-distance(rd)两个重要信息.

定义1.对象p的核心距离cdε,MinPts(p).设半径参数为ε′,使得p的ε′-邻域刚好包含MinPts个对象,若p不是关于ε′和MinPts的核心对象,则p的核心距离没有定义,如式(1)所示.

(1)

定义2.对象p到对象q的可达距离rdε,MinPts(p,q).是使p从q密度可达的最小半径值,其中q必须是核心对象,并且p必须在q的领域内,如式(2)所示.

(2)

OPTICS聚类算法,最终将根据识别结果输出数据集的簇排序,该排序给出了对数据结构化和聚类的一般观察.

2.2 局部离群因子

局部离群因子(Local Outlier Factor,LOF)通过计算样本点在局部的分布情况,以数值方式反映其离群程度,是一种基于密度的离群点检测算法.该算法会给出数据集中的每个点计算一个离群因子LOF,通过判断LOF大于或小于1来判定是否是离群因子.若LOF远大于1,则认为是离群因子,接近于1,则是正常点.

定义3.局部可达距离lrd.该距离被描述为对于对象p,其MinPts邻域中其他元素平均可达距离的倒数,如式(3)所示.

(3)

其中NMinPts(p)表示在所有被聚类元素中,邻近元素p的MinPts个元素序列.

LOF值计算,如式(4)所示.

(4)

若LOF值小于1时,则表明该点所在位置相对稠密,不是离群点.LOF值更能描述一个点的离群程度,但由于其计算量较高,因此通常先采用聚类算法粗略计算出离群点,再对离群点进行LOF值的计算.

3 方案构建

3.1 检测流程设计

本文提出的数据库异常检测方案,基于OPTICS算法与集成学习来实现异常检测,检测流程如图1所示.具体检测过程包括:数据预处理、训练、学习模型构建以及异常检测.

图1 检测流程Fig.1 Detection process

方案的具体业务流程如下:

Step 1.数据预处理.在数据预处理阶段,首先,对数据库用户的SQL操作日志进行数据预处理,提取用户行为特征值,并转化为[0,1]区间的数值型数据,以便后续的聚类算法与集成学习模型所使用.

Step 2.训练.在训练阶段,训练数据被划分为两个集合,即SmallSet和BigSet,SmallSet包含规模较小的训练数据,BigSet包含规模较大的训练数据.采用OPTICS算法,分别对上述两个集合进行聚类.SmallSet聚类后的结果作为集成学习模型的先验知识;对于BigSet中,经聚类后未形成簇的数据,利用局部离群因子计算离群程度,对于仍然离群的训练数据,则交由集成学习模型进行处理.

Step 3.学习模型构建.在学习模型构建阶段,使用集成学习方法进行识别,选用NB、DT、K-NN和MPL作为个体分类器,使用Bagging、Boosting和Stacking作为组合模型,由训练阶段产生的聚类结果作为先验知识完成分类计算,对最终的分类结果进行特征存储.

Step 4.检测.在检测阶段,将新的用户行为与特征库中的已有特征进行匹配,从而实现对用户的异常行为检测.

3.2 数据预处理

本方案分析的用户行为数据来自于用户产生的数据库SQL操作日志.这些操作日志,需要进行预处理才可以进行分析.本文利用由元组User_behavior< u_id,query_type,query_num,table_list,attr_list,time_slot,ip_seg >来描述用户行为.User_behavior元组的元素含义如表1所示.

表1 User_behavior元组中的元素含义Table 1 Meaning of elements in User_behavior

为使User_behavior所表示的用户行为数据可以为密度聚类、集成学习所能够处理,需要将User_behavior元组中的元素映射为数值型数据,并进行归一化处理,转化为[0,1]之间的数值.对于不同类型的数据,具体的处理方式如下:

1)对于连续性数据,保留其数据原样;

2)对于离散型、非数值型数据则通过建立全局的散列表,对数据进行一个整型数值的映射,该映射值仅需要保证在同一元素下唯一即可.

3)对于元组型数据,元组内部元素采用整数数值进行映射后,再对元组本身进行数值映射.

下面通过一个示例进行说明.

某元组型数据由两条SQL查询语句构成:

SQL1:SELECT x,y from
Table T1 where z=1

SQL2:DELETE from T2 where n =2

共涉及两个数据库表table_list ,两个数据库表字段attr_list ,两种查询类型query_type,将非数值类型的元组映射为数字表示形式,每个数值将唯一表示一种元素的状态.

假设query_type ={1,4},table_list ={2,4},attr_list ={1,6}.若本次请求发生的时间段为上午8:00-8:30之间,则time_slot为16,用户请求源IP网段归属于部门3,则本次请求描述为:<3,{1,4},2,{2,4},{1,6},16,3>,而对于{1,4}、{2,4}、{1,6}这些数据继续使用散列表映射为具体的单个数值,如1、3、6,使得整个元组由7个数值型数据所描述.

3.3 训 练

在训练阶段,利用OPTICS算法分别对SmallSet和BigSet进行聚类.

在SmallSet上应用OPTICS算法来构建先验知识.首先,将参数ε与MinPts作为输入,根据式(1)和式(3)计算出每个数据点的核心距离和可达性距离值后,以升序方式产生数据点cd的rd值,通过累积具有相邻rd值的数据点来形成聚类簇.

在BigSet上同样应用OPTICS算法,那些被成功标记为簇标签的训练数据将被标记为正常的用户行为;而对于未能获得簇标签的训练数据,将利用局部离群因子计算其离群程度LOF,对于LOF值小于1的训练数据同样被标记为正常的用户行为,而对于其他的训练数据将交给下一阶段处理.

训练过程如算法1所示.

算法1.训练算法

输入:SmallSet S1与BigSet S2,|S1|≥|S2|;聚类参数ε、MinPts

输出:不确定行为集合Su、可供集成学习模块使用的先验集合Sk

1.Sk=OPTICS(S2,ε,MinPts)

2.S1c=OPTICS(S1,ε,MinPts)

3.for k=1 to |S1c| do //遍历Sn

4. if S1c[k]没有簇标号 then

5. LOFSk=LOF(S1c[k])

6. if LOFSk<1 then

7. S1c[k]列入正常行为表GHT

8. Output(“正常行为”)

9. else

10. S1c[k]列入不确定行为集合Su

11. end if

12. else

13. S1c[k]列入正常行为表GHT

14. Output(“正常行为”)

15. end if

16.end for

17.返回[Sk,Su]

3.4 学习模型

本方案的集成学习模型基于Bagging、Boosting和Stacking模型,同时选择朴素贝叶斯(Naive Bayes,NB)分类器、决策树(Decision Trees,DT)分类器、k-近邻(k-Nearest Neighbor,kNN)分类器、多层感知器(Multilayer Perceptron,MLP)分类器作为集成学习模型的个体分类器.

在Bagging、Boosting和Stacking的复合分类器中,将使用NB、DT、kNN和MLP分类器进行分别测试.Bagging模型中通过投票方式获得最终的分类结果,能够有效降低使用单一分类器时的方差;在Boosting模型中,通过迭代修正测试数据集权重的方式,提升模型的精确度.Stacking模型中将分为两层学习器,如图2所示,在第0层(基学习器)通过k折分段的方式拆分原始数据,交由其他个体分类器进行分类预测,再将结果递交至第1层(元学习器)获得最终的结果,从而实现更高的准确性与较低的误报率.

图2 集成学习模型Fig.2 Ensemble learning model

学习模型构建算法如算法2所示.

算法2.学习模型构建算法

输入:训练阶段输出的集合Sk,Su

输出:正常行为、异常行为表.

1.Bag=Bagging(Su,Sk)

2.Boost=Boosting(Su,Sk)

3.Stack=Stacking(Su,Sk)

4.for k=1 to |Su| do

5. if(Su[k]∈Bag)‖(Su[k]∈Boost)‖(Su[k]∈Stack)then

6. Su[k]列入正常行为表GHT

7. Output(“正常行为”)

8. else

9. Su[k]列入异常行为表MHT

10. Output(“异常行为”)

11. end if

12.end for

3.5 异常检测

对于各阶段已经正确识别的用户行为进行特征提取,并将正常行为特征保存到正常行为记录表(Normal Behavior Table,NBT)中,将异常行为特征保存到异常行为记录表(Abnormal Behavior
Table,ABT).在OPTICS与LOF计算中给出的正常请求都将更新至NBT中.同时,若集成学习模块中识别出的正常或异常的请求,也相应的保存到NBT或ABT中.对于应用系统新产生的数据集,将优先向NBT与ABT中进行匹配.表2给出NBT的存储格式,表3给出ABT的存储格式.对于未能准确匹配的新的数据集,交由集成学习模块继续进行识别.

表2 正常行为记录表Table 2 Recordof normal behavior

图3 异常检测流程Fig.3 Anomaly detection process

图3给出了异常检测的流程.

表3 异常行为记录表Table 3 Recordofabnormal behavior

4 实验分析

本实验环境是在CPU:Intel(R)Core(TM)i7-67003.40GHz,内存:16G,操作系统为Windows 10的计算机上进行.

4.1 测试数据集

由于已有的公开数据集无法满足本实验的测试需求,因此,参照Charissa等人[26]所提出的数据生成原理模拟产生了本实验所需的测试数据集.

首先,构建可以模拟生成符合高斯分布的数据产生模拟器,分别产生用户正常行为与异常行为数据.

1)对于用户正常行为,通过随机创建多个簇中心,以该簇中心模拟的创建符合标准正态分布的随机样本点来模拟用户一类的正常行为,但此类行为并不完全重合,存在微小的差异.

2)对于用户异常行为,假设这种行为相对于大量的正常用户行为而言是少量存在的.因此通过数据产生模拟器,创建少量、高方差的记录.通过增大方差,使得这些行为数据表现的更加分散.

图4 模拟器生成的一组二维数据集的分布情况Fig.4 Distribution of a set of two-dimensional data sets generated by the simulator

为验证模拟器产生实验数据的效果,创建一组由30000个二维数据构成的数据集合,其分布如图4所示,在图4中圆状点对应大量的正常行为,“x”状点对应异常行为.其中可以直观的观测到异常行为中有少部分存在于密集的正常行为中,且也有少部分正常行为分散在簇中心较远区域,该模拟结果恰好符合数据库用户行为的实际情况.

4.2 实验结果

本实验使用本文所设计的模拟器来产生30000条测试数据集.在测试数据集的每条记录中包含7个属性元组,以及其对应的“正常”或“异常”标签.

采用准确度(Accuracy,Acc)、精度(Precision,Pre)、真阳率(True Positive Rate,TPR)、假阳率(False Positive Rate,FPR)、F-measure 对本方案进行实验分析.Acc表示正确检测请求占全部请求的百分比,如式(5)所示;Pre表示在全部样本中正确检测的请求百分比,如式(6)所示;TPR表示在实际为正常请求中,检测为正常请求的百分比,如式(7)所示;FPR表示在实际为恶意请求中,检测为恶意请求的百分比,如式(8)所示;F-measure是Pre与FPR的加权调和平均数,如式(9)所示,当F-measure较高时则能说明实验方法有效.

(5)

(6)

(7)

(8)

(9)

OPTICS聚类对于本文所提出方案的性能有着非常重要的影响.而OPTICS聚类的性能主要由参数ε与MinPts决定.为获得最优的聚类效果,对参数ε与MinPts的不同取值情况下的OPTICS聚类性能进行测试,测试结果如表4所示.

表4 OPTICS聚类在ε与MinPts不同取值情况下的性能Table 4 Performance of OPTICS clustering under different values of ε and MinPts

观察表4中1、2、5、6对照组可知,参数ε越小,其FPR值越来越小,F-measure越来越大,整体性能得到提升;但参数ε小到超过数据阈值时,将无法完成聚类.观察2、5、7对照组,整体识别效果良好,但由2-4、6-7对照组数据可知,MinPts值越大,其聚类准确率有所下降.综述上,对照组2,即ε=0.01且MinPts=10时,聚类效果最优.

表5 个体分类器在单一使用与复合模式下的性能Table 5 Performance of individual classifier in single use and composite mode

因此,后续实验是在ε=0.01且MinPts=10的情况下完成的.

表5与图5给出了当ε=0.01,MinPts=10时,在集成学习模块中各个体分类器在单独分类和复合模式下分类的性能情况.

图5 个体分类器在单一使用与复合模式下的性能对比Fig.5 Performance comparison of individual classifier in single use and compound mode

由表5与图4可知,使用复合模型相比于个体分类器在性能结果上有不同程度的提高.在不同分类器模型之间,MLP分类器具备较高的Pre、TPR以及较低的FPR,其F-measure分值也是最高的,该分类器在Bagging与Boosting模型下,提高Pre的同时也大幅度降低了FPR.

表6 4种个体分类器在Stacking模式下不同搭配的性能Table 6 Performance of four individual classifiers with different combinations in Stacking mode

表6给出了当ε=0.01,MinPts=10时,使用NB、DT、kNN和MLP分类器,在Stacking模型下的性能.其中在NB作为元分类器时,其他3种分类器为基分类器时,各项指标表现最好.

表7 系统检测结果Table 7 System detection results

通过上述实验结果表明,当聚类参数ε=0.01,MinPts=10时,集成学习中Bagging、Boosting复合模式情况下采用MLP个体分类器,Stacking模式下采用NB个体分类作为元学习器相比于其他组合而言具备更好的系统识别准确率和更低的误报率,可作为系统最优的实现策略,实现后的系统异常检测结果如表7所示.

表8 与同类方案的对比分析结果Table 8 Comparative analysis results with similar scheme

Gaikwad等人[24]所提出的方案是目前数据库异常检测领域中的典型方案,与本文所提出的方案属于同类方案,因此将两种方案进行对比,对比结果如表8所示.由表8可知,本文所提出的方案在所有指标方面均具有一定的优势.

5 结束语

本文提出了一种基于OPTICS聚类与集成学习的数据库异常检测方法.对用户的SQL操作日志数据集进行预处理,由OPTICS聚类算法构建用户行为特征,利用Bagging、Boosting和Stacking算法组合的集成学习模块对用户行为作进一步分析,并创建用户行为特征库.基于用户形成特征库,实现数据库异常检测.通过模拟数据库用户行为数据,对本方案进行测试,结果表明本方案能以较高的效率和准确率检测出数据库用户的异常行为,具有一定的实际应用价值.

猜你喜欢

离群分类器聚类
一种傅里叶域海量数据高速谱聚类方法
少样本条件下基于K-最近邻及多分类器协同的样本扩增分类
学贯中西(6):阐述ML分类器的工作流程
基于相关子空间的高维离群数据检测算法
基于数据降维与聚类的车联网数据分析应用
基于朴素Bayes组合的简易集成分类器①
基于模糊聚类和支持向量回归的成绩预测
随感
近荷独坐
基于AdaBoost算法的在线连续极限学习机集成算法