基于软件功能层对软件异常行为溯源的方法

文档序号:6535819阅读:232来源:国知局
基于软件功能层对软件异常行为溯源的方法
【专利摘要】本发明是一种基于软件功能层对软件异常行为溯源的方法。首先,截取软件功能的系统调用序列,求出每个软件功能状态序列的标准操作序列;然后,以软件功能为做程序切片的兴趣点,并且建立每一个软件功能的程序切片准则;其次,建立软件正常运行时的软件功能转移图;最后,得到检测序列中每个软件功能的测试序列,并和标准操作序列相匹配,检测异常软件行为。该模型从系统调用的基础上抽取出更高层的软件状态模型,并根据软件的功能转移方式对软件建模,通过检测出功能状态序列的偏差判断软件功能是否为异常,对软件异常操作做程序切片,达到对软件溯源的目的。本发明从根源上找出了软件行为异常的原因,提高了对软件行为可信性的控制。
【专利说明】基于软件功能层对软件异常行为溯源的方法
【技术领域】:
[0001]本发明旨在建立软件功能模型,判别出异常软件行为,并对异常行为溯源的过程。【背景技术】:
[0002]软件的行为是指软件运行表现形态和状态演变的过程。软件行为定义为软件运行时作为主体,依靠其自身的功能对客体的施用、操作或者动作。软件存在的不可信行为会对社会造成不同程度的损坏,所以研究软件行为的可信性成为一种必要。软件的行为可以从底层的二进制指令到高层的程序语句、函数、系统调用等不同层次刻画软件行为,根据某一层次的行为信息而构建的行为状态序列以及状态变迁,可以表征软件的正常行为特征,并用于软件行为的异常检测。一般的软件行为研究方法分为静态和动态两种。静态方法直接分析程序的源代码或二进制代码,建立相应的行为模型。源代码通过对程序代码的执行路径进行分析来建立程序正常行为模式。或者通过分析软件的二进制文件,不仅可以得到程序的控制流图并且可以模拟程序运行栈机制。动态方法是通过分析程序运行过程中的参数来表征软件的行为的方法。主要是基于系统调用的方法,利用定长或者不定长的序列来发现系统调用序列的基本模式为软件行为进行建模分析。
[0003]现有的方法已经从不同的角度表征了软件的行为过程,可以在一定程度上检验出软件的异常行为,增强了软件行为的可信性。但是,没有从根源上发掘软件异常行为产生的根源,即软件异常行为的根源在其源代码中。

【发明内容】
:
[0004]基于软件功能层对软件异常行为溯源的方法,其特征在于,所述方法包括:
[0005]监视软件运行时的系统调用序列,在每一个单独的软件功能执行过程中提取出软件功能的标准操作序列;
[0006]从待检测状态序列中匹配出相关软件功能序列的方法;
[0007]使用计算两个字符串之间距离的方法来确定此软件功能的测试序列和标准操作序列之间的相似度以判断该功能是否异常;具体为:计算测试序列和标准操作序列之间多组相似度,对多组相似度进行数理统计,估算正常操作序列的相似度范围;正常相似度序列符合正态分布,求出此正态分布的置信区间;如果落在此范围区间则判断为正常操作,如果未落在此区间范围则为异常操作;
[0008]以软件功能和功能参数为程序切片规则,基于此规则在源代码中抓取软件功能相关的程序切片;
[0009]将建立的软件正常运行时的模型图和待测功能序列做匹配,检测是否存在异常状态;确定所监视的软件行为是否为可信行为或者异常行为;如果出现软件异常行为,则回溯到可能发生错误的源代码中。
[0010]本文通过挖掘软件运行时的系统调用序列转换为状态层状态序列,通过检测软件行为的状态序列检测出软件异常行为,并通过设置兴趣点对软件的异常行为在源代码中溯源,找出软件异常行为的根源,以求从根源上解决软件的异常行为。
【专利附图】

