CN114579969B - 漏洞检测方法、装置、电子设备及存储介质 - Google Patents

漏洞检测方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN114579969B
CN114579969B CN202210477950.8A CN202210477950A CN114579969B CN 114579969 B CN114579969 B CN 114579969B CN 202210477950 A CN202210477950 A CN 202210477950A CN 114579969 B CN114579969 B CN 114579969B
Authority
CN
China
Prior art keywords
node
vulnerability
sensitive function
nodes
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.)
Active
Application number
CN202210477950.8A
Other languages
English (en)
Other versions
CN114579969A (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.)
Beijing University of Posts and Telecommunications
Original Assignee
Beijing University of Posts and Telecommunications
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 Beijing University of Posts and Telecommunications filed Critical Beijing University of Posts and Telecommunications
Priority to CN202210477950.8A priority Critical patent/CN114579969B/zh
Publication of CN114579969A publication Critical patent/CN114579969A/zh
Application granted granted Critical
Publication of CN114579969B publication Critical patent/CN114579969B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)
  • Machine Translation (AREA)

Abstract

本申请提供一种漏洞检测方法、装置、电子设备及存储介质,所述方法包括:获取待检测文件的源代码,源代码对应的语法结构包括节点和节点信息;通过语法分析将所述源代码转化为对应的中间表示;根据中间表示对所述源代码中预先存储的敏感函数中的用户变量进行逆向回溯,得到回溯结果;基于中间表示对所述节点信息采用利用链方法进行查询,得到漏洞利用链;将回溯结果和所述漏洞利用链作为待检测文件的漏洞检测结果。根据源代码的中间表示对源代码采用逆向回溯的方法得到源代码中漏洞的具***置,解决了当前已有方式无法进行漏洞代码定位的问题。并且通过节点信息的存储避免了扫描源代码带来的占用内存大和挖掘效率低的问题。

Description

