专利名称:基于软件安全缺陷检测的综合处理方法及其功能模块构架的制作方法
技术领域:
本发明属于网络安全技术领域,特别是一种针对软件安全缺陷检测的综合处理方
法及为实现其方法所采用的功能模块构架(装置)。采用本发明方法及其装置可针对已知 源代码形态的软件进行安全缺陷的检测。
背景技术:
由于程序设计和编写本身的缺陷,使得软件安全性降低,是导致软件安全问题的 一个重要原因。大量存在于软件系统中的安全缺陷,又使得软件在使用阶段受到意料不到 的攻击,甚至造成重大损失。 目前针对软件缺陷的发现主要有三种方法,一是基于软件漏洞和缺陷模式的检测 方法,例如,申请号为CN200810114261. O,发明名称为《一种基于软件缺陷模式的测试方法 及系统》的专利文献,采用的方法是,读取被测程序源代码文件及缺陷状态机SDSM描述文 件,对被测程序进行预处理,解析SDSM描述文件;对被测程序进行词法分析和语法分析,构 造出抽象语法树;根据抽象语法树,生成控制流图和符号表,并根据控制流图和符号表,进 行变量取值区间集的计算与更新;对被测程序进行函数调用关系分析,生成函数调用关系 图;根据函数调用关系图以函数为单位对控制流图进行遍历,并计算控制流图上每个节点 缺陷状态机的状态变迁,缺陷状态机进入缺陷状态时报告对应的检查点;该专利即属于此 类技术。 二是利用软件执行过程中轨迹的相似度来定位软件缺陷,例如申请号为 CN200810018981. 7,发明名称为《一种基于执行轨迹块相似度的软件缺陷定位方法》的专利 文献,采取的步骤是,(1)收集和整理测试用例的执行信息并生成执行轨迹;(2)根据执行 轨迹块相似度选择用来定位缺陷的测试用例集;(3)对选择的测试用例执行轨迹进行系统 比对计算代码怀疑率;(4)将代码怀疑率映射到源程序生成缺陷定位报告。该专利属于此 类技术; 三是设计缺陷监控和分析模块采用插入点进行软件缺陷检测的方法,例如申请号 为CN200710163839. 7,发明名称为《一种快速诊断系统软件缺陷的系统及方法》的专利文 献,采用的方法是,用以对导致系统错误的系统程序缺陷进行快速定位并向用户回馈。首 先,依据用户需求,预先设定并在系统中写入系统缺陷分析准则的程序,且在系统的程序模 块中依照用户对缺陷分析结果的精细度需求加入数个缺陷插入点,然后在系统程序运行过 程中在上述各缺陷插入点处产生缺陷管理信息,并对此管理信息进行监控,以收集相关的 系统缺陷数据,最后通过系统缺陷分析准则的程序实时分析所收集到的系统缺陷数据,借 以获得造成系统错误的最小缺陷集合并实时记录到系统日志中,同时回报给用户。
现有常规程序缺陷分析检测工具主要有基于程序句法的分析工具和基于程序语 意的分析工具,以及使用代码进行运行测试的工具。 基于程序句法的分析工具主要有Splint, Pscan, Flawfinder, RATS, ITS4, Smacth,这类工具采用正规表达和通用分割技术,对代码进行简单句法分析,查找可疑结构。因为是面上的分析,可能产生许多虚警,仅能检测简单的问题。但是其简单分析也使其 处理包含扩展语言时更为稳健,这些扩展语言在其他地方常常被忽略;同时也因句法分析 不需要大量计算,因此速度很快,可以处理任意大小的程序。 基于程序语意的分析工具主要有B00N, PolySpace for C/C++, Coverity Prevent, GrammaTech CodeSonar, Klocwork K7, BLAST, MAGIC, M0PS,这类静态分析通常有 两种模块构成前端和后端,前端用于分析源代码、生成源代码模型,后端则分析这个模型、 查找问题和缺陷。按照分析部分的实现方式,可把这类工具分为两个类型。 一是基于形式 化的方法,也称为数学规划,提供程序特性,例如模型检查和理论证明;这些工具通常存在 规模问题,因为使用了大量计算,使其仅能处理小于20K行的程序,对于小于10K行的程序 也需要花费15小时,但是收敛好,可以发现复杂的和看不清楚的问题。二是基于先进的启 发式的方法,通过规则指纹发现问题;这种工具的特点是,规模化好,但其分析不彻底,仅能 发现简单问题,不易收敛。 一般可以处理1百万行代码,在10分钟或更短的时间内可以处 理10K行代码。上述两类工具均会出现大约30%的虚警。 使用代码进行运行测试的工具主要有Parasoft Insure++, GNU Checker, ElectricFence, MemWatch,这类工具在程序运行时检测程序错误,利用某点的状态进行检 测,比使用基于程序句法的分析工具和基于程序语意的分析工具更容易,有更多的优点。首 先是准确,没有虚警和漏报,展示的是实际而不是抽取的模型;其次,对于被检测程序的大 小没有限制。而最大的缺点是要求被检测程序是可运行的,因此不能对程序进行部分检验; 其次,检测的收敛性依赖于测试者的技能,需要进行的测试量大;其三,所给出的诊断是低 级的,类似于debugger,比起前两类工具来功能较少,仅能列出程序中存储器和指针的缺陷 问题。 上述技术和方法均是针对软件在程序编写中的缺陷进行检测的,而对于如何检测 软件的安全缺陷这个问题都没有涉及。 而在申请号为CN200910003082. 4,发明名称为《一种基于安全漏洞缺陷模式的检 测方法》的专利文献,公开了一种采用控制流图和函数调用关系图、计算控制流图上每个节 点安全漏洞状态机的状态变迁,最后输出安全漏洞测试报表;该检测方法虽然可针对安全 漏洞性缺陷进行检测,但却不能提供软件安全缺陷所在的位置,以及安全缺陷的危险程度, 因而不便于进行针对性处理;
发明内容
本发明的目的是针对背景技术存在的缺陷,研究设计一种基于软件安全缺陷检测 的综合处理方法及其功能模块构架,达到在仅有软件源代码的情况下,通过多层次的综合 检测,有效地发现软件中的安全性缺陷,并能准确提供软件安全缺陷所在的位置,以及安全 缺陷的危险程度,以便进行针对性处理等目的。 本发明的解决方案是将待测软件首先通过现有的工具分析软件处理得到基础数 据、再采用设定的各单一缺陷检测标准依次对其进行检测及安全缺陷等级评估,然后将单 一缺陷检测数据及其缺陷评估等级一并进行综合处理,最后将综合处理后的结果进行存储 处理,即得被测软件的最终检测结果;而为实现该方法所采用的功能模块构架装置,则是 以常规工业控制机作为基础来设置的检测及综合处理装置,该装置运行中分别通过人机输
5入、输出接口输入数据及输出检测结果,从而实现其发明目的。因此,本发明的方法包括
A.待测软件及检测标准初始化处理 Aa.将需要检测的软件名称、选用的常规分析工具、原始数据存储地址、最终检测 结果存储地址,以及各单一缺陷检测标准(参数)和综合处理程序进行初始化设置,并将其 作为初始化数据存入数据库、以备调用; Ab.将待测的软件录入选用的常规软件分析工具,经过分析工具逐一处理,获得待 测软件的初步分析数据,以待检测用; B.待测软件初步分析数据的预处理从步骤Ab输入的待测软件所有初步分析数 据中抽取缺陷特征数据,并逐一录入原始数据存储地址,作为待测软件的分析数据数据,以 备进一步检测用; C.按单一的安全缺陷标准依次检测及安全缺陷等级评估将从步骤B所得待测软 件的分析数据,采用步骤Aa中设定的各单一安全缺陷检测标准逐一进行检测,检测结束后 转步骤D ;各单一安全缺陷检测步骤是 Ca.首先按照设定的单一安全缺陷标准(参数)分别对各分析工具给出的初步分 析数据逐一进行对比检测,每当与安全缺陷标准中任意特征参数相符时,则将分析数据以
及触发检测标准的特征参数,送步骤c;处理;若均与各单一缺陷检测标准不符,则为无安全
缺陷数据、直接转步骤D处理; Cb.安全缺陷等级评估根据步骤(;输入的存在安全缺陷的数据,将与之对应的分
析数据中缺陷评估等级上加i ;然后返回步骤c;继续执行未曾进行的检测以及本步骤的缺
陷等级评估,直至检测、评估完毕 D.安全缺陷综合处理经步骤C检测后输入的数据中,若为无安全缺陷的数据纪 录、则存入数据库后直接转步骤E ;若为带安全缺陷的分析数据、则从中提取包括缺陷位置 特征及缺陷函数特征在内的缺陷特征数据进行安全缺陷的综合处理,处理结束后、直接转 步骤E ;安全缺陷综合处理的步骤为 Da.针对缺陷位置特征进行处理对步骤C处理后输入带安全缺陷的各分析数据, 针对缺陷出现行号进行逐一比对,每当相同的行号出现时、则将相应的缺陷等级相加,并将 被分析的软件文件名、缺陷出现行号、安全缺陷等级作为缺陷的位置特征参数记录存入数 据库; Db.针对缺陷函数特征进行处理对经步骤C处理后输入带安全缺陷的各分析数 据,针对缺陷特征进行追逐一比对,每当存在相同的缺陷特征(参数)时、则将相应的缺陷 等级相加,并将引起缺陷的函数名、安全缺陷等级作为缺陷的函数特征记录存入数据库;
E :检测结果的存储和数据丢弃处理将经过步骤D输入的处理的结果,即无安全 缺陷或缺陷位置特征及缺陷函数特征逐一存入最终检测结果存储地址,即为被测软件的安 全缺陷检测结果;并将其它分析数据和软件待测时的原始数据作丢弃处理。
以上所述设定的软件安全缺陷单一特征标准包括敏感函数检测标准,字符串 检测标准,指针检测标准。其中敏感函数检测标准为strcpy, fscanf, getwd, strncpy, strcat、 strdup, sprintf, sqrt, log ;字符串检测标准为"〃,、"%,,、"/=,,、"% = ,,、 len, abort,exit,assert,setjmp,longjmp, goto,break,continue, return, switch, for, while, do while ;指针检测标准为malloc, new, He即Alloc, NULL。
上述软件安全缺陷检测方法所采用的功能模块构架装置,包括数据库以及
A. —个待测软件及检测标准初始化处理的单元模块,用于对选用的常规分析工 具、待测软件及检测标准进行初始化处理、存储,以备后用; B. —个对待测软件初步分析数据进行预处理的单元模块,用于从基础数据中抽取 缺陷检测特征,以备检测时使用; C. —个按单一的安全缺陷标准检测及安全缺陷等级评估单元模块,用于调用设定 的单一安全缺陷检测标准并按照其标准分别对各分析工具给出的待测软件初步分析数据 逐一进行对比检测,以及对其安全缺陷的严重性进行等级评估; D. —个安全缺陷综合处理单元模块,用于针对待测软件缺陷出现的行号、缺陷函 数特征进行综合处理,以及对无安全缺陷数据的被测软件作纪录; E. —个对检测结果存储和作数据丢弃处理的单元模块,用于对被测软件的安全缺
陷最终检测结果存入存储地址,并将其余分析数据和被测软件的原始数据作丢弃处理。 本发明由于将待测软件首先通过现有工具分析软件处理得到基础数据、再采用设
定的各单一缺陷检测标准依次对其进行检测及安全缺陷等级评估,然后将单一缺陷检测数
据及其缺陷评估等级一并进行综合处理,最后得到被测软件的含软件安全缺陷的位置和缺
陷的严重程度在内的最终检测结果;而采用常规工业控制机作为基础来设置功能模块构架
装置。本发明在对软件无任何额外要求的情况下,通过各单一缺陷检测及综合处理,测定被
测软件是否存在安全性缺陷,以及确定软件安全缺陷的位置和缺陷的严重程度;因而具有
可针对软件的多种缺陷进行整体检测及综合处理,其检测范围广、对软件安全缺陷的适应
性强,检测及综合处理结果准确性、可靠性高,以及不需对软件的功能和性能有特别的要求
等特点。
图1为本发明综合检测方法流程示意图(方框图); 图2本发明方法用功能模块构架装置结构示意图(方框图); 图3本发明具体实施方式
综合检测方法流程示意图(方框图)。
具体实施例方式
本实施方式采用Arck-114R型工业控制机作为检测装置;即在控制机内的存储器 (可执行存储器和数据存储器)中分别设置待测软件及检测标准初始化处理的单元模块、 对待测软件初步分析数据进行预处理的单元模块、按单一的安全缺陷标准检测及安全缺陷 等级评估单元模块、安全缺陷综合处理单元模块、对检测结果存储和作数据丢弃处理的单 元模块及相应的数椐库;整个检测装置通过人机输入接口设置各功能模块及对应的参数, 亦通过人机接口连接并录入待检测数据,而通过存储接口存储并送出软件安全缺陷信息。
下面以下述参数为例进行说明。
需要检测的软件名为d: \test\openbus ; 选用的常规分析工具为Flawf inder, RATS, Coverity Prevent, Gra,Tech
CodeSonar, Pa:rasoft Insure++, MemWatch 5 用于原始数据的存储地址是d: \openbus\original\ ;
7
用于最终结果的存储地址是d:\openbus\result\ ;
单一缺陷标准检测标准1 (参数) 敏感函数标准检测参数,原始数据中出现strcpy,简记为1. 1_1 (strcpy);原始数 据中出现fscanf,简记为1. l-2(fscanf);原始数据中出现getwd,简记为1. 1-3(getwd); 原始数据中出现sprintf,简记为1. l-4(sprintf)。 字符串标准检测参数,原始数据中出现"/",简记为1.2_1(/);原始数据中出现 "%",简记为1. 2_2(% );原始数据中出现'7 =",简记为1. 2_3(/ =);原始数据中出现 abort,简记为1. 2-4 (abort)。 指针标准检测参数,原始数据中出现malloc,简记为1. 3-1(malloc);原始数据中 出现new,简记为1. 3-2 (new)。 图3为本具体实施方式
综合检测方法流程示意图(方框图),其综合检测方法包 括 A.初始化处理将上述检测参数通过人机接口植入到检测装置中;并将待测软件 通过选定的常规分析工具处理,获得基础数据; B.数据预处理用于抽取从步骤A得到的基础数据中的缺陷检测特征,以备检测 时使用; C.按单一的安全缺陷标准依次检测及安全缺陷等级评估将从步骤B所得待测软 件的分析数据,采用步骤Aa中设定的各单一安全缺陷检测标准逐一进行检测,检测结束后 转步骤D ;各单一安全缺陷检测步骤是 Ca.首先按照设定的单一安全缺陷标准l(敏感函数标准检测参数集)中的 《1. 1-1 (strcpy) 、1.1-2 (f scanf) 、1.1-3 (getwd) 、1.1-4 (sprintf) 、 1. 2-1 (/) 、 1. 2-2 ( % )、 1. 2-3 (/ = )、1. 2-4 (abort) 、1. 3-1 (malloc) 、 1. 3-2 (固)〉〉分别与各分析工具给出的初步 分析数据逐一进行对比检测,每当与安全缺陷标准中任意特征参数相符时,则将分析数据
以及触发检测标准的特征参数,送步骤c;处理;若均与各单一缺陷检测标准不符,则为无安
全缺陷数据、直接转步骤D处理; Cb.安全缺陷等级评估根据步骤(;输入的存在安全缺陷的数据,将与之对应的分
析数据中缺陷评估等级上加i ;然后返回步骤c;继续执行未曾进行的检测以及本步骤的缺
陷等级评估,直至检测、评估完毕; D.安全缺陷综合处理经步骤C检测后输入的数据中,若为无安全缺陷的数据纪 录、则存入数据库后直接转步骤E ;若为带安全缺陷的分析数据、则从中提取包括缺陷位置 特征及缺陷函数特征在内的缺陷特征数据进行安全缺陷的综合处理,处理结束后、直接转
步骤E ;安全缺陷综合处理的步骤为 Da.针对缺陷位置特征进行处理对步骤C处理后输入带安全缺陷的各分析数据, 针对缺陷出现行号进行逐一比对,每当相同的行号出现时、则将相应的缺陷等级相加,并将 被分析的软件文件名、缺陷出现行号、安全缺陷等级作为缺陷的位置特征参数记录存入数 据库; Db.针对缺陷函数特征进行处理对经步骤C处理后输入带安全缺陷的各分析数 据,针对缺陷特征进行追逐一比对,每当存在相同的缺陷特征(参数)时、则将相应的缺陷 等级相加,并将引起缺陷的函数名、安全缺陷等级作为缺陷的函数特征记录存入数据库;
8
E :检测结果的存储和数据丢弃处理将经过步骤D输入的处理的结果,对于无安 全缺陷检测结果,缺陷位置特征标准记为(缺陷出现行号=0,安全缺陷估分=0)、缺陷函 数特征标准记为(引起缺陷的函数名=0,安全缺陷估分=0),将缺陷位置特征及缺陷函数 特征,逐一存入最终检测结果存储地址,即为被测软件的安全缺陷检测结果;对于有安全缺 陷检测结果,直接将缺陷位置特征及缺陷函数特征,逐一存入最终检测结果存储地址;即为 被测软件的安全缺陷检测结果;并将其他分析数据和软件待测时的原始数据作丢弃处理。
在本实施例中,一旦出现单一特征的安全缺陷,例如出现符合l(单一缺陷检测标 准集)中的任一标准的数据,安全缺陷检测器就会通过缺陷处理模块在最终结果存储地址 中、存储检测出的软件安全缺陷信息。
9
权利要求
一种基于软件安全缺陷检测的综合处理方法,包括A.待测软件及检测标准初始化处理Aa.将需要检测的软件名称、选用的常规分析工具、原始数据存储地址、最终检测结果存储地址,以及各单一缺陷检测标准和综合处理程序进行初始化设置,并将其作为初始化数据存入数据库、以备调用;Ab.将待测的软件录入选用的常规软件分析工具,经过分析工具逐一处理,获得待测软件的初步分析数据,以待检测用;B.待测软件初步分析数据的预处理从步骤Ab输入的待测软件所有初步分析数据中抽取缺陷特征数据,并逐一录入原始数据存储地址,作为待测软件的分析数据数据,以备进一步检测用;C.按单一的安全缺陷标准依次检测及安全缺陷等级评估将从步骤B所得待测软件的分析数据,采用步骤Aa中设定的各单一安全缺陷检测标准逐一进行检测,检测结束后转步骤D;各单一安全缺陷检测步骤是Ca.首先按照设定的单一安全缺陷标准分别对各分析工具给出的初步分析数据逐一进行对比检测,每当与安全缺陷标准中任意特征参数相符时,则将分析数据以及触发检测标准的特征参数,送步骤Cb处理;若均与各单一缺陷检测标准不符,则为无安全缺陷数据、直接转步骤D处理;Cb.安全缺陷等级评估根据步骤Ca输入的存在安全缺陷的数据,将与之对应的分析数据中缺陷评估等级上加1;然后返回步骤Ca继续执行未曾进行的检测以及本步骤的缺陷等级评估,直至检测、评估完毕D.安全缺陷综合处理经步骤C检测后输入的数据中,若为无安全缺陷的数据纪录、则存入数据库后直接转步骤E;若为带安全缺陷的分析数据、则从中提取包括缺陷位置特征及缺陷函数特征在内的缺陷特征数据进行安全缺陷的综合处理,处理结束后、直接转步骤E;安全缺陷综合处理的步骤为Da.针对缺陷位置特征进行处理对步骤C处理后输入带安全缺陷的各分析数据,针对缺陷出现行号进行逐一比对,每当相同的行号出现时、则将相应的缺陷等级相加,并将被分析的软件文件名、缺陷出现行号、安全缺陷等级作为缺陷的位置特征参数记录存入数据库;Db.针对缺陷函数特征进行处理对经步骤C处理后输入带安全缺陷的各分析数据,针对缺陷特征进行追逐一比对,每当存在相同的缺陷特征时、则将相应的缺陷等级相加,并将引起缺陷的函数名、安全缺陷等级作为缺陷的函数特征记录存入数据库;E检测结果的存储和数据丢弃处理将经过步骤D输入的处理的结果,即无安全缺陷或缺陷位置特征及缺陷函数特征逐一存入最终检测结果存储地址,即为被测软件的安全缺陷检测结果;并将其它分析数据和软件待测时的原始数据作丢弃处理。
2. 按权利要求1所述基于软件安全缺陷检测的综合处理方法,其特征在于所述软件安全缺陷单一特征标准包括敏感函数检测标准,字符串检测标准,指针检测标准。
3. 按权利要求2所述基于软件安全缺陷检测的综合处理方法,其特征在于所述敏感函数检测标准为strcpy, fscanf, getwd, strncpy, strcat、 strdup, sprintf, sqrt, log。
4. 按权利要求2所述基于软件安全缺陷检测的综合处理方法,其特征在于所述字符串检测标准为"/,,、"% ,,、"/ =,,、"% = ,,、 len, abort, exit, assert, setjmp, longjmp, goto,break, continue, return, switch, for, while, do while。
5. 按权利要求2所述基于软件安全缺陷检测的综合处理方法,其特征在于所述指针检测标准为malloc, new, HeapAlloc,亂L。
6. 按权利要求1所述软件安全缺陷检测方法所采用的功能模块构架,包括数据库以及A. —个待测软件及检测标准初始化处理的单元模块,用于对选用的常规分析工具、待测软件及检测标准进行初始化处理、存储,以备后用;B. —个对待测软件初步分析数据进行预处理的单元模块,用于从基础数据中抽取缺陷检测特征,以备检测时使用;C. 一个按单一的安全缺陷标准检测及安全缺陷等级评估单元模块,用于调用设定的单一安全缺陷检测标准并按照其标准分别对各分析工具给出的待测软件初步分析数据逐一进行对比检测,以及对其安全缺陷的严重性进行等级评估;D. —个安全缺陷综合处理单元模块,用于针对待测软件缺陷出现的行号、缺陷函数特征进行综合处理,以及对无安全缺陷数据的被测软件作纪录;E. —个对检测结果存储和作数据丢弃处理的单元模块,用于对被测软件的安全缺陷最终检测结果存入存储地址,并将其余分析数据和被测软件的原始数据作丢弃处理。
全文摘要
该发明属于网络安全领域中的软件安全缺陷检测方法及所采用的功能模块构架装置。其方法包括待测软件及检测标准初始化处理,待测软件初步分析数据的预处理,按单一的安全缺陷标准依次检测及安全缺陷等级评估,安全缺陷综合处理及检测结果的存储和数据丢弃处理;功能模块构架包括待测软件及检测标准初始化处理、对待测软件初步分析数据进行预处理、按单一的安全缺陷标准检测及安全缺陷等级评估、安全缺陷综合处理、对检测结果存储和作数据丢弃处理的单元模块及数据库。该发明具有可对软件的安全缺陷进行整体检测及综合处理,检测范围广、对软件安全缺陷的适应性强,检测及综合处理结果准确性、可靠性高,对软件的功能和性能无特别要求等特点。
文档编号G06F21/22GK101706749SQ200910216239
公开日2010年5月12日 申请日期2009年11月18日 优先权日2009年11月18日
发明者侯孟书, 宫亚峰, 朱大勇, 王光卫, 范明钰 申请人:电子科技大学