APP下载

基于角色异常行为挖掘的内部威胁检测方法

2020-11-03顾兆军郭靖轩

计算机工程与设计 2020年10期
关键词:数据项日志投影

顾兆军,郭靖轩+

(1.中国民航大学 信息安全测评中心,天津 300300;2.中国民航大学 计算机科学与技术学院,天津 300300)

0 引 言

互联网的发展使网上办公成为员工办公的首要方式,给工作带来了高效和便捷,但是伴随网络攻击手段的不断进步,单一的防火墙防御已经显现出不足。目前信息系统安全防护主要关注来自系统外部的威胁,但是来自员工的内部威胁已经成为首要问题,内部威胁带来的损失比普通的外部威胁更加严重。

国内外学者对此进行了深入研究,文雨等[1]对数据库的非法使用行为进行研究,以数据库数据日志为核心提取SQL语句的数据访问特征来确定当前用户执行SQL语句的可疑程度;张锐[2]建立了系统业务与用户之间的关系网络,将用户映射到具体业务系统上,通过判断用户对业务系统之间的关系网络间的差异来确定是否存在内部威胁;文献[3]提出了用户行为的多元模式,提出了一种用户跨域行为模式挖掘方法。

本文着重对角色行为进行分析研究,在文献[4]中对Web用户行为挖掘的基础上提出了一种基于角色行为模式挖掘的角色行为异常检测算法,该算法对传统PrefixSpan算法进行改进,提高了对角色异常行为的检测时间,同时缩短了挖掘时间,提高了挖掘效率。

1 角色行为分析及处理

角色行为模式是指角色对业务系统操作过程中对程序的执行所体现出的一般规律性,服务器会在日志文件中存储角色操作记录以及与数据库交互信息,包括操作属性、操作内容、调用资源等信息。角色行为具有以下3个特点[5]:

(1)规律性。每个角色在使用业务系统时会有自身独有的特点,在程序执行上和操作行为上具有相关关系,现称之为角色行为习惯。在一定时间间隔内,根据角色行为习惯可以挖掘出频繁行为,从而建立角色正常行为模式;

(2)偶然性。角色受到随机事件和自身其它因素影响会改变原有的行为习惯,增加了局部偶然性,所以在挖掘过程中需要大量的历史审计日志来判断其偶然性,避免出现异常漏报和检测效率低下的问题;

(3)重复性。在一段时间内角色的某一行为会多次重复出现,这些行为跟时间间隔的大小具有高度的相关性,如何确定恰当的时间间隔是顺利进行挖掘过程的关键步骤。

在充分了解角色行为特点后,利用日志提取需要的角色行为及属性,以便于之后挖掘角色行为模式。Windows操作系统在其运行的生命周期中会记录其大量的日志信息,常见的日志文件包括Serer logs、Error logs、Cookie logs等其它类型,角色日常工作使用到的信息系统都是基于Telnet协议的,处理异常事件时可以通过截取联网传输的数据包进行相应的协议解析,这样就可以复原角色与信息系统交互的操作命令和返回结果。这些日志信息在溯源和取证调查过程中十分重要,日志文件在系统中是以特定的数据结构方式进行内容存储,其中包括相关系统应用程序和安全的记录。审计记录中包含了9个元素:日期/时间、事件类型、用户、计算机、事件ID、来源、类别、描述、数据等信息。通过处理无用项和多余项之后,每条有效审计记录见表1,其中包含7个字段。

表1 审计记录

本文的目的就是要从有效审计记录中运用序列模式挖掘的方法,根据角色历史正常行为提取出角色正常行为模式,从而进行异常检测。针对信息系统角色行为模式的特点给出异常检测系统框架如图1所示,主要包括日志预处理、角色正常行为模式挖掘、序列匹配、模式比较,异常检测输出等步骤。

图1 内部威胁异常检测框架

2 正常行为模式挖掘

本章的工作是围绕角色正常行为模式挖掘展开的。根据第一节中提出的有效审计记录中得到角色行为数据及属性,选取合适的序列模式挖掘算法,介绍算法的概念和原理,重点给出对算法的改进过程及核心思想,最后通过举例说明。

2.1 模式挖掘方法对比