漏洞检测方法、装置、电子设备及存储介质
技术领域
本申请涉及网络安全技术领域,尤其涉及一种漏洞检测方法、装置、电子设备及存储介质。
背景技术
漏洞通常存在于程序开发者编写的类源码文件中,攻击者可以通过向程序提供反序列化字符串,将反序列化字符串转换的对象在应用程序中设置为成员变量以达到控制程序执行,可造成任意文件操作、路径遍历、命令执行等严重后果。
通常,漏洞检测依赖代码结构的分析,需要对静态代码文件进行扫描和检测。但是扫描方式会存在扫描时内存占用过大的问题,无法应对大规模文件工程的检测。
发明内容
有鉴于此,本申请的目的在于提出一种漏洞检测方法、装置、电子设备及存储介质,用以解决或部分解决上述技术问题。
基于上述目的,本申请的第一方面提供了一种漏洞检测方法,包括:
获取待检测文件的源代码,所述源代码对应的语法结构包括节点和节点信息;
通过语法分析将所述源代码转化为对应的中间表示;
根据所述中间表示对所述源代码中预先存储的敏感函数中的用户变量进行逆向回溯,得到回溯结果;
基于所述中间表示采用利用链方法对所述节点信息进行查询,得到漏洞利用链;
将所述回溯结果和所述漏洞利用链作为所述待检测文件的漏洞检测结果。
本申请的第二方面提供了一种漏洞检测装置,包括:
获取模块,被配置为获取待检测文件的源代码,所述源代码对应的语法结构包括节点和节点信息;
转化模块,被配置为通过语法分析将所述源代码转化为对应的中间表示;
定位模块,被配置为根据所述中间表示对所述源代码中预先存储的敏感函数中的用户变量进行逆向回溯,得到回溯结果;
利用链获取模块,被配置为基于所述中间表示采用利用链方法对所述节点信息进行查询,得到漏洞利用链;
结果模块,被配置为将所述回溯结果和所述漏洞利用链作为所述待检测文件的漏洞检测结果。
本申请的第三方面提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面所述的方法。
本申请的第四方面提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行第一方面所述方法。
从上面所述可以看出,本申请提供的漏洞检测方法、装置、电子设备及存储介质,根据源代码的中间表示对源代码采用逆向回溯的方法得到源代码中漏洞的具***置,解决了当前已有方式无法进行漏洞代码定位的问题。并且通过存储并检索中间表示中的节点信息,实现了漏洞利用链的挖掘,通过节点信息的存储避免了扫描源代码带来的占用内存大和挖掘效率低的问题。
附图说明
为了更清楚地说明本申请或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例的漏洞检测方法的流程示意图;
图2为步骤103的步骤展开示意图;
图3为步骤104的步骤展开示意图;
图4为本申请实施例的漏洞检测装置的结构示意图;
图5为本申请实施例的电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本申请进一步详细说明。
需要说明的是,除非另外定义,本申请实施例使用的技术术语或者科学术语应当为本申请所属领域内具有一般技能的人士所理解的通常意义。本申请实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
如背景技术所述,作为21世纪的信息流通载体,互联网对当下社会生活产生了重要影响。Web(World Wide Web,全球广域网)应用程序开发使用的语言复杂多样,大部分网站都采用PHP(Personal Home Page,超文本预处理器)进行服务器端的开发,而PHP对象注入漏洞近些年仍频发,CVE(Common Vulnerabilities & Exposures,通用漏洞和风险)漏洞库中记录了多例对象注入漏洞类型的报告。该类型漏洞通常存在于程序开发者编写的类源码文件中,通过该漏洞向程序提供反序列化字符串,将其在应用程序中设置为成员变量以达到控制程序执行,可造成任意文件操作、路径遍历、命令执行等严重后果。
目前PHP源代码的漏洞检测方法主要有污点分析、基于代码切片特征深度学习检测、代码文件内容模式匹配。主要实现方式如下:
1.基于三地址码构造代码控制流图,然后基于这些控制流图进行污点分析来分析挖掘漏洞;
2.使用中间语言切片技术进行代码表示的方法,这种表示方式包括了代码前后的序列关系,同时利用深度学习模型训练分类识别代码切片序列中的漏洞;
3.将代码数据流和控制流转化为节点以及邻接矩阵,将这些向量化的代码关系作为输入在图神经网络中进行训练和漏洞的识别。
基于控制流污点分析的方式会存在扫描时内存占用过大的问题,无法应对大规模文件工程的检测。两种深度学习PHP源码检测方式未对OOP(Object OrientedProgramming,面向对象程序设计)编程思想进行针对性分析和适应,因此无法应对像对象注入这种漏洞的检测。
对象注入漏洞的检测方式有以下两种:
1.采用潜在语义索引,将代码转换为术语文档矩阵,再通过余弦相似性识别漏洞入口;
2. 对请求流量数据包中的参数或字段值进行反序列化漏洞测试,通过服务端的反馈信息来判断是否存在反序列化输入的参数位置。
上述检测方法只是识别了代码中存在反序列化函数入口,没有给出代码工程中的漏洞点具体产生原因和位置。
因此,需要有一个***化的漏洞检测方法,能够实现检测漏洞并反馈代码中漏洞信息,并且能够发现反序列化入口并进行漏洞利用链挖掘。同时可以应对目前基于框架开发的大规模应用工程的扫描,达成低内存占用、高效检测漏洞的效果。
本申请的实施例提供一种漏洞检测方法,可以应用于基于工程代码运行的电子设备中漏洞的检测。
如图1所示,本实施例的方法包括:
步骤101,获取待检测文件的源代码,所述源代码对应的语法结构包括节点和节点信息。
在该步骤中,源代码指的是未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令。本实施例中优选的源代码可以是PHP语言编写的源代码。遍历待检测文件的工程目录并逐个读取文件代码内容,可以统计读取PHP类型或者可能包含PHP代码的文件,可以将工程文件路径集合作为源代码的获取形式。获取得到的源代码为后续的语法结构的中间表示提供了代码基础。
步骤102,通过语法分析将所述源代码转化为对应的中间表示。
在该步骤中,中间表示指的是源程序的一种内部表示,易于机械生成目标代码。本实施例中优选的中间表示可以是用图中的对象(例如,节点、边、列表和树)来描述源代码的形式。
例如,中间表示可以是控制流图,控制流图定义为G=<V,E>,V表示图中的所有节点,E表示两个节点的连接边。Block函数基本块,块中包含若干节点,基本块通常为一个函数或者类内的定义的函数,将基本块定义为Block=<nodes,inEdges,outEdges,summary>,nodes表示其中所包含的节点,inEdge表示入边,outEdge为出边,summary为基本块的摘要信息。每个节点定义为V=<info,pre,suc,id,loc>。其中Info节点信息中types字段为节点类型,name字段为当前代码节点的名字。pre和suc为所连接的前驱和后继节点,字段loc为当前节点所在的基本块或作用域。
由于漏洞检测赖于代码内容及结构的转换表达,将源代码进行语法分析得到中间表示,为后续逆向回溯和利用链挖掘提供检索基础。
步骤103,根据所述中间表示对所述源代码中预先存储的敏感函数中的用户变量进行逆向回溯,得到回溯结果。
在该步骤中,敏感函数指的是编程语言中容易出现漏洞的函数。本实施例优选的敏感函数可以是PHP代码中的代码执行、命令执行函数和文件操作相关函数。
遍历中间表示查找到预先存储的敏感函数,获取敏感函数中的用户变量等节点信息,然后采用逆向回溯的方式对用户变量进行前驱溯源分析,若追溯到用户变量为用户请求输入的位置,则表示存在漏洞,同时在回溯结果中保存敏感函数对应的节点信息。
这样,能够将漏洞的节点信息反馈到回溯结果中,通过漏洞节点信息中的节点名称和位置信息实现了漏洞代码的位置反馈。
步骤104,基于所述中间表示对所述节点信息采用利用链方法进行查询,得到漏洞利用链。
在该步骤中,利用链指的是多个漏洞利用组合在一起以危害目标的网络攻击方式。
本实施例优选的利用链可以是PHP对象注入漏洞利用链。对每个代码语句的节点信息进行存储,并且对中间表示的不同节点进行分类,在利用链方法查询过程中针对不同节点进行不同的逻辑处理,将检测到的利用链对应的节点信息进行存储。
本实施例中优选的节点信息可以包含节点位置、节点类型、源节点、后继节点。
通过节点信息的存储为后续利用链方法查询的重复利用提供数据基础,这样,避免了扫描源代码带来的占用内存大和挖掘效率低的问题。
步骤105,将所述回溯结果和所述漏洞利用链作为所述待检测文件的漏洞检测结果。
在该步骤中,回溯结果和漏洞利用链的存储方式可以是数组,其中数组可以包括节点信息、类和方法的位置、节点记录的代码行数,回溯结果和漏洞利用链的反馈方式可以是路径形式。漏洞及利用链扫描结果可以在可视化界面中展示出来,例如,代码行数、所在类以及对应解释,以便于分析人员参考和修复。
通过上述方案,根据源代码的中间表示对源代码采用逆向回溯的方法得到源代码中漏洞的具***置,解决了当前已有方式无法进行漏洞代码定位的问题。并且通过存储并检索中间表示中的节点信息,实现了漏洞利用链的挖掘,通过节点信息的存储避免了扫描源代码带来的占用内存大和挖掘效率低的问题。
在一些实施例中,所述中间表示包括语法树和控制流图,如图2所示,步骤103具体包括:
步骤1031,获取所述敏感函数和所述用户变量对应的变量来源;
步骤1032,根据所述敏感函数遍历所述语法树中的节点,得到敏感函数节点,其中,所述敏感函数节点的类型为函数调用;
步骤1033,基于所述控制流图对所述敏感函数节点进行逆向回溯,得到前驱节点;
步骤1034,通过对比所述前驱节点中的变量和所述变量来源得到所述回溯结果。
在上述方案中,直接定位到敏感函数进行逆向分析。遍历语法树中的节点集合,找到类型为函数调用同时函数名为预先存储的敏感函数对应的节点作为敏感函数节点,其中语法树中每个节点的对象包含前驱节点、后续节点、节点类型、所在位置等信息。基于控制流图对敏感函数节点进行逆向回溯,得到敏感函数节点的前驱节点,获取前驱节点的对象所实现的类名,若前驱节点对应的类名中的变量属于敏感函数中的用户变量的变量来源,则表明用户变量的变量来源存在风险,将敏感函数节点加入回溯结果。
通过上述方案,能够将漏洞的节点信息反馈到回溯结果中,通过漏洞节点信息中的节点名称和位置信息实现了漏洞代码的位置反馈。
在一些实施例中,步骤1033具体包括:
基于所述控制流图获取所述敏感函数节点的基本块位置;
根据所述基本块位置对所述敏感函数节点进行逆向回溯,得到所述前驱节点。
在上述方案中,获取敏感函数节点的基本块位置,根据基本块位置对敏感函数节点进行逆向回溯可以有以下三种情况:
a)用户变量的变量来源直接到达敏感函数节点,中间未经其他路径;即满足如下条件:
给定变量来源val∈V,unserialize(反序列化函数)在控制流图中表示为un∈V,令ΓG +(u)={u∈V|∃e∈E∧e=val→u},存在un∈ΓG +(u),即敏感函数节点为变量来源对应节点的后继节点,两节点距离为1。
b)用户变量的变量来源被节点类内变量或者临时变量进行了存储,后续的路径中均为该利用该变量进行操作;即满足如下条件:
设定同一个基本块内节点集合V={vi|v∈theBlock},变量来源val∈V,且有unserialize∈V。则本情况表示为∀v1,v2…vn∈V,使得|v1|=|v2|=…=|vn|=|val|,且vn→unserialize。即输入值在n个节点间传递,并最终到达敏感函数节点。
c)用户变量的变量来源被接收临时存储为临时变量,在后续处理过程中临时变量又进行了其他函数作用域的修改和处理,最后到达终点敏感函数节点:
给定Bi={<Vj,Ej>|j=1…n}, val∈Bi.V,存在vx∈Bx使得|val|=|vx| (x为随机值)。同时unserialize∈Bx.V,即user在不同函数基本块中进行传递,最终到达Bx函数块中的敏感函数节点。
通过上述方案,实现了敏感函数节点的逆向回溯,为后续得到漏洞路径提供路径基础。
在一些实施例中,步骤1034具体包括:
响应于确定所述前驱节点中的变量符合所述变量来源,将所述前驱节点到所述敏感函数节点的路径作为回溯结果;
响应于确定所述前驱节点的变量不符合所述变量来源,基于所述控制流图更新所述前驱节点直至所述前驱节点不能逆向回溯。
在上述方案中,响应于确定前驱节点中的变量符合变量来源,即前驱节点中的变量为敏感函数节点中用户变量的变量来源,则表明敏感函数的用户变量的变量来源存在漏洞。
响应于确定所述前驱节点的变量不符合变量来源,则遍历前驱节点节点所在基本块的入边,获取到其所有的前驱节点,继续对其变量来源进行判断。
对于敏感函数节点在语法树中的每个前驱节点重复上述步骤,直到不包含存在前驱的节点。
通过上述方案,为敏感函数的用户变量漏洞路径的发现提供了判定条件。
在一些实施例中,如图3所示,步骤104具体包括:
步骤1041,获取魔术方法集;
步骤1042,基于所述语法树对所述节点信息进行数据存储,得到节点数据库;
步骤1043,根据所述魔术方法集在所述节点数据库中检索,得到调用所述魔术方法集中任意魔术方法的调用节点;
步骤1044,通过遍历所述调用节点的内部语句确定所述漏洞利用链。
在上述方案中,魔术方法指的是程序语言中满足一定条件后会自动执行的函数应用。利用链的构造过程可以是对象反序列化后自动调用类内的魔术方法,进而通过内部函数调用进行跳转或执行。获取魔术方法集后,通过从节点库中查找类型为类内方法的以及节点名称为对应魔术方法名的节点,将这些节点的节点信息进行存储,然后将节点信息作为参数输入到递归查找利用链的函数中。
根据所述魔术方法集在所述节点数据库中检索,得到调用所述魔术方法集中任意魔术方法的调用节点,即针对漏洞利用链中的跳转路径的发现。类与类之间的跨语法树分析依赖于当前节点和其他类之间的跳转,这种跳转一方面可以通过调用其他类的魔术方法,另一方面则可以通过直接调用其他类内的方法进行跳转查询。在针对这种模式进行查找时,直接查询方法调用类型的节点,得到调用节点。通过遍历所述调用节点的内部语句确定所述漏洞利用链。
通过上述方案,实现了漏洞利用链的挖掘,通过节点信息的存储避免了扫描源代码带来的占用内存大和挖掘效率低的问题。
在一些实施例中,步骤1042具体包括:
将所述语法树中的所有节点进行分类,得到终点节点和可递归节点,其中,所述终点节点至少包括所述敏感函数节点;
响应于确定所述语法树中的所有节点中的一个节点属于所述可递归节点,获取该节点的内部语法树并采用递归利用链方法查询,并将查询结果添加到所述节点数据库;
响应于确定所述语法树中的所有节点中的一个节点属于终点节点,将所述节点对应的节点信息添加到所述节点数据库。
在上述方案中,响应于确定节点类型属于终点节点类型,将当前节点的节点添加到节点数据库中;若当前类型为可递归节点,则要获取其内部语法树继续递归分析,同时将当前节点的节点信息进行保存。
可以理解的是,遍历过程中针对利用链挖掘过程中不会用到的节点进行剪枝操作,以减少存储占用,同时加快后续检索速度。
通过上述方案,对语法树的所有节点进行一次遍历便能分析整个源代码,提高扫描检测漏洞利用链的效率。
在一些实施例中,步骤1044具体包括:
响应于确定所述调用节点中的内部语句包括所述敏感函数且所述内部语句中的敏感函数包括可控变量,将所述调用节点对应的利用链作为所述漏洞利用链。
在上述方案中,遍历调用节点中的内部语句,若内部语句中包括敏感函数,则获取该敏感函数内的变量,回溯判断变量是否为可控变量,若为可控变量则报告利用链路径。
通过上述方案,为漏洞利用链的挖掘提供了判定条件。
需要说明的是,本申请实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本申请实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
需要说明的是,上述对本申请的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
基于同一发明构思,与上述任意实施例方法相对应的,本申请还提供了一种漏洞检测装置。
参考图4,所述漏洞检测装置,包括:
获取模块201,被配置为获取待检测文件的源代码,所述源代码对应的语法结构包括节点和节点信息;
转化模块202,被配置为通过语法分析将所述源代码转化为对应的中间表示;
定位模块203,被配置为根据所述中间表示对所述源代码中预先存储的敏感函数中的用户变量进行逆向回溯,得到回溯结果;
利用链获取模块204,被配置为基于所述中间表示对所述节点信息采用利用链方法进行查询,得到漏洞利用链;
结果模块205,被配置为将所述回溯结果和所述漏洞利用链作为所述待检测文件的漏洞检测结果。
在一些实施例中,转化模块202中的所述中间表示包括语法树和控制流图,转化模块202具体包括:
函数获取单元,被配置为获取所述敏感函数和所述用户变量对应的变量来源;
遍历单元,被配置为根据所述敏感函数遍历所述语法树中的节点,得到敏感函数节点,其中,所述敏感函数节点的类型为函数调用;
回溯单元,被配置为基于所述控制流图对所述敏感函数节点进行逆向回溯,得到前驱节点;
对比单元,被配置为通过对比所述前驱节点中的变量和所述变量来源得到所述回溯结果。
在一些实施例中,回溯单元具体被配置为:
基于所述控制流图获取所述敏感函数节点的基本块位置;
根据所述基本块位置对所述敏感函数节点进行逆向回溯,得到所述前驱节点。
在一些实施例中,对比单元具体被配置为:
响应于确定所述前驱节点中的变量符合所述变量来源,将所述前驱节点到所述敏感函数节点的路径作为回溯结果;
响应于确定所述前驱节点的变量不符合所述变量来源,基于所述控制流图更新所述前驱节点直至所述前驱节点不能逆向回溯。
在一些实施例中,利用链获取模块204具体包括:
魔术方法单元,被配置为获取魔术方法集;
节点信息单元,被配置为基于所述语法树对所述节点信息进行数据存储,得到节点数据库;
检索单元,被配置为根据所述魔术方法集在所述节点数据库中检索,得到调用所述魔术方法集中任意魔术方法的调用节点;
确定单元,被配置为通过遍历所述调用节点的内部语句确定所述漏洞利用链。
在一些实施例中,节点信息单元具体被配置为:
将所述语法树中的所有节点进行分类,得到终点节点和可递归节点,其中,所述终点节点至少包括所述敏感函数节点;
响应于确定所述语法树中的所有节点中的一个节点属于所述可递归节点,获取该节点的内部语法树并采用递归利用链方法查询,并将查询结果添加到所述节点数据库;
响应于确定所述语法树中的所有节点中的一个节点属于终点节点,将所述节点对应的节点信息添加到所述节点数据库。
在一些实施例中,确定单元具体被配置为:
响应于确定所述调用节点中的内部语句包括所述敏感函数且所述内部语句中的敏感函数包括可控变量,将所述调用节点对应的利用链作为所述漏洞利用链。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的装置用于实现前述任一实施例中相应的漏洞检测方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本申请还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的漏洞检测方法。
图5示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线 1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作***和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
上述实施例的电子设备用于实现前述任一实施例中相应的漏洞检测方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本申请还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的漏洞检测方法。
本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的漏洞检测方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本申请的范围(包括权利要求)被限于这些例子;在本申请的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本申请实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
另外,为简化说明和讨论,并且为了不会使本申请实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本申请实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本申请实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本申请的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本申请实施例。因此,这些描述应被认为是说明性的而不是限制性的。
尽管已经结合了本申请的具体实施例对本申请进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
本申请实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本申请实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (6)

