基于控制流粗粒度完整性的监控软件业务行为的方法转让专利

申请号 : CN201610176038.3

文献号 : CN105868626B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 周洪伟李福林韩继红原锦辉周雁舟关慧

申请人 : 中国人民解放军信息工程大学

摘要 :

本发明涉及一种基于控制流粗粒度完整性的监控软件业务行为的方法,含有下列步骤:步骤1,预处理过程:预处理过程由预处理模块完成,预处理过程以程序的源码为输入,输出符合系统要求的可执行文件;步骤2,初始化过程:初始化过程由初始化模块完成,初始化过程以被监控程序的可执行文件为输入,输出为被监控程序所映射的进程;步骤3,训练过程:训练过程由判定模块完成,训练过程以程序运行时所产生的轨迹信息为输入,输出为监控该程序所需要的基准值;步骤4,监控过程:监控过程由判定模块和控制模块完成,监控过程以程序运行时所产生的轨迹信息和相关基准值为输入,输出为监控结果。本发明提供的方法可减少系统性能开销。

权利要求 :

1.一种基于控制流粗粒度完整性的监控软件业务行为的方法,其特征在于:含有下列步骤:

步骤1,预处理过程:

预处理过程由预处理模块完成,预处理过程以程序的源码为输入,输出符合系统要求的可执行文件;预处理模块采用程序插桩的方式,在软件间接跳转指令之前或之后插入探针;

步骤2,初始化过程:

初始化过程由初始化模块完成,初始化过程以被监控程序的可执行文件为输入,输出为被监控程序所映射的进程;初始化模块负责完成可执行文件的完整性校验以及对可执行文件中无用的插桩进行屏蔽;

步骤3,训练过程:

训练过程由判定模块完成,训练过程以程序运行时所产生的轨迹信息为输入,输出为监控该程序所需要的基准值;采用基于距离的分类算法,将相近的基准值合并;

轨迹信息的来源依赖于PMC硬件特性和LBR硬件特性,处理器的PMC寄存器提供的信息有两种:处理器执行的指令数量和处理器执行的跳转指令数量,处理器的LBR寄存器提供的信息是当前间接跳转的上一个间接跳转的相关信息,包括跳转的源地址和目的地址;

步骤4,监控过程:

监控过程由判定模块和控制模块完成,监控过程以程序运行时所产生的轨迹信息和相关基准值为输入,输出为监控结果;具体过程为:步骤4.1:判定模块根据轨迹信息以及基准值,完成判定,如果出现软件业务行为有异,则通知控制模块;所述判定模块的判定过程如下:步骤4.1.1:判定模块读取LBR寄存器,定位当前探针所在地址,确定当前基本块,如果定位失败,那么存在异常;

步骤4.1.2:判定模块根据LBR寄存器读数,定位上一个间接跳转所在基本块,确定是否为活动开始基本块,或者是上一个活动的结束块,如果均不是,那么存在异常;

步骤4.1.3:判定模块读取PMC寄存器读数以及缓存的上一个探针的PMC寄存器读数,可以获得一组数据(x′,y′),查询基准库中对应的基准项bi={(x1,y1),...,(xt,yt)},检查(x′,y′)与基准项每个元素的距离是否超过用户预设的参数dis,如果超过该距离,那么存在异常;

步骤4.1.4:如果软件轨迹通过步骤4.1.1、步骤4.1.2和步骤4.2.3的检查,判定模块认定当前软件业务活动正常;

步骤4.2:控制模块负责控制和协调被监控进程的活动。

2.根据权利要求1所述的基于控制流粗粒度完整性的监控软件业务行为的方法,其特征在于:所述步骤1中的预处理模块就是一个程序编译器,是依托已有开源的gcc编译器实现的,通过给gcc编译器打补丁的方式,完成对gcc编译器的升级,使其能够在程序的间接跳转指令前后进行插桩。

3.根据权利要求1所述的基于控制流粗粒度完整性的监控软件业务行为的方法,其特征在于:所述步骤2的具体过程为:当可执行文件为第一次被访问,那么初始化模块将利用哈希算法计算可执行文件的指纹,并存储指纹值;当可执行文件并非第一次被访问,那么初始化模块将校验该可执行文件的指纹,以确保该可执行文件没有被非法篡改;当系统完成对该可执行文件的训练,那么初始化模块将采用代码覆盖的方法,屏蔽可执行文件中无用的探针,并重新计算可执行文件的指纹;如果需要重新训练,那么初始化模块会恢复所有探针,并重新计算可执行文件的指纹。