序列模式挖掘是数据挖掘中一个重要分支,它的原理是从大量序列数据中挖掘出一段时间间隔内出现频率最高的序列数据。目前序列模式挖掘的主要算法有广义序列模式(GSP)算法、apriori算法、FP Tree算法、FreeSpan算法和PrefixSpan算法。FreeSpan算法和apriori算法是基于挖掘项集数据挖掘的[6],而PrefixSpan算法和广义序列模式(GSP)算法是面向序列数据的[7]。

如表2所示,表左的数据记录就是在Apriori算法和FreeSpan算法中使用的项集数据,每个项集数据由若干项数据记录组成,这些数据项没有时间上的先后关系,对于多于一个项的项集要加上括号,以便和其它的项集分开。而右边的序列数据则不一样,它是由若干数据项集组成的序列,比如第一个序列,它由a,bc,ac,d,cf共5个项集数据组成,并且这些项有时间上的先后关系,不同的序列顺序代表了不同的含义。

表2 项集数据与序列数据对比

在本文中提出的角色行为模式中,角色行为具有持续性且每个行为具有时间上的先后关系,例如管理员角色的行为首先是登录管理系统,然后对设备进行检查,最后注销退出系统。这一系列行为是以集合的形式存在,这种数据显然符合序列数据的特点,故舍弃了Apriori算法和FreeSpan算法。另一方面在对序列数据进行数据挖掘时,由于PrefixSpan算法在挖掘过程中不产生大量候选的序列模式,而且生成的投影数据库相比于原始序列数据库大大减少,因此减少了构造投影数据库的时间,并且缩减了算法运行需要的存储空间,所以其性能更优。而广义序列模式(GSP)算法会产生大量候选的序列模式,增加了算法运行所需要的时间,而且候选的大量序列模式会消耗存储空间,故选择PrefixSpan算法进行角色行为模式挖掘。本文将PrefixSpan算法运用到角色正常行为模式的挖掘中,并且针对此算法进行了改进。

2.2 PrefixSpan算法相关概念及定义

PrefixSpan(prefix-projected pattern crowth)[8],意思是前缀投影的模式挖掘,PrefixSpan算法采用分而治之的思想,首先从数据集中挖掘出频繁一项集,找到频繁一项集之后使用频繁项前缀划分搜索空间,从而生成投影数据库,再分别对这些投影数据库里的项集数据执行同样的步骤来挖掘频繁项,直到循环执行数据库中所有的数据项。

本文将PrefixSpan算法应用到信息系统中角色正常行为模式挖掘中,并针对此应用场景下进行改进,在时间和空间方面改进的算法提高了算法适用性,并且提高了数据挖掘的效率。下面首先介绍PrefixSpan算法对角色正常行为模式挖掘的相关概念及定义。

概念1:S是一个项集序列数据库,表示为S=(t1,t2,…,ti),其中i表示为角色行为序列的长度,tk(1≤k≤i)表示为同一角色的行为数据项。

概念2:子序列和超序列的概念和数学上的子集的概念很类似,如果某个序列A所有的项集在序列B中的项集都可以找到,则A就是B的子序列。现在给定两个序列A=(a1,a2,…,an)和序列B=(b1,b2,…,bm), n≤m,如果对于序列B来说序列A中的每一项数据均满足a1⊆b1,a2⊆b2…an⊆bn,则称A是B的子序列,反过来说B就是A的超序列。

概念3:对于某一个前缀,序列里前缀后面剩下的子序列即为得到的后缀,前缀投影其实就是后缀的意思,前缀加上前缀投影就可以构成一个完整的序列。如果前缀最后的项是项集的一部分,则用一个“_”来占位表示,这里需要注意的是_b和b是两个不同的序列项。表3给出前缀和后缀的例子。

表3 频繁项集序列

概念4:给定S为一个序列数据库,A=(a1,a2,…,an)是序列数据库S其中的一个序列,数据库S中包含序列A的个数占S中总序列数的比值记为Support(A),其意义是序列A的支持度。由专家意见以及实际情况给出一个支持度阈值min_sup,如果序列A在序列数据库中的支持度Support(A)不低于min_sup,则称序列A为一项频繁序列。

2.3 PrefixSpan算法的不足及改进

在使用PrefixSpan算法对数据项进行扫描挖掘时有三方面不足:

(1)挖掘过程中会采用递归的方法构建投影数据库,消耗大量时间。审计日志中包含的非频繁数据较多,随着挖掘过程的深入会产生大量的非频繁项,从而消耗大量时间来挖掘不可能出现的频繁项;

