基于混合N-Gram模型和XGBoost算法的内部威胁检测方法
2022-08-18饶兰香施炜利孟莎莎胡少文胡必伟
孙 丹,饶兰香,施炜利,孟莎莎,胡少文,胡必伟,应 嵩
(1.江西省科技基础条件平台中心,江西 南昌 330003; 2.中国广电江西网络有限公司,江西 南昌 330006)
0 引 言
近年来,国内外内部威胁事件频繁不断发生。2018年,Nuance语音识别软件开发公司一名离职员工利用之前的账号登录业务服务获取将近4.5万公司客户的个人医疗数据信息,如生日、医保、个人健康、银行等个人信息[1]。Verizon数据调查报告显示,2019年国内外发生了41686起安全事件,其中包含2013起个人敏感数据泄露事件。有高达34%的数据泄露是由内部用户不规范或者恶意操作引起的[2]。
人们通常将恶意内部人员和内部员工的异常操作行为统称为内部恶意操作行为。目前对这种恶意操作的检查通常是结合用户日常操作系统日志,对用户行为进行分析,以确定是否存在异常行为[3]。近年来,国内外已经运用基于用户角色、基于用户命令行为、基于多域信息融合、基于跨域行为分析、基于多特征用户画像等技术用于内部威胁检测[4]。黄铁等人[5]研究了基于隐马尔可夫模型的内部威胁检测方法,利用Windows Native API方法,通过程序行为来检测异常行为。文雨等人[6]研究了一种新的用户跨域行为模式分析方法,并设计了一种面向内部攻击的检测方法。黄娜等人[7]研究了基于LSTM回归模型的内部威胁检测方法,通过对时间序列的回归分析,对用户行为序列进行检测。陈帅明等人[8]研究了基于shell命令的内部威胁攻击检测,通过分析用户操作行为规律,使用不同机器学习检测模型进行内部威胁检测。目前这些研究基本都是通过分析用户命令操作行为特征进行分析,采用机器学习算法构建检测模型来发现内部威胁攻击。目前的研究更多关注地是机器学习算法上的优化来提高检测准确性,未关注内部威胁检测特征码的区分度来提高检测的准确性。
本文首先设计内部威胁检测方案,然后对3种特征提取方法进行分析,提出一种基于混合N-Gram模型和XGBoost算法的内部威胁检测方法,最后通过特定度、灵敏度、准确度、F1值4项评价指标对实验结果进行分析,基于混合N-Gram特征组合提取方法不仅提高了内部威胁检测特征码的区分度,而且提高了特征提取的计算性能和准确性。同时能够准确有效地检测出内部威胁行为攻击,提高了内部威胁检测准确性。
1 内部威胁检测模型设计
内部威胁检测数据源通常为用户在系统中操作的各类系统执行命令数据。本文基于用户操作行为数据进行用户行为分析,及时发现异常操作,防止因误操作或者恶意操作造成的数据泄露危害[9]。内部威胁检测框架及流程如图1所示,检测框架如下:
图1 内部威胁检测框架及流程
1)数据收集。在主机服务器上收集用户登录及操作命令数据。
2)特征提取。采用文本处理技术将收集的文本数据特征转化成为数字数据特征。
3)建立检测模型。根据数据特征及数据样本集建立检测模型。
4)检测。将待检测样本数据输入到检测模型中检测。
5)模型优化。根据检测结果不断优化检测模型。
2 基于XGBoost算法的内部威胁检测方法
2.1 模型建立
基于XGBoost算法的内部威胁检测方法是一种有监督的机器学习方法,通过对已知类别的用户行为进行训练,归纳XGBoost检测模型,然后根据此检测模型判断待测样本的类别[10]。特征提取使用词袋和N-Gram模型,分类算法使用XGBoost算法,完整处理流程如图2所示。
图2 使用词袋和N-Gram模型的XGBoost算法处理流程
基于XGBoost模型的内部威胁检测方法通过对已知类别的用户行为命令块提取行为特征,将样本数据输入到XGBoost分类器进行训练,利用训练好的XGBoost分类器对待测样本进行检测,输出检测结果[11]。完成的检测流程分以下7个步骤:
1)读取SEA数据集数据。
2)提取词袋。
3)N-Gram处理。
4)手工划分训练集合测试集。
5)使用XGBoost算法在训练模型上训练。
6)使用XGBoost算法在测试集上预测。
7)验证XGBoost算法预测效果。
2.2 数据选择及处理
2.2.1 数据选择
2001年,Schonlau等人[12]第一次将内部威胁攻击行为分成伪装者(Masque-Rader)和叛徒(Traitor),其中伪装者指外部攻击者窃取了内部合法用户账号密码,冒充内部用户身份进行内部威胁攻击;叛徒指本身是内部合法用户,但其为来自组织内部的攻击者;随后该实验室建立了一个内部威胁攻击行为检测公开数据集SEA,该公开数据集被广泛用于内部威胁攻击行为检测研究[13]。
SEA公开数据集涵盖了70多个Linux系统用户的操作行为日志,这些数据主要来自Linux系统记录的用户操作系统命令。SEA公开数据集采集了每个用户的15000条系统操作命令,从用户集中随机选取50个用户作为正常用户,剩余用户数据集作为测试数据用来模拟内部攻击者发起的内部威胁攻击[14]。SEA公开数据集中的用户日志类似于图3中的命令序列。图3中命令序列显示了一个用户对Linux系统的一系列操作命令,如cpp(复制命令)、cat(查看命令)、env(查看系统已存在的环境变量)等。
图3 SEA数据集中的命令序列
SEA数据集中恶意操作数据分布具有统计规律,任意给定1个数据集命令块(数据集命令块指将SEA数据集中用户收集的所有日志命令按指定命令数量平均分成多个命令块的集合,如1个用户日志命令文件中包含15000条日志命令,将其按100个连续日志命令为1个命令块单元进行分块,形成150个命令块的数据集),其中含有恶意操作命令的概率为1%,而当1个数据集命令块中含有恶意操作命令,则其后1个数据集命令块中同时含有恶意操作命令的概率达到80%[14]。看出SEA数据集将连续数据块作为1个集合,用以模拟用户连续操作命令之间关联的攻击行为。另外,SEA数据集中黑样本偏少,虽然这更接近实际情况,但是却给人们在随机划分训练集和测试集时带来了挑战,如果使用常规的划分方法,有相当大的概率训练集中的都是白样本,所以本文的样本划分需要特殊处理,保证训练集中有足够的黑样本[15]。
2.2.2 数据处理
SEA数据库的数据文件把连续的100个操作命令作为1个操作序列,因此,15000个操作命令划分成150个操作序列。如果用户操作命令文件中不满100个或者不是100的整数倍,用cat命令补全成100个或者100的整数倍的命令文件再进行划分。连续cat命令不具攻击行为,对检测结果产生的影响较小。数据文件处理过程如图4所示。
图4 SEA数据集数据文件处理过程
SEA数据集数据文件处理伪代码:
x←np.loadtxt(命令文件路径,字符串类型) #将命令文件字符串转换成向量
x←x.reshape(150,100) #每100个连续命令为一组分成150个向量组
SEA数据集的标记文件记录了数据文件对应的标记,1表示为异常操作,0表示为正常操作,标记的单位为操作序列,也就是说如果连续100个系统操作都为正常操作才会标记为0;反之,如果连续100个系统操作中包含异常操作,该操作序列标记为1。由于SEA数据集每个用户的前50个操作序列都是正常操作,所以标记文件仅从第51个操作序列开始标记,一共100行,每行有50列分别代表50个用户的操作序列的标记,以第7个用户为例,其对应的操作序列的标记在第7列,一共100个[16]。标记文件处理过程如图5所示。
图5 SEA数据集标记文件处理过程
SEA数据集标记文件处理伪代码:
y←np.loadtxt(标记文件,文件类型) #把label.txt标记文件转换成向量
y←y.reshape(100,1) #把转换的向量分成100个向量组
y_train←np.zeros([50,1],向量类型) #把前50个操作序列进行标记,转换成50个向量组
y←np.concatenate(y_train,y) #把前面2组向量进行拼接组成150个向量组
2.3 基于词袋和混合N-Gram模型特征提取
对数据进行选择和处理完后,特征提取是使用机器学习分类方法进行学习训练前必须要进行的步骤。对于由操作系统命令构成的数据集,应提取多个命令之间的关联特征,不仅仅是提取单个命令的频率统计特征[15]。本文提出一种通过考虑事件连续性,选用有意义的命令子序列来进行特征提取的方法。首先结合词袋模型对SEA数据集进行命令出现的频率特性进行提取,再使用N-Gram方法对命令序列之间的相关性度量特征,可以很好评估命令序列区分用户的能力[17]。
2.3.1 词袋模型
本文选用的数据都是用户操作系统命令的文本数据,基于这类文本数据进行特征提取,文本特征提取有2个非常重要的模型:词集模型和词袋模型。词集模型是指单词构成的集合,词集中的每个单词只有一个;词袋模型是指在词集的基础上如果一个单词在文档中出现不止一次,统计其出现的次数(频数)[16]。
首先选取词袋模型提取文本特征并统计文本特征在文本中出现的次数,把每个系统操作命令当作一个单词处理即可。首先对处理后的SEA数据库的数据文件进行分词,在分词之后,通过统计每个词在文本中出现的次数,就可以得到该文本基于词的特征;然后将各个文本样本的这些词与对应的词频放在一起,形成特征向量化;最后使用TF-IDF技术对向量化特征进行特征权重修正得到基于词袋模型下的文本特征。
2.3.2 N-Gram模型
词袋模型包含了用户行为的频率特性,它可以根据用户之间命令序列特征的不同分布区分用户,基于词袋模型N-Gram方法考虑了用户行为的转换特性,可以很好地反应系统操作命令块之间的相关性[17]。
N-Gram是自然语言处理中一个非常重要的概念,通常在自然语言处理(NLP)中,人们基于一定的预料库,可以利用N-Gram方法来预计或者评估一个句子是否合理。N-Gram可以评估2个字符串之间的差异程度[18]。本文结合词袋模型和N-Gram方法,对SEA数据集进行特征提取,每个系统操作命令作为一个单词处理,连续的N个系统操作命令作为一个N-Gram。假设具有如下操作序列:pwd、ls、cp和mv,其1-gram到3-gram特征提取示例如表1所示。
表1 特征提取示例表
由此可见,N-Gram可以比较好地体现连续N个操作命令的关系,这在一定程度上体现了系统管理员使用系统命令的操作习惯。
2.3.3 参数N的选择
虽然通过N-gram特征提取方法对内部威胁检测方法进行特征提取比较简单,但在对内部威胁检测方法进行特征提取后得到的特征子序列并不具有很强的代表性。采用N-gram特征提取方法时N值对内部威胁检测具有很大的影响。如果N取值太小,忽略了操作命令之间的整体性,只能达到局部最优效果。如果N取值太大,又会忽略内部威胁检测特征之间的关联性[19]。因此,先设置N={1,2,3,4}中4个不同值来进行内部威胁检测特征选取;然后再将4种不同长度的特征子序列进行不同维度特征组合;最后对不同维数的特征组合进行实验比对分析,选出最优N值内部威胁检测特征集。图6为多数据维度特征组合过程。
图6 多数据维度特征组合过程
2.4 XGBoost分类算法
XGBoost分类算法是梯度提升决策树算法(Gradient Boost Decision Treet, GBDT)的一种串行集成算法[20]。其基学习器通常选择决策树模型,通过不断迭代生成新树学习真实值与当前所有树预测值的残差,将所有树的结果累加作为最终结果,以此获取尽可能高的分类准确率[21]。
XGBoost算法将模型的表现与运算速度的平衡引入目标函数,在求解目标函数时对其做2阶泰勒展开,以此加快求解速度,减少模型运行时间;同时引入正则化控制模型复杂度,避免过拟合[22]。
假设有n个样本和m个特征的样本集D={(xi,yi|xi∈Rm,yi∈R)},其模型预测值为:
(1)
检测模型的目标函数为:
(2)
式中:θ={f1,f2,…,fk};l指损失函数;Ω指正则化项。
目标函数包含2个部分,即损失函数和正则化项。第1部分的自身损失函数使用泰勒式展开,使用1阶导数和2阶导数进行优化,以提高速度和准确率[23]。在第t步迭代优化目标函数时,在现有t-1棵树基础上添加1棵最优化的,损失函数变为:
(3)
式中:gi为导数;hi为损失函数的2阶导数。
第2部分是正则化函数,通过正则化惩罚项来降低过拟合的风险[24]。正则化函数为:
(4)
式中:T为每棵树叶子节点的个数;w为叶子权重;Υ与λ为惩罚系数。
本文使用XGBoost算法进行内部威胁检测过程如下:
1)给定初始值f0(xi)=0,表示所有样本预测初始值为0。
2)树的深度设置为Q(max_depth),树的棵树设置为K(num_boost_round),设置2个正则参数Υ、λ,损失函数选择logloss函数,设置学习率eta。
3)设置内部威胁检测样本集D(n个样本、m个特征、标记值y={0,1},0表示内部正常操作,1表示内部异常操作)。
4)建立第一棵决策树(k=1):
①首先从根节点开始,选取一个最佳的特征以及分裂点使得增益Gain最大,从而在根节点处把n个样本分成左子节点和右子节点2个集合。
②然后循环①过程,对树的第2层节点到第Q层节点遍历所有特征m的所有取值作为分裂点,选取增益Gain最大的点。
5)循环4)过程,拟合第K棵决策树,第K棵决策树是在第K-1棵决策树预测结果的基础上进行拟合建立。
6)将上述建立的K棵决策树合并起来作为XGBoost内部威胁检测新模型。
3 实验与结果分析
3.1 实验数据集
实验选取了SEA数据集中50个用户的750000条系统操作命令作为实验数据来源。首先将样本集分成4份,任选3份作为训练集,另外1份作为测试集。采用四折交叉验证法重复实验验证4次,最后对4次实验结果采用计算平均值来评估检测模型的检测能力[25],具体如表2所示。
表2 训练数据、测试数据样本数
3.2 评价指标
在对内部威胁行为进行检测时,可能出现以下4种情况。在实验中,T表示内部正常行为,M表示内部威胁行为。TP表示预测当前是内部正常行为,实际上也是内部正常行为;FN表示预测当前是内部威胁行为,实际上是内部正常行为;FP表示预测当前是内部正常行为,实际上是内部威胁行为;TN表示预测当前是内部威胁行为,实际上是内部威胁行为。表3为内部威胁检测类型检测情况表。
表3 内部威胁检测类型检测情况表
本文实验采用特定度、灵敏度、准确度、F1值4种评价标准对XGBoost检测模型进行评估[26]。其定义分别如下:
(5)
(6)
(7)
(8)
(9)
(10)
特定度是指正确预测为内部威胁行为占实际样例中所有内部威胁行为的比例,衡量的是检测模型对内部威胁行为的检测能力[27];灵敏度是指正确预测为内部正常行为数量占实际样例中所有内部正常行为的比例,衡量的是检测模型对内部正常行为的检测能力;准确度是指正确预测的样本数占所有预测样本数的比例,衡量的是检测模型对内部用户的检测能力;F1值是对准确率和召回率的整体评价,其值越大,代表检测模型性能越好。准确度、敏感度、特定度越大,代表检测模型的检测能力越好[28]。
3.3 实验结果与分析
在词袋最大特征数为100的情况下,采用词袋模型、词袋模型+N-Gram方法、词汇表模型3种方法进行特征提取,然后使用XGBoost分类算法对4000命令序列块训练集进行训练生成分类器,对3500命令训练块测试集进行检测,整个检测系统的TP、FP、TN、FN、特定度、灵敏度、准确度、召回率、准确率、F1值实验结果如表4所示。
表4 不同特征提取方法的XGBoost算法实验结果
由表4可知,在不同的特征提取方法的评价标准上,4个评价标准特定度、灵敏度、准确度、F1表现的性能也有所不同。综合4个评价标准进行比较,词袋+N-Gram模型的XGBoost算法的内部威胁检测方法要明显优于其他2种检测方法,特定度达到了0.15,灵敏度达到了24.55,准确度达到了0.90,F1值达到了0.95。结果表明,使用词袋+N-Gram特征提取模型结合XGBoost算法能够准确检测出内部威胁攻击行为。
表4实验结果是N取值为3得到的结果,本文再对N参照参数N的选择方法进行实验,通过将N取1、2、3进行特征组合得到的特征子集和N取2、3、4进行特征组合得到的特征子集分别进行特征选择,之后再通过XGBoost算法进行内部威胁检测,实验结果如表5所示。
表5 混合N-Gram模型的XGBoost算法实验结果
从表5实验结果可以看出,采用N={2,3,4}的混合N-Gram模型进行特征提取方法得到的特征集输入到XGBoost分类器中得到的检测效果要比其他组合的特征子集检测效果更优,该组合的实验结果特定度为0.23,灵敏度为27.65,准确度为0.94,F1值为0.97。通过对10组不同数据组合的特征集进行各项检测评价指标对比分析,基于混合N-gram特征提取方法比传统的词袋特征提取方法在检测内部威胁攻击行为中更能体现优势。基于混合N-Gram特征组合提取方法不仅提高了内部威胁检测特征码的区分度,还提高了特征提取的计算性能和准确性。
4 结束语
内部威胁攻击已成为普遍的网络安全问题,与传统的外部威胁攻击相比,具有很强的隐蔽性,更难被检测。目前对内部威胁攻击的研究还不够深入,对其还没有很好的检测方法。因此,本文提出了一种基于混合N-Gram模型和XGBoost算法的内部威胁检测方法。首先选取3种特征提取方法:词袋、N-Gram模型、词汇表对公开的SEA数据集进行特征提取,选取出最优的特征提取方法:N-Gram模型,同时通过实验组合选取最优N参数值。从实验结果表明,基于混合N-Gram模型比传统的词袋、词汇表特征方法在XGBoost算法检测中检测效果更加准确。在4种指标特性:特定度、灵敏度、准确度、准确率、F1值上,该方法相比其他的机器学习算法更能准确地检测出内部威胁攻击行为,同时对于未知的内部威胁攻击行为也能够很好的识别出来。
从实验结果与分析中表4和表5可以看出,FP值较高,造成特定度较低,该方法会产生较高的误警报(将正常的操作误识别为异常操作),会影响用户体验。基于XGBoost算法使用的是监督学习的方法,基于黑白训练集进行数据挖掘,但是绝大多数情况下,相对于白样本,黑样本都是十分稀少的。后期笔者将对多种无监督学习方法进行对比学习,使用SEA公开数据集的白样本进行训练,建立所谓的正常行为基线,然后通过异常行为检测,发现疑似的异常操作,从而降低误警报。