4.根据权利要求1所述的基于控制流粗粒度完整性的监控软件业务行为的方法,其特征在于:所述步骤3中的基准值为多元组:<进程名称、业务编号、动作开始地址、动作结束地址、上一个动作、执行的跳转指令数量、执行的指令数量>;业务编号要求唯一标识该进程的业务,不同进程的业务编号可相同;活动的开始地址和结束地址均为对应探针的地址,用于标识活动开始和结束;上一个动作用上一次间接跳转的来源地址标识,用于记录合法的上一个活动,根据此属性可以将业务的所有活动连接起来。

5.根据权利要求1或4所述的基于控制流粗粒度完整性的监控软件业务行为的方法,其特征在于:所述步骤3中基准值的计算过程如下:假设执行的跳转指令数量为x,执行的指令数量为y,在训练结束后,可以得到一系列训练样本的集合K={(x1,y1),(x2,y2),...,(xn,yn)},现在需要根据K得到基准值集合B={b1,b2,...,bm},其中bi,1≤i≤m,称为一个基准值,每个基准值包含若干样本元素,形如bi={(xs1,ys1),...};现对其进行分类:步骤3.1:用户预设参数dis,表示分类所使用的距离长度;

步骤3.2:在K中选定某个点(xi,yi),使K=K-(xi,yi);

步骤3.3:遍历B,依次计算(xi,yi)与bi,bi∈B,的中心的距离,其中计算bi的中心的方法是:设bi={(xs1,ys1),...,(xst,yst)},那么bi中心(xbi,ybi)的计算公式如下:计算(xi,yi)和bi中心(xbi,ybi)的距离的计算公式如下:

如果db≤dis,则将(xi,yi)并入bi;否则继续计算B的下一个元素;如果B中所有元素均不满足要求,则增加一个基准值bu={(xi,yi)},将其并入集合B;

步骤3.4:重复步骤3.2和步骤3.3,直至K为空集;

步骤3.5:检查集合B中元素的个数,如果超出用户预设阈值,则认定拥有过多基准值的动作不可测;否则完成基准值的计算。

6.根据权利要求1所述的基于控制流粗粒度完整性的监控软件业务行为的方法,其特征在于:所述步骤4.2控制模块的具体工作过程为:当被监控进程的某项业务出现异常时,系统将暂停该进程的活动;为提高判定的准确性,控制模块模拟业务发起者,重新发起业务活动,并再次等待判定模块的判定结果;如果判定结果仍然为异常,判定模块通知该业务的发起者,业务的执行者出现异常;如果判定结果为正常,重启业务执行者进程。

说明书 :

基于控制流粗粒度完整性的监控软件业务行为的方法

技术领域

[0001] 本发明涉及一种监控软件业务行为的方法,特别涉及一种基于控制流粗粒度完整性的监控软件业务行为的方法。

背景技术