(2)挖掘过程中构造的投影数据库数量呈几何倍数增长,空间开销巨大,而且存在多个重复的投影数据库,占用大量空间;

(3)算法处理海量审计日志所生成的频繁序列项以及其投影数据库数量纷繁复杂,在挖掘过程中对投影数据库反复进行扫描,导致数据项查找挖掘效率低下,算法执行效率低下。

针对PrefixSpan算法的不足之处以及审计日志数据的特点,本文提出一种改进的PrefixSpan算法,对此算法的不足之处进行如下改进和扩展以提高挖掘效率:

(1)改进后的算法在挖掘数据项的过程中通过比较数据项与最小支持度得到频繁项,直接删除非频繁项,避免继续挖掘出非频繁项;在构建投影数据库时放弃对支持度小于阈值的投影数据库的扫描,能够有效减少投影数据库构建的次数,提高算法的时间效率;

(2)改进后的算法在构建投影数据库的过程中,预先检查序列数据库S中所有数据项的前缀,对相同的数据项进行合并,避免对投影数据库中同一数据项前缀重复投影,从而减少投影的数量,这样能够有效地减少投影数据库构建的次数,减少投影数据库不必要的存储空间;

(3)对投影数据库引入标签索引,先给定一个初始的频繁序列投影数据库用于记录扫描过程中全部下标的位置,接下来的挖掘过程只需要利用下标去数据库中查找该字符序列即可。此方法从数据预处理的角度出发,通过增加一个步骤从而提高了查找效率。

现在根据算法改进思想给出改进后的PrefixSpan算法流程描述:

输入:序列数据库S、支持度阈值min_sup、数据库S中数据序列长度i。

步骤1 对数据库S中的所有数据进行挖掘,得到所有长度为1的频繁一项集和其所对应的投影数据库;

步骤2 计算每一个长度为1的前缀在数据库中的支持度Support(),并对其进行计数,根据结果将支持度低于阈值min_sup的前缀所对应的项从数据库S中删除,同时记录所有支持度满足Support()≥min_sup的频繁一项集,记i=1;

步骤3 对步骤2得到的频繁一项集前缀进行递归挖掘:

(1)找出频繁一项集所对应的投影数据库,如果该前缀的投影数据库不存在,则递归返回步骤2;

(2)统计频繁一项集所对应的投影数据库中各项的支持度,如果所有频繁一项集的支持度都低于阈值min_sup,则删除此项并递归返回步骤2;

(3)将支持度满足Support()≥min_sup的各个频繁一项集和当前的前缀进行合并得到频繁二项集,并且生成新的前缀;

(4)i=i+1,使用得到的新前缀继续挖掘第i项频繁项,分别递归执行步骤3。

输出:满足支持度Support()≥min_sup的所有频繁项。

针对上文给出对算法改进的流程描述,现在以表4中所给的数据项为例描述序列模式挖掘过程,并且给定阈值min_sup=2。

表4 角色行为序列数据库S

表5 序列模式挖掘过程

3 模式匹配

在上一节中我们通过数据挖掘得到了频繁项数据集,这代表了角色历史正常行为模式集,现在通过对比角色当前行为与历史正常行为,就可以检测角色行为的准确性,从而判断该角色是否发生内部威胁。模式匹配的关键就是字符串匹配,字符串匹配通常是指在主模式串中一次或多次重复出现某一字符串,并把子串在主串中的定位操作称为串的模式匹配。从匹配方式上来说串匹配可以分类为精确匹配、模糊匹配、并行匹配等。针对角色频繁行为模式的特点,解决字符串匹配这个问题首先很容易想到BF算法,是指从子串首部与主串首部匹配,当子串的首部和主串的某个部位匹配成功后,两个串剩下的字符继续匹配;当两者匹配失败时,比较子串首部和主串的下一部位,重复上面的过程直到循环结束,BF算法的复杂度是O(n2),该算法简单低效,处理大量数据时间会爆炸式增长[9]。

