李 志,宋礼鹏
(中北大学 大数据学院 大数据与网络安全研究所,太原 030051)
随着科学技术的发展,企业信息化水平不断提高,对企业和组织的信息安全管理和分析提出了新的挑战,其中来自内部的威胁不断增加,并给企业和组织造成巨大损失。对于内部威胁而言,内部恶意用户具有合法的资源访问权限,因此可通过合法的操作发起攻击并且很难被现有的访问控制或身份认证机制进行检测。一旦内部攻击发生,就会对内部资产造成巨大损失[1-3]。因此,如何有效防御内部威胁一直是研究的热点[4-5]。
文献[6]根据Unix系统环境中的Unix Shell命令段序列的使用特征来描述用户行为,如命令的名称、单条命令的执行时长、CPU运行时长和内存占用。该研究主要是针对Unix系统的用户行为,而相比Unix系统,Windows操作系统的使用更加广泛,并且在Windows环境下用户主要是基于窗口界面与计算机进行交互,很少使用命令行进行操作。因此,对Unix用户的分析技术不能完全适用于Windows系统环境。文献[7]分析Windows系统API与进程表信息,提出监控系统调用方法,通过用户、文件与进程的关联关系建立文件访问与进程调用的联系,不足是仅能检测缓冲区溢出,然而依据缓存区独立研究其不能完全表征用户在计算机上多样性的操作行为。文献[8]通过记录用户在使用某特定程序时Windows Native API的调用序列,利用隐马尔科夫模型对正常用户行为进行建模,仅利用3台主机模拟内网环境,并且只将Windows系统中的4种进程作为异常发生时的测试对象。另外,内网中异常用户在计算机上执行的许多操作在技术上是合法的,并不会造成进程异常。文献[9]通过收集和分析Windows NT系统的审计日志,提出一种用户行为建模方法,使用SVM分类器识别异常行为。虽然审计日志记录了用户的操作数据,如应用程序窗口名、应用程序开始和结束时间及对应的进程ID等,但因有限的属性记录以及简单拼接不同类型的审计数据会造成特征失效、模型训练复杂度过高和模型过拟合问题,并且实验结果准确率和误报率不能满足实际要求,当准确率为最高的66.7%时,误报率达到11%,当误报率为3.7%时,准确率为63%。文献[10-11]提出基于文件使用的内部威胁检测系统,该系统用于伪装者攻击,从用户遍历文件系统以及访问文件目录的角度建立行为模型,其局限是仅针对文件系统单一域访问的异常情况进行研究。文献[12]收集了不同用户调用窗口的标题和进程等信息,但由于数据获取难度大,因此在此方面很难取得重大进展。
内部威胁的产生原因主要包括计算机在无人看管时,他人进行一些不合法的操作,以及计算机真实用户的行为发生恶意变化后的操作。无论在何种情形下,用户在计算机上的行为直接体现在与应用窗口的交互过程中。针对内部威胁的产生原因,本文从应用窗口的使用角度分别研究异常用户检测和用户自身变化行为的识别,提出可表征用户窗口行为的特征。借助样本均值分布特性和K-S检验,结合采集的用户行为数据以验证用户窗口行为的差异性,并利用欧氏距离和置信区间构建异常检测算法。
针对异常用户检测和用户自身变化行为识别问题,通过分析用户窗口的行为习惯分别提出两类窗口行为特征和两种行为模式建立方法。对于每类行为特征,根据用户行为数据分析特征值范围的统计分布来进行行为度量,可以有效地量化用户窗口使用行为的差异。
用户在一个应用窗口内的活动有两种模式:第一种是用户在窗口内间断的活动,即用户的动作之间存在间隔,这些间隔由用户脱机行为造成,一个窗口置顶的时间越长越能体现出这种行为模式,将连续动作的时间长度称为窗口内动作的有效时长,用户的脱机时间长度称为动作间隔时长,窗口内的有效动作指的是鼠标和键盘动作;第二种是用户在一个窗口内的动作结束后随即离开当前窗口。
实验主要提取了置顶时长、单个活动时长均值和方差、有效总时长、动作间隔时长均值和方差、间隔总时长、间隔次数、鼠标和键盘动作时长、单个有效活动时长和间隔时长的均值与方差这些窗口内的行为特征。
图1(a)和图1(b)分别显示了用户在窗口内单次活动持续平均时长分布和活动总持续平均时长分布,均是重尾分布。其中单次活动的平均时长分布主要集中在5 min内。在0~3 min内,用户单次活动平均时长有明显的波动;活动总持续平均时长超过90%的时长小于10 min,在0~5 min内,较高的误差线表明不同用户通常具有不同的有效活动时长。
图1(c)显示了用户活动间隔时长的差异。为清晰地呈现用户行为之间的差异,本文对5个用户进行刻画。从窗口内活动间隔数据经过Box-Cox变换[13]处理后得到的概率密度图可以直观看出,用户在窗口内的活动间隔时长分布存在显著差异。
图1 窗口内部行为特征分布
窗口大小、切换顺序等行为也是表征用户使用应用窗口的一类关键特征。下文详细描述这些特征:
1)窗口名:用户在一段时间内对不同功能软件的需求是稳定的,此特征可体现用户对软件的使用偏好。图2显示了所有用户各类窗口平均时长占比的分布情况。可以看出,用户在外部浏览器、Office、论文阅读软件、桌面、编程软件和即时通讯的平均耗时占所有窗口时长的90%左右。其中外部浏览器、Office和论文阅读软件占相当高的比例。非常高的误差线表明用户对各类型的窗口活动呈现出多样性和差异性。
图2 各类用户窗口总持续平均时长分布
2)活跃状态的窗口数:活跃状态指的是所有打开的窗口,包含最大化、最小化和特定大小的窗口。用户在窗口内的动作结束后对当前窗口有3种处理方式,即关闭、最小化和覆盖当前窗口。此特征能够直接反映用户对窗口状态控制的习惯。
3)最小化、最大化窗口数:结合活跃状态窗口数,此特征能够更加细致地描绘用户对窗口的控制习惯。
4)当前工作窗口状态:在用户操作过程中,窗口有两种状态,即最大化和自定义大小。当窗口为自定义大小时,可体现用户多窗口协同工作的模式。
5)窗口切换顺序:文献[14]观察过计算机工作者经常在并发任务或活动之间切换,并且这种切换行为在工作过程中不断增加。在长期过程中,用户执行活动的顺序具有习惯的模式:一是用户结合不同功能软件完成一个任务;二是用户完成多个任务的不同顺序。
6)窗口切换耗时:根据文献[15]的研究,用户在不同方向上移动鼠标行为存在显著差异。因此,鼠标不同的移动距离和方向导致点击位置的不同,进而有不同的切换耗时。
7)窗口打开的星期和时间:此特征记录用户使用各类型软件在时间上呈现出的周期性。
综上,基于对内网用户的分析研究,结合用户各自的行为度量数据来构建用户的窗口使用行为模式。具体地,每个特征对应的特征值以向量的形式存放,向量内元素的个数对应样本数据的数量,这些特征向量构建成一个特征矩阵空间。将收集到的用户行为数据映射到特征矩阵空间中,对连续特征进行归一化且离散特征进行One-Hot编码[16]处理后共得到130个连续的特征,最终得到的特征矩阵代表用户的窗口使用行为模式。
如果将变化行为视为异常,变化后的行为中可能仍含有正常的行为模式,例如窗口大小、切换方式和活跃窗口数等。为能够有效识别变化的行为,舍去一些在用户自身行为上差异性小的特征,并将窗口限定为最常用窗口浏览器、Office、论文阅读软件,其余都定义为“其他”,最终特征如下:
1)窗口偏好:定义为含有31个元素的向量,每个元素对应一个窗口,元素值是使用窗口的经验概率。
2)单活动持续时长:定义为含有4×13个元素的向量,每个向量记录窗口内单个活动持续时长的经验概率。每13个元素的向量初始时长为0,前6个元素宽度设为20 s,随后6个设为40 s,最后设为无穷大。
3)活动间隔时长:定义为含有4×16个元素的向量,每个向量记录窗口内活动间隔时长的经验概率。每16个元素的向量初始时长为20,前11个元素宽度设为50 s,随后4个设为100 s,最后设为无穷大。
4)窗口置顶时长:定义为含有4×15个元素的向量,每个向量记录窗口置顶时长的经验概率。每15个元素的向量初始时长为0,前10个元素宽度设为30 s,随后4个设为60 s,最后设为无穷大。
5)窗口切换顺序:定义为含有31×31个元素的矩阵。矩阵的每个单元表示窗口之间的切换,其索引由行或列反映。每个单元格的值是窗口切换的概率。
结合用户具体的正常行为数据,给用户建立一个正常的行为模式。首先将终端行为度量值组成5个向量元组,并对每个向量进行归一化使向量中所有元素的总和为1。特别地,活动间隔、持续时长、窗口置顶时长向量乘以1/4,窗口切换顺序向量乘以1/31。使用归一化后的元组表示用户正常的行为模式。
不同用户代表不同的总体,若要准确定义用户使用应用窗口的行为在每个特征向量的分布情况是很困难的,因此借助统计学方法进行差异分析。具体为:对于特征空间中的每个特征向量借助样本均值的分布来分析用户行为的差异性。
1.3.1 样本均值分布和K-S检验
鉴于上述理论,对每个特征向量构建样本均值分布。采用K-S检验[18]对不同用户对应特征的样本均值分布进行差异性检验。K-S检验方法如下:
设两个用户对应特征的样本均值的累积分布函数为F1(x)和F2(x),建立其假设检验,表示为式(1),即两个样本均值的分布情况相同。
H0:F1(x)=F2(x)
(1)
定义检验量为D,表示为式(2),即两个样本均值的分布情况不同。
H1:F1(x)≠F2(x)
(2)
D=max{F1(x)-F2(x)}
(3)
根据选定的显著性水平α值,当D>Dm,n,α时(m、n为样本容量,α为显著性水平),则拒绝假设H0,接受H1假设[19]。
实验中从总体中抽样的样本容量为n=3 000>30。因此,两个特征对应的样本均值的概率密度函数为:
(4)
(5)
其中,μ1、μ2和σ1、σ2分别为两个样本总体的均值和方差。由式(3)可知,统计量D为两个累积分布函数之差的最大值,即:
(6)
统计量D对应的显著性水平p由可靠性分布函数QK-S表示:
(7)
1.3.2 差异性检验算法
设置拒绝域为0.05,若显著性水平p<0.05,则认为特征向量的分布来自不同总体,进而说明不同用户的应用窗口使用行为存在显著差异。
算法1Difference Verification算法
输入待检验的两个用户窗口使用行为数据集Data1、Data2,显著性水平,样本容量n,抽样次数nnum,特征向量维数c
输出1,表示两个样本总体存在显著性差异
1.[f1,f2,…,fc]=FeatureM(Data1)
2.[g1,g2,…,gc]=FeatureM(Data2)
//将用户数据集进行特征工程得到特征矩阵
3.FOR j=1 to c do
4.μfj=Mean(fj),σfj=Var(fj)
5.μgj=Mean(fj),σgj=Var(fj)
//计算特征矩阵中各特征向量的均值和方差
6.(X1,X2,…,Xnum)←randomSample(Data1,n,nnum)
(Y1,Y2,…,Ynum)←randomSample(Data2,n,nnum)
//抽样nnum次,生成样本容量为n的nnum个样本空间
7.FOR i=1 to nnumdo
8.[f1,f2,…,fc]i←FeatureM(Xi)
9.[g1,g2,…,gc]i←FeatureM(Yi)
//将每个样本空间进行特征工程生成对应的特征矩阵
10.FOR j=1 to c do
11.FOR i=1 to nnumdo
//计算每个特征空间中各个特征向量的均值
//构建两个用户对应各特征的样本均值分布
15.IF p(D)≤α Then
16.Return True
17.Return 1//K-S检验两个用户在各个特征上的差异性
在算法1中,首先将用户数据集进行特征工程得到特征矩阵,并计算特征矩阵中各特征向量的均值和方差;然后从用户数据集中随机抽样构成nnum个样本空间并分别进行特征工程,构成nnum个特征矩阵,计算每个特征矩阵中特征向量的均值,nnum个特征矩阵中对应特征向量的均值共同构成该特征对应的正态分布,且正态分布的均值和方差分别等于该特征向量总体的均值和总体方差的1/n,其中构建各特征的样本均值分布是算法的关键步骤;最后利用K-S假设检验验证两个用户对应特征下的样本均值正态分布间的差异,不同用户在相同特征下均表现出差异性便可以说明不同用户行为模式间的差异。
用户在计算机上的窗口使用行为符合一定的行为模式,依据用户的历史行为数据建立正常的行为模式。根据用户行为模式差异性进行异常检测。具体地,首先将用户的窗口行为数据分成几份,对每一份分块数据进行特征工程,建立用户的子行为模式;然后计算用户子行为模式之间的距离,依据距离的均值和方差确定用户自身行为波动的置信区间。因为用户的行为模式难以模仿,当一个未知的行为模式与已知用户行为模式之间的距离超出区间的上限时,则判定该未知模式属于异常行为。
在介绍算法之前,需要先描述量化用户自身行为偏差以及与其他用户的行为差异的公式。
2.2.1 行为偏差量化方法
给定两个表征用户行为的特征矩阵P和Q,每个特征矩阵含有n个特征向量。量化行为差异如下:
将P中n个特征向量与Q中对应的向量进行比较。通过计算欧氏距离以量化两个向量之间的差异。给定两个向量A=(a1,a2,…,an)和B=(b1,b2,…,bn),它们之间的欧氏距离通过式(8)求得。
(8)
因为相同特征对不同用户的效应不同,利用交叉验证[20]的方法计算特征矩阵中每个特征向量的平均欧氏距离。根据距离均值采用高斯加权法给每个特征赋予权重,特征权重表示为(w1,w2,…,wn)。最终利用式(9)计算行为P和Q的差异为WD(P,Q)。此值越大,差异越大。
(9)
给定用户self的行为集合{P1,P2,…,Pn},将self自身差异定义为每个子集之间的平均差异,具体如下:
(10)
利用式(11)计算这些差异的标准偏差:
(11)
因此,用户U的可接受行为偏差以概率p落入[0,VU+u×StdDevU](假设用户行为符合正态分布)。
2.2.2 异常行为检测算法
异常行为检测算法以行为模式为目标,认为用户自身的行为倾向于遵循其与应用窗口交互的历史行为模式。因为人类行为存在波动性[21],使得一段时间内的行为模式可能会偏移历史行为模式,但是只要发生的偏移在可容忍的波动范围内,则认为当前行为遵循历史行为模式。
对恶意用户而言,其对目标用户的行为习惯知之甚少,因此无法轻易模仿目标用户的行为模式,因此与目标用户自身的波动相比,恶意用户的行为会更加明显地远离目标用户的历史行为模式。将用户自身行为的波动和恶意用户的波动分别称为行为偏差和行为差异。同时,模式间的偏差和差异计算也是异常行为检测算法的关键。
综上,异常行为检测算法由两部分组成:一是构建用户的子行为模式,计算每个用户自身行为模式偏差的均值、标准差;二是计算用户自身行为的偏差和与其他用户的行为差异,在保证低假阳性率时确定用户自身行为偏差的置信区间上限,即可容忍的波动范围。
算法2SelfDeviation算法
输入m个用户的行为数据(Data1,Data2,…,Datam),每个用户的行为数据含有N条窗口活动流,用户数据的分割份数n,特征向量维数c
输出子行为模式、自身行为偏差均值和方差以及权重
1.FOR i=1 to m do
2.(Dt1,Dt2,…,Dtn)←noReplaceSample(Datai)
//不放回抽样n次构成n个样本空间
3.FOR j=1 to n do
4.pj=[f1,f2,…,fc]←FeatureM(Dtj)
5.Pi=(p1,p2,…,pn)
//n个样本空间进行特征工程形成n个特征矩阵
6.FOR j=1 to n do
7.FOR k=1,k>j to n do
8.FOR t=1 to c do
9.et=euclideanDist(Pi[j][t],Pi[k][t])
10.E=((e11,e12,…,e1n(n-1)/2),(e21,e22,…,e2n(n-1)/2),…,(ec1,ec2,…,ecn(n-1)/2))
//计算n个特征矩阵中对应特征向量间的欧氏距离
//计算各个特征的平均欧式距离
//依据平均欧氏距离求特征对应的权重
13.FOR j=1 to n do
14.FOR k=1,k>j to n do
15.wejk←euclideanDist(Wi,Pi[j],Pi[k])
16.WEi=(we11,we12,…,we(n-1)n)
//计算各个子模式之间的加权欧氏距离
17.vi=averageDiffence(WEi),sdi=StdDev(WEi)
//计算各子模式间距离的平均值和标准偏差
18.U=((p11,p12,…,p1n),(p21,p22,…,p2n),…,(pm1,pm2,…,pmn)),W=(W1,W2,…,Wm),V=(v1,v2,…,vm),StdDev=(sd1,sd2,…,sdm)
19.Return U,W,V,StdDev
//返回所有用户的子行为模式、特征权重、用户自身行为
//偏差的均值和方差
在算法2中,首先对用户的历史行为数据进行不放回抽样构成样本空间,将样本空间分别进行特征工程得到用户子特征矩阵代表的子行为模式,利用交叉验证方法计算子行为特征矩阵内对应特征向量之间的平均欧式距离,依据平均欧式距离计算每个特征向量的权重;然后计算每个子模式之间的加权欧氏距离,并计算距离的均值和标准偏差,最终得到用户U的可接受行为偏差以概率p落入区间[0,VU+u×StdDevU]的参数VU和StdDevU。
算法3DetermineConfidenceInterval算法
输入m个用户的行为模式BP,每个用户的对应的特征权重W,用户行为偏差的均值V和标准差SD,标准差的倍数u=(1.31,1.32,…,2.35)
输出用户自身行为偏差的置信区间上限
1.FOR i=1 to m do
2.FOR j=1,j≠i to m do
3.FOR k=1 to n do
4.weij←euclideanDist(Wi,BP[i][k],BP[j][k])
5.WEi=(we1,we2,…,we(m-1)n2)
//计算用户自身与其他用户的加权欧式距离
//用户自身子模式数,其他用户子行为模式总数
7.FOR v in u do
8.threshold=V[i]+v×SD[i]
9.FOR we in WEido
10.num=count(we>threshold)
12.IF FP<4%Then
13.best=v
14.bestThreshold=V[i]+best×SD[i]
//在低假阳性率下确定用户自身行为波动阈值
15.Return m_bestThreshold
在算法3中,首先计算不同用户行为模式之间的差异,并和用户自身行为偏差进行对比,在保证低假阳性率的条件下求得自身行为波动的置信区间,即确定区间[0,VU+u×StdDevU]中的参数u。
综上,当输入新的未知行为数据后,计算与已知用户的正常的行为模式之间的差异距离WE,如果WE>VU+u×StdDevU,则说明当前输入的未知行为数据为非法数据,否则为合法数据。
为更加全面地描述用户使用窗口的行为模式,通过详细分析用户与计算机窗口交互时最直接的操作特性,依据交互特性提出行为特征,并以特征为目标开发数据采集器。其优势是分析用户行为时不会因受制于系统数据的单一性,而不能全面地建立用户的行为模式,且避免了从复杂系统数据中挖掘用户数据时带来的巨大工作量。
为获取真实内网用户数据,本文搭建了完全自由的内网环境,采集器使用键盘鼠标触发模式,在数据录入过程中不做处理,避免了数据采集延迟。对20位用户收集两个月的窗口活动数据。手动检查第一周数据后,最终筛选出15位用户的数据。数据以“窗口名”为单位进行组织,当用户在一个窗口中使用鼠标或键盘时就表示用户与窗口开始交互。当鼠标键盘动作切换到另一窗口时,就表明与前一个窗口结束交互且与下一个窗口交互开始。采集阶段共收集了30多万条交互数据。
3.2.1 用户间行为差异和自身行为偏差
将15位用户的窗口行为数据集依据不放回抽样分为5个样本容量为3 000的样本空间,经特征工程后构成子行为模式。利用算法2分别计算用户自身子行为模式间和用户与其他用户子行为模式间距离的平均值与标准偏差,用以表示行为偏差和行为差异。实验结果证明,相比用户自身行为偏差,用户间的行为差异更为明显。
图3显示了每个用户自身的行为偏差和与其他用户的平均行为差异。由图3可知,每个用户自身偏差明显低于与其他用户的平均行为差异,相比用户间的行为差异,用户自身的行为偏差通常在一个小范围内波动。此结果也表明利用用户行为模式间的差异性进行异常检测是可行的。
图3 自身行为偏差和用户间行为差异
任选两个用户的窗口行为数据集,设定检验的显著性水平α=0.05,样本容量n=3 000,有放回抽样次数nnum=30。利用差异性检验算法(算法1)检验用户窗口行为在各个特征上呈现的差异性。检验结果如表1所示。
表1 用户行为在特征向量上的差异性检验结果
在表1中,第4列中的结果值为“1”表明用户的行为数据在各个特征上表现出显著的差异性,说明不同用户同一特征对应的样本均值分布的差异显著,依据样本均值定理该结果也表明不同用户的行为模式之间存在显著的差异性。
3.2.2 用户行为变化前后的差异
依据无放回抽样分别从用户1万条变化后的数据中进行6次抽样和正常数据中进行10次抽样构成样本容量为1 500的6个负样本空间和10个正样本空间,利用算法2计算正样本各子模式之间距离的平均值与标准偏差和负样本子模式与正样本子模式之间距离的平均值与标准偏差。
图4显示了用户行为变化前后的行为差异。由此可知,当用户行为发生变化后,变化的行为模式明显远离正常行为的波动阈值。不同变化程度的行为模式与波动阈值的距离不同。当用户行为波动范围超过阈值后将其判为变化的行为,由此对用户变化的行为进行监控。
图4 用户行为变化前后的行为差异
由异常行为检测算法可知,区间上限VU+u×StdDevU中的u取值越大对应用户行为波动偏差的区间上限越大,待检测样本落入正常波动区间的概率也增大,即判定待检测的用户行为不属于异常行为的概率更大。因此,异常检测准确率和u是线性关系。但当波动偏差的区间上限过度增大时,容易将异常行为判定为正常,导致很高的假阳性率。因此,将准确率和假阳性率作为评价指标进行评估。
3.3.1 异常用户检测
图5显示了当u的取值在2.0附近时,假阳性率增加,但准确率不会明显提高。因此,在保证低假阳性率(4%)时u的取值为1.95,对应的准确率为97.4%,即当前检测的行为模式为异常模式的概率为97.4%。
图5 u值与准确率和假阳性率的关系
构建行为模式的样本数据越多可以更好地反映用户行为。在u取值为1.95时,分别使用500,750,…,3 000条活动流构建用户的子行为模式。计算不同数量的活动流构建的行为模式对应的假阳性率。
图6显示了随着训练集大小的变化,假阳性率的动态变化。总的来看,训练集越大,检测的假阳性率越低,从而反映活动流越长,提供的用户习惯行为数据越多,使得能够建立更完整的行为模式,因此,可以更准确地测量用户在每个行为特征上的距离,进而使得检测结果更准确。
图6 训练集大小与假阳性率的关系
3.3.2 用户变化行为识别
在数据采集周期内,有8个用户因工作进展其阶段性任务发生了变化,阶段任务变化的事件如表2所示。
表2 影响用户行为的事件
对于用户变化行为的识别而言,用户的行为模式存在波动是正常的,但当波动超过可容忍的范围后就认为当前的行为发生了变化。此时可对用户发生变化的行为提出预警,然后结合用户背景详细分析用户的操作,确定用户变化的行为是否为恶意操作,若是则可及时止损。
本文从计算机应用窗口的角度出发对用户行为进行研究。针对用户分类和用户变化行为的识别分别提出一系列可以表征用户行为的特征。在完全自由的内网环境中,采集用户使用应用窗口的行为数据。通过样本均值特性和K-S检验,验证了用户使用应用窗口行为存在显著的差异性,并表明本文构建的用户行为检测算法能够有效检测异常用户和识别用户变化的行为。后续将尝试在更大的内网环境中,以角色为团体进行窗口行为的异常检测研究。