一种基于可调对象分析的程序漏洞检测方法

文档序号:6378908阅读:282来源:国知局
专利名称:一种基于可调对象分析的程序漏洞检测方法
技术领域
本发明涉及软件工程技术领域,尤其是涉及对软件的检测方法。
背景技术
软件因存在着隐藏的安全漏洞而易受攻击造成损失,其安全威胁有不断增加的趋势。通过对软件代码进行漏洞检测,发现和消除软件中的安全漏洞是减少安全威胁、降低安全风险的重要手段之一。漏洞模型检测是一种具有代表性的代码漏洞检测方法。为此,我们提出一种用于漏洞检测的可调对象程序状态特征提取方法,以供对待检测程序代码进行状态抽象建模、建立用于漏洞检测的程序状态特征模型。目前的漏洞模型软件漏洞检测方法在检测过程中存在着重复检查、检查关注重点不集中、不够准确等缺点,检测的速度和准确性显得不足,影响着检测方法的适用性。

发明内容
本发明目的是,提出一种基于可调对象分析的软件漏洞检测方法,基于可调对象分析、具有较高检测精度和速度的检测方法,该方法避免采用原有方法模拟程序执行流程的检测顺序,而是只检测与漏洞模型检测相关的可调对象程序状态特征,注重对可能存在潜在漏洞的重点状态的检测,以提高软件漏洞检测的速度和准确性。为实现本发明的所述目的,本发明技术方案是,一种基于可调对象分析的程序漏洞模型检测方法,主要步骤包括I)漏洞模型载入流程,建立漏洞模型的数据结构;2)程序状态特征检测处理过程,以函数为单位进行模型检测工作,并报告漏洞的存在性。为提高检测和处理速度,需要将漏洞模型从数据库中装入内存,在分析程序时,作为参考依据;漏洞模型检测过程中,以函数为单位根据漏洞相关操作状态逐步进行检测分析工作;漏洞模型检测工作从主函数开始进行检测,根据漏洞相关操作以及逐级函数的模型检测结果,进行状态检测并报告漏洞的存在性;漏洞模型由漏洞相关操作的集合构成;操作表示引起状态发生变化的动作,每个操作具有操作号、动作、特征、输入变量和输出变量的集合属性;可调对象指程序中漏洞相关操作所涉及的需检测的变量,输入变量和输出变量为可调对象;操作的集合存储在数据库中的一个表中操作表;为方便模型检测处理,在内存中建立由操作动作进行检索的操作变量关系表。每个操作动作对应一个链表,链表的结点为一个输入输出变量关系,表示一个输出变量与其输入变量的关系。本发明的有益效果是针对目前软件漏洞检测方法存在检查和关注目标过于宽泛、大量重复工作、影响检测速度、准确性不高的问题,本发明提供一种基于漏洞模型的软件漏洞模型检测方法。基于软件漏洞的状态机模型,以重点外部可调对象为中心,对软件代码进行抽象建模,只对与软件漏洞的状态模型相关的程序状态特征进行漏洞静态检测,判断漏洞模型在代码中的存在性。


