首页> 中国专利> 一种软件漏洞检测方法、分级响应方法及软件漏洞检测系统

一种软件漏洞检测方法、分级响应方法及软件漏洞检测系统

摘要

本发明公开了一种软件漏洞检测方法、分级响应方法及软件漏洞检测系统,该软件漏洞检测方法通过静态分析技术构建软件控制流行为集合,在软件执行过程中通过将每个判断块的特征值和计算验证值的校验代码插入到判断块对应软件代码中,获得每个判断块的实时验证值,并与软件控制流行为特征集合进行实时对比验证,输出软件漏洞检测结果。能够在低性能损耗的情况下进行软件行为的实时监控,准确和高效的检测到程序因受攻击而产生的异常控制流,并且能够定位异常发生位置。该分级响应方法通过在软件出现异常控制流后根据软件行为采取分级的应急响应方案,增强软件和服务的安全性,适合部署于实际生产环境。

著录项

  • 公开/公告号CN107886000A

    专利类型发明专利

  • 公开/公告日2018-04-06

    原文格式PDF

  • 申请/专利权人 华中科技大学;

    申请/专利号CN201711114150.5

  • 发明设计人 金海;邹德清;赵健;吴月明;

    申请日2017-11-13

  • 分类号G06F21/57(20130101);

  • 代理机构42201 华中科技大学专利中心;

  • 代理人廖盈春;李智

  • 地址 430074 湖北省武汉市洪山区珞喻路1037号

  • 入库时间 2023-06-19 04:58:04

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-11-22

    授权

    授权

  • 2018-05-01

    实质审查的生效 IPC(主分类):G06F21/57 申请日:20171113

    实质审查的生效

  • 2018-04-06

    公开

    公开

说明书

技术领域

本发明属于软件漏洞检测技术领域,更具体地,涉及一种软件漏洞检测方法、分级响应方法及软件漏洞检测系统。

背景技术

软件漏洞是信息安全风险的主要根源之一,是网络攻防对抗中的重要目标。无论从国家层面的网络安全战略,还是社会层面的信息安全防护,安全漏洞已经成为信息对抗双方博弈的核心问题之一。

软件漏洞检测和挖掘一直以来都是学术界和工业界的研究热点。主要的研究方案分为两种:基于软件源代码的漏洞静态检测与挖掘和基于二进制程序的漏洞动态检测和分析方案。基于软件源代码的漏洞静态检测方案对源代码进行语法、语意分析,构造程序特征结构,如:控制流程图CFG、数据依赖图DDG等。从危险函数调用、漏洞特征、相似漏洞检测等方面来进行静态分析,然而基于源代码的漏洞检测方案由于缺乏实际执行的程序信息,往往存在极大的误报率,而且对漏洞原理复杂的情况检测效果也不甚理想;基于二进制程序的漏洞检测方案由于缺少函数、变量、变量类型等语义信息,导致在对二进制程序进行漏洞挖掘时,基于源码的漏洞检测技术将不能直接使用。二进制程序漏洞检测方案一般采用监控和代码插桩的方式来获取程序运行时信息,从而进行程序的控制流分析、数据流分析、程序状态不变量分析等技术方案。

综上所述,现有的软件漏洞检测系统有两个不足点。一方面,基于静态分析的漏洞检测方案往往需要软件源代码才能展开有效的分析,这在目前的商业模式下是很难实现的,源码往往仅限企业内部人员做渗透测试使用,外部人员难以接触。此外,由于静态分析方法缺乏程序执行时的信息往往存在较高的误报率。另一方面,基于二进制程序的漏洞检测系统往往需要对程序进行大量的监控和分析,会造成程序运行时的性能损耗。越多的监控损耗往往能带来更高的检测准确率和更高的安全性,但是在实际生产过程中这往往会使程序的可用性下降。因此一种低误报率、高检出率且性能损耗较低的检测方案才是解决软件漏洞检测的有效方案。

发明内容

针对现有技术的以上缺陷或改进需求,本发明提供了一种软件漏洞检测方法及软件漏洞检测系统,其目的在于解决现有漏洞检测方法由于对大量的程序进行监控造成性能损耗高的技术问题。

为实现上述目的,按照本发明的一个方面,提供了一种软件漏洞检测方法,包括如下步骤:

根据过程间函数调用关系和过程内基本块跳转关系从控制流程图中提取基本块作为判断块,形成判断块控制流;

随机对各个判断块进行赋值获得各个判断块的特征值,根据判断块控制流中判断块是否在循环内确定计算判断块验证值的方式获得判断块计算验证值,根据判断块计算验证值获得软件控制流行为特征集合;

在软件执行过程中通过将每个判断块的特征值和计算验证值的校验代码插入到判断块对应对软件代码中,获得每个判断块的实时验证值,并与软件控制流行为特征集合进行实时对比验证,检测软件行为是否发生异常。

优选地,判断块控制流包括如下步骤:

将软件的控制流程图根据过程间函数调用关系和过程内基本块跳转关系分解为过程间调用控制流程图和过程内调用控制流程图;

从过程间调用控制流程图提取特征基本块作为过程间判断块,将各个过程间判断块根据程序执行前后关系形成过程间判断块控制流;从过程内调用控制流程图提取特征基本块作为过程内判断块,将各个过程内判断块根据程序执行前后关系形成过程内判断块控制流。

优选地,提取过程间调用控制流程图中函数入口作为过程间判断块;提取过程内调用控制流程图中循环入口、循环出口以及函数调用口作为过程内判断块。

优选地,若判断块位于循环内部,则根据公式获得后一个判断块的计算验证值;

其中,Ti表示第i个判断块的计算验证值,Ni表示第i个判断块的特征值。

优选地,若判断块位于循环外部,则根据公式获得后一个判断块的计算验证值,

其中,Ti表示第i个判断块的计算验证值,Ni表示第i个判断块的特征值。

优选地,获得软件控制流序列的行为特征集合包括如下步骤:

将判断块初始特征比特串中该判断块的计算验证值对应位置的低位设置为合法值,高位设置成该判断块的属性;

将该判断块控制流中所有判断块的计算验证值对应特征比特串中位置的值进行时设置,获得该判断块控制流的验证特征比特串;

软件控制流序列的行为特征集合即为所有判断块控制流的验证特征比特串的集合。

优选地,进行对软件进行实时对比验证包括如下步骤:

步骤21:程序开始执行,将过程间控制流验证特征比特串加载至可信执行环境;

在可信环境下将对初始计算验证值进行移位处理,并将移位处理后的初始计算验证值与当前位置的特征值进行异或处理获得当前位置的实时验证值;判断可执行环境中加载比特串中当前位置的计算验证值处的值得低位是否为合法值;若是,跳出可信执行环境并继续向下执行步骤22;否则,输出软件出现异常行为;

步骤22:在可信环境下依据更新后公式计算程序执行至当前位置的实时验证值;判断可执行环境中加载比特串中当前位置的计算验证值处的值的低位是否为合法值;若是,跳出可信执行环境并继续向下执行步骤23;否则,输出软件出现异常行为;

步骤23:判断加载后验证比特串中当前位置计算验证值处的值的高位是否为设定的函数入口属性值,若是,切换当前函数对应的判断块控制流的验证特征比特串可信执行环境,并进入步骤24;否则,进入步骤24;

步骤24:判断加载后验证比特串中当前位置计算验证值处的值的高位是否为设定的循环入口属性值,若是,更新后的计算特征值公式为进入步骤26;若不是,进入步骤25;

步骤25:判断加载后验证比特串中当前位置计算验证值处的值的高位是否为设定的循环出口属性值,若是,更新后的计算特征值公式为进入步骤26;

步骤26:判断加载后验证比特串中当前位置计算验证值处的值的高位是否为设定的函数调用口属性值,若是,切换过程间验证比特串至可信执行环境中;否则,进入步骤27;

步骤27:程序继续执行,并进入步骤22。

按照本发明的另一方面,提供了一种软件异常后分级响应方法,包括:

通过上述软件漏洞检测方法获得软件异常行为后,对软件后续的行为进行监控,评估攻击行为的威胁等级,对不同攻击行为进行分级响应。

作为本发明的另一方面,本发明提供了一种软件漏洞检测系统,包括:

依次连接的控制流获取模块、行为特征集合获取模块以及验证模块;

控制流获取模块用于根据过程间函数调用关系和过程内基本块跳转关系从控制流程图中提取基本块作为判断块,形成判断块控制流;

