CN107392029A - 一种基于化学抽象机的脆弱性模型构建方法 - Google Patents

一种基于化学抽象机的脆弱性模型构建方法 Download PDF

Info

Publication number
CN107392029A
CN107392029A CN201710629219.1A CN201710629219A CN107392029A CN 107392029 A CN107392029 A CN 107392029A CN 201710629219 A CN201710629219 A CN 201710629219A CN 107392029 A CN107392029 A CN 107392029A
Authority
CN
China
Prior art keywords
fragility
vulnerability
chemical abstract
abstract machine
cause
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201710629219.1A
Other languages
English (en)
Other versions
CN107392029B (zh
Inventor
李响
陈锦富
林哲超
章琳
王梓斌
周敏敏
谢网根
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
63928 TROOPS PEOPLE'S LIBERATION ARMY
Jiangsu University
Original Assignee
63928 TROOPS PEOPLE'S LIBERATION ARMY
Jiangsu University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 63928 TROOPS PEOPLE'S LIBERATION ARMY, Jiangsu University filed Critical 63928 TROOPS PEOPLE'S LIBERATION ARMY
Priority to CN201710629219.1A priority Critical patent/CN107392029B/zh
Publication of CN107392029A publication Critical patent/CN107392029A/zh
Application granted granted Critical
Publication of CN107392029B publication Critical patent/CN107392029B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于化学抽象机的脆弱性模型构建方法,属于可信计算领域。包括:1、基于数据控制流图,设计一种脆弱性内因表征方法;2、通过分析公共脆弱性库中的脆弱性实例,提取脆弱性属性,实现对脆弱性模型类型和成因的表示和描述;3、基于脆弱性属性,构建脆弱性的化学抽象机语义;4、基于脆弱性的化学抽象机语义,构建基于内因和外因的化学抽象机脆弱性模型。此外,本发明还实现了初步的原型系统——脆弱性模型分析系统,并和其他漏洞挖掘工具进行了比较,验证了方法的有效性。本发明能够帮助更加深入的了解脆弱性的本质,有助于提高对脆弱性的认识,从而帮助减少软件脆弱性给国家安全、经济稳定及社会发展带来的损失。

Description

一种基于化学抽象机的脆弱性模型构建方法
技术领域
本发明属于可信计算领域,涉及一种基于化学抽象机的脆弱性模型构建方法,包括提出一种脆弱性内因表征方法、提取脆弱性属性和构建基于化学抽象机的脆弱性模型。
背景技术
随着互联网和软件技术的不断发展,软件在社会发展的过程中发挥着越来越重要的作用。然而,与此同时,软件漏洞的数量越来越多,呈现日益增长的趋势,造成的危害也越来越大,对国家安全、经济稳定和社会发展均产生一定程度的威胁,因此对软件脆弱性方面的研究逐渐引起了国内外学者的重视。
对软件脆弱性的研究始于20世纪70年代,研究者致力于研究脆弱性分类,并且在脆弱性的成因分析中引入了分级、影响等概念,如Neumann等人提出的一种基于风险的漏洞分析方法,Cohen等人提出了面向攻击方式的漏洞分析法等,但他们的研究仍然不能全面反应脆弱性的本质。而后,国内外陆续有一些学者和研究机构开始研究漏洞的成因、特征、检测和利用等内容。近年来,国外学者们在软件脆弱性方面取得了许多研究成果,如:HuningDai等人提出了一种称为configuration fuzzing的测试方法,通过变异程序的构造并检查安全不变量是否违规来检测程序是否存在脆弱性;Hongzhe Li等人提出了使用逆向追踪分析和符号化执行来从源代码中检测程序是否存在脆弱性,这种方法具有较高的精度和召回率;Awad A.Younis等人提出了一种基于攻击表面切入点和可达性分析的脆弱性利用评估方法,实现了基于系统评价和非主观判断的系统安全评估。与国外相比,国内在漏洞方面的研究相对开始较晚。从2000年开始,国内的学者与科研机构开始重视软件脆弱性方面的科研工作。在软件漏洞检测领域,很多国内学者已经取得了一定的研究成果,如:汤春蕾等人提出了一种适用于数值型序列的匹配算法,从数据挖掘的视角对漏洞信息加以分析,并且建立了漏洞知识库,为快速检测与分析漏洞提供了依据;胡昌振等人提出了基于序列模式挖掘的软件漏洞检测方法,降低了漏洞检测的漏报率;王涛等人提出了一种用于描述和判别漏洞的漏洞静态检测模型,并且在该模型的基础上,设计了一个基于漏洞可执行路径集的软件漏洞静态检测框架。随着技术的发展,国内一些组织和机构还建立了不同级别的漏洞库,对漏洞进行搜集、存储、分类和分析等工作。
国内外这些初始的研究成果为我们的研究提供了基础性的资料,但是目前对于脆弱性成因和特征分析方面还存在一些问题,如难以对脆弱性成因进行形式化描述、没有一个体现脆弱性成因的有效的模型等等。因此,对于软件脆弱性成因和特征的系统化、理论化分析和相应的脆弱性模型的构建研究显得尤为重要。
发明内容
为了有效地分析脆弱性的成因和特征,本发明公开了一种基于化学抽象机的脆弱性模型构建方法。首先设计一种基于数据控制流图的脆弱性内因表征方法,然后提取脆弱性属性,实现对脆弱性模型类型和成因的表示和描述,在此基础上构建了脆弱性的化学抽象机语义,最后构建了基于内因和外因的化学抽象机脆弱性模型。此外,为了验证模型的有效性,我们基于化学抽象机脆弱性模型实现了脆弱性模型分析原型系统CHAM-VMAS,并和其他漏洞挖掘工具进行了对比实验,实验结果证明我们的系统在检测漏洞的数量和准确性方面均具有较好的效果。总之,我们提出的方法能够帮助更加深入的了解脆弱性的本质,有助于进一步提高对脆弱性成因和特征的认识,并能够提高检测脆弱性的准确性和有效性。
本发明的技术方案包括如下步骤:
1、基于数据控制流图,设计一种脆弱性内因表征方法;
2、通过分析公共脆弱性库中脆弱性实例,提取脆弱性属性,实现对脆弱性模型类型和成因的表示和描述;
3、基于脆弱性属性,构建脆弱性的化学抽象机语义;
4、基于脆弱性的化学抽象机语义,构建基于内因和外因的化学抽象机脆弱性模型。
上述步骤1的具体步骤如下:
步骤1.1,根据被分析的漏洞源代码,生成程序数据控制流图;
步骤1.2,结合程序数据控制流图,构建脆弱性内因类型;
步骤1.3,基于脆弱性内因的类型,结合数据控制流图得到脆弱性特征;
步骤1.4,基于脆弱性内因的类型和各类型的特征,定义各脆弱性类型对应的脆弱性遍历规则和判定规则。
上述步骤2的具体步骤如下:
步骤2.1,构建脆弱性属性的一级类型信息,包括脆弱性种类VC、用户群体UG、软件类型ST、作用范围CS、触发条件TC等;
步骤2.2,构建脆弱性属性的二级成因特征信息,包括脆弱性名称VN、编号VNO、形成原因MR、主要特征MF、测试代码VT、解决方案RS、发现日期FD等;
步骤2.3,基于脆弱性属性的一级类型信息和二级成因特征信息,构建脆弱性属性。上
述步骤3的具体步骤如下:
步骤3.1,定义脆弱性分子语法集MS,包括数据元素DE、处理元素PE和连接元素CE;
步骤3.2,定义脆弱性初始状态V0和终止状态Vf
步骤3.3,定义脆弱性分子集的反应规则R。R用来表示一个状态至另一个状态的演化,即V→V'。
上述步骤4的具体步骤如下:
步骤4.1,定义脆弱性内因的化学抽象机表示,并结合案例验证其有效性;
步骤4.2,定义脆弱性外因的化学抽象机表示,并结合案例验证其有效性;
步骤4.3,基于步骤4.1和步骤4.2,构建基于内因和外因的化学抽象机脆弱性模型。
步骤4.4,基于步骤4.3构建的脆弱性模型。
进一步,步骤1.2中,脆弱性内因主要有以下10个类型:数据校验不当DO,空指针引用不当NP,返回值操作不当RV,数字操作不当NO,类与方法操作不当CM,多线程处理不当MT,IO操作不当IO,序列化操作不当SO,权限控制不当RC,资源释放使用不当FU。
进一步,步骤1.3的脆弱性内因类型为以下四类:
1)数据校验不当DO
针对给定源代码生成的数据控制流图FG,通过图的遍历操作(X(T)→X(T’))分析其对应的FG得到节点集合T,再通过过滤遍历FRTr(T)识别是否存在节点接受了未验证或未受信的数据,且符合Verify(Data)这一规则,如果符合对应规则则会导致安全问题;
2)空指针引用不当NP
针对给定源代码生成的数据控制流图FG,通过图的遍历操作(X(T)→X(T’))分析其对应的FG得到节点集合T,再通过过滤遍历FRTr(T)识别是否存在节点中有引用指向空地址单元的指针变量,即是否存在节点符合Reference(Np)规则;如果符合对应规则,则会产生空指针引用故障,最终会导致软件系统崩溃;
3)多线程处理不当MT
针对给定源代码生成的数据控制流图FG,通过图的遍历操作(X(T)→X(T’))分析其对应的FG得到节点集合T,再使用Forward遍历向前遍历,判断是否存在一个线程负责改变某变量的值,而其他线程负责同时读取变量内容,即是否存在某个节点符合OneWriteMultiRead规则;如果符合该规则,会导致程序错误;
4)资源释放使用不当FU
针对给定源代码生成的数据控制流图FG,通过图的遍历操作(X(T)→X(T’))分析其对应的FG得到节点集合T,再通过过滤遍历FRTr(T)识别是否存在节点释放资源之后,又再次使用该资源,即是否符合UseAfterFree规则;如果符合该规则,会导致程序错误。
进一步,步骤4.4具体过程为:1)收集源程序;2)根据源程序构建对应的CHAM脆弱性模型;3)对CHAM脆弱性模型的输出结果与脆弱性的成因和特征进行对比,分析程序是否存在漏洞及漏洞的数量。
本发明的有益效果:
1、本发明基于数据控制流图,设计了一种脆弱性内因表征方法。该方法从数据控制流图的角度分析了脆弱性的不同内因类型及各类型的对应特征,并基于脆弱性类型和特征定义了脆弱性遍历规则和判定规则,能够判定源程序是否存在脆弱性、脆弱性成因及脆弱性类型,为深入分析脆弱性的成因提供了理论基础。
2、本发明通过分析公共脆弱性库中脆弱性实例,提取脆弱性属性,实现了对脆弱性模型类型信息和成因信息的表示和描述,对于完善和规范脆弱性属性信息具有积极的指导作用,会在脆弱性研究的领域发挥重要意义。
3、本发明基于脆弱性的属性信息和化学抽象机的表达,构建了脆弱性的化学抽象机语义,实现了从形式化角度分析和表达了脆弱性的形成机制。本发明还构建了基于内外因的化学抽象机脆弱性模型,突出研究了脆弱性产生的内因机制及外因环境影响,强调脆弱性是内外因共同作用的结果,为更好地分析和把握脆弱性的本质特征提供了重要的研究切入点。
4、本发明基于化学抽象机脆弱性模型VM-CHAM,设计实现了初步的原型系统——脆弱性模型分析系统CHAM-VMAS,提高了漏洞检测的有效性和准确性,会对脆弱性研究方面产生重要意义。
附图说明
图1是基于化学抽象机的脆弱性模型构建方法示意图。
图2是基于化学抽象机的脆弱性模型构建方法步骤图。
图3是一种脆弱性内因表征方法步骤图。
图4是提取脆弱性属性步骤图。
图5是构建脆弱性的化学抽象机语义步骤图。
图6是构建基于化学抽象机脆弱性模型的步骤图。
图7是代码段1图。
图8是代码段1对应的数据控制流图。
图9是代码段2图。
图10是基于化学抽象机脆弱性模型示意图。
图11是基于6个子测试用例集的不同漏洞挖掘工具的实验结果对比图。
具体实施方式
下面结合附图和实施案例对本发明作进一步说明,应指出的是,所描述的实施案例仅旨在便于对本发明的理解,而对其不起任何限定作用。
本发明以研究脆弱性本质为目的,提供一种基于化学抽象机的脆弱性模型构建方法。本发明首先设计了一种脆弱性内因表征方法,接着提取了脆弱性属性,最后构建了基于化学抽象机的脆弱性模型,对于研究脆弱性成因具有重要的指导意义。
首先,定义本发明所涉及到的几个概念定义如下。
定义1数据控制流图FG:FG=(T,E,λ,μ),其中T代表数据控制流图上的节点,E代表数据控制流图的有向边,λ是数据控制流图中的有向边标签函数,它从标签值集合Σ中选取相应的标签来标记数据控制流图中的每一条边,且Σ={true,false,ε},μ是数据控制流图中节点属性赋值函数。数据流程图中的节点本身都包含各自的属性,体现为在该节点处程序中变量的“定义”和“使用”关系。
定义2图的遍历Γ:图的遍历是依据属性图FG将一组节点映射到另一组节点的函数Γ:X(T)→X(T’),其中X是幂集操作。
定义3过滤遍历FRTr(T):过滤遍历该遍历返回集合X中匹配布尔判断式r(t)的所有节点。我们将过滤遍历表达式表示成:FRTr(T)={t∈T:r(t)}。
定义4遍历:遍历表示由节点m到节点n的一个深度优先遍历。遍历是图的遍历Γ的一种,其遍历结果是一个节点集合。
定义5属性图Forward遍历:Forward遍历表示在属性图中向前遍历。
定义规则:接受数据未经校验,即程序对输入的数据未做合规性检查和校验,就参与了程序计算。
定义7Reference(Np)规则:存在引用指向空地址单元的指针变量,则会产生空指针引用故障。
定义8OneWriteMultiRead规则:存在一个线程负责改变某变量的值,而其他线程负责同时读取变量内容。
定义9UseAfterFree规则:某资源被释放之后,又被再次使用。
定义10基于化学抽象机脆弱性模型VM-CHAM:VM-CHAM主要包含脆弱性分子语法集MS(包括数据元素DE、处理元素PE和连接元素CE)、脆弱性初始状态V0、终止溶液Vf和脆弱性分子集的反应规则R。
如图1所示,本发明提出了一种基于化学抽象机的脆弱性模型构建方法,包括:
步骤1,基于数据控制流图,设计一种脆弱性内因表征方法。
上述步骤1中,参照图3可知基于数据控制流图设计脆弱性内因的表征方法过程如下:
步骤1.1,根据被分析的漏洞源代码,明确数据控制流图中包含的全部节点和边,并分析每条边的边标签值和每个节点的属性值,最后生成程序数据控制流图。
步骤1.2,结合不同漏洞源代码对应的程序数据控制流图,对其进行成因和特征进行分析、归类,构建脆弱性内因类型。经分析,脆弱性内因主要有以下10个类型:数据校验不当DO,空指针引用不当NP,返回值操作不当RV,数字操作不当NO,类与方法操作不当CM,多线程处理不当MT,IO操作不当IO,序列化操作不当SO,权限控制不当RC,资源释放使用不当FU。
步骤1.3,基于脆弱性内因的类型,结合程序数据流图得到脆弱性特征。这里针对以下四类脆弱性内因类型,给出其脆弱性特征。
(1)数据校验不当DO
针对给定源代码生成的数据控制流图FG,通过图的遍历操作(X(T)→X(T’))分析其对应的FG得到节点集合T,再通过过滤遍历FRTr(T)识别是否存在节点接受了未验证或未受信的数据,且符合Verify(Data)这一规则,如果符合对应规则则会导致安全问题。
(2)空指针引用不当NP
针对给定源代码生成的数据控制流图FG,通过图的遍历操作(X(T)→X(T’))分析其对应的FG得到节点集合T,再通过过滤遍历FRTr(T)识别是否存在节点中有引用指向空地址单元的指针变量,即是否存在节点符合Reference(Np)规则。如果符合对应规则,则会产生空指针引用故障,最终会导致软件系统崩溃。
(3)多线程处理不当MT
针对给定源代码生成的数据控制流图FG,通过图的遍历操作(X(T)→X(T’))分析其对应的FG得到节点集合T,再使用Forward遍历向前遍历,判断是否存在一个线程负责改变某变量的值,而其他线程负责同时读取变量内容,即是否存在某个节点符合OneWriteMultiRead规则。如果符合该规则,会导致程序错误。
(4)资源释放使用不当FU
针对给定源代码生成的数据控制流图FG,通过图的遍历操作(X(T)→X(T’))分析其对应的FG得到节点集合T,再通过过滤遍历FRTr(T)识别是否存在节点释放资源之后,又再次使用该资源,即是否符合UseAfterFree规则。如果符合该规则,会导致程序错误。
步骤1.4,基于脆弱性内因的类型和各类型的特征,定义各脆弱性类型对应的脆弱性遍历规则和判定规则。这里以步骤1.3中的“资源释放使用不当FU”为例,给出定义过程。对于“资源释放使用不当FU”,根据脆弱性的UseAfterFree规则,第一步,执行遍历返回程序数据流图所有节点的集合,为T;第二步,按照过滤条件“r:r为真当且仅当遍历返回的节点中包含tdst节点(这里tdst节点代表释放变量的节点)”执行过滤遍历FRTr(T),该变量返回的结果为{tx}。第三步,对第二步的结果进行分析、判断。如果0≤x<f,即说明了变量在tx处释放后,又在tf处重用了,这是不合规范的操作。故通过利用UseAfterFree规则可以推导出给定代码段是否存在“资源释放使用不当FU”的脆弱性。
步骤2,通过分析公共脆弱性库中脆弱性实例,提取脆弱性属性,实现对脆弱性模型类型和成因的表示和描述。
上述步骤2中,参照图4可知提取脆弱性属性的具体步骤如下:
步骤2.1,从各种开源数据库(例如,常见漏洞和暴露数据库、公共脆弱性库和美国国家漏洞数据库)中获取脆弱性源代码及其相关描述,对获得的脆弱性类型方面的信息进行预处理,然后识别合理的脆弱性术语,最后使用数据挖掘算法对信息进行挖掘,从而获得脆弱性属性的一级类型信息,包括脆弱性种类VC、用户群体UG、软件类型ST、作用范围CS、触发条件TC等。脆弱性属性一级类型信息的详细内容见表1。
表1脆弱性属性一级类型信息的详细内容
步骤2.2,从各种开源数据库(例如,常见漏洞和暴露数据库、公共脆弱性库和美国国家漏洞数据库)中获取脆弱性源代码及其相关描述,对获得脆弱性成因和特征方面的信息进行预处理,然后识别合理的脆弱性术语,最后使用数据挖掘算法对信息进行挖掘,从而获得脆弱性属性的二级成因特征信息,包括脆弱性名称VN、脆弱性编号VNO、脆弱性类型描述TD、形成原因MR、主要特征MF、测试代码VT、解决方案RS等。脆弱性属性二级成因特征信息的详细内容见表2。
表2脆弱性属性二级成因特征信息的详细内容
步骤2.3,基于得脆弱性属性的一级类型信息和二级成因特征信息,构建脆弱性属性。设VulAtt代表脆弱性属性,TypeIno代表一级类型信息,ReaFeat代表二级成因特征信息,则脆弱性属性可以表示为VulAtt={TypeIno,ReaFeat}。
步骤3,基于脆弱性属性,构建脆弱性的化学抽象机语义。
上述步骤3中,参照图5可知构建脆弱性化学抽象机语义的具体步骤如下:
步骤3.1,基于脆弱性的属性,定义脆弱性分子语法集MS,包括数据元素DE、处理元素PE和连接元素CE。首先,定义数据元素DE,包括内因数据元素和外因数据元素。内因数据元素包括:源程序SCODE,数据控制流图FG,内因分析结果集IIRS;外因数据元素包括:系统环境源数据集SISDS,系统环境结果数据集SIRDS,网络环境源数据集NISDS,网络环境结果数据集NIRDS,外因分析结果集EERS。其次,定义处理元素PE,包括内因处理元素与外因处理元素。内因处理元素包括:数据控制流图转换器FGT,数据控制流图分析器FGA;外因处理元素包括:系统环境分析器SIA,网络环境分析器NIA,外因综合分析器ECA。接着,定义连接元素CE,包括:输入操作CIN(D),输出操作COUT(D),其中D代表了数据元素。因此脆弱性分子语法集MS可以进一步表示为MS::=CE|DE|PE|MS◇MS,“◇”用来表达处理元素PE关于其输入输出行为的状态。
步骤3.2,基于脆弱性的属性,定义脆弱性初始状态V0和终止状态Vf。脆弱性初始状态V0可以表示为V0={|CIN(SCODE)◇COUT(FG)◇FGT,CIN(FG)◇COUT(IIRS)◇FGA//CIN(SISDS)◇COUT(SIRDS)◇SIA,CIN(NISDS)◇COUT(NIRDS)◇NIA|}。脆弱性终止状态Vf可以表示为Vf={|FGT◇CIN(SCODE)◇COUT(FG),FGA◇CIN(FG)◇COUT(IIRS)//SIA◇CIN(SISDS)◇COUT(SIRDS),NIA◇CIN(NISDS)◇COUT(NIRDS),NIA◇CIN(SIRDS,NIRDS)◇COUT(EERS)|}。“//”用来表示两个平行的脆弱性状态。
步骤3.3,基于脆弱性的属性,定义脆弱性分子集的反应规则R。R用来表示由一个状态至另一个状态的演化,即V→V'。脆弱性分子集的反应规则R主要包括内因反应规则和外因反应规则两大部分。内因反应规则主要有:
R1::=CIN(SCODE)◇COUT(FG)◇FGT→COUT(FG)◇FGT◇CIN(SCODE);
R2::=COUT(FG)◇FGT◇CIN(SCODE)→FGT◇CIN(SCODE)◇COUT(FG);
R3::=CIN(FG)◇COUT(IIRS)◇FGT→COUT(IIRS)◇FGT◇CIN(FG);
R4::=COUT(IIRS)◇FGT◇CIN(FG)→FGT◇CIN(FG)◇COUT(IIRS);
规则R1表示数据控制流图转换器FGT获取了源代码SCODE,等待输出源代码对应的数据控制流图FG;规则R2表示数据控制流图转换器FGT获取了源代码SCODE之后,继续输出了源代码对应的数据控制流图FG。规则R3表示数据控制流图分析器FGA获取了数据控制流图FG,等待输出内因分析结果集IIRS;规则R4表示数据控制流图分析器FGA获取了数据控制流图FG之后,继续输出了内因分析结果集IIRS。
外因反应规则主要有:
R5::=CIN(SISDS)◇COUT(SIRDS)◇SIA→COUT(SIRDS)◇SIA◇CIN(SISDS);
R6::=COUT(SIRDS)◇SIA◇CIN(SISDS)→SIA◇CIN(SISDS)◇COUT(SIRDS);
R7::=CIN(NISDS)◇COUT(NIRDS)◇NIA→COUT(NIRDS)◇NIA◇CIN(NISDS);
R8::=COUT(NIRDS)◇NIA◇CIN(NISDS)→SIA◇CIN(SISDS)◇COUT(SIRDS);
R9::=CIN(SIRDS,SIRDS)◇COUT(EERS)◇ECA→COUT(EERS)◇ECA◇CIN(SIRDS,SIRDS);
R10::=COUT(EERS)◇ECA◇CIN(SIRDS,SIRDS)→ECA◇CIN(SIRDS,SIRDS)◇COUT(EERS);
规则R5表示系统环境分析器SIA获取了系统环境源数据集SISDS,等待输出系统环境结果数据集SIRDS;规则R6表示系统环境分析器SIA获取了系统环境源数据集SISDS之后,继续输出了系统环境结果数据集SIRDS;规则R5表示网络环境分析器NIA获取了网络环境源数据集NISDS,等待输出网络环境结果数据集NIRDS;规则R6表示网络环境分析器NIA获取了网络环境源数据集NISDS之后,继续输出了网络环境结果数据集NIRDS。规则R9表示外因综合分析器ECA等待获取系统环境结果数据集SIRDS和网络环境源数据集NISDS,等待输出外因分析结果集EERS。规则R10表示外因综合分析器ECA获取了系统环境结果数据集SIRDS和网络环境源数据集NISDS之后,继续输出了外因分析结果集EERS。
步骤4,基于脆弱性的化学抽象机语义,构建基于内因和外因的化学抽象机脆弱性模型。
上述步骤4中,参照图6可知构建基于化学抽象机脆弱性模型的具体步骤如下:
步骤4.1,基于脆弱性的化学抽象机语义,定义脆弱性内因的化学抽象机表示,具体表示为:
(1)其中V1=COUT(FG)◇FGT◇CIN(SCODE),CIN(FG)◇COUT(IIRS)◇FGA;
这一步表示从脆弱性初始状态V0通过规则R1转换至状态V1,实现的主要功能是:数据控制流图转换器FGT获取了源代码SCODE,等待输出源代码对应的数据控制流图FG;数据控制流图分析器FGA等待获取和输出数据。
(2)其中V2=FGT◇CIN(SCODE)◇COUT(FG),CIN(FG)◇COUT(IIRS)◇FGA;
这一步表示从脆弱性状态V1通过规则R2转换至状态V2,实现的主要功能是:数据控制流图转换器FGT获取了源代码SCODE之后,继续输出了源代码对应的数据控制流图FG;数据控制流图分析器FGA等待获取和输出数据。
(3)其中V3=FGT◇CIN(SCODE)◇COUT(FG),COUT(IIRS)◇FGA◇CIN(FG);
这一步表示从脆弱性状态V2通过规则R3转换至状态V3,实现的主要功能是:数据控制流图分析器FGA获取了数据控制流图FG,等待输出内因分析结果集IIRS。
(4)其中Vf=FGT◇CIN(SCODE)◇COUT(FG),FGT◇CIN(FG)◇COUT(IIRS);
这一步表示从脆弱性状态V3通过规则R4转换至状态V4,实现的主要功能是:数据控制流图分析器FGA获取了数据控制流图FG之后,继续输出了内因分析结果集IIRS,到此脆弱性内因分析过程结束。
下面结合图7所示的代码段1来验证其有效性。首先通过分析,发现该代码段不受外因的影响,所以,只考虑内因对代码脆弱性的影响。经过步骤我们将源代码段转换成了如图8所示的DCFG图。进一步通过即通过数据控制流图分析器FGA对DCFG图进行遍历分析,得到内因分析结果集IIRS={释放后重用}。“释放后重用”即对应了脆弱性内因的不安全编码因素——“资源释放使用不当”,从而推导出了该代码段对应的脆弱性内因。
步骤4.2,基于脆弱性的化学抽象机语义,定义脆弱性外因的化学抽象机表示,具体表示为:
(1)其中V4=COUT(SIRDS)◇SIA◇CIN(SISDS),COUT(NIRDS)◇NIA◇CIN(NISDS),CIN(SIRDS,SIRDS)◇COUT(EERS)◇NIA;
这一步表示从脆弱性初始状态V0通过规则R5,R7转换至状态V4,实现的主要功能是:系统环境分析器SIA获取了系统环境源数据集SISDS,等待输出系统环境结果数据集SIRDS;网络环境分析器NIA获取了网络环境源数据集NISDS,等待输出网络环境结果数据集NIRDS;外因综合分析器ECA等待获取和输出数据。
(2)其中V5=SIA◇CIN(SISDS)◇COUT(SIRDS),NIA◇CIN(NISDS)◇COUT(NIRDS),CIN(SIRDS,NIRDS)◇COUT(EERS)◇NIA;
这一步表示从脆弱性状态V4通过规则R6,R8转换至状态V5,实现的主要功能是:系统环境分析器SIA获取了系统环境源数据集SISDS之后,继续输出了系统环境结果数据集SIRDS;网络环境分析器NIA获取了网络环境源数据集NISDS之后,继续输出了网络环境结果数据集NIRDS;外因综合分析器ECA等待获取和输出数据。
(3)其中V5=SIA◇CIN(SISDS)◇COUT(SIRDS),NIA◇CIN(NISDS)◇COUT(NIRDS),COUT(EERS)◇NIA◇CIN(SIRDS,SIRDS);
这一步表示从脆弱性状态V5通过规则R9转换至状态V6,实现的主要功能是:外因综合分析器ECA获取了系统环境结果数据集SIRDS和网络环境结果数据集NIRDS,等待输出外因分析结果集EERS。
(4)其中Vf=SIA◇CIN(SISDS)◇COUT(SIRDS),NIA◇CIN(NISDS)◇COUT(NIRDS),NIA◇CIN(SIRDS,SIRDS)◇COUT(EERS);
这一步表示从脆弱性状态V7通过规则R10转换至状态Vf,实现的主要功能是:外因综合分析器ECA获取了系统环境结果数据集SIRDS和网络环境结果数据集NIRDS之后,继续输出了外因分析结果集EERS,到此脆弱性外因分析过程结束。
下面结合图9所示的代码段2来验证其有效性。代码段2会显示一个文本框和提交按钮。当用户点击提交按钮时,"test.php"会处理用户的输入,当"test.php"运行时,"$hello"会包含用户在文本框输入的数据。攻击者可以按照自己的意愿创建任意的全局变量。如果攻击者直接在浏览器地址栏输入,那么不止是"$hello"被创建,"$setup"也被创建了。这段代码假定"$auth"在没有设置值的时候是空的,但是攻击者可以创建任何全局变量并赋值,通过类似"http://server/test.php?auth=1"的方法,欺骗这段代码,使它相信其是已经认证过的。首先,经过步骤我们分析出系统环境结果数据集SIRDS={外部代码CD,进程PRS},网络环境结果数据集NIRDS={网络信息篡改IIT}。进一步通过 即通过外因综合分析器ECA对外部环境因素进行综合分析,得到外因分析结果集EERS={外部代码CD,进程PRS,网络传递信息篡改ITIT},从而推导出了该代码段对应的脆弱性外因。
步骤4.3,基于步骤4.1和步骤4.2,构建基于内因和外因的化学抽象机脆弱性模型VM-CHAM,模型主要考虑程序的内部编码因素与外部环境因素。VM-CHAM模型具体模型图如图11所示,它反映了脆弱性产生的因素(内因和外因)、产生的过程及产生的结果。
由图11可知,我们认为软件都存在脆弱性,且其脆弱性会被外部环境利用。脆弱性产生的原因主要来自两大方面,一个是内部不安全编码,一个是外部环境。内部不安全编码主要包括以下10种:数据校验不当DO,空指针引用不当NP,返回值操作不当RV,数字操作不当NO,类与方法操作不当CM,多线程处理不当MT,IO操作不当IO,序列化操作不当SO,权限控制不当RC和资源释放使用不当FU。我们基于数据控制流图,设计了一种脆弱性内因表征方法,并构建了其化学抽象机语义。基于化学抽象机语义,我们定义了脆弱性内因的化学抽象机表示,具体表示为:
该部分反应的最终的输出结果是内因分析结果集IIRS,该结果集说明是何种内因产生了脆弱性及产生的脆弱性的类型,这样的结果即是“内部编码因素的影响”。然而,软件的脆弱性情况也不是一成不变的。编码人员会不断更新源程序,即对软件脆弱性做出“应对/反应”,引起“内部编码因素的修改与变化”,最终对软件产生新的“内部编码因素的影响”。
对于外部环境,我们认为主要包括两大方面:网络环境和程序所处的系统环境,具体主要包括:接口参数IP、内存M、磁盘文件系统DF、进程PRS、网络NET、注册环境信息REG及外部代码CD等。基于化学抽象机语义,定义脆弱性外因的化学抽象机表示,具体表示为:
该部分反应的最终的输出结果是外因分析结果集EERS,该结果集说明是何种外因产生了脆弱性及产生的脆弱性的类型,这样的结果即是“外部环境的影响”。但是外部环境也不是一成不变的,它会不断地经过“调整/反应”,从而导致“变异与变化”,最终对软件产生新的“外部环境的影响”。
总的来说,软件脆弱性会受到内部和外部因素的共同影响。当影响产生的时候,内部和外部因素又会经过调整和修改,从而导致新的软件脆弱性,这个过程不断迭代更新。所以说,软件的脆弱性具有动态性,并且随着内部编码因素和外部环境的不断变化而变化。
步骤4.4,基于步骤4.3构建的脆弱性模型,为了验证模型的有效性,基于化学抽象机脆弱性模型VM-CHAM实现了初步的原型系统——脆弱性模型分析系统CHAM-VMAS。该系统中集成了一种脆弱性检测方法。这个方法的主要步骤如下:(1)收集源程序;(2)根据源程序构建对应的CHAM脆弱性模型;(3)对CHAM脆弱性模型的输出结果与脆弱性的成因和特征进行对比,分析程序是否存在漏洞及漏洞的数量。为了进一步分析CHAM-VMAS对软件脆弱性的分析效果,我们基于Juliet_Test_Suite_v1.2_for_Java中的6个子测试用例集(资源访问越界类(RA)、运算错误类(OE)、保护机制错误类(PM)、程序逻辑错误类(PL)、资源处理不当类(RP)和结构使用错误类(SU)),与漏洞挖掘工具findbugs和PMD进行了对比实验。本次实验中6个测试用例集的信息如表3所示,实验结果如图11所示。在图11中,横坐标代表了测试用例集,纵坐标代表了检测漏洞的能力,蓝色线条对应了findbugs工具,绿色线条对应了CHAM-VMAS工具,红色线条对应了PMD工具。
表3测试用例集信息
测试用例集 漏洞描述 漏洞数
RA 缓冲区溢出、任意地址写等 26
OE 整数溢出、除零错误、指针使用不当等 21
PM 不恰当的访问控制、明文传递信息等 35
PL 异常处理不当、使用不正确的操作符等 15
RP 安全日志处理不当、未清除敏感信息、相对路径遍历等 41
SU 格式化字符串、多余的结构体标记符等 18
从图中可以看出我们的方法CHAM-VMAS在除了测试用例集PL外,对其它5个测试用例集均具有更好的检测效果。其次是findbugs要好于PMD方法。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示意性实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。

Claims (8)

1.一种基于化学抽象机的脆弱性模型构建方法,其特征在于,包括如下步骤:
步骤1,基于数据控制流图,设计一种脆弱性内因表征方法;
步骤2,通过分析公共脆弱性库中的脆弱性实例,提取脆弱性属性,实现对脆弱性模型类型和成因的表示和描述;
步骤3,基于脆弱性属性,构建脆弱性的化学抽象机语义;
步骤4,基于脆弱性的化学抽象机语义,构建基于内因和外因的化学抽象机脆弱性模型。
2.根据权利要求1所述的一种基于化学抽象机的脆弱性模型构建方法,其特征在于,所述步骤1的具体过程如下:
步骤1.1,根据被分析的漏洞源代码,生成程序数据控制流图;
步骤1.2,结合程序数据控制流图,构建脆弱性内因类型;
步骤1.3,基于脆弱性内因的类型,结合数据控制流图得到脆弱性特征;
步骤1.4,基于脆弱性内因的类型和各类型的特征,定义各脆弱性类型对应的脆弱性遍历规则和判定规则。
3.根据权利要求1所述的一种基于化学抽象机的脆弱性模型构建方法,其特征在于,所述步骤2的具体过程如下:
步骤2.1,构建脆弱性属性的一级类型信息,包括脆弱性种类VC、用户群体UG、软件类型ST、作用范围CS、触发条件TC;
步骤2.2,构建脆弱性属性的二级成因特征信息,包括脆弱性名称VN、编号VNO、形成原因MR、主要特征MF、测试代码VT、解决方案RS、发现日期FD;
步骤2.3,基于脆弱性属性的一级类型信息和二级成因特征信息,构建脆弱性属性。
4.根据权利要求1所述的一种基于化学抽象机的脆弱性模型构建方法,其特征在于,所述步骤3的具体过程如下:
步骤3.1,定义脆弱性分子语法集MS,包括数据元素DE、处理元素PE和连接元素CE;
步骤3.2,定义脆弱性初始状态V0和终止状态Vf
步骤3.3,定义脆弱性分子集的反应规则R,R用来表示一个状态至另一个状态的演化,即V→V'。
5.根据权利要求1所述的一种基于化学抽象机的脆弱性模型构建方法,其特征在于,所述步骤4的具体过程如下:
步骤4.1,定义脆弱性内因的化学抽象机表示,并结合案例验证其有效性;
步骤4.2,定义脆弱性外因的化学抽象机表示,并结合案例验证其有效性;
步骤4.3,基于步骤4.1和步骤4.2,构建基于内因和外因的化学抽象机脆弱性模型;
步骤4.4,基于步骤4.3构建的脆弱性模型,实现了一个脆弱性模型分析原型系统CHAM-VMAS。
6.根据权利要求2所述的一种基于化学抽象机的脆弱性模型构建方法,其特征在于,
步骤1.2中,脆弱性内因主要有以下10个类型:数据校验不当DO,空指针引用不当NP,返回值操作不当RV,数字操作不当NO,类与方法操作不当CM,多线程处理不当MT,IO操作不当IO,序列化操作不当SO,权限控制不当RC,资源释放使用不当FU。
7.根据权利要求2所述的一种基于化学抽象机的脆弱性模型构建方法,其特征在于,步骤1.3的脆弱性内因类型为以下四类:
1)数据校验不当DO
针对给定源代码生成的数据控制流图FG,通过图的遍历操作(X(T)→X(T’))分析其对应的FG得到节点集合T,再通过过滤遍历FRTr(T)识别是否存在节点接受了未验证或未受信的数据,且符合这一规则,如果符合对应规则则会导致安全问题;
2)空指针引用不当NP
针对给定源代码生成的数据控制流图FG,通过图的遍历操作(X(T)→X(T’))分析其对应的FG得到节点集合T,再通过过滤遍历FRTr(T)识别是否存在节点中有引用指向空地址单元的指针变量,即是否存在节点符合Reference(Np)规则;如果符合对应规则,则会产生空指针引用故障,最终会导致软件系统崩溃;
3)多线程处理不当MT
针对给定源代码生成的数据控制流图FG,通过图的遍历操作(X(T)→X(T’))分析其对应的FG得到节点集合T,再使用Forward遍历向前遍历,判断是否存在一个线程负责改变某变量的值,而其他线程负责同时读取变量内容,即是否存在某个节点符合OneWriteMultiRead规则;如果符合该规则,会导致程序错误;
4)资源释放使用不当FU
针对给定源代码生成的数据控制流图FG,通过图的遍历操作(X(T)→X(T’))分析其对应的FG得到节点集合T,再通过过滤遍历FRTr(T)识别是否存在节点释放资源之后,又再次使用该资源,即是否符合UseAfterFree规则;如果符合该规则,会导致程序错误。
8.根据权利要求5所述的一种基于化学抽象机的脆弱性模型构建方法,其特征在于,步骤4.4具体过程为:1)收集源程序;2)根据源程序构建对应的CHAM脆弱性模型;3)对CHAM脆弱性模型的输出结果与脆弱性的成因和特征进行对比,分析程序是否存在漏洞及漏洞的数量。
CN201710629219.1A 2017-07-28 2017-07-28 一种基于化学抽象机的脆弱性模型构建方法 Active CN107392029B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710629219.1A CN107392029B (zh) 2017-07-28 2017-07-28 一种基于化学抽象机的脆弱性模型构建方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710629219.1A CN107392029B (zh) 2017-07-28 2017-07-28 一种基于化学抽象机的脆弱性模型构建方法