针对BF算法时间复杂度还有更好的办法可以提高效率,这就是KMP算法,本节提出一种基于KMP算法的精确匹配算法。为了方便下文对模式匹配算法的描述,做以下符号定义:主模式串记为S,长度记为n,待匹配的子串记为P,长度记为m,串中的字符记为Si和Pj(1≤i≤n,1≤j≤m)。KMP算法的主要思想是利用已经得到的两个字符串的部分匹配结果将模式串右滑尽可能远的距离再继续进行比较[10],具体来说就是判断主模式串中的Si和子串Pj是否匹配,当两者匹配时主串中的指针i和字串中的指针j分别向后移动一位,继续判断是否匹配,当Si和Pj匹配失败时,指针i保持不动,指针j回到一个合适的位置而不是像暴力算法中回到字符串首位,这样大大提高了匹配效率,缩短了匹配时间,所以为了计算得到这个合适的位置,引入一个临时数组next[]。next[]数组的定义和计算过程请参见文献[11]。下面给出算法流程描述[12]:

输入:主模式串S=S1S2…Sn,待匹配的子串P=P1P2…Pm,其中串中的字符记为Si和Pj(1≤i≤n,1≤j≤m);

(1)初始化数组next[];

(2)循环查找子串P是否在主模式串S中:

1)首先比较P[i]==S[j],如果相等,继续比较字符串下一个字符;

配电网直接与用户连接,电力系统对用户供电的能力和质量必须通过配电网得到实现和保障,因此提高配电网的供电可靠性一直是电力发展中的一个重要问题。配电自动化(Distribution Automation,DA)是提高配电网可靠性的一种重要技术手段,在正常运行情况下,通过监视配电网的运行工况,优化配电网的运行方式;当配电网发生故障或运行异常时,可以迅速查找和处理故障区段及异常情况,快速隔离故障区段,及时恢复非故障区域用户的供电,缩短停电时间,减少停电面积,提高配电网的可靠性[1-2]。

2)令j=next[j],如果j==-1; 说明匹配失败,i++,j++,继续下一趟比较;

(3)直到找到子串P在主串S中的位置或者主模式串S已经比较结束;

输出:当子串与主串正确配对成功时,将主模式串S中第一个配对字符的位置输出,否则输出-1。

4 实验结果及分析

针对本文提出的两个算法,为了验证此算法的可行性,在PC机上的Anaconda实验环境中实现代码,实验数据来自于某民航直属单位办公系统中3个月的系统操作日志。

4.1 数据预处理

在挖掘角色正常行为模式之前,获取的操作命令按照审计记录的格式(表1)进行保存,需要对角色操作日志进行预处理,数据预处理方法包括将操作时间转换为时间戳片断,其中分为上午(am)、下午(pm)、晚上(nt);删除编辑状态下用户输入的指令,删去无意义指令;指令参数仅保留文件的后缀名,对于操作指令中涉及到的敏感信息和文件进行隐藏处理。在本文研究内部威胁的问题中,由于涉及到系统业务和行业安全,且当前不存在角色异常行为引发的内部威胁,所以在测试数据集中采取手工注入异常的方法,然后利用上文提出的方法对注入的行为异常情况进行检测,并分析评估该方法的异常检测效果。

4.2 对比实验分析

对于数据量庞大冗杂的用户操作日志,从中选取了几种不同的角色类型进行分类,运用本文提出的改进后的PrefixSpan算法进行角色正常行为模式挖掘,并采取不同的最小支持度,最终得到角色的正常行为模式。为了评估改进后算法的优缺点,使用改进后的PrefixSpan算法和传统PrefixSpan算法对数据集进行模式挖掘,分别从算法运行时间和算法挖掘效率两个方面进行算法对比分析。

如图2所示,在前提条件中给定最小支持度为2%的相同情况下,随着数据量的增加,两算法的处理时间都会增加,但是改进后的PrefixSpan算法在挖掘过程中所用时间明显少于PrefixSpan算法,效率更高。其主要原因在于改进后的PrefixSpan算法综合考虑到了非频繁项和多余的投影数据库,在挖掘过程中直接删除非频繁项以避免后续对其继续挖掘,同时放弃对支持度小于阈值的投影数据库的扫描, 结果节省了挖掘时间和存储投影数据库的空间。此外,通过检查频繁项前缀的前缀把同一数据项的后缀合并,避免对投影数据库中同一数据项后缀重复投影,这样能够有效地减少投影数据库构建的次数,节省不必要的挖掘时间。

图2 两种算法运行时间比较分析