1.一种漏洞检测方法,其特征在于,包括:
获取待检测文件的源代码,所述源代码对应的语法结构包括节点和节点信息;
通过语法分析将所述源代码转化为对应的中间表示,其中,所述中间表示包括语法树和控制流图;
获取所述源代码中预先存储的敏感函数和所述敏感函数中用户变量对应的变量来源;根据所述敏感函数遍历所述语法树中的节点,得到敏感函数节点,其中,所述敏感函数节点的类型为函数调用;基于所述控制流图对所述敏感函数节点进行逆向回溯,得到前驱节点;通过对比所述前驱节点中的变量和所述变量来源得到回溯结果;
将所述语法树中的所有节点进行分类,得到终点节点和可递归节点,其中,所述终点节点至少包括所述敏感函数节点;响应于确定所述语法树中的所有节点中的一个节点属于所述可递归节点,获取该节点的内部语法树并采用递归利用链方法查询,并将查询结果添加到节点数据库;响应于确定所述语法树中的所有节点中的一个节点属于终点节点,将所述节点对应的节点信息添加到所述节点数据库;
获取魔术方法集;根据所述魔术方法集在所述节点数据库中检索,得到调用所述魔术方法集中任意魔术方法的调用节点;响应于确定所述调用节点中的内部语句包括所述敏感函数且所述内部语句中的敏感函数包括可控变量,将所述调用节点对应的利用链作为漏洞利用链,其中,所述利用链指的是多个漏洞利用组合在一起以危害目标的网络攻击方式;
将所述回溯结果和所述漏洞利用链作为所述待检测文件的漏洞检测结果。
2.根据权利要求1所述的方法,其特征在于,所述基于所述控制流图对所述敏感函数节点进行逆向回溯,得到前驱节点,包括:
基于所述控制流图获取所述敏感函数节点的基本块位置;
根据所述基本块位置对所述敏感函数节点进行逆向回溯,得到所述前驱节点。
3.根据权利要求1所述的方法,其特征在于,所述通过对比所述前驱节点中的变量和所述变量来源得到回溯结果,包括:
响应于确定所述前驱节点中的变量符合所述变量来源,将所述前驱节点到所述敏感函数节点的路径作为回溯结果;
响应于确定所述前驱节点的变量不符合所述变量来源,基于所述控制流图更新所述前驱节点直至所述前驱节点不能逆向回溯。
4.一种漏洞检测装置,其特征在于,包括:
获取模块,被配置为获取待检测文件的源代码,所述源代码对应的语法结构包括节点和节点信息;
转化模块,被配置为通过语法分析将所述源代码转化为对应的中间表示,其中,所述中间表示包括语法树和控制流图;
定位模块,被配置为获取所述源代码中预先存储的敏感函数和所述敏感函数中用户变量对应的变量来源;根据所述敏感函数遍历所述语法树中的节点,得到敏感函数节点,其中,所述敏感函数节点的类型为函数调用;基于所述控制流图对所述敏感函数节点进行逆向回溯,得到前驱节点;通过对比所述前驱节点中的变量和所述变量来源得到回溯结果;
利用链获取模块,被配置为将所述语法树中的所有节点进行分类,得到终点节点和可递归节点,其中,所述终点节点至少包括所述敏感函数节点;响应于确定所述语法树中的所有节点中的一个节点属于所述可递归节点,获取该节点的内部语法树并采用递归利用链方法查询,并将查询结果添加到节点数据库;响应于确定所述语法树中的所有节点中的一个节点属于终点节点,将所述节点对应的节点信息添加到所述节点数据库;
所述利用链获取模块,还被配置为获取魔术方法集;根据所述魔术方法集在所述节点数据库中检索,得到调用所述魔术方法集中任意魔术方法的调用节点;通过遍历所述调用节点的内部语句确定漏洞利用链;响应于确定所述调用节点中的内部语句包括所述敏感函数且所述内部语句中的敏感函数包括可控变量,将所述调用节点对应的利用链作为漏洞利用链,其中,所述利用链指的是多个漏洞利用组合在一起以危害目标的网络攻击方式;
结果模块,被配置为将所述回溯结果和所述漏洞利用链作为所述待检测文件的漏洞检测结果。
5.一种电子设备,其特征在于,包括存储器、处理器及存储在所述存储器上并可由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至3任意一项所述的方法。
6.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行权利要求1至3任一所述方法。
CN202210477950.8A 2022-05-05 2022-05-05 漏洞检测方法、装置、电子设备及存储介质 Active CN114579969B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210477950.8A CN114579969B (zh) 2022-05-05 2022-05-05 漏洞检测方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210477950.8A CN114579969B (zh) 2022-05-05 2022-05-05 漏洞检测方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN114579969A CN114579969A (zh) 2022-06-03
CN114579969B true CN114579969B (zh) 2022-08-23