[0002] 软件行为监控的经典做法是沙盒(有时又称沙箱,sandbox)。软件在沙盒中运行,沙盒监控软件的相关行为,如读写文件、网络传输等。沙盒技术也从早期的简单沙盒到利用硬件辅助虚拟化技术构建囊括整个操作系统的沙盒,能够更为准确和细致的监控软件的行为。不过,并非所有应用软件系统都会部署于沙盒中工作。有时,沙盒只是一种软件分析的辅助手段。
[0003] 由于系统调用在一定程度上反映了软件行为,且系统调用信息容易获得,所以目前软件行为监控的另一种主流方法是基于系统调用来完成。自Forrest S提出利用系统调用序列来构建入侵检测系统后,逐渐发展一大批相关研究成果。但是,系统调用只是软件完成业务活动的一个重要环节,并不能代表整个软件活动,只能片面反映软件行为。基于系统调用分析软件行为,只是根据系统调用信息来逆推软件行为,并不总是准确和可靠,只有在更为底层实施监控才能采集到原始的行为监控数据。
[0004] 从根本上来看,要完全明确软件行为,只有如实记录软件运行时轨迹,检查软件是否严格按照事先确定的控制流图执行。在这方面,最为典型的是Yubin Xia等提出的CFIMon。CFIMon一个突出特点就是利用处理器BTS特性(Branch Trace Store)来收集软件运行过程中所产生的程序跳转记录。形象来讲,处理器BTS特性是处理器将执行过的程序跳转信息,记录至内存中指定位置。CFIMon利用该特点,收集工作所需的原始数据,并以此来判断软件是否正常工作。
[0005] CFIMon的系统结构如图4所示。CFIMon是一个独立的进程,被监控进程是其子进程。操作系统记录子进程运行过程中所产生的程序跳转信息,并将其转交给CFIMon进程。CFIMon存在两个工作阶段,包括训练阶段和工作阶段。在训练时,CFIMon判定模块收集并处理程序跳转信息,形成判定数据所需要的基准值。基准值实际上就是一系列跳转记录[跳转源地址,跳转目的地址]。在工作时,CFIMon判定模块检测软件运行过程中的每一次跳转的目标地址是否落入基准值中。如果出现不合法的跳转,CFIMon控制模块认为出现异常,采取一定措施控制子进程。
[0006] CFIMon应用的最大障碍是其效率。虽然CFIMon借助硬件来收集软件运行时所产生的程序跳转记录,但是由于它不加区别的收集所有跳转记录,同时还需要对每次程序跳转进行判定,这都将导致其产生了较大的性能开销。这种情况随着软件规模的扩大而急剧增加。事实上,对软件所有的跳转信息进行分析往往并不必要。在现有技术水平来看,占跳转指令多数的直接分支跳转指令都可以采用基于指纹的完整性度量方法来保证。此外,在现实的应用背景中,正如本发明的应用背景,人们往往只关心软件在某一方面的行为是否正常,并不需要关注软件整体是否处于正常状态。

发明内容