Publications (2)

Publication Number Publication Date
CN107392029A true CN107392029A (zh) 2017-11-24
CN107392029B CN107392029B (zh) 2020-07-07

Family

ID=60342779

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710629219.1A Active CN107392029B (zh) 2017-07-28 2017-07-28 一种基于化学抽象机的脆弱性模型构建方法

Country Status (1)

Country Link
CN (1) CN107392029B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109101820A (zh) * 2018-08-16 2018-12-28 北京理工大学 一种基于执行流图的Web应用安全漏洞预测方法
CN109343839A (zh) * 2018-09-30 2019-02-15 武汉斗鱼网络科技有限公司 数据业务配置方法、存储介质、电子设备及系统

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101388055A (zh) * 2008-10-22 2009-03-18 南京大学 一种用于漏洞模型检测的程序操作特征提取方法
CN101814053A (zh) * 2010-03-29 2010-08-25 中国人民解放军信息工程大学 一种基于功能模型的二进制代码漏洞发现方法
CN102298681A (zh) * 2011-06-22 2011-12-28 西北大学 一种基于数据流切片的软件识别方法
CN102693393A (zh) * 2012-05-21 2012-09-26 上海电力学院 一种基于行为特征自动机模型的软件漏洞检测方法
CN102929614A (zh) * 2012-10-16 2013-02-13 南京大学 一种用于漏洞检测的可调对象程序特征提取方法
CN104508672A (zh) * 2012-08-01 2015-04-08 三菱电机株式会社 程序执行装置以及程序分析装置
CN106529283A (zh) * 2016-09-30 2017-03-22 中国人民解放军信息工程大学 一种面向软件定义网络的控制器安全性定量分析方法
US20170104779A1 (en) * 2015-10-08 2017-04-13 Bank Of America Corporation Vulnerability exposing application characteristic variation identification engine

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101388055A (zh) * 2008-10-22 2009-03-18 南京大学 一种用于漏洞模型检测的程序操作特征提取方法
CN101814053A (zh) * 2010-03-29 2010-08-25 中国人民解放军信息工程大学 一种基于功能模型的二进制代码漏洞发现方法
CN102298681A (zh) * 2011-06-22 2011-12-28 西北大学 一种基于数据流切片的软件识别方法
CN102693393A (zh) * 2012-05-21 2012-09-26 上海电力学院 一种基于行为特征自动机模型的软件漏洞检测方法
CN104508672A (zh) * 2012-08-01 2015-04-08 三菱电机株式会社 程序执行装置以及程序分析装置
CN102929614A (zh) * 2012-10-16 2013-02-13 南京大学 一种用于漏洞检测的可调对象程序特征提取方法
US20170104779A1 (en) * 2015-10-08 2017-04-13 Bank Of America Corporation Vulnerability exposing application characteristic variation identification engine
CN106529283A (zh) * 2016-09-30 2017-03-22 中国人民解放军信息工程大学 一种面向软件定义网络的控制器安全性定量分析方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
唐卓椿: ""软件脆弱性模型检查与测试技术研究"", 《万方数据学位论文库》 *
李新明等: ""软件脆弱性影响分析模型"", 《万方数据期刊论文库》 *
李艺等: ""软件脆弱性危险程度量化评估模型研究 "", 《万方数据期刊论文库》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109101820A (zh) * 2018-08-16 2018-12-28 北京理工大学 一种基于执行流图的Web应用安全漏洞预测方法
CN109101820B (zh) * 2018-08-16 2021-09-07 北京理工大学 一种基于执行流图的Web应用安全漏洞预测方法
CN109343839A (zh) * 2018-09-30 2019-02-15 武汉斗鱼网络科技有限公司 数据业务配置方法、存储介质、电子设备及系统