Family

ID=81784179

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210477950.8A Active CN114579969B (zh) 2022-05-05 2022-05-05 漏洞检测方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN114579969B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115033886A (zh) * 2022-06-14 2022-09-09 广州图灵科技有限公司 一种基于序列化中间表示的源代码分布式检测***及方法
CN115577363A (zh) * 2022-09-15 2023-01-06 华北电力科学研究院有限责任公司 恶意代码反序列化利用链的检测方法及装置
CN115576840B (zh) * 2022-11-01 2023-04-18 中国科学院软件研究所 基于机器学习的静态程序插桩检测方法及装置
CN115618363B (zh) * 2022-11-22 2023-03-21 北京邮电大学 漏洞路径的挖掘方法及相关设备
CN116028941B (zh) * 2023-03-27 2023-08-04 天聚地合(苏州)科技股份有限公司 接口的漏洞检测方法、装置、存储介质及设备
CN117033164B (zh) * 2023-05-17 2024-03-29 烟台大学 一种智能合约安全漏洞检测方法和***

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102955914A (zh) * 2011-08-19 2013-03-06 百度在线网络技术(北京)有限公司 一种源文件安全漏洞的检测方法及检测装置
CN114036526A (zh) * 2021-11-02 2022-02-11 广东电网有限责任公司广州供电局 漏洞测试方法、装置、计算机设备和存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104462981B (zh) * 2013-09-12 2019-01-04 深圳市腾讯计算机***有限公司 漏洞检测方法及装置
CN107885995A (zh) * 2017-10-09 2018-04-06 阿里巴巴集团控股有限公司 小程序的安全扫描方法、装置以及电子设备
CN109508296A (zh) * 2018-11-22 2019-03-22 北京知道创宇信息技术有限公司 数据检测方法、装置及电子设备
CN113010899B (zh) * 2021-04-16 2022-06-07 上海交通大学 一种php反序列化漏洞利用链检测方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102955914A (zh) * 2011-08-19 2013-03-06 百度在线网络技术(北京)有限公司 一种源文件安全漏洞的检测方法及检测装置
CN114036526A (zh) * 2021-11-02 2022-02-11 广东电网有限责任公司广州供电局 漏洞测试方法、装置、计算机设备和存储介质