行为特征集合获取模块用于根据判断块控制流中判断块的属性确定计算判断块验证值的方式获得判断块计算验证值,根据判断块计算验证值获得软件控制流行为特征集合;

验证模块,用于在软件执行过程中通过将每个判断块的特征值和计算验证值的校验代码插入到判断块对应对软件代码中,获得每个判断块的实时验证值,并与软件控制流行为特征集合进行实时对比验证,输出检测软件行为是否发生异常结果。

优选地,若判断块位于循环内部,行为特征集合获取模块通过对上一个判断块计算验证值与当前判断块进行异或处理得到当前判断块的计算验证值,若判断块位于循环外部,行为特征集合获取模块通过对前一个判断块计算验证值进行移位处理,并将移位处理后的前一个判断块计算验证值与当前判断块进行异或处理得到当前判断块的计算验证值。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:

1、低存储开销。本发明通过区分循环内外的计算公式,使得任意循环状态下的验证值都只有两种可能,解决了因循环导致的路径爆炸问题,极大地降低了表征比特串所占的存储空间。

2、低性能开销。本发明采用运算速度极快的异或操作和移位操作来完成主要的计算过程,同时采用比特串来存储特征,具有较快地查询效率。

3、高精度。此外,本发明所采用的函数表征比特串的动态切换方法,使得系统可以在相同长度比特串中,减少异或操作次数,降低冲突概率,从而进一步提高了检测的精确度。

4、本发明采用符号化执行方式获取程序控制流程图,使CFG精度进一步提高,以提高检测的精度,降低漏报率和误报率。

5、通用性好。本发明能够检测代码注入攻击、JOP攻击、ROP攻击、函数复用攻击(如COOP攻击)等攻击类型,因本发明是基于控制流异常的漏洞检测方法,所以本方法对破坏控制流攻击手段都有效,有较好的漏洞检测通用性。

附图说明

图1为本发明提供的基于控制流异常的软件漏洞检测方法的流程图;

图2为本发明提供的过程内特征比特串获取示意图;

图3为本发明提供的对软件异常控制流检测的示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

图1为本发明提供的基于控制流异常的软件漏洞检测方法的流程图,软件漏洞检测方法包括如下步骤:

步骤1:构建一个可以表征软件控制流序列的行为特征集合,所有在该行为特征集合中的控制流序列均被认为是该软件的正常执行行为,一旦检测出不属于行为特征库中的控制流序列,则被认为是软件的异常行为。

对软件通过静态分析方法构造出软件的控制流程图CFG,然后按照过程间函数调用关系和过程内基本块跳转关系对软件的控制流程图CFG进一步分解形成该软件的过程间调用控制流程图和多个过程内调用控制流程图。所谓过程间控制流序列即程序内部函数之间的相互调用及其对库函数、系统调用的调用所构成的函数调用网络;过程内控制流序列是指函数内基本块之间的跳转网络。

对过程间验证特征比特串来说,从过程间调用控制流程图中提取函数入口作为过程间判断块,根据过程间调用控制流程图中各个过程间判断块之间的调用关系确定过程间判断块控制流。对过程内验证特征比特串来说,从过程内调用控制流程图中提取循环入口、循环出口以及函数调用口作为过程内判断块,根据过程内调用控制流程图中各个过程内判断块之间的调用关系确定过程内判断块控制流。

根据如下步骤获得判断块控制流的验证特征比特串,其中,判断块控制流的验证特征比特串分为过程间判断块控制流的验证特征比特串和过程内判断块控制流的验证特征比特串。

将属于某一判断块控制流的所有判断块选定特征值,特征值一般通过取随机数或者为该判断块哈希值。

判断某个判断块是否属于程序循环内部,其中,判断块分为过程内判断块和过程间判断块;若该判断块不属于程序循环内部,采用异或和移位操作对前一个判断块的计算验证值进行处理获得后一个判断块的计算验证值,即根据如下公式获得后一个判断块的计算验证值:

式中,Ti表示第i个判断块的计算验证值,Ni表示第i个判断块的特征值,判断块的前后关系根据程序执行过程的前后关系确定,1≤i≤N,N指判断块控制流包含的判断块数量,第0个判断块的计算验证值随机设置。