[0007] 本发明要解决的技术问题是:克服现有技术的缺陷,提供一种基于控制流粗粒度完整性的监控软件业务行为的方法,该方法可减少系统性能开销。
[0008] 本发明的技术方案:
[0009] 一种基于控制流粗粒度完整性的监控软件业务行为的方法,含有下列步骤:
[0010] 步骤1,预处理过程:
[0011] 预处理过程由预处理模块完成,预处理过程以程序的源码为输入,输出符合系统要求的可执行文件;预处理模块采用程序插桩的方式,在软件间接跳转指令之前或之后插入探针;
[0012] 步骤2,初始化过程:
[0013] 初始化过程由初始化模块完成,初始化过程以被监控程序的可执行文件为输入,输出为被监控程序所映射的进程;初始化模块负责完成可执行文件的完整性校验以及对可执行文件中无用的插桩进行屏蔽;
[0014] 步骤3,训练过程:
[0015] 训练过程由判定模块完成,训练过程以程序运行时所产生的轨迹信息为输入,输出为监控该程序所需要的基准值;采用基于距离的分类算法,将相近的基准值合并;
[0016] 轨迹信息的来源依赖于PMC硬件特性和LBR硬件特性,处理器的PMC寄存器提供的信息有两种:处理器执行的指令数量和处理器执行的跳转指令数量,处理器的LBR寄存器提供的信息是当前间接跳转的上一个间接跳转的相关信息,包括跳转的源地址和目的地址;
[0017] 步骤4,监控过程:
[0018] 监控过程由判定模块和控制模块完成,监控过程以程序运行时所产生的轨迹信息和相关基准值为输入,输出为监控结果。
[0019] 步骤1中的预处理模块就是一个程序编译器,是依托已有开源的gcc编译器实现的,通过给gcc编译器打补丁的方式,完成对gcc编译器的升级,使其能够在程序的间接跳转指令前后进行插桩。
[0020] 步骤2的具体过程为:当可执行文件为第一次被访问,那么初始化模块将利用哈希算法计算可执行文件的指纹,并存储指纹值;当可执行文件并非第一次被访问,那么初始化模块将校验该可执行文件的指纹,以确保该可执行程序没有被非法篡改;当系统完成对该程序的训练,那么初始化模块将采用代码覆盖的方法,屏蔽可执行文件中无用的探针,并重新计算可执行文件的指纹;如果需要重新训练,那么初始化模块会恢复所有探针,并重新计算可执行文件的指纹。
[0021] 步骤3中的基准值为多元组:<进程名称、业务编号、动作开始地址、动作结束地址、上一个动作、执行的跳转指令数量、执行的指令数量>;业务编号要求唯一标识该进程的业务,不同进程的业务编号可相同;活动的开始地址和结束地址均为对应探针的地址,用于标识活动开始和结束;上一个动作用上一次间接跳转的来源地址标识,用于记录合法的上一个活动,根据此属性可以将业务的所有活动连接起来。
[0022] 步骤3中基准值的计算过程如下:假设执行的跳转指令数量为x,执行的指令数量为y,在训练结束后,可以得到一系列训练样本的集合K={(x1,y1),(x2,y2),...,(xn,yn)},现在需要根据K得到基准值集合B={b1,b2,...,bm},其中bi(1≤i≤m)称为一个基准值,每个基准值包含若干样本元素,形如bi={(xs1,ys1),...};现对其进行分类:
[0023] 步骤3.1:用户预设参数dis,表示分类所使用的距离长度;
[0024] 步骤3.2:在K中选定某个点(xi,yi),使K=K-(xi,yi);
[0025] 步骤3.3:遍历B,依次计算(xi,yi)与bi(bi∈B)的中心的距离,其中计算bi的中心的方法是:设bi={(xs1,ys1),...,(xst,yst)},那么bi中心(xbi,ybi)的计算公式如下:
[0026]
[0027] 计算(xi,yi)和bi中心(xbi,ybi)的距离的计算公式如下:
[0028]
[0029] 如果db≤dis,则将(xi,yi)并入bi;否则继续计算B的下一个元素;如果B中所有元素均不满足要求,则增加一个基准值bu={(xi,yi)},将其并入集合B;
[0030] 步骤3.4:重复步骤3.2和步骤3.3,直至K为空集;
[0031] 步骤3.5:检查集合B中元素的个数,如果超出用户预设阈值,则认定该动作不可测;否则完成基准值的计算。
[0032] 步骤4的具体过程为:
[0033] 步骤4.1:判定模块根据轨迹信息以及基准值,完成判定,如果出现软件业务行为有异,则通知控制模块;
[0034] 步骤4.2:控制模块负责控制和协调被监控进程的活动。
[0035] 步骤4.1判定模块的判定过程如下:
[0036] 步骤4.1.1:判定模块读取LBR寄存器,定位当前探针所在地址,确定当前基本块,如果定位失败,那么存在异常;
[0037] 步骤4.1.2:判定模块根据LBR寄存器读数,定位上一个间接跳转所在基本块,确定是否为活动开始基本块,或者是上一个活动的结束块,如果均不是,那么存在异常;
[0038] 步骤4.1.3:判定模块读取PMC寄存器读数以及缓存的上一个探针的PMC寄存器读数,可以获得一组数据(x′,y′),查询基准库中对应的基准项bi={(x1,y1),...,(xt,yt)},检查(x′,y′)与基准项每个元素的距离是否超过用户预设的参数dis,距离计算公式如步骤3.3中式(2)所示,如果超过该距离,那么存在异常;
[0039] 步骤4.1.4:如果软件轨迹通过步骤4.1.1、步骤4.1.2和步骤4.2.3的检查,判定模块认定当前软件业务活动正常。
[0040] 步骤4.2控制模块的具体工作过程为:当被监控进程的某项业务出现异常时,系统将暂停该进程的活动;为提高判定的准确性,控制模块模拟业务发起者,重新发起业务活动,并再次等待判定模块的判定结果;如果判定结果仍然为异常,判定模块通知该业务的发起者,业务的执行者出现异常;如果判定结果为正常,重启业务执行者进程。
[0041] 本发明的有益效果:
[0042] 1.本发明采用了多种措施来减少对系统性能的影响。首先,本发明通过简化控制流图的方法,提出控制流粗粒度完整性的思想,采用近似的方法检查大段指令的运行轨迹,而不是检查每个跳转指令;其次,本发明充分应用处理器的PMC特性和LBR特性,从相应的处理器寄存器高效的采集软件运行轨迹;再次,在应用需求的驱动下,本发明只监控有限的软件业务行为;最后,借助基于哈希的完整性度量方法,本发明进一步减少需要关注的对象数量。
[0043] 2.要在指令层面上收集软件运行轨迹是较为困难的,常见的做法是在虚拟机或者模拟器中进行,由于虚拟机和模拟器本身会导致大量性能开销,进而导致系统效率下降;本发明借助处理器PMC和LBR硬件特性,收集粗粒度完整性度量所必需的软件运行轨迹,提高了系统效率。
[0044] 3.传统完整性度量方法往往都是确定性的度量,即从A地址只能跳转到B地址或者C地址,从A地址跳转到B地址只需要1次跳转,但是在本发明中,存在基准值多样性的问题,为此采用分类算法的思想,将相近或者类似的基准值归于一类,在减少基准值数量的同时,也提高判定的效率。