Also Published As

Publication number Publication date
CN114579969A (zh) 2022-06-03

Similar Documents

Publication Publication Date Title
CN114579969B (zh) 漏洞检测方法、装置、电子设备及存储介质
CN107832619B (zh) Android平台下应用程序漏洞自动化挖掘***及方法
CN108614707B (zh) 静态代码检查方法、装置、存储介质和计算机设备
CN108549538B (zh) 一种代码检测方法、装置、存储介质及测试终端
US10656973B2 (en) Automated API evaluation based on API parameter resolution
CN109145235B (zh) 用于解析网页的方法、装置及电子设备
CN106295346B (zh) 一种应用漏洞检测方法、装置及计算设备
Chen et al. DroidCIA: A novel detection method of code injection attacks on HTML5-based mobile apps
CN104331663A (zh) web shell的检测方法以及web服务器
CN117113347A (zh) 一种大规模代码数据特征提取方法及***
CN113312618A (zh) 程序漏洞检测方法、装置、电子设备及介质
CN112688966A (zh) webshell检测方法、装置、介质和设备
KR101696694B1 (ko) 역추적을 이용한 소스 코드 취약점 분석 방법 및 장치
CN108984223B (zh) 一种程序调用解耦方法、装置、电子设备及存储介质
CN115688108B (zh) 一种webshell静态检测方法及***
CN115659344B (zh) 一种软件供应链检测方法及装置
CN115577363A (zh) 恶意代码反序列化利用链的检测方法及装置
CN115129598A (zh) 一种sql语句的风险检测方法、装置、***及介质
CN111796832B (zh) 热补丁文件生成方法、装置、设备及存储介质
CN114691197A (zh) 代码分析方法、装置、电子设备和存储介质
CN109635175B (zh) 页面数据拼接方法、装置、可读存储介质和电子设备
CN112671671A (zh) 基于第三方库的第三方流量识别方法、装置及设备
Höschele et al. Active learning of input grammars
CN113032256A (zh) 自动化测试方法、装置、计算机***和可读存储介质
CN112130860A (zh) Json对象解析方法、装置、电子设备及存储介质

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