如图3所示,在前提条件中给定挖掘数据量相同的情况下,随着最小支持度的增加,两算法的处理时间都会降低。一方面两算法处理时间均降低是因为最小支持度越大,挖掘到的频繁行为模式包含数据项越少,需要构建的投影数据库规模越小,算法处理时间就越短,所以导致两算法处理时间随着最小支持度的不断提高都会降低。另一方面,当支持度逐渐增加时,改进后的算法处理时间优于传统算法,主要原因是传统算法构建了大量重复的投影数据库,在挖掘非频繁项和重复扫描的过程中浪费大量时间。而图3中当支持度为3%时传统算法处理时间优于改进后的算法,分析其原因是因为改进后的算法为了避免对投影数据库中同一数据项进行重复投影而对相同数据项进行合并,这样减少了构建投影数据库所占内存空间,同时在检查序列数据库S中所有数据项的前缀所耗费的时间多于传统算法对数据项的挖掘时间。

图3 两种算法运行时间比较分析

由以上数据以及原因分析可以得出本文提出的算法无论是在数据量或是最小支持度变化的情况下处理时间要优于传统算法,从而提高数据挖掘效率。而当处理时间没有优势时节省了算法处理所需的内存空间,用投影数据库空间开销换取算法处理时间,也提高了算法挖掘效率,达到了改进的目的。

4.3 实验结果及检测

结合审计日志数据和业务系统的特点,在此将角色异常行为分成两类。第一类是非授权异常,在系统中每个角色都有属于自己的行为权限,非授权异常指的是角色试图超出个人行为权限去执行其它操作,这会对系统造成严重的破坏,例如系统管理员对系统数据库非法操作,拷贝数据库信息或是访问敏感文件。第二类是授权异常,指的是角色在执行行为时没有遵循既定行为习惯和行为频率,此情况出现时极有可能是有人盗取角色登录信息非法登录,例如系统管理员在休息日凌晨频繁登录业务系统。

针对以上可能存在的角色行为异常信息,现在对历史正常数据注入异常数据,其中AOB(abnormal operation behavior)表示操作行为异常,AOF(abnormal operating frequency)表示操作频率异常,AOT(abnormal operation time)表示操作时间异常,原始数据和注入的异常数据的具体情况见表6。

表6 异常行为注入数据集

将人工注入的异常数据分别添加到4组历史正常数据中,分别对4组案例中不同的角色使用本文提出改进PrefixSpan算法进行角色正常行为模式挖掘,在挖掘到频繁项后引入标签索引,使用KMP算法进行异常检测,利用标签索引的不同检测出非频繁项,得到角色行为异常情况,实验结果见表7。

表7 实验结果检测情况

为了进一步分析异常检测结果,采用F1评价指标进行评价(也称为F-measure)。其中P表示为准确率,R表示为召回率,F1表示为准确率和召回率的调和平均数,并根据挖掘结果和异常检测数据分别进行计算R、P、F1的数值。由图4可以看出在案例1中漏检测了一项AOT,导致计算得到召回率为85.7%,案例3多检测出两项AOF,导致计算得到准确率为90.9%,案例2、4检测效果良好。最后4个案例中召回率和准确率的计算得到F1分数维持在90%,说明在实际情况数据量更多的情况下本文提出的算法仍可以保持高水平的挖掘效率,达到本文改进传统算法的目的。

图4 挖掘结果比较分析

5 结束语

针对信息系统可能存在的内部威胁,本文研究了一种基于序列模式挖掘的内部威胁检测方法,此方法包括两部分,一方面改进PrefixSpan算法,通过角色历史正常审计日志为数据源,挖掘角色正常行为,并且通过与传统的PrefixSpan算法进行比较,表明该算法在挖掘时间和挖掘效率上有很大改进。另一方面利用KMP算法对挖掘到的角色正常行为与当前角色行为进行模式匹配,从而达到检测异常行为的目的。实验结果表明,本文提出的方法可以高效挖掘角色正常行为模式,并且在检测角色异常行为方面保持较高的准确率。

猜你喜欢

数据项日志投影
一名老党员的工作日志
基于相似度的蚁群聚类算法∗
解变分不等式的一种二次投影算法
扶贫日志
基于最大相关熵的簇稀疏仿射投影算法
非完整数据库Skyline-join查询*
基于Python的Asterix Cat 021数据格式解析分析与实现
找投影
找投影
雅皮的心情日志