Also Published As

Publication number Publication date
CN107392029B (zh) 2020-07-07

Similar Documents

Publication Publication Date Title
CN109426722B (zh) Sql注入缺陷检测方法、系统、设备及存储介质
Gao et al. Checking smart contracts with structural code embedding
Livshits et al. Approximate denial constraints
CN117951701A (zh) 用于确定软件代码中的缺陷和漏洞的方法
CN101571828A (zh) 基于约束分析和模型检验的代码安全漏洞检测方法
Mora et al. Client-specific equivalence checking
Kang et al. A secure-coding and vulnerability check system based on smart-fuzzing and exploit
CN109101820B (zh) 一种基于执行流图的Web应用安全漏洞预测方法
Kuhlmann et al. Strengthening SAT-based validation of UML/OCL models by representing collections as relations
Kuhn et al. Input space coverage matters
Vanciu et al. Hidden dependencies in software systems
Nam et al. A bug finder refined by a large set of open-source projects
CN114036531A (zh) 一种基于多尺度代码度量的软件安全漏洞检测方法
CN107392029A (zh) 一种基于化学抽象机的脆弱性模型构建方法
CN104794240A (zh) 面向地理空间数据库属性值约束检查的表达式解析方法
Suri et al. Software reuse metrics: measuring component independence and its applicability in software reuse
Zhang et al. Flowchart‐Based Cross‐Language Source Code Similarity Detection
CN113761536B (zh) 一种基于业务逻辑的安全检测方法及系统
Sinha et al. HOTTest: A model-based test design technique for enhanced testing of domain-specific applications
Sherman et al. Accurate string constraints solution counting with weighted automata
Liu et al. Automated verification and test case generation for input validation
Gao et al. Automatic buffer overflow warning validation
Yang et al. A method-level defect prediction approach based on structural features of method-calling network
CN114153447A (zh) 一种自动化生成ai训练代码的方法
Ochodek et al. Mining Task-Specific Lines of Code Counters

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant