CN107516040A - 一种基于数据控制流图的脆弱性特征分析和获取方法 - Google Patents
一种基于数据控制流图的脆弱性特征分析和获取方法 Download PDFInfo
- Publication number
- CN107516040A CN107516040A CN201710609513.6A CN201710609513A CN107516040A CN 107516040 A CN107516040 A CN 107516040A CN 201710609513 A CN201710609513 A CN 201710609513A CN 107516040 A CN107516040 A CN 107516040A
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- dcfg
- control flow
- code segment
- variable
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 60
- 238000004458 analytical method Methods 0.000 title claims abstract description 38
- 238000009795 derivation Methods 0.000 claims abstract description 32
- 230000008569 process Effects 0.000 claims description 18
- 238000011160 research Methods 0.000 claims description 16
- 238000010586 diagram Methods 0.000 claims description 15
- 238000012795 verification Methods 0.000 claims description 10
- 238000012512 characterization method Methods 0.000 claims 6
- 238000012038 vulnerability analysis Methods 0.000 abstract description 9
- 238000005516 engineering process Methods 0.000 abstract description 7
- 238000010276 construction Methods 0.000 abstract description 3
- 239000012634 fragment Substances 0.000 description 5
- 238000002347 injection Methods 0.000 description 5
- 239000007924 injection Substances 0.000 description 5
- 238000012545 processing Methods 0.000 description 4
- 238000002372 labelling Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000001364 causal effect Effects 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于数据控制流图的脆弱性特征分析和获取方法,根据已有的程序控制流图和数据流图两种代码图示形式,构建程序数据控制流图(DCFG);根据程序数据控制流图,将目标代码段转换成对应的DCFG;3、根据代码段所对应的DCFG和特定的基于DCFG的遍历规则,定义基于DCFG的脆弱性特征分析方法及推导规则;结合定义的脆弱性遍历规则及推导规则,对给定代码段中的典型脆弱性进行识别。本发明还进行了典型脆弱性的实例分析验证,验证结果证明了本文提出的基于DCFG的脆弱性特征分析方法的正确性和可行性。最终,通过本发明提出的基于数据控制流图的脆弱性分析和获取方法及技术,可以准确地识别出软件系统中存在的脆弱性,以提高软件系统的安全性。
Description
技术领域
本发明属于软件系统安全性分析相关的软件脆弱性研究领域,涉及一套基于数据控制流图的代码静态语义分析技术和一套基于数据控制流图的脆弱性特征分析方法及脆弱性推导与识别规则。
背景技术
随着全球信息化的迅猛发展,计算机软件已成为世界经济、科技、军事和社会发展的重要引擎。在当前日益严峻的信息安全大环境下,信息窃取、资源被控、系统崩溃等各类信息安全事件层出不穷,给国民经济、国家安全、社会稳定造成了严重威胁。究其根源,所有这些信息安全事件都存在一个共同点,即软件自身存在可被利用的脆弱性(漏洞)。因此,软件脆弱性成因及特征分析日益成为信息安全领域研究的焦点。
对于脆弱性的早期研究始于20世纪70年代,主要仅限于漏洞的成因分析对脆弱性进行的分类,具有一定的局限性。研究者在1976年和1978年分别提出了两种分析漏洞的成因方法,即安全操作系统分析法和保护分析分类法。1995年,普渡大学Aslam针对UNIX系统提出了基于产生原因的错误分类法,将UNIX的漏洞划分为设计错误、环境错误、编码错误和配置错误四大类。随着研究进一步深入,研究者开始从宏观上去研究分类,并且开始在漏洞的成因分析中引入漏洞的分类、分级、影响等概念。Cohen提出了面向攻击方式的漏洞分析法,1998年Krsul等在Aslam的基础上提出了面向影响的漏洞分析方法。
现阶段的研究对漏洞成因分析越来越综合性,学者们提出了基于多种因素的漏洞模型体系。欧美发达国家对安全漏洞库的研究在漏洞成因分类、模型体系构建等领域形成了行业内较有影响力的标准。例如,国外一些安全信息提供机构已经形成了一批在国际上颇具影响力的漏洞库,如CVE(Common Vulnerabilities&Exposures)漏洞库。美国国家漏洞库(National Vulnerability Database,NVD)对漏洞进行了统一命名、分类和描述,严格兼容CVE,构建了全方位、多渠道的漏洞发布机制和标准化的漏洞修复模式。在CVE基础上,NVD将漏洞分为代码注入、缓冲区错误、跨站脚本、权限许可和访问控制、配置、路径遍历、数字错误、SQL注入、输入验证、授权问题、跨站请求伪造、资源管理错误、信任管理、加密问题、信息泄露、竞争条件、后置链接、格式化字符串漏洞和操作系统命令注入等类型。
国内安全漏洞库相关领域的研究最早开始于科研机构,但工作重点在于通过整合漏洞属性设计出合理完善的漏洞库结构,因此这类漏洞库早期并没有投入实际应用。近年来,由于软件漏洞被恶意利用而引发的重大信息安全事件越来越多。因此,我们对软件脆弱性成因和特征进行系统化、理论化的研究分析和相应的脆弱性模型的构建研究显得尤为重要。
发明内容
为了有效的对待测代码段进行脆弱性分析和检测,我们结合现有的程序控制流图与数据流图,构建了一种全新的代码图示表示形式——数据控制流图(DCFG),并结合基于DCFG的软件脆弱性代码静态语义分析技术,构建了一套基于DCFG的脆弱性推导规则。同时,利用该分析技术和推导规则对典型的软件脆弱性代码段实例进行识别。本发明的技术方案包括如下步骤:
步骤1:根据已有的程序控制流图和数据流图两种代码图示形式,构建程序数据控制流图(DCFG);
步骤2:根据程序数据控制流图,将目标代码段转换成对应的DCFG;
步骤3:根据代码段所对应的DCFG和特定的基于DCFG的遍历规则,定义基于DCFG的脆弱性特征分析方法及推导规则;
步骤4:结合步骤3中的定义的脆弱性遍历规则及推导规则,对给定代码段中的典型脆弱性进行识别。
上述步骤1的具体步骤如下:
步骤1.1,获取程序代码段对应控制流图(CFG)中的控制流信息以及边标签信息;
步骤1.2,获取程序代码段对应数据流图(DFG)中的数据流信息以及节点属性信息,并将属性信息表示成变量的定义-使用对。其中,属性键为{def,use,free}中的元素,属性值为具体的变量名称;
步骤1.3,结合步骤1.1和步骤1.2中的得出的程序代码段对应的控制流信息与数据流信息,将两者结合后给出一个带有边标签、并且节点包含属性键值对的数据控制流图DCFG。
上述步骤2的具体步骤如下:
步骤2.1,分析给定的才程序代码片段,并给程序片段中的各行代码编号(同为新变量定义的代码行可以合并,合并的全部代码行共用一个标号);
步骤2.2,先画出DCFG图中的起始节点START和结束节点END,再根据步骤2.1中得到的各代码行对应的节点编号,明确DCFG中包含的全部节点和边;
步骤2.3,分析每条边的边标签值和每个节点的属性值,绘制程序代码段对应的DCFG。由此,通过DCFG可以看出该程序代码段中包含的控制流信息和数据信息。
上述步骤3的具体步骤如下:
步骤3.1,分析基于DCFG的遍历规则;
步骤3.2,分析“变量定义未使用”“变量使用未定义”“释放后重用”和“缓冲区溢出——数组越界访问”等软件脆弱性的成因及特征信息;
步骤3.3,根据步骤3.2中得出的脆弱性成因及特征信息,结合基于DCFG的图遍历过程及遍历所得,为上述种类的脆弱性构建相应的脆弱性推导规则。
上述步骤4的具体步骤如下:
步骤4.1,利用步骤2.1对脆弱性代码进行编号,识别并标注关键语句;
步骤4.2,将给定代码段转换为对应的DCFG;
步骤4.3,根据步骤3中定义的基于DCFG脆弱性推导规则,结合DCFG上的遍历操作及遍历结果信息,识别出给定的代码片段中包含的脆弱性。
进一步,本发明还对典型类型的脆弱性进行了脆弱性成因及类型的实例验证,验证结果证明了我们构建的基于DCFG的脆弱性分析和获取方法的正确性。
进一步,所述步骤3.2的具体过程如下:
1)分析“变量定义未使用”脆弱性成因及特征,该脆弱性的成因在于变量在上文中有定义但未进行过使用,即DCFG中某节点出定义的变量variable找不到对应的use;
2)分析“使用未定义变量”脆弱性成因及特征,该脆弱性的成因在于使用了在上文代码段中未进行定义或声明的变量;
3)分析“释放后重用”脆弱性成因及特征,该脆弱性的成因在于在某一变量被删除或资源被释放后,程序中又一次使用了该变量;
4)分析“缓冲区溢出——数组访问越界”脆弱性成因及特征,该脆弱性的成因在于当前访问的数组位置不在数组下标限定的数组长度范围之内
本发明的有益效果:
1、本发明结合现有的控制流图与程序数据流图的概念,构建了一种全新的代码图示表示形式——数据控制流图(Data Control Flow Graph,DCFG)。
2、本发明在数据控制流图DCFG的基础上构建了一种基于数据控制流图的脆弱性特征分析和获取方法以及基于DCFG的相应的脆弱性推导规则。
3、本发明采用了所提出的基于数据控制流图的脆弱性分析和获取方法对待测代码段中的脆弱性进行识别。
4、本发明进行了典型脆弱性的实例分析验证,验证结果证明了本专利提出的基于数据控制流图的脆弱性分析和获取方法的正确性。最终,本专利致力于确保用户通过提出的这套软件脆弱性成因及特征分析技术,可以准确的检测并定位到软件系统中存在的脆弱性,提高软件的安全性。
附图说明
图1是基于数据控制流图的脆弱性分析和获取方法作用过程图。
图2是构建DCFG过程图。
图3是将代码段转换为其对应DCFG的过程图。
图4是构建基于DCFG的脆弱性特征分析方法和判定规则过程图。
图5是待测代码段中脆弱性识别过程图。
图6是代码段1图。
图7是图6中代码段1对应的DCFG。
图8是代码段2图。
图9是图8中代码段2对应的DCFG。
图10是代码段3图。
图11是图10中代码段3对应的DCFG。
图12是代码段4图。
图13是图12中代码段4对应的DCFG。
图14是CWE中9种基本漏洞的分析结果图。
具体实施方式
下面结合附图和实施案例对本发明作进一步说明,应指出的是,所描述的实施案例仅旨在便于对本发明的理解,而对其不起任何限定作用。
本发明以构建一种基于数据控制流图的脆弱性特征分析和获取方法为目的,提供一种基于DCFG的脆弱性特征分析研究方法,有效地分析和识别出了待测脆弱性代码片段中包含的脆弱性,并能够确定特定代码段包含的脆弱性类别,同时提供了较为完善的基于DCFG的四种典型脆弱性推导规则,并且对这四类典型脆弱性进行的实例分析验证,证明了本发明提出方法的可行性和有效性。
首先,定义本发明所涉及到的几个概念定义和规则如下。
定义1改进的程序控制流图(CFG):Gc=(Vc,Ec,λc,μc),其中Vc代表控制流图上的节点,Ec代表控制流图上的有向边,λc是控制流图中有向边的标签函数,它从标签值集合Σc中选取相应的标签来标记每一条边,且Σc={true,false,ε}。μc是图中节点属性的赋值函数。由于控制流图CFG中的节点本身不包含属性意义,故μc的取值集合为空,即可以将μc元组表示成空集。故控制流图CFG的定义可进一步表示成
定义2改进的程序数据流图(DFG):Gd=(Vd,Ed,λd,μd),其中Vd代表数据流图上的节点,Ed代表数据流图上的有向边,λd是数据流图中有向边的标签函数,它从标签值集合Σd中选取相应的标签来标记DFG中的每一条边,且Σd={true,false,ε}。μd是图中节点属性赋值函数。数据流程图DFG中的节点本身都包含各自的属性,体现为在该节点处程序中变量的“定义def”和“使用use”关系。故μd代表的节点属性的取值集合为{def(i),use(i),{def(i),use(j)}},其中i,j代表节点编号。
定义3数据控制流图(DCFG):Gcd=(Vcd,Ecd,λcd,μcd),其中Vcd代表数据控制流图上的节点(包括DCFG的起始节点START与结束节点END),Ecd代表数据控制流图的有向边,λcd是数据控制流图中的有向边标签函数,它从标签值集合Σcd中选取相应的标签来标记DCFG中的每一条边,且Σcd={true,false,ε},μcd是图中节点属性赋值函数。数据流程图DCFG中的节点本身都包含各自的属性,体现为在该节点处程序中有变量相关的操作,如“定义def”、“使用use”或“释放free”等。故μcd代表的节点属性的取值集合为{def(i),use(i),free(i),{def(i),use(j)}},其中i,j代表节点编号。结合DCFG的特点可知,DCFG中的节点应该与CFG中的节点完全一致,即Vcd=Vc。同时,DCFG中节点的属性描述完全来自于DFG中对各个节点属性的描述。因而对于DCFG则有:
(1)Vcd=Vc∪{START,END};
(2)Ecd=Ec∪Ed;
(3)λcd=λc∪λd并且
(4)μcd=μd
结合(1)(2)(3)(4),则定义3描述的DCFG的定义可以进一步表述成:Gcd=(Vc,Ecd,λcd,μd)。
定义4改进后的属性图:属性图G=(V,E,λ,μ)是一个有向的,标记边缘的归属多重图,其中V是节点集,(V×V)是有向边集合,λ:E→Σ是从字母表Σ到每个边缘分配标签的边缘标记函数。图中各边和各节点属性可以通过函数μ进行分配:(V∪E)×K→S其中K代表属性键,S代表属性值集合。改进后的属性图中的节点都具有属性键—值对,改进之处在于本专利中的属性图上节点的属性键K的取值范围为{def,use,free},属性值集合S的取值范围为{variable|variable为代码片段中的变量}。属性键—值对被分配给每个变量操作节点。
定义5图的遍历:图的遍历是根据改进后的属性图G将一组节点映射到另一组节点的函数T:P(V)→P(V),其中P是V的幂集。
定义6函数组合操作:函数组合可以连接图的两种遍历T0和T1,并将遍历结果表示为
定义7过滤遍历:该遍历返回集合X中匹配布尔判断式p(v)的所有节点。我们将过滤遍历表达式表示成:FILTERp(X)={v∈X:p(v)}。
定义8属性图OUT遍历:OUT遍历指沿着属性图的边缘深度优先向下遍历。形如:表示OUT遍历返回节点集合X中所有的可达节点。OUT1返回所有通过带标签l的边可达的节点,并且返回所有通过带标签l和属性k:s的边可达的节点集合。
定义9属性图IN遍历:IN遍历用于表示在属性图中向前遍历。形如:
其中,IN遍历返回返回所有通过带标签l的边可达的节点,并且返回所有通过带标签l和属性k:s的边可达的节点集合。
定义10遍历遍历表示从节点a到节点b的一个深度优先遍历。
定义11Extract操作:获取数组长度及获取对应的数组下标的操作。
定义12COMPARE(0,a,b)函数:用于比较0,a,b的大小。当0≤a<b时,方法返回值为0;否则,方法返回值为1。
如图1所示,本发明关于基于数据控制流图的脆弱性分析和获取方法,包括:
步骤1,根据已有的程序控制流图和数据流图两种代码图示形式,构建程序数据控制流图(DCFG)。
上述步骤1中,参照图2可知由某代码段对应的CFG和DFG,构建DCFG的定义的过程如下。
步骤1.1,分析代码段对应控制流图中的组成元素,获取CFG中的节点信息、边标签信息以及控制流信息。若代码段中包含if条件语句,则该语句节点处的程序段中存在true和false两个分支,体现了程序段中的控制流信息。其中,边标签集合为{true,false,ε}。
步骤1.2,分析代码段对应数据流图中的组成元素,获取DFG中的数据流信息以及节点属性信息,并将属性信息表示成变量的定义-使用对。节点属性键为{def,use,free}中的元素,节点属性值为具体的变量名称,且DCF仅包含代码段中与变量操作相关的语句节点。
步骤1.3,结合步骤1.1和步骤1.2中的得出的代码段对应的控制流信息与数据流信息,将两者结合后构建一个带有边标签、并且节点包含属性键值对的数据控制流图DCFG。DCFG中的节点包含代码段对应的控制流图中全部的节点,且DCFG中的节点还具备DFG中节点的属性值,DCFG中的边标签是CFG与DFG中边的并集。最终构建出代码段对应的DCFG。
步骤2:根据程序数据控制流图,将目标代码段转换成对应的DCFG。
上述步骤2中,参照图3,目标代码段转换成对应的DCFG的步骤如下:
步骤2.1,分析给定的目标代码片段,并给程序片段中的各行代码编号(同为新变量定义的代码行可以合并,合并的全部代码行共用一个标号)。
步骤2.2,先确定DCFG图中的起始节点START和结束节点END,再根据步骤2.1中得到的各代码行对应的节点编号,明确DCFG中包含的全部节点和边。
步骤2.3,分析每条边的边标签值和每个节点的属性值,绘制程序代码段对应的DCFG。由此,通过DCFG可以看出该程序代码段中的控制流信息和数据流信息。
步骤3,根据代码段所对应的DCFG和特定的基于DCFG的遍历规则,定义基于DCFG的脆弱性特征分析方法及推导规则。
上述步骤3中,参照图4,根据代码段所对应的DCFG和特定的DCFG遍历规则,定义基于DCFG的脆弱性特征分析方法和判定规则步骤如下:
步骤3.1,分析基于DCFG的遍历规则,主要为属性图的遍历规则。属性图OUT遍历指沿着属性图的边缘深度优先向下遍历。属性图IN遍历用于表示在属性图中向前遍历。
步骤3.2,本发明中限定四类脆弱性的分类,对各种脆弱性的成因及特征进行分析。
(1)分析“变量定义未使用”脆弱性成因及特征。该脆弱性的成因在于变量在上文中有定义但未进行过使用,即DCFG中某节点出定义的变量variable找不到对应的use。
(2)分析“使用未定义变量”脆弱性成因及特征。该脆弱性的成因在于使用了在上文代码段中未进行定义或声明的变量。
(3)分析“释放后重用”脆弱性成因及特征。该脆弱性的成因在于在某一变量被删除或资源被释放后,程序中又一次使用了该变量。
(4)分析“缓冲区溢出——数组访问越界”脆弱性成因及特征。该脆弱性的成因在于当前访问的数组位置不在数组下标限定的数组长度范围之内。
步骤3.3,根据步骤3.2中得出的各种脆弱性成因及特征信息,结合基于DCFG的图遍历规则,分别为上述四类脆弱性构建相应的基于DCFG的脆弱性推导规则如下:
规则1脆弱性“变量定义未使用”推导规则如下:
①
②
其中,公式①中的X是代码段中变量的定义节点。首先,利用公式①对DCFG进行向下遍历操作,该OUT遍历返回DCFG中满足条件“通过带标签为l的边可达的、且带有属性use:variable”的节点集合{v};再利用公式②计算并返回该节点集{v}中的元素个数。若②返回的值为0个,则推导得出该代码段中存在“变量定义未使用”脆弱性;若②返回的值为1或大于1个,则说明该代码段中不存在“变量定义未使用”脆弱性。
规则2脆弱性“使用未定义变量”推导规则如下:
①
②
公式①中的X是代码段中变量的使用节点。首先,利用公式①对DCFG进行向上遍历操作,该IN遍历返回DCFG中满足条件“经带l标签的边可达的、且带有属性def:variable”的节点集合{u};再利用公式②计算并返回节点集{u}中的元素个数。若②返回的值为0个,则说明该代码段中有被使用的变量在前文中未定义,即推导得出该代码段中存在“使用未定义变量”脆弱性;若②返回的值为1则说明该代码段中不存在“使用未定义变量”脆弱性;若②返回的值大于1个,则说明该代码段中存在“变量多次定义”脆弱性。
规则3脆弱性“释放后重用”推导规则如下:针对“释放后重用”脆弱性,我们需要完善定义3中定义的DCFG。完善过程如下:在原DCFG的节点属性集合中添加节点的free属性,用来标记有资源释放操作的语句节点,节点的属性键k的取值集合为{def,use,free},属性值s的取值集合为{variable|variable为代码片段中的变量}。具体推导规则为:
其中,Vsrc代表变量i开始定义的节点,Vend代表该变量最后一次的use节点,Vdst代表释放变量的free节点。表达式中遍历表示从Vsrc到Vend的一次深度遍历,该遍历返回的遍历路径上的所有节点;过滤遍历FILTERp返回满足条件判定句p的遍历结果,即“p为真当且仅当遍历返回节点集合中包含Vdst节点”。若该式遍历返回的节点集中含有Vdst节点,则说明该代码段中包含“释放后重用”脆弱性。
规则4脆弱性“缓冲区溢出——数组越界访问”推导规则如下:
其中,用于遍历整个DCFG以提取满足条件“def(array)”的数组定义节点,再与Extractarray-length操作组合,得到该定义数组的长度,即同理,获取所有满足条件“use(array)”的数组使用节点,组合Extractarray_index操作获取当前访问该数组的下标,即若0≤i<L,则COMPARE()方法返回0,代码段中不存在脆弱性“数组越界访问”;若i<0或i>L,则COMPARE()方法返回1,此时推导得出代码段中包含“数组越界访问”脆弱性。
步骤4:结合步骤3中的定义的脆弱性遍历规则及推导规则,对给定代码段中的典型脆弱性进行识别。
上述步骤4中,参照图5,根据给定代码并结合步骤3中的遍历信息及定义的脆弱性推导规则,对典型脆弱性进行识别。
步骤4.1,利用步骤2.1对脆弱性代码进行编号,识别并标注关键语句。
步骤4.2,将给定代码段转换为对应的DCFG,代码段1~4如图6、图8、图10和图12所示,并且各代码段对应的DCFG分别如图7、图9、图11、图13所示。
步骤4.3,根据步骤3中定义的基于DCFG脆弱性推导规则,结合DCFG上的遍历操作及遍历结果信息,推导和判定给定的代码片段中包含的脆弱性。具体推导规则如下:
(1)结合步骤3.3中构建的规则1和代码段1对应的DCFG(图7),识别脆弱性“变量定义未使用”。
从该DCFG中可知,代码段中变量定义的节点为{v1,v5},其中定义的变量名称集合为{data,successCount,dbConnection,sqlStatement,result},根据规则1即:
①
②
可知,此处公式①中variable的取值范围为集合{data,successCount,dbConnection,sqlStatement,result}。详细的推导步骤如下:
i)当variable=data时,公式①的返回的节点集合为{v2,v5,v7,v8}。再利用公式②计算节点集中的元素个数,方法返回值为4(非零)。故推导得出该代码段中包含变量data的def(data)-use(data)对。
ii)当variable=successCount时,公式①的返回的节点集合为再利用公式②计算节点集中的元素个数,方法返回值为0。此时,可推导出变量successCount存在“变量定义未使用”的情况。
iii)当variable=dbConnection时,公式①的返回的节点集合为{v3,v4}。再利用公式②计算节点集中的元素个数,方法返回值为2(非零)。故推导得出该代码段中包含变量dbConnection的def(dbConnection)-use(dbConnection)对。
iv)当variable=sqlStatement时,公式①的返回的节点集合为{v4,v5}。再利用公式②计算节点集中的元素个数,方法返回值为2(非零)。故推导得出该代码段中包含变量sqlStatement的def(sqlStatement)-use(sqlStatement)对。
v)当variable=result时,公式①的返回的节点集合为{v6}。再利用公式②计算节点集中的元素个数,方法返回值为1(非零)。故推导得出该代码段中包含变量result的def(result)-use(result)对。
综上i)—v)可知,根据规则1可以识别出代码段1中存在变量successCount定义未使用的脆弱性。
(2)结合步骤3.3中构建的规则2和代码段2对应的DCFG(图9),识别脆弱性“使用未定义变量”。
结合DCFG的特点与基于DCFG的脆弱性推导规则,本发明将“使用未定义变量”脆弱性推导过程作如下描述:针对图中每个变量使用的节点,采用进行向上遍历,直到找到对应变量相应的定义节点并返回找到的节点集合;再进一步计算该返回的节点集合中元素个数,作进一步的判断。
考虑规则2中的公式①中variable的取值范围为{data,result,dbConnection,sqlStatement}。具体推导过程如下:
i)当variable=data时,公式①返回的节点集合为利用公式②计算集合中节点的个数,方法返回值为0。即说明利用规则2,推导出了该代码段中的变量data存在“使用未定义变量”的问题。
ii)当variable=result时,公式①返回的节点集合为{v4}。利用公式②计算集合中节点的个数,方法返回值为1,则说明变量result在使用前存在且仅存在一次定义,则代码段中有变量result的def(result)-use(result)对。
iii)当variable=dbConnection时,公式①返回的节点集合为{v1}。利用公式②计算集合中节点的个数,方法返回值为1,则说明变量dbConnection在使用前存在且仅存在一次定义,则代码段中有变量dbConnection的def(dbConnection)-use(dbConnection)对。
iv)当variable=sqlStatement时,公式①返回的节点集合为{v1}。利用公式②计算集合中节点的个数,方法返回值为1,则说明变量dbConnection在使用前存在且仅存在一次定义,则代码段中有变量sqlStatement的def(sqlStatement)-use(sqlStatement)对。
综上i)—iv)可知,根据规则2可以识别出代码段2中存在变量data“使用未定义变量”脆弱性。
(3)结合步骤3.3中构建的规则3和代码段3对应的DCFG(图11),识别脆弱性“释放后重用”。
根据规则3可知,在代码段3对应的DCFG中,Vsrc对应于变量data的初始定义节点v1,Vend对应于变量data最后一次使用节点v7,Vdst节点对应于图中的变量释放节点v6。故第一步执行遍历返回的节点集合为{v1,v2,v3,v4,v5,v6,v7};第二步,按照过滤条件“p:p为真当且仅当遍历返回的节点中包含Vdst节点”执行过滤遍历FILTERp,该变量返回的结果为{v6},即说明了变量data在v6处释放后,又在v7出重用了,这是不合理的操作。故通过利用规则3可以识别出代码段3中包含“释放后重用”脆弱性。
(4)结合步骤3.3中构建的规则4和代码段4对应的DCFG(图13),识别脆弱性“缓冲区溢出——数组访问越界”。
参照图13所示的DCFG并结合脆弱性推导规则4,将识别代码段4的过程描述如下。
步骤①:首先执行遍历提取DCFG上与数组定义节点和数组使用节点,则该遍历返回的结果为节点集合{v3};
步骤②:利用公式获取def(buffer[])节点中所定义的数组总长度L=10;
步骤③:利用公式获取use(buffer[])节点中当前访问的数组下标值i。遍历返回使用数组的节点集合{v5,v7},并根据程序的执行顺序,首先在v5处获取当前访问数组位置的下标志i=-1。
步骤④:通过公式:
将当前访问数组的下标i与数组总长度L进行比较。因为i=-1<0,故COMPARE()返回1,此时可以识别出代码段4中包含“数组越界访问”脆弱性。
本发明还基于提出的步骤对CWE中的9种基本漏洞做了实例分析验证。实例分析验证的结果参照图14所示。其中,纵坐标表示基本脆弱性,由上至下9种脆弱性分别为:路径遍历,竞争条件,缓冲区溢出,—不安全的数字处理,不安全的错误处理,空指针,加密问题,密钥管理,SQL注入。纵坐标代表脆弱性识别率。从图14中可以看出,本发明基于提出的步骤对典型脆弱性的实例了识别验证的结果如下:路径遍历的识别率约为16.5%、竞争条件的识别率约为14.5%、缓冲区溢出的识别率约为14.5%、不安全数字处理的识别率约为12.5%、不安全异常处理的识别率约为12.5%、空指针的识别率约为11%、加密问题的识别率约为7.2%、密钥管理的识别率约为5.5%、SQL注入的识别率约为5.5%。
本发明基于提出的步骤对典型脆弱性的实例了识别验证,识别结果证明了本文提出的基于数据控制流图的脆弱性分析和获取方法的可行性。最终,本项目致力于确保用户通过提出的这套软件脆弱性成因及特征分析技术,可以准确的检测并识别软件系统中存在的脆弱性,以提高软件的安全性。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示意性实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
Claims (7)
1.一种基于数据控制流图的脆弱性特征分析和获取方法,其特征在于,包括如下步骤:
步骤1:根据已有的程序控制流图和数据流图两种代码图示形式,构建程序数据控制流图DCFG;
步骤2:根据程序数据控制流图,将目标代码段转换成对应的DCFG;
步骤3:根据代码段所对应的DCFG和特定的基于DCFG的遍历规则,定义基于DCFG的脆弱性特征分析方法及推导规则;
步骤4:结合步骤3中的定义的脆弱性遍历规则及推导规则,对给定代码段中的典型脆弱性进行识别。
2.根据权利要求1所述的一种基于数据控制流图的脆弱性特征分析研究方法,其特征在于,所述步骤1的具体过程如下:
步骤1.1,获取程序代码段对应控制流图CFG中的控制流信息以及边标签信息;
步骤1.2,获取程序代码段对应数据流图DFG中的数据流信息以及节点属性信息,并将属性信息表示成变量的定义-使用对;其中,节点属性键为{def,use,free}中的元素,节点属性值为具体的变量名称;
步骤1.3,结合步骤1.1和步骤1.2中的得出的程序代码段对应的控制流信息与数据流信息,将两者结合后构建一个带有边标签、并且节点包含属性键值对的数据控制流图DCFG。
3.根据权利要求1所述的一种基于数据控制流图的脆弱性特征分析研究方法,其特征在于,所述步骤2的具体过程如下:
步骤2.1,分析给定的程序代码片段,并给程序片段中的各行代码编号,其中同为新变量定义的代码行可以合并,合并的全部代码行共用一个标号;
步骤2.2,先画出DCFG图中的起始节点START和结束节点END,再根据步骤2.1中得到的各代码行对应的节点编号,明确DCFG中包含的全部节点和边;
步骤2.3,分析每条边的边标签值和每个节点的属性值,绘制程序代码段对应的DCFG;由此,通过DCFG可以看出该程序代码段中的控制流信息和数据信息。
4.根据权利要求1所述的一种基于数据控制流图的脆弱性特征分析研究方法,其特征在于,所述步骤3的具体过程如下:
步骤3.1,分析基于DCFG的遍历规则;
步骤3.2,分析“变量定义未使用”“变量使用未定义”“释放后重用”和“缓冲区溢出——数组越界访问”四种软件脆弱性的成因及特征信息;
步骤3.3,根据步骤3.2中得出的脆弱性成因及特征信息,结合基于DCFG的图遍历过程及遍历结果,为上述种类的脆弱性构建相应的脆弱性推导规则。
5.根据权利要求1所述的一种基于数据控制流图的脆弱性特征分析研究方法,其特征在于,所述步骤4的具体过程如下:
步骤4.1:利用步骤2.1对脆弱性代码进行编号,识别并标注关键语句;
步骤4.2:将给定代码段转换为对应的DCFG;
步骤4.3:根据步骤3中定义的基于DCFG脆弱性推导规则,结合DCFG上的遍历操作及遍历结果信息,推导和识别给定的代码片段中包含的脆弱性。
6.根据权利要求4所述的一种基于数据控制流图的脆弱性特征分析研究方法,其特征在于,所述步骤3.2的具体过程如下:
1)分析“变量定义未使用”脆弱性成因及特征,该脆弱性的成因在于变量在上文中有定义但未进行过使用,即DCFG中某节点出定义的变量variable找不到对应的use;
2)分析“使用未定义变量”脆弱性成因及特征,该脆弱性的成因在于使用了在上文代码段中未进行定义或声明的变量;
3)分析“释放后重用”脆弱性成因及特征,该脆弱性的成因在于在某一变量被删除或资源被释放后,程序中又一次使用了该变量;
4)分析“缓冲区溢出——数组访问越界”脆弱性成因及特征,该脆弱性的成因在于当前访问的数组位置不在数组下标限定的数组长度范围之内。
7.根据权利要求1所述的一种基于数据控制流图的脆弱性特征分析研究方法,其特征在于,还对典型类型的脆弱性进行了脆弱性成因及类型的实例验证。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710609513.6A CN107516040A (zh) | 2017-07-25 | 2017-07-25 | 一种基于数据控制流图的脆弱性特征分析和获取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710609513.6A CN107516040A (zh) | 2017-07-25 | 2017-07-25 | 一种基于数据控制流图的脆弱性特征分析和获取方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107516040A true CN107516040A (zh) | 2017-12-26 |
Family
ID=60722584
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710609513.6A Pending CN107516040A (zh) | 2017-07-25 | 2017-07-25 | 一种基于数据控制流图的脆弱性特征分析和获取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107516040A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109101820A (zh) * | 2018-08-16 | 2018-12-28 | 北京理工大学 | 一种基于执行流图的Web应用安全漏洞预测方法 |
CN110321458A (zh) * | 2019-05-21 | 2019-10-11 | 国家电网有限公司 | 一种基于控制流图的数据流分析方法及装置 |
CN110598408A (zh) * | 2019-08-23 | 2019-12-20 | 华中科技大学 | 一种基于函数层编码的App克隆检测方法及系统 |
CN111062031A (zh) * | 2019-10-31 | 2020-04-24 | 国家电网有限公司 | 基于数据流分析的缓冲区溢出分析方法及装置 |
CN111158663A (zh) * | 2019-12-26 | 2020-05-15 | 深圳逻辑汇科技有限公司 | 用于处理程序代码中的变量的引用的方法和系统 |
CN112100633A (zh) * | 2020-09-14 | 2020-12-18 | 浙江大学 | 一种基于B方法的Android访问控制建模与安全性分析方法 |
CN112448954A (zh) * | 2020-11-25 | 2021-03-05 | 中国人民解放军陆军工程大学 | 面向分布式访问控制策略的配置弱点分析方法和系统 |
CN114741993A (zh) * | 2022-04-18 | 2022-07-12 | 山东浪潮科学研究院有限公司 | 一种基于脚本的数据流图生成方法及装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101017458A (zh) * | 2007-03-02 | 2007-08-15 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
CN101241532A (zh) * | 2008-02-15 | 2008-08-13 | 北京邮电大学 | 面向源代码的基于不等式组求解的缓冲区溢出检测方法 |
CN101482847A (zh) * | 2009-01-19 | 2009-07-15 | 北京邮电大学 | 一种基于安全漏洞缺陷模式的检测方法 |
CN101901161A (zh) * | 2010-07-21 | 2010-12-01 | 四川大学 | 一种面向能耗相关软/硬件划分的层次化控制数据流图建模方法 |
CN102087628A (zh) * | 2009-12-04 | 2011-06-08 | 北京临近空间飞行器系统工程研究所 | 一种基于软件功能分析的软件故障树生成方法 |
CN102411690A (zh) * | 2011-12-31 | 2012-04-11 | 中国信息安全测评中心 | 一种Android平台下应用软件的安全漏洞挖掘方法和装置 |
CN105608003A (zh) * | 2015-12-17 | 2016-05-25 | 西安电子科技大学 | 基于控制流分析和数据流分析的Java程序静态分析方法 |
-
2017
- 2017-07-25 CN CN201710609513.6A patent/CN107516040A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101017458A (zh) * | 2007-03-02 | 2007-08-15 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
CN101241532A (zh) * | 2008-02-15 | 2008-08-13 | 北京邮电大学 | 面向源代码的基于不等式组求解的缓冲区溢出检测方法 |
CN101482847A (zh) * | 2009-01-19 | 2009-07-15 | 北京邮电大学 | 一种基于安全漏洞缺陷模式的检测方法 |
CN102087628A (zh) * | 2009-12-04 | 2011-06-08 | 北京临近空间飞行器系统工程研究所 | 一种基于软件功能分析的软件故障树生成方法 |
CN101901161A (zh) * | 2010-07-21 | 2010-12-01 | 四川大学 | 一种面向能耗相关软/硬件划分的层次化控制数据流图建模方法 |
CN102411690A (zh) * | 2011-12-31 | 2012-04-11 | 中国信息安全测评中心 | 一种Android平台下应用软件的安全漏洞挖掘方法和装置 |
CN105608003A (zh) * | 2015-12-17 | 2016-05-25 | 西安电子科技大学 | 基于控制流分析和数据流分析的Java程序静态分析方法 |
Non-Patent Citations (4)
Title |
---|
李列锋: "《基于二进制可执行文件代码覆盖测试技术研究》", 《中国优秀硕士学位论文全文数据库(信息科技辑)》 * |
杨克: "《基于代码属性图的软件安全漏洞挖掘方法研究》", 《中国优秀硕士学位论文全文数据库(信息科技辑)》 * |
谢龙: "《JSP跨站脚本漏洞静态检测技术的研究与实现》", 《中国优秀硕士学位论文全文数据库(信息科技辑)》 * |
郭兵等: "《面向能耗相关软/硬件划分的层次化控制数据流图建模方法》", 《四川大学学报(工程科学版)》 * |
Cited By (12)
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应用安全漏洞预测方法 |
CN110321458A (zh) * | 2019-05-21 | 2019-10-11 | 国家电网有限公司 | 一种基于控制流图的数据流分析方法及装置 |
CN110321458B (zh) * | 2019-05-21 | 2021-10-15 | 国家电网有限公司 | 一种基于控制流图的数据流分析方法及装置 |
CN110598408A (zh) * | 2019-08-23 | 2019-12-20 | 华中科技大学 | 一种基于函数层编码的App克隆检测方法及系统 |
CN111062031A (zh) * | 2019-10-31 | 2020-04-24 | 国家电网有限公司 | 基于数据流分析的缓冲区溢出分析方法及装置 |
CN111158663A (zh) * | 2019-12-26 | 2020-05-15 | 深圳逻辑汇科技有限公司 | 用于处理程序代码中的变量的引用的方法和系统 |
CN111158663B (zh) * | 2019-12-26 | 2021-07-02 | 深圳逻辑汇科技有限公司 | 用于处理程序代码中的变量的引用的方法和系统 |
CN112100633A (zh) * | 2020-09-14 | 2020-12-18 | 浙江大学 | 一种基于B方法的Android访问控制建模与安全性分析方法 |
CN112448954A (zh) * | 2020-11-25 | 2021-03-05 | 中国人民解放军陆军工程大学 | 面向分布式访问控制策略的配置弱点分析方法和系统 |
CN112448954B (zh) * | 2020-11-25 | 2023-09-08 | 中国人民解放军陆军工程大学 | 面向分布式访问控制策略的配置弱点分析方法和系统 |
CN114741993A (zh) * | 2022-04-18 | 2022-07-12 | 山东浪潮科学研究院有限公司 | 一种基于脚本的数据流图生成方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107516040A (zh) | 一种基于数据控制流图的脆弱性特征分析和获取方法 | |
CN110245496B (zh) | 一种源代码漏洞检测方法及检测器和其训练方法及系统 | |
CN108446540B (zh) | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统 | |
US10936555B2 (en) | Automated query compliance analysis | |
CN109543410B (zh) | 一种基于语义映射关联的恶意代码检测方法 | |
CN104699611A (zh) | 一种基于开源软件缺陷代码修改模式的缺陷信息提取方法 | |
CN105550594A (zh) | 安卓应用文件的安全性检测方法 | |
CN109063421A (zh) | 一种开源许可证合规性分析与冲突性检测方法 | |
CN104766015B (zh) | 一种基于函数调用的缓冲区溢出漏洞动态检测方法 | |
CN106384050B (zh) | 一种基于最大频繁子图挖掘的动态污点分析方法 | |
CN114861194A (zh) | 一种基于bgru与cnn融合模型的多类型漏洞检测方法 | |
CN112733156A (zh) | 基于代码属性图的软件脆弱性智能检测方法、系统及介质 | |
CN109670306A (zh) | 基于人工智能的电力恶意代码检测方法、服务器及系统 | |
Zeng et al. | EtherGIS: a vulnerability detection framework for Ethereum smart contracts based on graph learning features | |
CN102193858B (zh) | 一种测试用例集生成方法 | |
CN103679034A (zh) | 一种基于本体的计算机病毒分析系统及其特征提取方法 | |
Sotgiu et al. | Explainability-based debugging of machine learning for vulnerability discovery | |
Zhang et al. | Flow Chart Generation‐Based Source Code Similarity Detection Using Process Mining | |
CN105487983A (zh) | 基于智能路径引导的敏感点逼近方法 | |
CN109784048B (zh) | 一种基于程序图的栈缓冲区溢出脆弱性检测方法 | |
Wu et al. | They know your weaknesses–do you?: Reintroducing common weakness enumeration | |
CN104885060B (zh) | 数据漏更新检查装置、数据漏更新检查方法 | |
CN111143432A (zh) | 一种事件处理结果的数据分析预警系统及方法 | |
Zhang et al. | Approach to Predict Software Vulnerability Based on Multiple-Level N-gram Feature Extraction and Heterogeneous Ensemble Learning | |
CN114996705A (zh) | 基于脆弱性类型和Bi-LSTM的跨软件脆弱性检测方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171226 |
|
RJ01 | Rejection of invention patent application after publication |