附图说明

[0045] 图1为本发明系统的体系结构示意图;
[0046] 图2为本发明的工作流程示意图;
[0047] 图3为捕获轨迹信息示意图;
[0048] 图4为现有技术CFIMon系统的体系结构示意图。

具体实施方式

[0049] 首先对本发明中个别名词进行解释说明如下:
[0050] 控制流粗粒度完整性:指软件必须按照事先确定的控制流图的某个子图的一条路径运行。控制流粗粒度完整性是相对于传统控制流完整性概念而言,是将控制流图进行某种形式的简化,软件只要按照简化的控制流图的一条路径运行即满足控制流粗粒度完整性。
[0051] 软件业务行为:指软件为了完成某种业务而执行的一系列动作。本发明并不关注软件所有行为,仅仅关注其中特定的一部分。例如:用户关注软件A根据存储于文件中的工作参数进行初始化的过程是否正确,那么只需要监控软件A为完成这一业务所进行的诸如读文件、解析工作参数、设置工作参数、设置初始化这一过程的软件行为,而不关心其它软件行为。
[0052] 下面结合附图及具体实施方式对本发明作进一步详细说明:
[0053] 基于控制流粗粒度完整性的监控软件业务行为的方法是一种近似的方法,但效率得到极大提高且度量效果不会受到大的影响。具体来讲,本发明将若干基本块视为一个基本监视单元,只检测这些监视单元之间的跳转,为了近似的考察这些被略过的基本块执行情况,本发明通过记录执行指令总数量和执行分支跳转总数量两项指标,来近似的判定软件在完成当前业务时,是否按照预设的控制流图工作。简单来讲,本发明采用近似的手段,将原来复杂的控制流图进行简化,并根据简化后的控制流图实施控制流完整性检查,从而发现软件异常的业务活动。根据轨迹信息近似的判断软件的运行轨迹是否正确的过程,举例如下:假设软件完成该业务存在三种路径,分别要执行100、10和5次跳转,其活动序列分别是基本块1→3、基本块1→3→5和基本块1→2。那么如果PMC寄存器当前只记录到5次跳转,就可以近似认为此次软件轨迹为最后一种路径,结合LBR寄存器可知最近几次跳转信息,从而可以判定发起业务的基本块是1,至此可以基本判定软件的运行轨迹是正常的。但是考虑到软件流程的复杂性,特别是一些循环结构的引入,导致很难用跳转次数的线性关系来决定软件某段指令的运行轨迹,所以本发明将运行的指令数量也作为考察指标,以提高判定的准确性。
[0054] 本发明提出的方法主要应用于多个进程协同完成系统任务。在多进程软件系统中,一些大的业务往往需要分解成不同小的业务,由不同进程独立完成后,再将业务结果汇总并呈送给用户。此时,就特别需要关注进程是否如期的完成指定业务。这一情况在一些大型应用软件系统或者工业控制软件系统尤甚。
[0055] 本发明成立存在以下安全假设。首先,软件是良构的,软件的设计者和完成者不会有意在其中内嵌非法代码,如后门、木马等。其次,本发明所提出的方法的正确性是建立在操作系统内核可信的前提下。
[0056] 参见图1和图2所示,基于控制流粗粒度完整性的监控软件业务行为的方法含有下列步骤:
[0057] 步骤1,预处理过程:
[0058] 预处理过程由预处理模块完成,预处理过程以程序的源码为输入,输出符合系统要求的可执行文件;预处理模块采用程序插桩的方式,在软件间接跳转指令之前或之后插入探针;
[0059] 探针的位置与作为基本监控单元的活动紧密相关,如果将业务进一步分解,业务将由多个活动按序组成;从汇编指令的层面来看,活动实际上是软件执行过程中,两个相邻间接跳转指令之间的那些指令的执行过程;从控制流图的层面来看,活动实际上包括若干基本块(这些基本块之间的跳转由直接跳转指令完成)以及之间的控制转移;经过初始化流程后,探针就是安置在间接跳转指令之前或之后,也即是包含间接跳转指令的基本块尾部以及其目标基本块的首部,也即是活动开始和结束的地方;
[0060] 步骤2,初始化过程:
[0061] 初始化过程由初始化模块完成,初始化过程以被监控程序的可执行文件为输入,输出为被监控程序所映射的进程;初始化模块负责完成可执行文件的完整性校验以及对可执行文件中无用的插桩进行屏蔽;
[0062] 步骤3,训练过程:
[0063] 训练过程由判定模块完成,训练过程以程序运行时所产生的轨迹信息为输入,输出为监控该程序所需要的基准值;采用基于距离的分类算法,将相近的基准值合并,从而简化某个动作所对应的基准值;举例说明判定模块采集样本的过程:当前进程A请求进程B完成业务I,判定模块在进程A发出业务请求后,开始收集进程B中探针所返回的信息,在进程B返回业务响应后,系统中止收集信息。每一次,判定模块将采集到进程B完成业务I的一系列活动所对应的轨迹信息。重复多次,判定模块就可以采集到足够的样本;
[0064] 轨迹信息的来源依赖于PMC硬件特性和LBR硬件特性,处理器的PMC寄存器提供的信息有两种:处理器执行的指令数量和处理器执行的跳转指令数量,根据这些信息来近似判断某个指令片段执行是否异常,处理器的LBR寄存器提供的信息是当前间接跳转的上一个间接跳转的相关信息,包括跳转的源地址和目的地址,根据这一信息来判断前一个基本块,从而可以考察完成软件业务的一系列活动是否正常;结合图3说明系统获知某活动轨迹信息的方法。如图3所示的控制流图中,在基本块2和基本块4设有探针,系统将在软件运行到探针处采集相关数据,以收集活动(从基本块2→基本块3→基本块4)需要的轨迹信息。在基本块2处,探针在活动开始时采集数据,包括:从LBR寄存器查询来源的基本块为基本块1、从PMC寄存器查询至当前时刻处理器已经执行的指令数量N1以及从PMC寄存器查询至当前时刻处理器已经执行的跳转指令M1。在基本块4处,从PMC寄存器查询至当前时刻处理器已经执行的指令数量N2以及从PMC寄存器查询至当前时刻处理器已经执行的跳转指令M2。那么判定模块收集到当前活动的运行轨迹信息为:活动开始于基本块2,活动结束于基本块4,前导基本块的序号为1,执行的指令数量为N2-N1,执行的跳转指令数量为M2-M1。需要说明的是:捕获软件轨迹的探针通常是对偶的,由于业务活动的连续性,通常每个探针所采用的数据应用于上一个活动轨迹监控,也应用于相邻的下一个活动轨迹监控;
[0065] 步骤4,监控过程:
[0066] 监控过程由判定模块和控制模块完成,监控过程以程序运行时所产生的轨迹信息和相关基准值为输入,输出为监控结果。
[0067] 步骤1中的预处理模块就是一个程序编译器,是依托已有开源的gcc编译器实现的,通过给gcc编译器打补丁的方式,完成对gcc编译器的升级,使其能够在程序的间接跳转指令前后进行插桩。探针将在间接跳转指令执行之前或之后立即执行,调用读取处理器寄存器以及相关处理的函数,从而实现及时采集软件运行轨迹的目的。
[0068] 步骤2的具体过程为:当可执行文件为第一次被访问,那么初始化模块将利用哈希算法计算可执行文件的指纹,并存储指纹值;当可执行文件并非第一次被访问,那么初始化模块将校验该可执行文件的指纹,以确保该可执行程序没有被非法篡改;当系统完成对该程序的训练,那么初始化模块将采用代码覆盖的方法(即用空指令覆盖探针指令),屏蔽可执行文件中无用的探针,并重新计算可执行文件的指纹;如果需要重新训练,那么初始化模块会恢复所有探针,并重新计算可执行文件的指纹。
[0069] 步骤3中的基准值为多元组:<进程名称、业务编号、动作开始地址、动作结束地址、上一个动作、执行的跳转指令数量、执行的指令数量>;业务编号要求唯一标识该进程的业务,不同进程的业务编号可相同;活动的开始地址和结束地址均为对应探针的地址,用于标识活动开始和结束;上一个动作用上一次间接跳转的来源地址标识,用于记录合法的上一个活动,根据此属性可以将业务的所有活动连接起来。
[0070] 步骤3中生成基准值的基本思想是:收集训练过程中,某动作所产生的所有运行轨迹,并进行分类和优化形成基准值。由于本发明采用控制流粗粒度完整性的思想,导致某活动所对应的合法运行轨迹较多,为了减少某个动作所对应的基准值数量,本发明采用基于距离的分类算法,将相近的基准值合并,从而简化某个动作所对应的基准值。基准值的计算过程如下:假设执行的跳转指令数量为x,执行的指令数量为y,在训练结束后,可以得到一系列训练样本的集合K={(x1,y1),(x2,y2),...,(xn,yn)},现在需要根据K得到基准值集合B={b1,b2,...,bm},其中bi(1≤i≤m)称为一个基准值,每个基准值包含若干样本元素,形如bi={(xs1,ys1),...};现对其进行分类:
[0071] 步骤3.1:用户预设参数dis,表示分类所使用的距离长度;
[0072] 步骤3.2:在K中选定某个点(xi,yi),使K=K-(xi,yi);
[0073] 步骤3.3:遍历B,依次计算(xi,yi)与bi(bi∈B)的中心的距离,其中计算bi的中心的方法是:设bi={(xs1,ys1),...,(xst,yst)},那么bi中心(xbi,ybi)的计算公式如下:
[0074]
[0075] 计算(xi,yi)和bi中心(xbi,ybi)的距离的计算公式如下:
[0076]
[0077] 如果db≤dis,则将(xi,yi)并入bi;否则继续计算B的下一个元素;如果B中所有元素均不满足要求,则增加一个基准值bu={(xi,yi)},将其并入集合B;
[0078] 步骤3.4:重复步骤3.2和步骤3.3,直至K为空集;
[0079] 步骤3.5:检查集合B中元素的个数,如果超出用户预设阈值,则认定该动作不可测;否则完成基准值的计算。
[0080] 为了进一步优化基准值,判定模块将拥有过多基准值的动作设为不可测动作,不对其实施监控,即上述的步骤3.5。由于控制流图的复杂,且因为本发明采用粗粒度测量的方法,导致某些动作很难用特定数量的基准值描述,当训练过程监测到某个动作存在过多不同的观测样本时,本发明则认为本动作内部可能过于复杂,难以直接而高效的判定该动作是否正常工作,放弃对该动作的度量。当然,可以采用缩小监控粒度的方法,来确保所有的动作均为可测动作。但是出于效率考虑,本发明不采用此措施。不可测动作的判别标准是基准值的数量,该参数由用户预设。
[0081] 步骤4的具体过程为:
[0082] 步骤4.1:判定模块根据轨迹信息以及基准值,完成判定,目的是检查软件运行轨迹,如果出现软件业务行为有异,则通知控制模块;
[0083] 步骤4.2:控制模块负责控制和协调被监控进程(也是子进程)的活动,避免可疑业务造成整个软件系统异常。
[0084] 步骤4.1判定模块的判定过程如下:
[0085] 步骤4.1.1:判定模块读取LBR寄存器,定位当前探针所在地址,确定当前基本块,如果定位失败,那么存在异常;
[0086] 步骤4.1.2:判定模块根据LBR寄存器读数,定位上一个间接跳转所在基本块,确定是否为活动开始基本块,或者是上一个活动的结束块,如果均不是,那么存在异常;
[0087] 步骤4.1.3:判定模块读取PMC寄存器读数以及缓存的上一个探针的PMC寄存器读数,可以获得一组数据(x′,y′),查询基准库中对应的基准项bi={(x1,y1),...,(xt,yt)},检查(x′,y′)与基准项每个元素的距离是否超过用户预设的参数dis,距离计算公式如步骤3.3中式(2)所示,如果超过该距离,那么存在异常;
[0088] 步骤4.1.4:如果软件轨迹通过步骤4.1.1、步骤4.1.2和步骤4.2.3的检查,判定模块认定当前软件业务活动正常。
[0089] 步骤4.2控制模块的具体工作过程为:当被监控进程的某项业务出现异常时,系统将暂停该进程的活动;为提高判定的准确性,控制模块模拟业务发起者,重新发起业务活动,并再次等待判定模块的判定结果;如果判定结果仍然为异常,判定模块通知该业务的发起者,业务的执行者出现异常;如果判定结果为正常,重启业务执行者进程。