若该判断块属于程序循环内部,采用异或操作对前一个判断块的计算验证值进行处理获得后一个判断块的计算验证值;即根据如下公式获得后一个判断块的计算验证值:

将判断块初始特征比特串中该判断块的计算验证值对应位置的低位设置为合法值,该合法值可以根据具体需要任意设置。高位设置成该判断块的属性。将该判断块控制流中所有判断块的计算验证值对应位置的值进行设置,获得该判断块控制流的验证特征比特串,属性是指该过程间判断块是否为函数入口、循环入口、循环出口以及函数调用口,软件控制流序列的行为特征集合即为所有判断块验证特征比特串的集合。

在步骤1中,对循环结构的特殊处理,使得循环奇数次的特征值一致,循环偶数次的特征值也一致,避免了循环状态爆炸的问题。为了区分循环内外部,将验证特征比特串中计算验证值对应的位置的高位特殊设置,以区分是在循环内部还是外部,同时设置其低位为真,将其标记为合法控制流,从而形成软件控制流行为特征集合。该模型能够以更小的空间和更高效的运算来做软件行为的存储和查询功能,能够适应在生产环境中应用软件的低损耗性和高可用性的要求。

图2给出了过程内特征比特串获取示意图,其中,该过程内判断块控制流包括7个过程内判断块,其中,对前一个判断块的计算验证值进行移位处理,并将移位后的计算验证值与后一个判断块的特征值进行异或获得后一个判断块的计算验证值。将每个过程判断块的计算验证值所对应初始特征比特串中位置的值进行修改,即对初始特征比特串中7个位置进行修改,获得该过程内判断块的验证特征比特串。

步骤2:对软件异常控制流检测,是指在软件执行过程中通过代码插桩技术对软件的控制流序列进行监控,并与软件控制流行为特征集合进行实时对比验证的过程。即通过代码插桩技术,将每个判断块的特征值和计算验证值的校验代码插入到判断块中,将计算所得判断块实时验证值与静态分析所得软件控制流行为特征集合的判断块特征比特串中对应位置的数据进行比对,发现数据库中未出现的行为特征后即认为是异常行为。

如图3所示,步骤2具体步骤如下:

步骤21:程序开始执行,将过程间控制流验证特征比特串加载至可信执行环境。

步骤22:计算进入可信环境,依据更新后公式进行计算程序执行至当前位置的实时验证值cur_check_value。查看当前位置的计算验证值的是否为合法路径标记,即可执行环境中加载比特串中cur_check_value处的值的低位是否为真。如果是,跳出可信执行环境并继续向下执行步骤23;如果不是,跳过后续步骤并跳转至步骤3进行分级攻击响应。

步骤23:当前位置计算验证值通过后,判断当前位置是否为函数入口点,即比特串中cur_check_value处的值得高位是否为设定的函数入口属性值,如果是,切换当前函数的过程内验证特征比特串可信执行环境,并进入步骤24;否则,进入步骤24。

步骤24:当前位置计算验证值通过后,判断当前位置是否为循环进入点,即比特串中cur_check_value处的值得高位是否为设定的循环进入特殊值,该特殊值可以根据具体需要任意设置。如果是,切换计算特征值计算公式为获得更新后公式,进入步骤26。

步骤25:当前位置验证值通过后,判断当前位置是否为循环出口点,即比特串中cur_check_value处的值得高位是否为设定的循环退出特殊值,该特殊值可以根据具体需要任意设置。如果是,切换计算特征值计算公式为获得更新后公式,进入步骤26。

步骤26:当前位置验证值通过后,判断当前位置是否为函数调用点,即比特串中cur_check_value处的值得高位是否为设定的函数调用特殊值,该特殊值可以根据具体需要任意设置。如果是,切换过程间验证比特串至可信执行环境中。

步骤27:程序继续执行,并进入步骤22。

步骤2中,将静态分析分配的随机数采用代码插桩技术插入到对应位置,同时监控软件的控制流序列,依据静态分析模块提及的公式进行特征值计算,并在特征比特串中相应的位置查询当前控制流是否合法。

