CN117349187A - 一种基于模型持久化的交互式漏洞分析方法和系统 - Google Patents
一种基于模型持久化的交互式漏洞分析方法和系统 Download PDFInfo
- Publication number
- CN117349187A CN117349187A CN202311648734.6A CN202311648734A CN117349187A CN 117349187 A CN117349187 A CN 117349187A CN 202311648734 A CN202311648734 A CN 202311648734A CN 117349187 A CN117349187 A CN 117349187A
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- graph
- database
- analysis
- model
- 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 75
- 230000002688 persistence Effects 0.000 title claims abstract description 35
- 238000012038 vulnerability analysis Methods 0.000 title claims abstract description 27
- 230000002452 interceptive effect Effects 0.000 title claims abstract description 25
- 238000004458 analytical method Methods 0.000 claims abstract description 57
- 238000005206 flow analysis Methods 0.000 claims description 15
- 238000001914 filtration Methods 0.000 claims description 10
- 230000002085 persistent effect Effects 0.000 claims description 8
- 238000010845 search algorithm Methods 0.000 claims description 3
- 230000003068 static effect Effects 0.000 abstract description 20
- 238000001514 detection method Methods 0.000 abstract description 19
- 238000005516 engineering process Methods 0.000 abstract description 10
- 230000002829 reductive effect Effects 0.000 abstract description 8
- 238000004806 packaging method and process Methods 0.000 abstract description 5
- 230000006870 function Effects 0.000 description 22
- 238000002513 implantation Methods 0.000 description 10
- 238000004364 calculation method Methods 0.000 description 6
- 230000007547 defect Effects 0.000 description 6
- 238000002347 injection Methods 0.000 description 5
- 239000007924 injection Substances 0.000 description 5
- 239000000243 solution Substances 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000012827 research and development Methods 0.000 description 2
- 241000475481 Nebula Species 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Computational Linguistics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及软件代码分析领域,公开了一种基于模型持久化的交互式漏洞分析方法和系统,包括:基于待分析软件的代码变更进行增量更新以确定值依赖图,基于值依赖图的变更确定更新增量,更新增量包括点和边,其中点的属性包括标识符、语句内容和语句类型,边为有向边,边的属性包括起点和终点的标识符,基于更新增量在漏洞数据库内进行检索,获得匹配的漏洞,漏洞数据库基于持久化的程序模型构建。本发明基于模型持久化技术,实现增量分析,提升了对于迭代中的项目进行多次分析的检测效率;再通过对静态分析能力的封装,将漏洞检测问题转化为持久化模型中的查询问题,从而实现可通过SQL语句检测漏洞,降低静态代码分析系统的使用难度。
Description
技术领域
本发明涉及软件代码分析领域,尤其涉及一种基于模型持久化的交互式漏洞分析方法和系统。
背景技术
随着软件系统的复杂性不断增加,软件漏洞检测逐渐成为了业内关注的焦点。静态代码分析技术是软件安全领域中一种重要的漏洞分析方法,它可以在不执行代码的情况下,通过分析源代码,发现潜在的漏洞和缺陷。当前的静态代码分析技术主要包括数据流分析、控制流分析等。这些技术在一定程度上提高了代码质量和安全性,但仍存在一定效率上的局限性。针对这一问题,本文提出了一种基于模型持久化的漏洞分析方法,以提高静态分析的效率。以下是一些与静态代码分析相关的技术:语法分析:这种技术是解析源代码并将其转换为语法树。它可以帮助开发人员找到源代码中的错误和缺陷,如语法错误和拼写错误等;控制流分析:这种技术是检查程序的控制流程,以确保程序按预期运行。它可以帮助开发人员找到程序中的逻辑错误和死代码;数据流分析:这种技术是检查程序的数据流,以查找潜在的缺陷,如未初始化变量和未定义变量等;也可以通过数据流追踪检测安全漏洞,如命令注入、跨站脚本攻击等;模式匹配:这种技术是使用预定义的模式来检查代码中的缺陷。这种技术可以检测到一些已知的漏洞和错误,如缓冲区溢出、格式字符串漏洞等;抽象解释:这种技术是使用抽象值来分析代码。它可以帮助开发人员找到程序中的潜在问题,如类型不匹配、函数调用错误等;符号执行:这种技术是以符号形式执行程序,而不是以实际的输入值执行程序。它可以检测到程序中的漏洞和安全问题,如命令注入、跨站脚本攻击等。这些技术可以单独使用,也可以组合使用,在实际应用中,通常会使用多种技术来对代码进行全面的静态分析。而在实际的应用场景中,经常出现检测效率低、可扩展性差、使用门槛高等问题。本文所提出的基于模型持久化的方法综合使用了语法分析、控制流分析、数据流分析的方法,并通过特有的处理方式,实现了一种高效的可交互式漏洞分析方法和系统。
但是在传统技术中还存在着一些问题,在静态代码分析工作中,当被测项目进行持续迭代,在不同时间点对项目进行检测,多次检测间重复的分析工作,将带来的计算资源和时间的浪费。现有的静态分析系统,普遍存在使用门槛高、扩展性差的问题。相关人员如果需要扩充系统功能,如在系统中增加对“命令注入”漏洞的检测,往往需要对静态分析技术有深入的了解,这将对普通的研发人员造成很大的学习负担。
发明内容
本发明的目的在于克服上述一种或多种现有的技术问题,提供一种基于模型持久化的交互式漏洞分析方法和系统。
为实现上述目的,本发明提供的一种基于模型持久化的交互式漏洞分析方法,包括:
基于待分析软件的代码变更进行增量更新以确定值依赖图;
基于值依赖图的变更确定更新增量,更新增量包括点和边,其中点的属性包括标识符、语句内容和语句类型,边为有向边,边的属性包括起点和终点的标识符;
基于更新增量在漏洞数据库内进行检索,获得匹配的漏洞;
漏洞数据库基于持久化的程序模型构建。
根据本发明的一个方面,漏洞数据库为关系型数据库或非关系型数据库。
根据本发明的一个方面,漏洞数据库的构建过程包括:
对软件项目进行词法分析和语法分析,确定和软件项目对应的抽象语法树;
对抽象语法树进行控制流分析,确定控制流图;
基于函数调用分析确定函数调用图;
根据控制流图和函数调用图,确定值依赖图。
根据本发明的一个方面,值依赖图被保存至图数据库中,其中值依赖图中的点被保存为图数据库的节点,值依赖图中的边被保存为图数据库的有向关系。
根据本发明的一个方面,值依赖图被保存至关系数据库中,在保存值依赖图时,保存点的标识符、语句内容和语句类型,以及有向边的起点和终点的标识符。
根据本发明的一个方面,基于更新增量在漏洞数据库内进行检索包括:
构建检索式,检索式包括入口点和触发点;
在漏洞数据库检索入口点和触发点间的可行路径;
基于可行路径的数量和可行路径中的节点类型确定漏洞的类型。
根据本发明的一个方面,在可行路径的数量为0时,对应的可行路径为安全路径,漏洞为可控漏洞;
在可行路径的数目不为0时,基于可行路径中是否包含过滤节点确定漏洞是否为可控漏洞。
根据本发明的一个方面,可行路径通过图搜索算法进行。
为实现上述目的,本发明提供一种基于模型持久化的交互式漏洞分析系统,包括:
更新增量获取单元,用于基于待分析软件的代码变更进行增量更新以确定值依赖图,基于值依赖图的变更确定更新增量,更新增量包括点和边,其中点的属性包括标识符、语句内容和语句类型,边为有向边,边的属性包括起点和终点的标识符;
漏洞匹配单元,用于基于更新增量在漏洞数据库内进行检索,获得匹配的漏洞;
漏洞数据库单元,用于基于持久化的程序模型构建漏洞数据库和响应漏洞匹配单元的查询。
基于此,本发明的有益效果在于:
(1)通过静态分析技术,对源代码进行建模,生成语法分析、控制流分析和数据流分析的相关模型,并将这些模型持久化到数据库中。基于模型持久化技术,实现增量分析,提升了对于迭代中的项目进行多次分析的检测效率;再通过对静态分析能力的封装,将漏洞检测问题转化为持久化模型中的查询问题,从而实现可通过SQL语句检测漏洞,降低静态代码分析系统的使用难度。
(2)本文提出一种静态分析能力的封装方法,研发人员可以通过数据库查询语言SQL进行缺陷和漏洞分析,从而大大降低静态分析系统的使用难度。
(3)本文采用了增量分析技术,即第二次检测只需检测相对于第一次检测,被测项目中的变更及受到变更影响的部分,从而节约大量的资源和时间。
附图说明
图1是本发明一种基于模型持久化的交互式漏洞分析方法的流程图;
图2是本发明一种基于模型持久化的交互式漏洞分析系统的流程图。
具体实施方式
现在将参照示例性实施例来论述本发明的内容,应当理解,论述的实施例仅是为了使得本领域普通技术人员能够更好地理解且因此实现本发明的内容,而不是暗示对本发明的范围的任何限制。
如本文中所使用的,术语“包括”及其变体要被解读为意味着“包括但不限于”的开放式术语。术语“基于”要被解读为“至少部分地基于”,术语“一个实施例”和“一种实施例”要被解读为“至少一个实施例”。
根据本发明的一个实施例,图1为本发明中的一种基于模型持久化的交互式漏洞分析方法的流程图,如图1所示,为实现上述目的,本发明提供的一种基于模型持久化的交互式漏洞分析方法,包括:
基于待分析软件的代码变更进行增量更新以确定值依赖图;
基于值依赖图的变更确定更新增量,更新增量包括点和边,其中点的属性包括标识符、语句内容和语句类型,边为有向边,边的属性包括起点和终点的标识符;
基于更新增量在漏洞数据库内进行检索,确认匹配的漏洞;
漏洞数据库基于持久化的程序模型构建。
被测软件的代码被修改时,需要对持久化的模型进行同步更新,为了减少因为重复分析而带来的计算代价。采用增量分析的方法,只需修改模型中被修改文件相关的点和边,从而降低运算量。具体来说,如果软件中的某个文件被修改,如果该文件是example.java文件或者影响了example.java文件,则会对example.java重新构建VDG,并更新neo4j中持久化的相关部分模型;如果未对example.java文件造成影响,则原有的相关模型不必重新构建。其中,增量更新的确认可以通过如版本管理系统实现,在确认了增加更新所涉及的源代码后,则相应更新涉及的依赖图也被确认。
应当了解,在文件首次被创建时,由于模型内缺少对应计算更新增量的基础,则整个文件均为对应的增量,进行VDG的构建时需要考虑整个文件作为更新增量的计算基准。
在确认完更新的计算基准后,进一步进行更新增量的确认,此过程包括确定和更新文件对应的抽象语法树;对抽象语法树进行控制流分析,确定控制流图;基于函数调用分析确定函数调用图;根据控制流图和函数调用图,确定值依赖图。
之后,基于更新增量更新漏洞数据库。此部分进一步可以根据是否影响现有数据库进行分类处理,在对应更新量涉及模型时,应当依据更新的文件进行漏洞数据库相关模型的重新构建;否则,不需要进行更新。
在确认更新增量后,则可以将对于漏洞的查找转换为数据库的查询,例如通过SQL或者数据库可以理解的形式,如Cypher等形式进行查询。
在本发明的一些实施例内,程序模型为值依赖图;而在一些实施例内,通过控制流图和函数调用图的组合来实现漏洞的查询。在下文中,依据值依赖图进行了技术方案的说明,而通过属性和关系的组合,通过控制流图和函数调用图也可以实现近似的功能。
根据本发明的一个实施例,漏洞数据库为关系型数据库或非关系型数据库。
在本发明的一些实施例内,使用了关系型数据,在关系型数据库中,可以在一个表内保存起始点、连接的边和终点,也可以在不同的表内保存点和边;
在本发明的一些实施例内,使用了非关系型数据库,如键值数据库、文档型数据库、列数据库或图形数据库来进行数据的存储。例如键值数据库中,通过保存属性可以实现边和点的保存,进而实现查找;而图形数据库通过直观的方式可以实现点和边的保存,并通过图算法进行查询。
另外,部分关系型数据已经实现了对于图的保存,例如SQLServer2017已经支持创建图形对象,可以通过如“CREATE TABLE Person (ID INTEGER PRIMARY KEY, NameVARCHAR(100), Age INT) AS NODE;CREATE TABLE friends (StartDate date) ASEDGE;”分别创建节点和边。
在多数的场景下,通过数据库原生的驱动程序实现对于数据的访问,或者通过中间的套件实现对于数据库的访问。例如通过jdbc可以实现对于非关系型的数据库的访问,并以SQL语句的形式进行数据的查询和更新,例如通过jdbc实现对于mongoDB的访问或者执行cypher查询。
根据本发明的一个实施例,漏洞数据库的构建过程包括:
对软件项目进行词法分析和语法分析,确定和软件项目对应的抽象语法树;
对抽象语法树进行控制流分析,确定控制流图;
基于函数调用分析确定函数调用图;
根据控制流图和函数调用图,确定值依赖图。
通过此方式可以实现对于软件项目模型的持久化保存,并用于后续漏洞的检索。
根据本发明的一个实施例,值依赖图被保存至图数据库中,其中值依赖图中的点被保存为图数据库的节点,值依赖图中的边被保存为图数据库的有向关系。
通过此方式可以实现值依赖图的图形化保存,并通过图搜索算法来进行关系的检索。
可以用于本发明的图数据库至少包括如Neo4j、HugeGraph、nebula等,或者支持图引擎的数据库。
根据本发明的一个实施例,值依赖图被保存至关系数据库中,在保存值依赖图时,保存点的标识符、语句内容和语句类型,以及有向边的起点和终点的标识符。
通过此方式可以将值依赖图保存到关系型数据库内,并通过SQL语句进行检索,在检索时,可以指定最大经历的路径点的个数,以避免过高的资源开销。
根据本发明的一个实施例,基于更新增量在漏洞数据库内进行检索包括:
构建检索式,检索式包括入口点和触发点;
在漏洞数据库检索入口点和触发点间的可行路径;
基于可行路径的数量和可行路径中的节点类型确定漏洞的类型。
通过此方式可以实现漏洞的检索,并将漏洞的查询转换为数据库的检索,使软件项目的安全漏洞分析更有效率。
在进行检索时,可以使用SQL语句进行,或者使用数据库支持的语法进行。
例如针对一个诸如点漏洞的识别,可以使用如下的SQL进行,
select * from vdg
where source_type='method invoke'
and source_regrex='.*getparameter'
and sink_type='method invoke'
and sink_regrex='.*exec.*'
and sanitizer_type='judge statement'
and sanitizer_regrex='.*ProcessBuilder.*';
source_type代表漏洞的植入点的结点类型,这里设置为“method invoke”;
source_method代表漏洞的植入点的正则表达式,这里设置为“.*getParameter.*”;
满足以上两个条件,则可判定结点为对应漏洞的植入点。
sink_type代表漏洞的触发点的结点类型,这里设置为“method invoke”; sink_method代表漏洞的触发点的正则表达式,这里设置为“.* executeQuery.*”;
满足以上两个条件,则可判定结点为对应的漏洞的触发点。
sanitizer_type代表漏洞的过滤点的结点类型,这里设置为“method invoke”;
sanitizer _method代表漏洞的过滤点的正则表达式,这里设置为“.*ProcessBuilder.*”。
上述的检索式可以进一步被预编译,以避免意外的注入。
在使用的数据库为图数据库时,还可以使用Cypher语句进行,如
Match((A:Node{source_type:'methodinvoke',source_regrex:'.*getparameter' });
-[B:Relation{sink_type:'method invoke' ,sink_regrex:'.*exec.*'}];
->(C:Node{sanitizer_type:'judgestatement',sanitizer_regrex:'ProcessBuilder.*'}));
return A,B,C;
以检索是否存在路径或者通过指定中间节点步长控制可达路径的长度。
根据本发明的一个实施例,在可行路径的数量为0时,对应的可行路径为安全路径,漏洞为可控漏洞;
在可行路径的数目不为0时,基于可行路径中是否包含过滤节点确定漏洞是否为可控漏洞。
根据本发明的一个实施例,可行路径通过图搜索算法进行。
本发明的技术方案包括如下步骤:获取被测软件中的源代码,作为后续分析对象;对源代码构建相关的程序分析模型;将第二步所得的程序模型进行持久化,存储到图数据库中;对于已经持久化的程序模型,当软件代码更新时,需对模型增量更新;使用封装好的SQL指令,在图数据库中检索,匹配漏洞;对发现的漏洞,汇总并报出。获取被测软件中的源代码,如C++需获取后缀名为“.cpp”、“.cxx”、“.h”的代码文件,Java需获取后缀名为“.java”的文件,这些文件将作为进行后续分析的对象。对源代码建立分析模型,首先通过词法分析、语法分析生成抽象语法树;然后在抽象语法树的基础上,通过控制流分析构建控制流图,通过函数调用分析生成函数调用图;最后在控制流图和函数调用图的基础上,生成值依赖图VDG(Value Dependence Graph)。将值依赖图持久化,具体方式为存储到图数据库neo4j中。当软件代码被修改时,持久化的模型也需要被修改,这里采用增量分析的方法,仅对被修改文件相关的部分模型进行更新,从而减少模型重复构建带来的计算重复。使用封装好的SQL指令,该指令中需描述漏洞的特征信息,在执SQL指令时,后段引擎会根据漏洞的特征信息在图数据库中检索,找到匹配的数据,即相关漏洞。将第四步所得结果,即漏洞信息,汇总到漏洞检测报告中。
根据本发明的一个实施例,例如在某个软件中,在example.java文件中存在Java代码片段:该段代码通过request.getParameter方法获取外部输入数据filename,拼接到字符串command中,并执行数据库查询操作。如果攻击者在filename参数中输入恶意字符串,比如输入" ; rm-rf /",那么最终构造的命令将变为cmd/c convert "file.txt"; rm-rf/output.pdf,攻击者就可以通过这种方式执行任意命令,删除系统中的所有文件。
自动化漏洞检测的具体实施过程包括,获取被测软件中的源代码,对于上面的例子,则获取对应的Java代码。对Java源代码进行建模,生成值依赖图VDG。在VDG模型中,点代表程序语句,边代码语句间的数值传递关系,对模型进行持久化,将VDG存储到图数据库neo4j中,整体的数据由点集合和边集合组成:点的数据包括唯一性id,语句内容、语句类型(如 method invoke代表函数调用,assign statement代表赋值语句)、所在文件名称;有向边的数据包括边起止点的结点id。当被测软件的代码被修改时,需要对持久化的模型进行同步更新,为了减少因为重复分析而带来的计算代价。采用增量分析的方法,只需修改模型中被修改文件相关的点和边,从而降低运算量。具体来说,如果软件中的某个文件被修改,如果该文件是example.java文件或者影响了example.java文件,则会对example.java重新构建VDG,并更新neo4j中持久化的相关部分模型;如果未对example.java文件造成影响,则原有的相关模型不必重新构建。使用封装好的SQL指令,调用分析引擎进行漏洞查询操作,
source_type代表漏洞的植入点的结点类型,这里设置为“method invoke”;
source_method代表漏洞的植入点的正则表达式,这里设置为“.*getParameter.*”;
满足以上两个条件,则可判定结点为对应漏洞的植入点。
sink_type代表漏洞的触发点的结点类型,这里设置为“method invoke”;
sink_method代表漏洞的触发点的正则表达式,这里设置为“.*executeQuery.*”;
满足以上两个条件,则可判定结点为对应的漏洞的触发点。
sanitizer_type代表漏洞的过滤点的结点类型,这里设置为“method invoke”;sanitizer_method代表漏洞的过滤点的正则表达式,这里设置为“.*ProcessBuilder.*”;
满足以上两个条件,则可判定结点为对应的漏洞的过滤点。
上述指令执行时会在VDG模型中搜索所有满足条件的子图,具体执行过程为,首先定位到对应的漏洞植入点和触发点,寻找二者之间的可行路径,如果不存在路径,则不存在漏洞;如果存在路径,且路径中不包含过滤点,则存在漏洞。对于上述代码片段中的漏洞,对持久化后的数据,执行上述SQL指令进行查询,可得到漏洞的植入点为{"id":0,"code":"filename=request.getParameter(\"filename\")"…},漏洞的触发点为{"id":2,"code":"Runtime.getRuntime().exec(command)"…},可行路径为{0->1->2},且该过程中不存在过滤点,可以确定这段程序中存在漏洞。对查询的结果,进行汇总,可输出到报告文件中。
对上述程序进行修改,这里改用ProcessBuilder类使用固定的参数来构造命令行命令,而不是将用户输入作为命令的一部分。这样可以避免用户输入被用于构造命令参数,从而消除了命令注入漏洞的风险。
以SQL语句进行查询可得到漏洞的植入点为{"id":0,"code":"filename=request.getParameter(\"filename\")"…},漏洞的触发点为{"id":2,"code":"Runtime.getRuntime().exec(command)"…},可行路径为{0->1->2},而该过程中在过滤点{"id":1,"code":"processBuilder=newProcessBuilder(\"cmd\",\"/c\",\"convert\",filename,\"output.pdf\")"},则可以确定不存在漏洞。
开始阶段指针b被赋值为NULL,最后对b进行空指针解引用操作,该操作会导致未定义的行为。构造出对应的依赖图模型(VDG)空指针缺陷代码片段VDG同样的对模型进行持久化,将VDG存储到图数据库neo4j中,对持久化后的数据,执行上述SQL指令进行查询,可得到漏洞的植入点为{"id":0,"code":"char*b=NULL"…},漏洞的触发点为{"id":1,"code":"*b='b'"…},可行路径为{0->1},且该过程中不存在过滤点,可以确定这段程序中存在漏洞。如果对上述程序进行修改,在进行解引用之前针对指针b进行了判空处理,这样可以避免空指针解引用,此时用相同的SQL语句进行查询将会得到路径0->1->2,但是中间因为存在switch判空点,故此漏洞不会触发。
不仅如此,为实现上述发明目的,本发明还提供了一种基于模型持久化的交互式漏洞分析系统,图2为本发明中的一种基于模型持久化的交互式漏洞分析系统的流程图,如图2所示,本发明中的一种基于模型持久化的交互式漏洞分析系统包括:
更新增量获取单元,用于基于待分析软件的代码变更进行增量更新以确定值依赖图,基于值依赖图的变更确定更新增量,更新增量包括点和边,其中点的属性包括标识符、语句内容和语句类型,边为有向边,边的属性包括起点和终点的标识符;
漏洞匹配单元,用于基于更新增量在漏洞数据库内进行检索,获得匹配的漏洞;
漏洞数据库单元,用于基于持久化的程序模型构建漏洞数据库和响应漏洞匹配单元的查询。
基于此,本发明的有益效果在于,通过静态分析技术,对源代码进行建模,生成语法分析、控制流分析和数据流分析的相关模型,并将这些模型持久化到数据库中。基于模型持久化技术,实现增量分析,提升了对于迭代中的项目进行多次分析的检测效率;再通过对静态分析能力的封装,将漏洞检测问题转化为持久化模型中的查询问题,从而实现可通过SQL语句检测漏洞,降低静态代码分析系统的使用难度。本文提出一种静态分析能力的封装方法,研发人员可以通过数据库查询语言SQL进行缺陷和漏洞分析,从而大大降低静态分析系统的使用难度。
本文采用了增量分析技术,即第二次检测只需检测相对于第一次检测,被测项目中的变更及受到变更影响的部分,从而节约大量的资源和时间。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的模块及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和设备的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明实施例方案的目的。
另外,在本发明实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例节能信号发送/接收的方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
应理解,本发明的发明内容及实施例中各步骤的序号的大小并不绝对意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
Claims (9)
1.一种基于模型持久化的交互式漏洞分析方法,其特征在于,包括:
基于待分析软件的代码变更进行增量更新以确定值依赖图;
基于值依赖图的变更确定更新增量,更新增量包括点和边,其中点的属性包括标识符、语句内容和语句类型,边为有向边,边的属性包括起点和终点的标识符;
基于更新增量在漏洞数据库内进行检索,确认匹配的漏洞;
漏洞数据库基于持久化的程序模型构建。
2.如权利要求1所述的一种基于模型持久化的交互式漏洞分析方法,其特征在于,漏洞数据库为关系型数据库或非关系型数据库。
3.如权利要求2所述的一种基于模型持久化的交互式漏洞分析方法,其特征在于,漏洞数据库的构建过程包括:
对软件项目进行词法分析和语法分析,确定和软件项目对应的抽象语法树;
对抽象语法树进行控制流分析,确定控制流图;
基于函数调用分析确定函数调用图;
根据控制流图和函数调用图,确定值依赖图。
4.如权利要求3所述的一种基于模型持久化的交互式漏洞分析方法,其特征在于,值依赖图被保存至图数据库中,其中值依赖图中的点被保存为图数据库的节点,值依赖图中的边被保存为图数据库的有向关系。
5.如权利要求4所述的一种基于模型持久化的交互式漏洞分析方法,其特征在于,值依赖图被保存至关系数据库中,在保存值依赖图时,保存点的标识符、语句内容和语句类型,以及有向边的起点和终点的标识符。
6.如权利要求5所述的一种基于模型持久化的交互式漏洞分析方法,其特征在于,基于更新增量在漏洞数据库内进行检索包括:
构建检索式,检索式包括入口点和触发点;
在漏洞数据库检索入口点和触发点间的可行路径;
基于可行路径的数量和可行路径中的节点类型确定漏洞的类型。
7.如权利要求6所述的一种基于模型持久化的交互式漏洞分析方法,其特征在于,在可行路径的数量为0时,对应的可行路径为安全路径,漏洞为可控漏洞;
在可行路径的数目不为0时,基于可行路径中是否包含过滤节点确定漏洞是否为可控漏洞。
8.如权利要求7所述的一种基于模型持久化的交互式漏洞分析方法,其特征在于,可行路径通过图搜索算法进行。
9.一种基于模型持久化的交互式漏洞分析系统,其特征在于,包括:
更新增量获取单元,用于基于待分析软件的代码变更进行增量更新以确定值依赖图,基于值依赖图的变更确定更新增量,更新增量包括点和边,其中点的属性包括标识符、语句内容和语句类型,边为有向边,边的属性包括起点和终点的标识符;
漏洞匹配单元,用于基于更新增量在漏洞数据库内进行检索,确认匹配的漏洞;
漏洞数据库单元,用于基于持久化的程序模型构建漏洞数据库和响应漏洞匹配单元的查询。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311648734.6A CN117349187A (zh) | 2023-12-05 | 2023-12-05 | 一种基于模型持久化的交互式漏洞分析方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311648734.6A CN117349187A (zh) | 2023-12-05 | 2023-12-05 | 一种基于模型持久化的交互式漏洞分析方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117349187A true CN117349187A (zh) | 2024-01-05 |
Family
ID=89367025
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311648734.6A Pending CN117349187A (zh) | 2023-12-05 | 2023-12-05 | 一种基于模型持久化的交互式漏洞分析方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117349187A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117556431A (zh) * | 2024-01-12 | 2024-02-13 | 北京北大软件工程股份有限公司 | 一种混合软件漏洞分析方法和系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622556A (zh) * | 2011-12-22 | 2012-08-01 | 南京邮电大学 | 基于程序切片技术的Web服务安全分析方法 |
US20200159934A1 (en) * | 2018-11-15 | 2020-05-21 | ShiftLeft Inc | System and method for information flow analysis of application code |
CN114510722A (zh) * | 2022-02-17 | 2022-05-17 | 北京大学 | 增量代码的静态检测方法及检测系统 |
CN114880672A (zh) * | 2022-04-13 | 2022-08-09 | 中国人民解放军战略支援部队信息工程大学 | 基于静态污点分析的二进制污点型漏洞检测方法及系统 |
CN116049831A (zh) * | 2022-12-27 | 2023-05-02 | 天翼云科技有限公司 | 一种基于静态分析和动态分析的软件漏洞检测方法 |
-
2023
- 2023-12-05 CN CN202311648734.6A patent/CN117349187A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622556A (zh) * | 2011-12-22 | 2012-08-01 | 南京邮电大学 | 基于程序切片技术的Web服务安全分析方法 |
US20200159934A1 (en) * | 2018-11-15 | 2020-05-21 | ShiftLeft Inc | System and method for information flow analysis of application code |
CN114510722A (zh) * | 2022-02-17 | 2022-05-17 | 北京大学 | 增量代码的静态检测方法及检测系统 |
CN114880672A (zh) * | 2022-04-13 | 2022-08-09 | 中国人民解放军战略支援部队信息工程大学 | 基于静态污点分析的二进制污点型漏洞检测方法及系统 |
CN116049831A (zh) * | 2022-12-27 | 2023-05-02 | 天翼云科技有限公司 | 一种基于静态分析和动态分析的软件漏洞检测方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117556431A (zh) * | 2024-01-12 | 2024-02-13 | 北京北大软件工程股份有限公司 | 一种混合软件漏洞分析方法和系统 |
CN117556431B (zh) * | 2024-01-12 | 2024-06-11 | 北京北大软件工程股份有限公司 | 一种混合软件漏洞分析方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110399300B (zh) | 一种基于动态类型感知的Python软件模糊测试方法 | |
CA2871470C (en) | Method and system for matching unknown software component to known software component | |
US8935677B2 (en) | Automatic reverse engineering of input formats | |
Alhuzali et al. | Chainsaw: Chained automated workflow-based exploit generation | |
KR101751388B1 (ko) | 오픈소스 취약점 분석 대상 검색 및 수집을 위한 빅데이터 분석 기반 웹 크롤링 시스템 및 그 방법 | |
Battista et al. | Identification of Android Malware Families with Model Checking. | |
US20150207811A1 (en) | Vulnerability vector information analysis | |
Liang et al. | A behavior-based malware variant classification technique | |
Huang et al. | UChecker: Automatically detecting php-based unrestricted file upload vulnerabilities | |
CN117349187A (zh) | 一种基于模型持久化的交互式漏洞分析方法和系统 | |
CN108710662B (zh) | 语言转换方法和装置、存储介质、数据查询系统和方法 | |
CN112154420A (zh) | 自动智能云服务测试工具 | |
JP2020126641A (ja) | Apiマッシュアップ探査及びリコメンデーション | |
Balachandran | Query by example in large-scale code repositories | |
CN109002712B (zh) | 一种基于值依赖图的污染数据分析方法、系统与电子设备 | |
Lin et al. | Machine learning in vulnerability databases | |
Di Grazia et al. | DiffSearch: A scalable and precise search engine for code changes | |
EP3816814A1 (en) | Crux detection in search definitions | |
CN110580170B (zh) | 软件性能风险的识别方法及装置 | |
Wu et al. | Graph-based vulnerability detection via extracting features from sliced code | |
US10540157B2 (en) | Systems to remove object relational mappings from a software project | |
CN115906086A (zh) | 基于代码属性图的网页后门检测方法、系统及存储介质 | |
KR102411383B1 (ko) | 사이버 위협 정보 처리 장치, 사이버 위협 정보 처리 방법 및 사이버 위협 정보 처리하는 프로그램을 저장하는 저장매체 | |
CN113821496B (zh) | 数据库迁移方法、系统、设备及计算机可读存储介质 | |
CN113626823B (zh) | 一种基于可达性分析的组件间交互威胁检测方法及装置 |
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 |