基于层次聚类的日志审计方法与流程

文档序号:12271463阅读:683来源:国知局
基于层次聚类的日志审计方法与流程

本发明涉及网络安全领域,具体地说是一种基于层次聚类的日志审计方法。



背景技术:

随着信息化的发展,网络安全问题愈发凸显,日志作为一种的安全记录手段,仍然可以在在当下的安全需求中发挥重要的作用。但在海量日志信息的面前,传统的日志审计手段显得捉襟见肘,以入侵检测检测为例,根据Julisch的调查,早在网络还未膨胀的2000年,系统一般每分钟至少触发3个警报日志,现在日志早已属于大数据的范畴。海量的数据将给决策分析带来极大困难,而且手工分析不仅耗费精力而且容易出错。时下,运用数据挖掘中的聚类方法对网络数据进行挖掘已成为主流。

目前存在大量的聚类算法(Xuan Jifeng,Jiang He,Ren Zhiwei,et al.Automatic Bug Triage Using Semi-supervised Text Classification[C]//Proceedings of the 22nd International Conference onSoftware Engineering&Knowledge Engineering.Washington D.C.,USA:IEEE Press,2010:209-214.和Strate J D,Laplante P A.A Literature Review of Research in Software Defect Reporting[J].IEEE Transactions on Reliability,2013,62(2):444-454.),它们各有特点,在农学,医学,经济学等方面取得了巨大的成功,层次聚类(Murtagh F,Contreras P.Algorithms for hierarchical clustering:an overview[J].Wiley Interdisciplinary Reviews Data Mining&Knowledge Discovery,2012,2(1):86-97.)作为常见的聚类算法中的一种,已经成为构建分类方案的主导方法,它可分为凝聚层次聚类和分裂层次聚类。虽然已经有很多成熟的层次聚类算法,但将其运用到日志审计的算法少之又少,一方面因为聚类方法本身的存在局限性,基于划分聚类算法如k-means只能处理数值型数据,且抗干扰能力差;基于密度的聚类算法需要确定相应的阀值;基于网格的聚类算法难点在于选择合适的单元大小和数目,对每个单元中对象的信息进行汇总和量化尺度的确定;基于模型的聚类算法不适于聚类大型数据库的数据。另一方面由于日志内容的单一性,格式的多样性和应用的针对性,虽然有如Apriori(朱金清,王建新,陈志泊.基于APRIORI的层次化聚类算法及其在IDS日志分析中的应用[C]//第二十四届中国数据库学术会议论文集(研究报告篇).2007.)、项目树(王晓东,许占文.高效关联规则数据挖掘算法研究[J].沈阳工业大学学报,2004,24(4):329-333.)之类的关联算法算法来发掘日志中的关联规则,但仅仅挖掘日志间的关联性仍然无法对海量的日志进行过滤,找出异常部分,不足以充分展现海量日志中的信息。

传统日志审计要求必须是规范化的日志结构,无法处理非结构化的数据。普通聚类算法,只是简单日志分为几个类别,无法有效筛选极少的异常信息。



技术实现要素:

为了解决已有日志审计方法无法有效审计海量的日志的问题,发现日志中的异常数据,本发明提出了一种基于层次聚类的日志审计方法。本方法特别适用于日志中存在大量普通信息和极少数异常信息的情况。

实现本发明目的的技术解决方案为:一种基于层次聚类的日志审计方法的工作方法,包括以下步骤:

步骤1:查找每条日志的关键字;

步骤2:根据关键字构造词袋,构造集合包含所有关键字;

步骤3:构造词向量空间,将每条日志用向量方法表示;

步骤4:采用最近邻链方法对日志进行聚类;

步骤5:去除元素最多的类。

本发明与现有技术相比,其显著优点为:能够展示分析所得的小块异常信息,避免了人工审计日志的繁重,并能够实现自动对异常日志信息的过滤,增强了用户体验效果。

说明书附图

图1是日志审计流程图。

图2是日志格式列举。

图3是聚类过程。

图4是本发明的算法与K-means算法对比。

具体实施方式

本发明旨在运用层次聚类的方法进行日志审计,为日志进行聚类,发掘出异常日志信息。

下面结合附图和实施例对本发明作进一步的说明:

日志审计流程如图1所示。

在已经获的原始日志文件的情况下,需要对日志进行预处理,本发明基于一种tf-idf权的方法来进行日志的预处理。以web日志为例,一条普通的web日志如图2所示。

不难发现该条日志为半结构化数据,其中存在分类类型、时间和字符串,对于时间和分类类型可以单独提取为特定的属性项.对于可变描述则需要用tf-idf权重选出每条日志的关键字。公式如下:

tf-idf(t,d,D)=tf(t,d)*idf(t,D) (3)

通过tf-idf权重处理后的日志,可以找出权重最大的n个作为关键字将它与已有确定属性相结合,其中D为一部分日志的可变项的分词结果集合,最终每条日志记录转化为一条具有相同K个属性数目的元组。

典型的聚类算法分为五步:

(1)模式表示(特征选择/提取)

(2)模式相似度定义和计算

(2)聚类或分组

(3)数据抽象(可选)

(4)输出评估(可选)

图3描述了通常上述步骤的前三项,并通过循环反馈机制来优化算法。通常聚类算法需要运行多次,来确保聚类结果的准确性。对于原始日志数据需要不断调整参数,以确保聚类结果的最优化。对于已分组的情况,本发明仍然可以对聚类所得的子集进行再次聚类。

对于一组数据,本发明需要测量每个元素之间的相似度,以此来来判断他们所属的类别。距离、相似度、相异度,他们在某种程度上表示的是同一种概念。

对于向量点i,j,k,它们之间任意一对向量间的距离满足对称性,即d(i,j)=d(j,i);正定性,d(i,j)>0;三角不等式,d(i,j)≤d(i,k)+d(k,j),若排除三角不等式,可以用相异度来替代。相似度定义如下:

s(i,j)=maxi,j{d(j,k)}-d(i,j)。

在向量空间中,通常用Minkowski距离来计算向量间的距离,定义如下:

Z+为正整数聚合

曼哈顿距离,欧式距离,切比雪夫距离为Minkowski距离的特殊情况,它们分别对应p=1,p=2,p→∞的情况。

对于相似度,本发明引入余弦似度的概念,它用两个向量点之间的夹角表示它们之间的相似度,它被广泛应用于文本检索,夹角越小说明该向量或文本间的相似度越小。余弦相似度定义如下:

通过预处理,获得每条日志的关键词合集。处理后的一条日志元组形式如下li=<si,1,si,2,…,si,m,ti,1,ti,2,…,ti,n>,其中si,j(i>0,j>0)为日志的确定中的属性,如id、time等,ti,j(i>0,j>0)为日志中的可变属性,如url。经过tf-idf权重运算所提取出的其中权重最大的n个关键词,关键词的数目n由用户来指定,理论上关键词的数目越多越好,理想情况可以将整条日志完全覆盖,但这样会造成数据维数迅速增长,根据实际情况需要,在关键词数目和覆盖率之间做出权衡。对于极端情况,若n=0,则表明该日志已经是结构化数据,只需进行一般的数据规范化,标准化处理。

接下来目标为计算日志间的相似度,对于已确定的属性,可以通过属性的规范化和标准化,将其转化为向量。对于id等用来标志唯一性的属性,本发明可以忽略。

对于任意两条日志元组li,lj,计算它们之间的相似度,分为两步,第一步为计算可以已确定属性间的相似度,第二步为计算可变属性间的相似度,第三步,合并确定属性的相似度和可变属性的相似度。对于任意两个可变属性。

Ti=<ti,1,ti,2,…,ti,n>和Tj=<tj,1,tj,2,…,tj,n>相似度计算过程如下:

(1)构造集合T=Ti∪Tj

(2)词向量Vi={tf(ti,j,Ti)|ti,j∈T,j=1,2,…,n}

(3)计算距离(相似度,相异度)

本发明聚类的目标为过滤掉大量的普通数据,获得异常数据,所以本发明构造一种最近邻链的层次聚类算法。

首先,将每个数据点都划分为一个簇,一条最近邻链由一个随机簇开始,遍历数据集,将它的最近的邻接簇加入最近邻链,在最近邻链中,当前簇是它前一个簇的最近邻,如此往复,最终将有一些簇对互为最近邻,这时便可以将它合并。

每当找到一条最近邻链时,本发明的算法便可以将它中的簇合并,这种过程是不可逆的。与一般的聚类方法一样,也就是在无需反转时,两个簇可被认为是属于同一簇。s的标准值(如:相异度)较高,q,r凝聚后合并为一簇后与s间的距离小于s到它们间距离之和,即这种情况下,无需反转。相反若则需要反转。回到最近邻接链上,如果需要反转,则必须把邻接链上最后两个簇合并为一簇,因为它们是除了整条最近邻链中距离最近的两个簇。

算法描述如下:

(1)初始化簇:将每个簇划分为一点

(2)构建栈S,初始为空,用于存放当前激活点

(3)当集合中多余指定数目则循环执行以下步骤:

(4)若S为空,随机选择一个激活点,加入S

(5)取S栈顶元素C。计算C与其它簇的距离,得到元素D为C的最近簇

(6)若D已经在S中,D必然是C在栈中的上一个元素,将CD出栈合并

(7)否则将D加入S

每次循环迭代,都要搜索一个簇的最近邻,操作为将一个簇加入栈中或同时从栈中取出两个簇进行合并,每个簇只会入栈两次,因为每当它再次出栈时,它就会失效或被合并。总共会有2n-2个簇入栈:n个原始簇,n-2个合并簇。因此算法执行2n-2次入栈操作,1次出栈操作,每次计算n-1个簇间距离来查找最近邻。计算簇间距离的总次数少于3n2,所以它的总的时间复杂度为O(n2)。该算法需要的一个集合来存放激活点和一个栈来存放激活点的子集,所以所需的空间复杂度是O(n)。

该算法的正确性证明,依赖于它的距离函数的一个属性——可约性开始,可规约性被用于最近邻对,而不是最近邻链。对于距离函数d,对于任意三个簇A,B,C,若d(A∪B,C)≥min(d(A,C),d(B,C)),则称d是可约的。若距离函数可约,若簇C或簇D其中一个是E的最近邻,合并簇C和簇D只会引起E的最近邻的改变。首先,很容易证明,对于算法中的栈,在任意时刻,都维护了一条从栈底元素开始的最近邻链。而在步骤,提到若D在栈中,则D必然是C的上一个元素,对于一条最近邻链:A→B→C→D,如果D的最近邻已经在最近邻链中,则D的最近邻一定是C而不是链中的其他元素。可以通过反证法来证明:对于D的最近邻E,如果E在最近邻链中且E不是C,则E和D之间存在最近邻链E→X→…→C→D→E;所以,由最近邻的定义,有d(D,E)<…<d(C,E)<d(E,X),即D和E的距离小于E和X之间的距离;但由于X是E的最近邻,则对于其他任意的类簇x,都有d(X,x)>d(X,E);这和d(D,E)<d(E,X)矛盾。所以,任意时刻对于最近邻链末端的元素C,如果C的最近邻D已经在当前的最近邻链中,则D一定是C的上一个元素。

其次证明最近邻算法和贪婪法层次聚类会产生一样的结果(尽管类簇合并的顺序不同)。可以证明,对于任意类簇C和D,如果C和D在最近邻链中算法中被合并,则C和D在贪婪发层次聚类中也会被合并:根据最近邻链表及可约性的的定义,在任意时刻,d(C,D)<d(C,X)or d(D,X),其中X是其它簇。所以,在贪婪法中,若去除簇C与其他簇进行合并,另一个被合并的簇必然是D,而非其他簇X;对D来说亦然。所以,尽管合并顺序不同,但最近邻链中算法保证了其产生的结果和贪婪法是相同的

通过该算法进行聚类的,结果会呈现几个大块和数个零碎的小块,通常意义下,大块的数据为需要过滤的普通日志,小块的数据是需要关注的异常数据。

将本算法与K-means的对比如图4所示,可以发现随着日志规模的增长,本发明所提出的算法能够将普通日志迅速聚为一类。从而过滤大量的普通日志。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1