特征比特串会为函数的调用、返回、循环的进入和退出设置特殊标记,控制流序列验证合法后,查询当前位置是否符合上述标记,如果符合进行特征比特串的切换或计算公式的变更。该检测方法通过代码插桩技术为每个函数与函数内判断块分配了唯一的特征值,并根据执行时的控制流序列计算校验值,与静态分析得到的控制流行为集合进行对比,以此检测软件是否产生异常。为了保证计算和校验过程中数据的安全性,该过程最好在可信执行环境中执行,使用Intel SGX技术。

该检测方法将整个软件的控制流行为集合进行分解,分解为过程间函数调用关系的表征比特串与过程内基本块跳转关系的表征比特串。在监控到函数调用发生时,先验证函数调用关系的特征值,验证通过后,加载当前函数基本块跳转关系的表征比特串至可信环境。相较于整个软件的行为集合存储于一个比特串,该方案降低了内存占用率,减少了异或操作次数,降低冲突概率,降低检测的漏报率,提高了检测精度。

作为本发明的另一方面,本发明提供了软件漏洞检测系统,包括依次连接的控制流获取模块、行为特征集合获取模块以及验证模块。

控制流获取模块用于根据过程间函数调用关系和过程内基本块跳转关系从控制流程图中提取基本块作为判断块,形成判断块控制流。

更具体地,控制流获取模块结合静态分析工具IDA Pro与二进制分析框架angr所生成的控制流程图,生成较为精确的过程间CFG和过程内CFG,同时遍历过程内CFG,标记循环节点,提取过程内CFG循环节点(即循环入口和循环出口)和函数调用口作为过程内判断块,提取过程间CFG的函数入口作为过程间判断块。

其中,控制流程图的准确性是影响系统效率的主要原因。研究表明:静态分析工具IDA Pro所生成的控制流程图是精确度很高且较易获取的。此外基于符号化执行的二进制分析框架angr也可获取程序的控制流程图,且对程序内间接跳转的分析更为准确,因此结合二者的结果可以获取精确度更高的控制流程图,以提高系统的检测精度。

行为特征集合获取模块用于根据判断块控制流中判断块的属性确定计算判断块验证值的方式获得判断块计算验证值,根据判断块计算验证值获得软件控制流行为特征集合,即根据判断块控制流中各个判断块计算验证值获得判断块验证比特串,软件控制流行为特征集合即为属于该判断块控制流的所有判断块验证比特串的集合。

行为特征集合获取模块通过异或和移位等简单逻辑操作,将上述的控制流序列存储于比特串中,各比特串共同构成了软件控制流的行为集合。若判断块位于循环内部,行为特征集合获取模块通过对上一个判断块计算验证值与当前判断块进行异或处理得到当前判断块的计算验证值,若判断块位于循环外部,行为特征集合获取模块通过对上一个判断块计算验证值进行移位处理,并将移位处理后的前一个判断块计算验证值与当前判断块进行异或处理得到当前判断块的计算验证值。

行为特征集合获取模块能以更小的空间和更高的效率存储和查询软件控制流是否发生异常。该模块能够以更小的空间和更高效的运算来做软件行为的存储和查询功能,能够适应在生产环境中应用软件的低损耗性和高可用性的要求。

验证模块用于在软件执行过程中通过将每个判断块的特征值和计算验证值的校验代码插入到判断块对应对软件代码中,获得每个判断块的实时验证值,并与软件控制流行为特征集合进行实时对比验证。

作为本发明提供的分级响应方法,包括如下步骤:

步骤3:通过上述软件漏洞检测方法获得软件异常行为后,对软件后续的行为进行监控,依据CVSS漏洞评估标准,评估攻击行为的威胁等级,对不同攻击行为进行分级响应。

在检测到异常行为后对软件的以下行为进行监控:包括安全相关的库函数、敏感系统调用、敏感文件读写以及网络流量。通过监控影响上述特征的函数或文件读写操作,依据CVSS漏洞评估标准,评估异常行为对访问控制、数据保密性、数据完整性、系统可用性破坏程度,并据此对异常行为进行分级,然后根据威胁等级采取数据、伪造函数返回值、结束当前线程、结束当前进程响应以及延迟操作手段,对不同攻击行为进行分级响应。对攻击行为进行威胁度评估,分为低危、中危和高危三个等级。依据攻击行为等级实施不同的攻击响应策略。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号