李 萍,吴金霖,陈一民
随着Internet的不断发展,计算机网络已经渐渐深入到社会生活的各个方面,计算机网络的安全就显得尤为重要。近年来网络安全事件越来越频繁,黑客们为了各种各样的目的对计算机系统和网络进行入侵和破坏,窃取机密信息或个人隐私,给广大用户带来巨大的麻烦和损失。在CNCERT/CC的报告[1]中指出:2010年CNCERT 抽样监测结果显示,在利用木马控制服务器对主机进行控制的事件中,木马控制服务器IP 总数为479626 个,木马受控主机IP总数为10317169 个,僵尸网络控制服务器IP 总数约为1.4万个,僵尸网络受控主机IP 地址总数为562 万余个,被篡改网站数量为34845 个,CNCERT 通过国际合作渠道接收到境内感染恶意代码的主机数量为83.1 万余个,日均2279个。用此可见,目前的网络安全状况令人堪忧。而且随着网络技术的不断发展,网络安全的形式也势必越来越严峻。
计算机网络安全问题涉及到政治、军事、经济、科技、教育以及企业、个人等领域,为了确保这些信息不被破坏或窃取,加大计算机网络安全的研究势在必行。基于系统调用序列的入侵检测属于异常检测范畴,通常是对特权进程进行监控。如果一个程序中没有选择和循环语句,那么他在运行过程中所涉及的系统调用序列是固定的,虽然执行选择和循环语句时产生的系统调用有一定的随机性,但经Forrest 等学者的研究发现[2],整个进程在运行时的产生的系统调用具有很明显的局部稳定性和一致性。这样就可以将整个系统调用序列分成一定长度的短序列,并将此作为检测的参考标准。在进程受到攻击时,这些短序列将会发生一定的变化。这种方法一般分为两个阶段:训练阶段和检测阶段。在训练阶段,获取系统所有进程的系统调用序列集合。首先对每个进程根据其系统调用序列,通过一定的算法形成正常模式表,然后将每个进程的正常模式表进行合并,形成整个系统的正常行为模式库。在检测时,将检测的进程与其对应的正常行为模式表进行模式匹配,如果不匹配的数量超过设定的阈值,则认为入侵,反之则为正常。
目前基于系统调用序列的入侵检测方法有:短序列时序分析方法[2,3,4]、隐马尔科夫模型[5,6]和基于数据挖掘的检测方法[7,8,9]等等。基于以上的分析,本文从系统调用的角度,给出了基于STIDE的算法和基于RIPPER的算法,同时分析、研究了基于这二种算法的系统调用、建模方法的特点及效果。
基于STIDE的检测算法具有较高的准确率,算法的具体做法是:对于系统中的每个进程,利用strace 进程跟踪程序跟踪的其正常运行时的状态,获取其正常运行时的系统调用序列。然后利用stide 滑动窗口技术,也就是定义一个长度为k的窗口,在该系统调用序列上滑动,每次滑动一格,并将每次在窗口中的序列作为进程的一个正常短序列模式,这样所获得的所有正常短序列模式,就组成了该进程的正常行为模式库。系统中的所有进程的正常行为模式库合并起来就是系统的正常行为模式库。
在检测时,可以利用滑动窗口技术,获取待检测的系统调用短序列。对于每个待检测的系统调用短序列,求其与正常行为模式库中的正常短序列的最小海明距离,,越大,发生入侵的可能越大。在实际检测过程中,我们设定一个阈值,当 小于这个阈值时,认为该短序列是正常的,否则视为异常。最后计算整个系统调用序列的异常度,当异常度大于给定的异常度阈值时,则认为进程运行异常。
在利用此算法进行训练时,首先要设定一些参数,如滑动窗口的长度,然后,根据给定的滑动窗口长度,对正常运行的系统调用序列,利用滑动窗口技术,形成正常短序列模式库。其流程图,如图1所示:
图1:基于STIDE的算法训练流程图
在进行检测时,也要先设定一些阈值,包括海明距离阈值和异常度阈值。然后,根据这些阈值判断短序列的进程是否异常。其流程图,如图2所示:
图2:基于STIDE的算法检测流程图
在本文中,用海明距离(Hamming Distance)的大小来衡量待检测短序列和正常短序列之间的相似度,并以此判断是否异常。即是指两个序列在相同位置上数字不同的的位数。待检测短序列与正常行为模式库中的所有正常短序列的海明距离的最小值为其最小海明距离,并以此作为该序列的最大相似度。另外,在实现过程中,本文采用树形结构存储正常短序列,具有相同的头元素的短序列存放在同一棵树中,该树以该相同的头元素为根节点。树中从根节点到叶子节点的路径即为一条短序列。所用的树组成的森林即为正常行为模式库。用树形结构存储短序列能够节省空间和加快检测匹配速度。在生成正常行为模式库时,先在森林中查找以当前短序列的头元素为根节点的树是否存在,若存在,将其插入该树中;否则,新建一课以该头元素为根节点的树,并将该序列插入新建的树中。在进行查找和插入时,都是递归进行的。
基于RIPPER的算法是一种分类规则生成算法,算法是建立在REP(Reduce Error Pruning)和IREP(Incremental Reduce ErrorPruning)的基础之上的。算法通过更改IREP中对规则价值的的评估公式,改善判断停止添加规则的条件,增加规则优化模块,大为提高了分类的准确率。此算法首先根据训练样本中每类的实例数从小到大进行排序,然后按此顺序为每个分类建立规则集,最后将所有类的规则集合并起来,就是其对应训练样本的规则集。基于RIPPER的算法所建立的规则流程,如图3所示:
图3:基于RIPPER的算法所建立的规则流程图
基于RIPPER的算法规则流程实现过程如下:
(1)将训练集随机的分为两个子集:growdata(用于建立规则)和prunedata(用于裁剪规则)。
(2)用growdata 建立规则。首先将规则的条件置空。然后不断选择信息量最大的条件,将其加入到规则中,并在每次添加条件后缩减growdata。这样直到growdata 为空或者所有的属性都已被用。
(3)用prunedata 裁剪(2)中建立规则。依次从规则的条件中删除条件,使函数值V=(p -n)/(p+n)最大。其中p是裁剪集prunedata 中符合该规则的实例数量,n 是prunedata中不符合该规则的数量。重复的执行这个过程直到通过删减条件无法使V 值增大。该过程能产生裁剪集上的更精确的规则,改善规则的普适精度和简化规则。
基于RIPPER的算法检测流程,如图4所示:
图4:基于RIPPER的算法检测流程图
基于RIPPER的算法所建立的规则集流程,如图5所示:
图5:基于RIPPER的算法所建立的规则集流程图
最后在Ri,repRi和revRi中做一个选择,作为最终的规则,其决定的标准是使得整个规则集和数据集的DL(description length)[10]最小。
分类器建好之后,对进程行为进行检测。利用滑动窗口技术,形成系统调用短序列实例。然后,对每个短序列实例与生成的规则库进行模式匹配,若一个短序列实例违背了一个置信度为P的规则,那么该短序列的异常度为100*P,如果该短序列实例在规则库中找到了与之相符的模式,则认为该短序列实例是正常的,其异常度为0。最后的进程的异常度为每个短序列的异常度的平均值。若该异常度大于给定的异常度阈值,则认为该进程是异常的;反之,视为正常。
本文研究的是基于系统调用的主机安全分析,因此实验的数据是系统调用,在实际分析过程中使用系统调用号代表系统调用,这样更方便和明了。
本文的所有系统调用数据集都来自新墨西哥大学免疫系统网站,该网站提供了Linux 系统中sendmail、ftp、lpr、login、ps、inet、xlock 等程序的正常运行系统调用序列集及相应的受攻击的系统调用序列集。每个系统调用序列集都以文本格式存储。其格式是:每一行有两个整数,第一个整数是所监控进程的进程号,第二个整数是进程运行过程中产生的系统调用号,如:
其中,509 为进程号,90、125、106、5、90、6、5、3为系统调用号。并且其排列顺序是按进程运行过程中产生系统调用的顺序,这样就可以分析系统调用的时序关系。
本系统在实际运行和测试中使用了sendmail的有关数据作为测试用例[11]。一共包括以下文件:包括6 个正常数据文件:bounce.int、bounce1.int、plus.int、queue.int、sendmail.int、sendmail1.int。在运行时选用sendmail.int 作为训练数据源,其他几个作为测试数据。异常数据文件包括16 个样本文件,如表1所示:
表1 异常数据分布
在进行结果分析之前,先了解一下在分析过程中涉及的概念[12]。具体包括:真阳性TP(true positive),表示实际为正常的实例被检测为正常。真阴性TN(true negative),表示实际为异常的实例被检测为异常。假阳性FP(false positive),表示实际为正常的实例被检测为异常。假阴性FN(false negative),表示实际为异常的实例被检测为正常。具体计算方法如表2所示。
表2:攻击检测衡量指标
另外,本文中将使用ROC 曲线描述系统的检测性能。ROC(Receiver Operating Characteristic,ROC)曲线又称为接收者操作特征,是一种对灵敏度进行描述的功能曲线。可以通过TPR 和FPR 来实现。由于ROC 是通过比较两个操作特征(TPR 和FPR)作为标准,因此ROC 曲线也可看成是相关操作特征曲线。
3.1.1 基于STIDE的算法结果
在此算法中,在异常度阈值为0.100的情况下,笔者根据短序列的长度进行了3 组实验(短序列长度为6,8,11),每组实验中,根据不同的海明距离阈值分别进行检测。系统的精确度、误报率、漏报率随海明距离阈值的变化如图6,图8,图10所示。系统检测性能的ROC 曲线如图7,图9,图11所示,其中L 表示不同的短序列长度。
图6:精确度、误报率、漏报率随海明距离阈值变化(L=6)
图7:ROC 曲线(L=6)
图8:精确度、误报率、漏报率随海明距离阈值变化(L=8)
图9:ROC 曲线(L=8)
图10 精确度、误报率、漏报率随海明距离阈值变化(L=11)
图11:ROC 曲线(L=11)
从上面实验数据可以看出,随着海明距离阈值的增大,检测的精确度逐渐下降,系统的误报率越来越小,但漏报率却越来越高。但并不是说海明距离越小越好,海明距离越小时,检测的精确度虽然变高了,但是同样系统的误报率也变高了。因此,关键在于找到一个精确度、误报率、漏报率的平衡点。
ROC 曲线中,在参考线越上面的点,性能越好。从3组实验中的ROC 曲线可以看出,在海明距离阈值为0 和1时,系统的检测命中率是比较高的,系统的检测错误命中率比较都比较低,因此在检测时将海明距离阈值设为0 或1时,系统将有比较高的检测性能。3 组数据对比分析可以发现,在短序列长度为11 时,检测的精确度较其他两组要高。
3.1.2 基于RIPPER的算法结果
在此算法中,笔者根据短序列的长度进行了3 组实验(短序列长度分别为6,7,8),每组实验中根据设定的异常度阈值的不同分别进行检测(L 表示不同的短序列长度),如图12~图17所示:
图12:精确度、误报率、漏报率随异常度阈值的变(L=6)
图13:ROC 曲线(L=6)
图14:精确度、误报率、漏报率随异常度阈值的变化(L=7)
图15 ROC 曲线(L=7)
图16:精确度、误报率、漏报率随异常度阈值变化(L=8)
图17:ROC 曲线(L=8)
3.2.1 基于STIDE的算法性能
基于STIDE的算法中正常行为数据集的大小大约为O(Nk),算法的时间复杂的大约为O(k(PAN+1)),其中N为系统调用的总数目,k为系统调用序列长度,PA为异常行为和正常行为的比例。
总体来讲,该算法的效率比较高,计算和空间代价不是太大。从以上的实验检测结果可以看出,该算法的检测的效率较高,准确率较高。然而其不足之处是,正常行为和异常行为的异常度差距不明显,这样阈值较难确定。
3.2.2 基于RIPPER的算法性能
基于RIPPER的算法由于使用规则集,所以不记录正常行为数据库。其时间复杂度为O(NR),其中N为系统调用的总数目,R代表RIPPER 中规则的总数。算法在生成规则时,计算量较大,在检测时,计算量较少。由于生成规则只要进行一次,因此,从整体来讲,其效率还可以。
从异常的算法实验结果可以看出,此算法的检测准确率比较高,而且正常行为和异常行为的异常度的差距较明显,这样异常度阈值的设定相对与基于STIDE的算法更简单。
入侵检测作为一种积极主动的网络系统安全防护技术,提供了对内部攻击、外部攻击和误操作的实时保护。而基于主机系统调用的入侵检测,具有准确率高、误报率低和稳定性好等特点,是主机安全中一种重要的方法。本文采用智能学习中两种不同分析方法,分别对基于系统调用序列的主机入侵检测进行研究,从实验结果可以看出,基于STIDE的算法随着海明距离阈值的增大,检测的精确度逐渐下降,系统的误报率越来越小,但漏报率却越来越高。而且,就总体而言,基于RIPPER的算法较基于STIDE的算法的检测准确率高,而且正常行为和异常行为的异常度的差距较明显,异常度阈值的设定比基于STIDE的算法设置更简单。另外,二种算法通过不同阈值选择,前者可获得80%以上的准确率,而后者可获得90%左右的识别准确率。因此,通过本文的理论分析和实验可以看出,二种算法都有着很不错的性能,在入侵检测领域有着不错的应用前景。
[1]CNCERT/CC 国家互联网应急中心,2010年中国互联网网络安全报告http://www.cert.org.cn/articles/docs/common/201104222 5342.shtml.
[2]Forrest S.A Sense of Self for UNIX Processes[C].IEEE Proceeding of Symposium on Security and Privacy,Oakland,CA,IEEE Press,1996:120-128.
[3]Qian Q.Wu J.L.Zhu W.Xin M.J.Improved Edit Distance Method for System Call Anomaly Detection[C].IEEE 12th International Conference on Computer and Information Technology (CIT 2012),Chen Du,China,2012:1097-1102.
[4]Hofmeyr S.A.Forrest S.Somayaji A.Intrusion Detection Using Sequences of System Calls[J].Journal of Computer Security,1998,Vol.6,No.3:152-180.
[5]Mutz D.Valeur F.Vigna G.Kruege C.Anomalous system call detection[J].ACM Transactions on Information and System Security (TISSEC),2006,Vol.9,No.1:61-93.
[6]Mazeroff G.Markov models for application behavior analysis[C].Proceedings of the 4th annual workshop on Cyber security and information intelligence research,New York,USA,2008:1-2.
[7]Yasami Y..Mozaffari S.P.A novel unsupervised classification approach for network anomaly detection by k-Means clustering and ID3 decision tree learning methods[J].The Journal of Supercomputing,2010,Vol.53,No.1:231-245.
[8]Cohen W.W.Fast Effective Rule Induction[C].Proceedings of the Twelfth International Conference on Machine Learning,Morgan Kaufmann Press,California,USA,1995:115-123.
[9]Tandon G.Chan P.Learning Rules From System Call Arguments and Sequences for Anomaly Detection,Workshop on Data Mining for Computer Security(DMSC),Melbourne,Florida,2003:20-29.
[10]Rissanen.J.An introduction to the MDL principle.2 006,Available at http://www.mdl-research.org/jorma.r issanen/pub/Intro.pdf
[11]Computer Immune Systems,Data Sets and Software.In http://www.cs.unm.edu/~immsec/systemcalls.htm.
[12]ROC 曲线.In http://zh.wikipedia.org/wiki/ROC%E6%9 B%B2%E7%BA%BF.