图I基于漏洞模型的软件漏洞模型检测方法结构示意图;图2漏洞模型载入流程图;图3漏洞模型分析检测处理流程图;图4函数程序操作状态序列分析流程图;图5可调对象关系计算流程图;图6输入对象关系计算流程图。
具体实施例方式本发明方法工作流程如图I-图6所示。图I所示为本方法实施的整体结构和工作原理。本方法的目的是根据漏洞模型所涉及的操作状态对待检测程序进行分析检测,报告发现的漏洞。为提高处理速度,需要将漏洞模型从数据库中装入内存,以便分析程序时,作为参考依据。漏洞模型检测过程中,以函数为单位根据漏洞相关操作状态逐步进行检测分析工作。漏洞模型检测工作从主函数开始进行检测,根据漏洞相关操作以及逐级函数的模型检测结果,进行状态检测并报告漏洞的存在性。·图2表示漏洞模型载入流程。漏洞模型由漏洞相关操作的集合构成。操作表示引起状态发生变化的动作,每个操作具有操作号、动作、特征、输入变量和输出变量的集合等属性。操作的动作指具体的程序动作。操作的特征有产生、转移、刷新和使用等值。可调对象指程序中漏洞相关操作所涉及的需检测的变量,输入变量和输出变量为可调对象。操作的集合存储在数据库中的一个表中操作表。为方便模型检测处理,在内存中建立由操作动作进行检索的操作变量关系表。每个操作动作对应一个链表,链表的结点为一个输入输出变量关系,表示一个输出变量与其输入变量的关系。具体步骤如下。漏洞模型载入流程具体步骤如下步骤20是起始状态;步骤21在数据库操作变量关系表中依次取一个操作关系头的记录;步骤22判断是否取到操作关系头的记录,若取到转步骤23,否则转步骤27 ;步骤23创建该操作动作的操作变量关系表表头,根据输出变量数目,创建输出变量指针链;步骤24在数据库操作变量关系表中依次取该操作输出变量关系的记录;步骤25判断是否取到该操作输出变量关系的记录,若取到转步骤26,否则转步骤21 ;步骤26创建一个输入输出变量关系结点,用读取的内容设置结点的输出变量与其输入变量;把相应的输出变量指针指向此结点,转步骤24 ;步骤27为结束状态,操作变量关系表建立完成。图3表示漏洞模型分析检测处理流程,即程序状态特征检测处理过程的流程,具体步骤如下。步骤30是起始状态。步骤31初始化设置所有函数的访问标记为OFF、值为O ;步骤32设置检测函数为main函数,对检测函数进行程序操作状态序列分析;步骤33取一个访问标记为OFF的函数;步骤34判断是否取到,若取到则转步骤35,否则转步骤36 ;步骤35设置取得的函数为检测函数,对检测函数进行程序操作状态序列分析,处理流程见图4,转步骤33 ;步骤36为结束状态。
步骤32设置检测函数为main函数,对检测函数进行程序操作状态序列分析处理流程具体为(检测函数程序操作状态序列分析流程),表示对检测函数程序状态序列分析的过程,具体步骤如下步骤40是起始状态;步骤41判断检测函数的访问标记是否为ON (值为I),是则转步骤4h,否则转步骤42 ;步骤42从函数可调对象集合中,取一个可调对象;步骤43判断是否取到可调对象,若取到,转步骤44,否则转步骤49 ;步骤44从该可调对象的操作状态序列链表,取一个状态结点;步骤45判断是否取到状态结点,若取到,转步骤46,否则转步骤42 ;步骤46判断该状态的操作的特征值是否为使用,是则转步骤47,否则转步骤44 ;步骤47计算该可调对象的原始变量关联关系,得到状态转换关系集合;步骤48漏洞报警,包括可调对象及其原始变量相关的状态转换关系集合,以便后续分析、处理之用,转步骤44 ;步骤49设置检测函数的访问标记为0N(值为I);步骤4h为结束状态。
图5所示为步骤47计算该可调对象的原始变量关联关系的计算流程,目的是计算可调对象的原始变量及其状态转换关系集合步骤50是起始状态。步骤51建可调对象结点。取可调对象的当前状态的输入变量集合(为可调对象的输入关系集合),其相关操作为本语句操作;步骤52从输入关系集集合中,取一个输入对象。步骤53判断取到否,若取到,转步骤54,否则转步骤56 ;步骤54计算输入对象到原始变量集合关系,得到输入对象的状态转换关系集合;步骤55建输入对象结点,将状态转换关系连接集合到输入对象结点,其相关操作为该输入对象的操作;转步骤52 ;步骤56为结束状态。图6所示为步骤54计算输入对象到原始变量集合关系处理流程,得到输入对象的状态转换关系集合,目的是计算得到输入对象到原始对象的状态转换关系集合。步骤60是起始状态;步骤61判断输入对象是否原始变量,是则转步骤6h,否则转步骤62 ;步骤62取输入对象的来源对象集合(以输入对象作为输出),建立来源对象结点,使其均指向本输入对象;步骤63依次取一个来源对象;步骤64判断来源对象是否取到,若取到,转步骤65,否则转步骤6h ;步骤65以取得的来源对象作为输入对象,计算输入对象到原始变量集合关系;步骤66建来源对象结点,将状态转换关系连接集合到来源对象结点,其相关操作为该来源对象的操作,转步骤63。步骤6h为结束状态。处理流程见图6。
权利要求
1.一种基于可调对象分析的程序漏洞模型检测方法,其特征是步骤包括 1)漏洞模型载入流程,建立漏洞模型的数据结构; 2)程序状态特征检测处理过程,以函数为单位进行模型检测工作,并报告漏洞的存在性; 为提高检测和处理速度,需要将漏洞模型从数据库中装入内存,在分析程序时,作为参考依据;漏洞模型检测过程中,以函数为单位根据漏洞相关操作状态逐步进行检测分析工作;漏洞模型检测工作从主函数开始进行检测,根据漏洞相关操作以及逐级函数的模型检测结果,进行状态检测并报告漏洞的存在性; 漏洞模型由漏洞相关操作的集合构成;操作表示引起状态发生变化的动作,每个操作具有操作号、动作、特征、输入变量和输出变量的集合等属性;操作的动作指具体的程序动作。操作的特征有产生、转移、刷新和使用等值。可调对象指程序中漏洞相关操作所涉及的需检测的变量,输入变量和输出变量为可调对象;操作的集合存储在数据库中的一个表中操作表;为方便模型检测处理,在内存中建立由操作动作进行检索的操作变量关系表。每个操作动作对应一个链表,链表的结点为一个输入输出变量关系,表示一个输出变量与其输入变量的关系。
2.根据权利要求I所述的基于可调对象分析的程序漏洞模型检测方法,其特征是漏洞模型载入流程具体步骤如下步骤20是起始状态;步骤21在数据库操作变量关系表中依次取一个操作关系头的记录;步骤22判断是否取到操作关系头的记录,若取到转步骤23,否则转步骤27 ;步骤23创建该操作动作的操作变量关系表表头,根据输出变量数目,创建输出变量指针链;步骤24在数据库操作变量关系表中依次取该操作输出变量关系的记录;步骤25判断是否取到该操作输出变量关系的记录,若取到转步骤26,否则转步骤21 ;步骤26创建一个输入输出变量关系结点,用读取的内容设置结点的输出变量与其输入变量;把相应的输出变量指针指向此结点,转步骤24 ;步骤27为结束状态,操作变量关系表建立完成。
3.根据权利要求I所述的基于可调对象分析的程序漏洞模型检测方法,其特征是程序状态特征检测处理过程的流程(即漏洞模型分析检测处理流程),具体步骤如下步骤30是起始状态。步骤31初始化设置所有函数的访问标记为OFF、值为O ;步骤32设置检测函数为main函数,对检测函数进行程序操作状态序列分析;步骤33取一个访问标记为OFF的函数;步骤34判断是否取到,若取到则转步骤35,否则转步骤36 ;步骤35设置取得的函数为检测函数,对检测函数进行程序操作状态序列分析,处理流程见图4,转步骤33 ;步骤36为结束状态。
4.根据权利要求3所述的基于可调对象分析的程序漏洞模型检测方法,其特征是步骤32设置检测函数为main函数对检测函数进行程序操作状态序列分析处理流程具体为(检测函数程序操作状态序列分析流程),表示对检测函数程序状态序列分析的过程,具体步骤如下步骤40是起始状态;步骤41判断检测函数的访问标记是否为ON(值为I),是则转步骤4h,否则转步骤42 ;步骤42从函数可调对象集合中,取一个可调对象;步骤43判断是否取到可调对象,若取到,转步骤44,否则转步骤49 ;步骤44从该可调对象的操作状态序列链表,取一个状态结点;步骤45判断是否取到状态结点,若取到,转步骤46,否则转步骤42 ;步骤46判断该状态的操作的特征值是否为使用,是则转步骤47,否则转步骤44 ;步骤47计算该可调对象的原始变量关联关系,得到状态转换关系集合;步骤48漏洞报警,包括可调对象及其原始变量相关的状态转换关系集合,以便后续分析、处理之用,转步骤44 ;步骤49设置检测函数的访问标记为ON、值为I ;步骤4h为结束状态。
5.根据权利要求4所述的基于可调对象分析的程序漏洞模型检测方法,其特征是步骤47计算该可调对象的原始变量关联关系的计算流程步骤50是起始状态。步骤51建可调对象结点。取可调对象的当前状态的输入变量集合(为可调对象的输入关系集合),其相关操作为本语句操作;步骤52从输入关系集集合中,取一个输入对象。步骤53判断取到否,若取到,转步骤54,否则转步骤56 ;步骤54计算输入对象到原始变量集合关系,得到输入对象的状态转换关系集合;步骤55建输入对象结点,将状态转换关系连接集合到输入对象结点,其相关操作为该输入对象的操作;转步骤52 ;步骤56为结束状态。
6.根据权利要求4所述的基于可调对象分析的程序漏洞模型检测方法,其特征是步骤54计算输入对象到原始变量集合关系处理流程步骤60是起始状态;步骤61判断输入对象是否原始变量,是则转步骤6h,否则转步骤62 ;步骤62取输入对象的来源对象集合(以输入对象作为输出),建立来源对象结点,使其均指向本输入对象;步骤63依次取一个来源对象;步骤64判断来源对象是否取到,若取到,转步骤65,否则转步骤6h ;步骤65以取得的来源对象作为输入对象,计算输入对象到原始变量集合关系;步骤66建来源对象结点,将状态转换关系连接集合到来源对象结点,其相关操作为该来源对象的操作,转步骤63。步骤6h为结束状态。
全文摘要
一种基于可调对象分析的程序漏洞模型检测方法,步骤包括1)漏洞模型载入流程,建立漏洞模型的数据结构;2)程序状态特征检测处理过程,以函数为单位进行模型检测工作,并报告漏洞的存在性;为提高检测和处理速度,需要将漏洞模型从数据库中装入内存,在分析程序时,作为参考依据;漏洞模型检测过程中,以函数为单位根据漏洞相关操作状态逐步进行检测分析工作;漏洞模型检测工作从主函数开始进行检测,根据漏洞相关操作以及逐级函数的模型检测结果,进行状态检测并报告漏洞的存在性;漏洞模型由漏洞相关操作的集合构成;操作表示引起状态发生变化的动作,每个操作具有操作号、动作、特征、输入变量和输出变量的集合等属性。
文档编号G06F11/36GK102929774SQ201210392719
公开日2013年2月13日 申请日期2012年10月16日 优先权日2012年10月16日
发明者曾庆凯 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1