【附图说明】
[0011]图1RSS软件正常状态转移图。
[0012]图2图2为判断相似度的流程图。
[0013]图3为软件架构图,是一个软件的建模过程以及基于图示的检测软件行为为正常行为或者异常行为的过程。
【具体实施方式】:
[0014]本发明是一种基于软件系统调用序列经过状态层处理后得到的状态序列,判断出软件功能序列和使用程序切片对软件功能序列做程序切片进行溯源的方案。该方案包含四个模块,即I频繁项集挖掘模块、2软件功能判定模块、3软件功能状态序列相似度计算、4程序切片生成模块。
[0015]定义I场景SC(Sence):SC指软件运行过程中在操作后对软件的当时状态的完整性度量,当软件运行到检查点位置时采集场景信息。该模型通过引入场景这一概念来描述软件运行路径上各阶段功能实现的完整性,并结合数据挖掘领域中关联规则和序列模式算法,从已知的场景信息集合中提取潜藏的有价值的关联信息用于软件行为可信检测。
[0016]定义2状态序列SS (State Seqence):用来描述软件的运行状态。软件运行时截取到的系统调用序列推导出状态层的状态序列,以代替系统调用序列来表达软件的行为。
[0017]SS=<Sl, S2,……sn>,其中S1, S2,……Sn为状态层的状态
[0018]定义3标准操作序列SO (Standard Operation):表示每一个操作的标准状态序列。软件每一个操作都会有其相对应的状态序列,但是由于软件的操作环境以及多种因素的影响,得到的状态序列会有一定程度的误差,为了消除这种误差需要找出一个标准操作状态序列。标准操作序列SO属于一种特殊的状态序列,需要对多组操作序列分析得到。
[0019]S0=〈S01,S02......,S0m>
[0020]定义4程序片段P。(Program Fragment):P。的一个程序的片段可以定义为一个操作即一个场景开始到另一个场景终止的过程涉及到的程序切片。
[0021]定义5检查点CP (Check Point):指软件运行轨迹上场景信息采集及对其进行可信验证的位置。检查点负责发送场景信息采集信号,同时记录和校验相邻检查点间的运行时间偏移。其中运行时间偏移是指由上一检查点到当前检查点所需要的运行时间。
[0022]CP〈name,SCKSO1, SO2......,S0m>,PF<program fragment〉〉
[0023]其中name是每一个操作的操作名;S0为操作的标准状态序列,并且标准状态序列可能为多个;PF为操作的程序片段,用依赖图来表示程序片段。
[0024]定义6 检查点集合 CPS (Check Point Set): CPSMCP1, CP2,……,CPn> 表示软件所有检查点的集合。
[0025]定义7路径(Path):表示转换路径的集合。
[0026]模型SSDB 四元组(E,S,S0, Sf)
[0027]E=Ie I e e CPS}检查点集合,S场景集合,S0初始场景,Sf终止场景。
[0028]具体实现方法和步骤如下:[0029]步骤1:频繁项集挖掘模块。最大频繁项集的挖掘过程既为求取软件功能的标准操作序列SO的过程。在正常状态下大量运行该软件的每一个软件操作,截获系统调用,并将系统调用序列转换为状态序列。频繁项集挖掘算法种类繁多,如算法Aprior1、在Apriori基础上的改进算法、MAFIA算法等,其中MFIA_VTL是一种对项集搜索空间进行基于前缀的划分,运行时更加稳定开销低,在本文中使用这种快速挖掘最大频繁项集的算法MFIA_VTL。在一组一个软件操作的状态序列中,反复扫描求出这一组序列的最大频繁项集,即为此软件操作的标准操作序列S0。例如,软件正常运行时的点击操作,反复执行点击操作得到 200 组状态序列,{455698,4556997,445567,4455678,455678,435678,455698,455678…435698,455678}。挖掘200组状态序列的最大频繁项集,选择最大频繁项集需要设置最小支持度min_supp,如果k项频繁项集的支持度大于最小支持度且符合频繁项集性质I (频繁项集的子集也是频繁项集)和性质2 (非频繁项集的父集也是非频繁项集)即可逐步求出最大频繁项集。上边200组状态序列,最后求出其最大频繁项集为状态序列455678,此序列既为一个软件功能的标准操作序列S0。根据上述定义,这个操作的检查点为CPm{点击,S0m<455678>, PFj ,455678 存储在了 SO111 中。
[0030]步骤2:软件功能判定模块。这个模块主要解决的问题是如何在待测试数据中判断出数据中的软件功能序列。利用正则表达式来解决这个问题。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种逻辑过滤。例如,待测序列{11111121111152111112211111211112211111234356983455697101034455697812131313141415445567844566734556981011341655697812131313141415435698},使用正则公式可以得到待测序列的执行结果为{登录、登录、登录、登录、登录、登录、点击H、点击f3、点击H、点击fl、点击f3、点击fl},并且可以分别得到每个功能对应的状态序列。步骤2中的标准操作序列SOm对应的执行结果为点击f3。
[0031]步骤3:软件功能状态序列相似度计算,相似度的计算采用字符串之间编辑距离的方法。两个字符串,字符串I和字符串2采用操作:(I) abcdef和abdef采用插入操作,在字符串2的第2个字符后插入C,编辑距离为I ; (2) abcde和abcdf采用替换操作,将字符串2的第5个字符替换为e,编辑距离为I ; (3) abcdef和accdff采用替换操作,将字符串2的第2个字符替换为b,第5个字符替换为e,编辑距离为2 ; (4) abc和abce采用删除操作,将字符串2的第4个字符删除,编辑距离为I。采用此四条规则来计算状态序列之间的相似度。相似度~计算是很重要的模块,通过状态序列相似度来判断软件操作是否发生异常。相似度~度量使用了编辑距离的算法,用来计算测试操作序列和标准操作序列SO字符串之间的距离。首先,通过多组计算对正常序列和标准序列之间的距离范围进行估计,软件行为的标准操作序列 SO 字符串 1={45567810455678121313141415} (Str_l)的长度 Lengthl=19与软件正常运行时的操作序列字符串2 (Str_2)的长度Length2,其中字符串2有多组,例如字符串2= {43556781011344566978121313141415},字符串I和字符串2之间经过四个编辑
规则得到其编辑距离Distance=9,计算相似度
【权利要求】
1.基于软件功能层对软件异常行为溯源的方法,其特征在于,所述方法包括: 监视软件运行时的系统调用序列,在每一个单独的软件功能执行过程中提取出软件功能的标准操作序列; 从待检测状态序列中匹配出相关软件功能序列的方法; 使用计算两个字符串之间距离的方法来确定此软件功能的测试序列和标准操作序列之间的相似度以判断该功能是否异常;具体为:计算测试序列和标准操作序列之间多组相似度,对多组相似度进行数理统计,估算正常操作序列的相似度范围;正常相似度序列符合正态分布,求出此正态分布的置信区间;如果落在此范围区间则判断为正常操作,如果未落在此区间范围则为异常操作; 以软件功能和功能参数为程序切片规则,基于此规则在源代码中抓取软件功能相关的程序切片; 将建立的软件正常运行时的模型图和待测功能序列做匹配,检测是否存在异常状态;确定所监视的软件行为是否为可信行为或者异常行为;如果出现软件异常行为,则回溯到可能发生错误的源代码中。
【文档编号】G06F11/36GK103744786SQ201410018348
【公开日】2014年4月23日 申请日期:2014年1月16日 优先权日:2014年1月16日
【发明者】赖英旭, 霍淑啸, 杨震, 李健 申请人:北京工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1