论文部分内容阅读
入侵检测(Intrusion Detection)通过对计算机主机或网络系统中的关键点收集信息并对其进行分析,从中发现主机或网络中是否有违反安全策略的行为和被攻击的迹象。异常检测(Anomaly Detection)是入侵检测的方式之一,它假设入侵者的活动异常于正常主体的活动。该方法的难题在于如何建立正常行为画像库以及如何设计统计算法,从而可以有效发现异常行为。程序执行路径可以用一个调用序列来表示,我们可以通过分析调用序列来进行入侵检测:当一个调用序列表现异常时即有可能存在恶意入侵。调用序列分析可分为静态分析和动态分析两种。静态分析方法直接分析被监控程序源代码的模型,而动态分析在不考虑程序内部结构和内部特性的情况下监控分析程序动态运行时产生的现象以构建模型。本文旨在设计并实现了一个基于程序动态调用序列异常检测的脱机入侵检测系统,用于检测利用在Linux系统下运行应用程序的漏洞的入侵行为。该系统结合静态分析与动态分析,训练得到一个可以表征程序正常行为的高阶隐马尔可夫模型(Hidden Markov Model,HMM)。其中静态分析结果用于对高阶HMM进行初始化,而动态调用序列用于对该模型进行训练。静态源代码分析模块是用于从待检测程序的源代码中抽取信息,并分析可能的审计事件序列。该模块包含了函数CFG(Control Flow Graph,控制流图)提取模块、分支预测模块、调用统计模块、聚合模块等四个子模块。根据被检测程序的源代码,依靠编译器的词法分析、语法分析、语义分析和分支预测等工具,可以静态分析获取程序的函数调用关系,并精准定位函数包含的所有系统调用/库函数调用,以及系统调用/库调用的所有可能的转移关系,并依据分支预测的结果对转移关系的可能性做量化评估,最终得到审计事件的转移关系。此模块的输出将作为训练模块的输入参数,用于对隐马尔可夫模型做初始化。在应用程序运行过程中,我们可以得到程序运行的系统调用/库函数调用序列。由于每一个观测状态代表一个调用,那么这个调用序列恰好就构成了模型的观测序列。本文采用经典的Baum-Welch参数估计算法,对初始的模型参数做修正,从而实现模型的学习过程。在学习结束后,我们将得到一个新的隐马尔可夫模型,从而更为精确地描述正常用户的行为。在实际应用过程中,通过训练得到的数学模型来量化函数调用/系统调用序列和该模型的偏差,再根据偏差的程度对行为进行辨别,偏差较大的行为将被判定为异常行为。对比现有的入侵检测系统,该系统具有以下特点:(1)改进了静态分析方法的难以量化、可扩展性低的问题。(2)改进了动态分析的正常行为样本描述偏差的问题,避免构建模型时完全依赖于训练样本。(3)使用了隐马尔可夫模型状态转移概率的有关性质,采用改进的高阶隐马尔可夫模型,兼顾了效率和精度。(4)充分利用了分析过程中的中间结果,扩展了检测的维度,提升了检测可靠性。