CN110968874B - 一种漏洞检测方法、装置、服务器及存储介质 - Google Patents
一种漏洞检测方法、装置、服务器及存储介质 Download PDFInfo
- Publication number
- CN110968874B CN110968874B CN201911193347.1A CN201911193347A CN110968874B CN 110968874 B CN110968874 B CN 110968874B CN 201911193347 A CN201911193347 A CN 201911193347A CN 110968874 B CN110968874 B CN 110968874B
- Authority
- CN
- China
- Prior art keywords
- source code
- vulnerability
- code file
- file
- characteristic
- 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
Links
Images
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/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
-
- 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
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供一种漏洞检测方法、装置、服务器及存储介质,通过反编译应用安装包生成应用的源码集合,扫描源码集合中源码文件的文件内容判断源码文件是否携带第一漏洞特征,进而在源码文件携带第一漏洞特征的情况下,对源码文件进行语义分析并基于源码文件的语义分析结果检测源码文件是否携带与第一漏洞特征匹配的第二漏洞特征,若源码文件携带与第一漏洞特征匹配的第二漏洞特征,则确定源码文件存在漏洞。本申请提供的通过与语义无关的第一漏洞特征确定源码文件是否可能存在漏洞,在源码文件可能存在漏洞的基础上再对源码文件进行语义分析以确定源码文件是否确实存在漏洞的方式,不仅可以实现对源码文件的漏洞检测,还可以有效提高漏洞检测效率。
Description
技术领域
本发明涉及漏洞检测技术领域,更具体地说,涉及一种漏洞检测方法、装置、服务器及存储介质。
背景技术
计算机应用为用户提供更加便捷的服务获取途径,随着计算机应用数量的激增,计算机应用的安全性显得越来越重要。若计算机应用存在漏洞,一旦漏洞被攻击者入侵,可能会出现计算机应用中用户的隐私数据被盗取、安装计算机应用的终端中木马病毒、甚至产生严重的经济损失等问题。
因此,如何提供一种漏洞检测方法、装置、服务器及存储介质,以实现对计算机应用中漏洞的检测,进而降低计算机应用被攻击者入侵的可能性,是亟待解决的问题。
发明内容
有鉴于此,本发明提出一种漏洞检测方法、装置、服务器及存储介质,以实现对计算机应用中漏洞的检测。
为了实现上述目的,现提出的方案如下:
一种漏洞检测方法,包括:
反编译应用安装包生成所述应用的源码集合,所述源码集合包括至少一个源码文件;
扫描所述源码文件的文件内容判断所述源码文件是否携带第一漏洞特征,所述第一漏洞特征与语义无关;
若所述源码文件携带第一漏洞特征,对所述源码文件进行语义分析得到所述源码文件的语义分析结果;
根据所述源码文件的语义分析结果检测所述源码文件是否携带与所述第一漏洞特征匹配的第二漏洞特征;
若所述源码文件携带与所述第二漏洞特征,确定所述源码文件存在漏洞。
一种漏洞检测装置,包括:
源码集合生成单元,用于反编译应用安装包生成所述应用的源码集合,所述源码集合包括至少一个源码文件;
判断单元,用于扫描所述源码文件的文件内容判断所述源码文件是否携带第一漏洞特征,所述第一漏洞特征与语义无关;
语义分析单元,用于若所述源码文件携带第一漏洞特征,对所述源码文件进行语义分析得到所述源码文件的语义分析结果;
检测单元,用于根据所述源码文件的语义分析结果检测所述源码文件是否携带与所述第一漏洞特征匹配的第二漏洞特征;
漏洞确定单元,用于若所述源码文件携带与所述第二漏洞特征,确定所述源码文件存在漏洞。
一种服务器,包括:至少一个存储器和至少一个处理器;所述存储器存储有程序,所述处理器调用所述存储器存储的程序,所述程序用于实现所述漏洞检测方法。
一种计算机可读存储介质,用于存储实现所述漏洞检测方法的程序。
本申请提供一种漏洞检测方法、装置、服务器及存储介质,通过反编译应用安装包生成应用的源码集合,扫描源码集合中源码文件的文件内容判断源码文件是否携带第一漏洞特征,进而在源码文件携带第一漏洞特征的情况下,对源码文件进行语义分析并基于源码文件的语义分析结果检测源码文件是否携带与第一漏洞特征匹配的第二漏洞特征,若源码文件携带与第一漏洞特征匹配的第二漏洞特征,则确定源码文件存在漏洞。本申请提供的通过与语义无关的第一漏洞特征确定源码文件是否可能存在漏洞,在源码文件可能存在漏洞的基础上再对源码文件进行语义分析以确定源码文件是否确实存在漏洞的方式,不仅可以实现对源码文件的漏洞检测,还可以有效提高漏洞检测效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的另一种漏洞检测方法流程图;
图2为本申请实施例提供的一种扫描源码文件的文件内容判断源码文件是否携带第一漏洞特征的方法流程图;
图3为本申请实施例提供的一种扫描源码文件的文件内容判断源码文件是否携带第一漏洞特征的方法示意图;
图4为本申请实施例提供的一种根据源码文件的语义分析结果检测源码文件是否携带与第一漏洞特征匹配的第二漏洞特征的方法流程图;
图5为本申请实施例提供的一种根据源码文件的语义分析结果检测源码文件是否携带与第一漏洞特征匹配的第二漏洞特征的方法示意图;
图6为本申请实施例提供的又一种漏洞检测方法流程图;
图7为本申请实施例提供的一种漏洞检测装置的结构示意图;
图8为本申请实施例提供的一种服务器的硬件结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例:
基于上述背景技术可知,随着计算机应用数量的激增,计算机应用的安全性显得越来越重要。若计算机应用存在漏洞且漏洞一旦被攻击者入侵,可能会出现计算机应用中用户的隐私数据被盗取,安装计算机应用的终端中木马病毒、甚至产生严重的经济损失等问题。
因此,本申请发明人提出一种漏洞检测方法、装置、服务器及存储介质,以实现对计算机应用中漏洞的检测。比如,用户的终端上安装有计算机应用,对用户的终端上安装的计算机应用进行漏洞检测,在检测出用户的终端上安装的计算机应用存在漏洞后,用户可以将漏洞上报给计算机应用服务器以便于及时修复计算机应用中的漏洞,用户还可以停止在终端上运行该计算机应用以防止终端上的计算机应用被攻击者入侵;或者,开发人员在开发出计算机应用后在发布计算机应用之前对该计算机应用进行漏洞检测,在检测出漏洞后及时对计算机应用进行漏洞修复,进而发布漏洞修复完成后的计算机应用。
如下是本申请发明人提出的两种漏洞检测方式,第一种为:对应用安装包进行反编译生成应用的源码集合后,直接通过正则匹配漏洞特征的方式,确定源码集合中是否存在漏洞。若源码集合命中漏洞特征,则认为源码集合中存在漏洞;若源码集合未命中漏洞特征,则认为源码集合中不存在漏洞。第二种为:对应用安装包进行反编译生成应用的源码集合,构建源码集合的语法树,基于源码集合的语法树确定源码集合中是否存在漏洞特征,若源码集合中存在漏洞特征,则认为源码集合中存在漏洞;若源码集合中不存在漏洞特征,则认为源码集合中不存在漏洞。
发明人通过研究发现,如上两种漏洞检测方法虽然都能实现漏洞检测,但是却都存在一定的缺陷。其中,第一种漏洞检测方法,直接使用正则匹配漏洞特征,不能在对源码集合进行语义分析的基础上实现漏洞检测,漏洞检测结果误报多,不准确。第二种漏洞检测方法,虽然能实现在对源码集合进行语义分析的基础上实现漏洞检测,提高漏洞检测结果的准确性;但是却需要构建源码集合的语法树,语法树构建耗时较长,严重影响了漏洞检测效率。
基于此,为了解决上述第一种漏洞检测方法和第二种漏洞检测方法的缺陷,本申请发明人进一步提供了另一种漏洞检测方法,具体请参见图1。
如图1所示,该方法包括:
S101、反编译应用安装包生成应用的源码集合,源码集合包括至少一个源码文件;
作为本申请实施例提供的一种优选实施方式,可以提供漏洞检测应用客户端,用户在终端上安装漏洞检测应用客户端,打开该漏洞检测应用客户端后,可以显示终端上当前安装的计算机应用列表,用户从计算机应用列表中选取待进行漏洞检测的计算机应用,以漏洞检测应用服务端对待进行漏洞检测的计算机应用进行漏洞检测。其中,漏洞检测应用服务端基于本申请实施例提供的一种漏洞检测方法对待进行漏洞检测的计算机应用进行漏洞检测。在本申请实施例中,漏洞检测应用服务端可以为用于执行本申请实施例提供的如图1所示的漏洞检测方法的服务器。
作为本申请实施例的另一种优选实施方式,计算机应用的开发人员编译完计算机应用后,将计算机应用的应用安装包通过网页端提交到用于执行本申请实施例提供的如图1所示的漏洞检测方法的服务器中,由该服务器对该计算机应用进行漏洞检测。
作为本申请实施例的又一种优选实施方式,计算机应用的开发人员在自动化编译部署环境中完成计算机应用的编译后,自动化编译部署环境可以自动通过web服务接口,发送应用安装包到用于执行本申请实施例提供的如图1所示的漏洞检测方法的服务器,进而由该服务器对该计算机应用进行漏洞检测。
需要说明的是,对计算机应用的安装包进行反编译可以得到应用的源码集合,该应用的源码集合可以为smali形式或者是java语言形式的源代码集合。其中,可以将应用的源码集合中的每个文件看成是一个源码文件,应用的源码集合由多个源码文件构成。
S102、扫描源码文件的文件内容判断源码文件是否携带第一漏洞特征,第一漏洞特征与源码文件的语义无关;若源码文件携带第一漏洞特征,执行步骤S103;
在本申请实施例中,针对源码集合中的每个源码文件,检测该源码文件是否存在漏洞。其中,检测源码文件是否存在漏洞的方式可以参见步骤S102-S105。
需要说明的是,本申请提供的又一种漏洞检测方法,可以扫描源码文件中的文件内容,判断该源码文件是否携带第一漏洞特征,若源码文件携带第一漏洞特征,则执行步骤S103。
在本申请实施例中,可以预先设置漏洞规则库,该漏洞规则库包括多个漏洞规则,漏洞规则包括第一漏洞特征和第二漏洞特征。其中,属于同一漏洞规则的第一漏洞特征和第二漏洞特征互相匹配。
本申请实施例,漏洞规则库包括多个漏洞规则,每个漏洞规则包括一个第一漏洞特征,漏洞规则库包括多个第一漏洞特征,扫描源码文件的文件内容判断源码文件是否携带漏洞规则库中的第一漏洞特征,只要源码文件携带漏洞规则库中的第一漏洞特征,便可认为源码文件携带第一漏洞特征;若源码文件未携带漏洞规则库中的第一漏洞特征,便可认为源码文件未携带第一漏洞特征。有关扫描源码文件的文件内容判断源码文件是否携带第一漏洞特征的具体实现方式可以参见图2-3,在此不做详细描述。
S103、对源码文件进行语义分析得到源码文件的语义分析结果;
本申请实施例,漏洞规则库中的第一漏洞特征与语义无关,即,第一漏洞特征未表征语义。在判断源码文件是否携带第一漏洞特征时,不需对源码文件进行语义分析便可准确的确定出源码文件中是否携带第一漏洞特征,若源码文件携带第一漏洞特征,则可以认为源码文件可能存在漏洞,进而基于步骤S103-S105进一步确定源码文件是否确实存在漏洞。
进一步的,若源码文件未携带第一漏洞特征,则可以认为源码文件不可能存在漏洞,即,若源码文件未携带第一漏洞特征,可以执行步骤S105。
作为本申请实施例的一种优选实施方式,可以源码文件为圆心,以源码文件中的类文件为半径,构建源码文件的语法树,以实现对源码文件的语义分析。即,将源码文件的语法树作为源码文件的语义分析结果。以上仅仅是本申请实施例提供的一种对源码文件进行语义分析的优选方式,有关对源码文件进行语义分析的具体方式,发明人可根据自己的需求进行设置,在此不做限定。
本申请实施例,不需对源码文件进行语义分析便可准确确定源码文件是否携带第一漏洞特征,由此,可以直接确定不携带第一漏洞特征的源码文件不存在漏洞;进而仅需对源码集合中携带第一漏洞特征的源码文件进行语义分析,以进一步确定携带第一漏洞特征的源码文件是否确实存在漏洞即可。这样,不仅保证了漏洞检测的准确性,而且减少了对源码集合中进行语义分析的源码文件的数量,提高了漏洞检测效率。
S104、根据源码文件的语义分析结果检测源码文件是否携带与第一漏洞特征匹配的第二漏洞特征;若源码文件携带与第二漏洞特征,执行步骤S105;
本申请实施例中,若源码文件携带第一漏洞特征,对源码文件进行语义分析得到源码文件的语义分析结果,确定漏洞规则库中与该源码文件携带的第一漏洞特征匹配的第二漏洞特征,根据该源码文件的语义分析结果检测该源码文件中是否携带所确定的第二漏洞特征;若源码文件携带所确定的第二漏洞特征,便可认为源码文件存在漏洞;若源码文件未携带所确定的第二漏洞特征,便可认为源码文件不存在漏洞。有关根据源码文件的语义分析结果检测源码文件是否携带第二漏洞特征的具体实现方式可以参见图4-5,在此不做详细描述。
作为本申请实施例的一种优选实施方式,在确定源码文件携带的第一漏洞特征后,可以从漏洞规则库中获取包括该第一漏洞特征的漏洞规则,进而将所获取到的漏洞规则包括的第二漏洞特征确定为与该第一漏洞特征匹配的第二漏洞特征。
S105、确定源码文件存在漏洞。
进一步的,若源码文件不存在漏洞规则库中的第一漏洞特征,则可以认为源码文件不存在漏洞。
更进一步的,若根据源码文件的语义分析结果检测到源码文件未携带与第一漏洞特征匹配的第二漏洞特征,则可以认为该源码文件不存在漏洞。
现结合图2-3对本申请实施例提供的一种扫描源码文件的文件内容判断源码文件是否携带第一漏洞特征的方法进行详细说明。其中,图2为本申请实施例提供的一种扫描源码文件的文件内容判断源码文件是否携带第一漏洞特征的方法流程图;图3为本申请实施例提供的一种扫描源码文件的文件内容判断源码文件是否携带第一漏洞特征的方法示意图。
参见图2,该方法包括:
S201、扫描源码文件的文件内容正则检测文件内容中是否携带预设的至少一个第一漏洞特征中的漏洞特征;若源码文件的文件内容中携带至少一个第一漏洞特征中的漏洞特征,执行步骤S202;若源码文件的文件内容中不携带至少一个第一漏洞特征中的漏洞特征,执行步骤S203;
结合图3可知,可以加载漏洞规则库中所有的第一漏洞特征,在此基础上,输入源码集合中的各个源码文件,从被加载的所有第一漏洞特征中读取一个当前未被读取过的第一漏洞特征,确定源码集合中携带当前被读取的第一漏洞特征的各个源码文件;进而判断被加载的所有第一漏洞特征中是否还包括未被读取过的第一漏洞特征,若被加载的所有第一漏洞特征中还包括未被读取过的第一漏洞特征,则可以返回执行“从被加载的所有第一漏洞特征中读取一个未被读取过的第一漏洞特征,确定源码集合中携带当前被读取的第一漏洞特征的各个源码文件;进而判断被加载的所有第一漏洞特征中是否还包括未被读取过的第一漏洞特征”过程;若被加载的所有第一漏洞特征中不包括未被读取过的第一漏洞特征,则输出源码集合中各个携带第一漏洞特征的源码文件。进一步的,参见图3,除了可以输出源码集合中各个携带第一漏洞特征的源码文件(为了便于区分,可以将此处的源码文件称为目标源码文件。即,将携带第一漏洞特征的源码文件称为目标源码文件),还可以指出每个源码文件携带的第一漏洞特征。即,指出目标源码文件携带的第一漏洞特征。
本申请实施例,可以扫描源码文件的文件内容,通过正则匹配的方式检测源码文件的文件内容中是否携带预设的至少一个第一漏洞特征中的漏洞特征。
S202、确定源码文件携带第一漏洞特征;
在本申请实施例中,可以加载漏洞规则库中的所有第一漏洞特征,只要源码文件中携带被加载的所有第一漏洞特征中的任意一个或多个第一漏洞特征,则可以认为源码文件携带第一漏洞特征;反之,则认为源码文件未携带第一漏洞特征。
S203、确定源码文件未携带第一漏洞特征。
在本申请实施例中,若源码文件中未携带被加载的所有第一漏洞特征的中任意一个第一漏洞特征,则可以认为源码文件未携带第一漏洞特征。
本申请检测的是源码文件中是否存在漏洞执行点(其中,可以将第一漏洞特征看成是漏洞执行点);通过获得应用安装包的源码集合,以单个源码文件为单位进行分析,用open方法打开文件,读取文件内容;加载第一漏洞特征集合,该第一漏洞特征集合可以为漏洞规则库中的各个第一漏洞特征,该第一漏洞特征集合为漏洞执行点的集合。遍历第一漏洞特征集合,用正则匹配方法检测源码文件的文件内容中是否在漏洞执行点,若存在则输出该源码文件,直到处理完源码集合中所有的源码文件。
作为本申请实施例的一种优选实施方式,漏洞规则库中包括多个漏洞规则,每个漏洞规则对应一个漏洞,漏洞规则包括第一漏洞特征和第二漏洞特征。其中,第二漏洞特征表征函数调用信息,第二漏洞特征表征的函数调用信息指示函数调用关系,该函数调用关系用于触发与该第二漏洞特征所属的漏洞规则对应的漏洞执行,该函数调用关系中最后被调用的函数(为了便于区分,可以将该函数调用关系中最后被调用的函数称为目标函数)为与该第二漏洞特征匹配的第一漏洞特征。与该第二漏洞特征匹配的第一漏洞特征为与该第二漏洞特征属于同一漏洞规则的第一漏洞特征。
结合图4-5对本申请实施例提供的一种根据源码文件的语义分析结果检测源码文件是否携带与第一漏洞特征匹配的第二漏洞特征的方法进行详细说明。图4为本申请实施例提供的一种根据源码文件的语义分析结果检测源码文件是否携带与第一漏洞特征匹配的第二漏洞特征的方法流程图;图5为本申请实施例提供的一种根据源码文件的语义分析结果检测源码文件是否携带与第一漏洞特征匹配的第二漏洞特征的方法示意图。
如图4所示,该方法包括:
S401、根据源码文件的语法树生成源码文件中的第一函数调用信息;
本申请实施例,若源码文件携带第一漏洞特征,对源码文件进行语义分析可以得到源码文件的语法树,根据源码文件的语法树可以生成源码文件中的函数调用信息。为了便于区分,暂时将源码文件的函数调用信息称为第一函数调用信息。第一函数调用信息指示函数调用关系。
S402、确定预设的与第一漏洞特征匹配的第二漏洞特征;
作为本申请实施例的一种优选实施方式,可以确定源码文件携带的第一漏洞特征,进而确定该第一漏洞特征所属的漏洞规则,将所确定的漏洞规则中的第二漏洞特征作为与源码文件携带的第一漏洞特征匹配的第二漏洞特征。
本申请实施例,漏洞规则包括第一漏洞特征和第二漏洞特征,第二漏洞特征表征函数调用信息,为了便于区分,本申请将第二漏洞特征表征的函数调用信息称为第二函数调用信息。第二函数调用信息指示函数调用关系。
S403、检测第一函数调用信息是否与第二漏洞特征表征的第二函数调用信息相同;若第一函数调用信息与第二函数调用信息相同,执行步骤S404;若第一函数调用信息与第二函数调用信息不相同,执行步骤S405;
本申请实施例,第一函数调用信息指示函数调用关系,第二函数调用信息指示函数调用关系,判断第一函数调用信息指示的函数调用关系是否与第二漏洞特征表征的第二函数调用信息指示的函数调用关系相同,若第一函数调用信息指示的函数调用关系与第二漏洞特征表征的第二函数调用信息指示的函数调用关系相同,则认为第一函数调用信息和第二函数调用信息相同,进而确定源码文件携带第二漏洞特征;若第一函数调用信息指示的函数调用关系与第二漏洞特征表征的第二函数调用信息指示的函数调用关系不相同,则认为第一函数调用信息和第二函数调用信息不相同,进而确定源码文件未携带第二漏洞特征。
S404、确定源码文件携带第二漏洞特征;
S405、确定源码文件未携带第二漏洞特征。
结合图5,以一个目标源码文件仅包括一个第一漏洞特征为例进行说明,可以加载漏洞规则库中所有的第二漏洞特征,在此基础上,输入图3输出的目标源码文件和目标源码文件携带的第一漏洞特征;从输入的目标源码文件中获取一个目标源码文件,从被加载的所有第二漏洞特征中读取与当前被获取的目标源码文件的第一漏洞特征匹配的第二漏洞特征,比较当前被获取的目标源码文件中的第一函数调用信息和与当前被获取的目标源码文件携带的第一漏洞信息匹配的第二漏洞信息表征的第二函数调用信息是否相同,若第一函数调用信息和第二函数调用信息相同,确定当前被获取的目标源码文件携带漏洞,该漏洞为当前被获取的目标源码文件携带的第一漏洞特征所属的漏洞规则对应的漏洞;若第一函数调用信息和第二函数调用信息不相同,确定当前被获取的目标源码文件不携带漏洞;进而,再检测输入的目标源码文件中是否存在未曾被获取的目标源码文件,如果存在未曾被获取的目标源码文件则说明存在未被读取的第二漏洞特征;如果不存在未曾被获取的目标源码文件则说明不存在未被读取的第二漏洞特征;在不存在未被读取的第二漏洞特征时,可以输出各个存在漏洞的目标源码文件。
在本申请实施例中,若一个源码文件携带多个第一漏洞特征时,确定源码文件携带的各个第一漏洞特征,针对源码文件携带的每个第一漏洞特征而言,确定与该第一漏洞特征匹配的第二漏洞特征,判断该第二漏洞特征表征的第二函数调用信息指示的函数调用关系是否与该源码文件中的第一函数调用信息指示的函数调用关系相同,若相同,则认为源码文件携带该第一漏洞特征所属的漏洞规则对应的漏洞;若不相同,则认为源码文件不携带该第一漏洞特征所属的漏洞规则对应的漏洞。其中,源码文件中的第一函数调用信息根据源码文件的语法树生成;确定与该第一漏洞特征匹配的第二漏洞特征的方式可以为从漏洞规则库中确定包括该第一漏洞特征的漏洞规则,将所确定的漏洞规则包括的第二漏洞特征作为与该第一漏洞特征匹配的第二漏洞特征。
本申请是在检测到源码文件存在漏洞执行点的基础上,进一步检测源码文件的语法是否合规。获得命中集合(存在第一漏洞特征的目标源码文件)以及目标源码文件携带的第一漏洞特征后,以命中集合单个元素为单位,获取单个元素对应的目标源码文件,定位到该目标源码文件的漏洞执行点所属的漏洞规则中的第二漏洞特征,构建该目标源码文件的语法树,如果第二漏洞特征表征的函数调用关系和根据语法树构建的函数调用关系相同,则认为该目标源码文件命中第二漏洞特征,该目标源码文件存在漏洞,直到分析完命中集合中的所有目标源码文件。
图6为本申请实施例提供的又一种漏洞检测方法流程图。
如图6所示,该方法包括:
S601、反编译应用安装包生成应用的源码集合,源码集合包括至少一个源码文件;
S602、扫描源码文件的文件内容判断源码文件是否携带第一漏洞特征,第一漏洞特征与语义无关;若源码文件携带第一漏洞特征,执行步骤S603;若源码文件未携带第一漏洞特征,执行步骤S607;
S603、对源码文件进行语义分析得到源码文件的语义分析结果;
S604、根据源码文件的语义分析结果检测源码文件是否携带与第一漏洞特征匹配的第二漏洞特征;若源码文件携带与第二漏洞特征,执行步骤S605;若源码文件未携带与第二漏洞特征,执行步骤S607;
S605、确定源码文件存在漏洞;
S606、生成漏洞检测结果,漏洞检测结果指示源码集合中存在漏洞的各个目标源码文件;
在本申请实施例中,对应用安装包进行漏洞检测可以得到应用安装包的漏洞检测结果,应用安装包的漏洞检测结果包括应用安装包的源码集合中存在漏洞的各个目标源码文件。
作为本申请实施例的一种优选实施方式,漏洞规则库中包括多个漏洞规则,漏洞规则包括第一漏洞特征和第二漏洞特征,在此基础上,漏洞规则还包括与该漏洞规则对应的漏洞的基本信息,该基本信息可以为漏洞名称、漏洞危险等级、漏洞描述和漏洞修复建议中的任意一种或多种。
以上仅仅是本申请实施例提供的一种漏洞的基本信息的优选内容,有关漏洞的基本信息的具体内容,发明人可根据自己的需求进行设置,在此不做限定。
本申请实施例,漏洞检测结果除了包括存在漏洞的各个目标源码文件以外,还包括存在漏洞的每个目标源码文件中漏洞的描述信息,该描述信息包括漏洞危险等级、漏洞修复信息和漏洞在目标源码文件中的位置中的任意一种或多种。其中,目标源码文件中漏洞的描述信息可以基于漏洞规则库中该漏洞的基本信息获取。
更进一步的,还可以显示应用安装包的漏洞检测结果,以便于用户了解应用安装包中的漏洞。
S607、确定源码文件不存在漏洞。
本申请实施例提供一种漏洞检测方法,先使用正则匹配第一漏洞特征,达到快速、准确地定位源码集合中可能存在漏洞的源码文件的目的;快速、准确地定位源码集合中可能存在漏洞的源码文件后,再构建可能存在漏洞的源码文件的语法树,进行第二漏洞特征匹配操作,以进一步确定可能存在漏洞的源码文件是否确实存在漏洞,进而达到减少误报的目的。由此,不仅保证了漏洞检测的准确性,而且提高了漏洞检测效率。
图7为本申请实施例提供的一种漏洞检测装置的结构示意图。
如图7所示,该装置包括:
源码集合生成单元71,用于反编译应用安装包生成应用的源码集合,源码集合包括至少一个源码文件;
判断单元72,用于扫描源码文件的文件内容判断源码文件是否携带第一漏洞特征,第一漏洞特征与语义无关;
语义分析单元73,用于若源码文件携带第一漏洞特征,对源码文件进行语义分析得到源码文件的语义分析结果;
检测单元74,用于根据源码文件的语义分析结果检测源码文件是否携带与第一漏洞特征匹配的第二漏洞特征;
漏洞确定单元75,用于若源码文件携带与第二漏洞特征,确定源码文件存在漏洞。
在本申请实施例中,优选的,判断单元,包括:
扫描单元,用于扫描源码文件的文件内容正则检测文件内容中是否携带预设的至少一个第一漏洞特征中的漏洞特征;
第一确定单元,用于若源码文件的文件内容中携带至少一个第一漏洞特征中的漏洞特征,确定源码文件携带第一漏洞特征;
第二确定单元,用于若源码文件的文件内容中不携带至少一个第一漏洞特征中的漏洞特征,确定源码文件未携带第一漏洞特征。
在本申请实施例中,优选的,语义分析单元具体用于对源码文件进行语义分析构建源码文件的语法树。
在本申请实施例中,优选的,检测单元,包括:
调用信息生成单元,用于根据源码文件的语法树生成源码文件中的第一函数调用信息;
第二漏洞特征确定单元,用于确定预设的与第一漏洞特征匹配的第二漏洞特征;
检测子单元,用于检测第一函数调用信息是否与第二漏洞特征表征的第二函数调用信息相同;
第三确定单元,用于若第一函数调用信息与第二函数调用信息相同,确定源码文件携带第二漏洞特征;
第四确定单元,用于若第一函数调用信息与第二函数调用信息不相同,确定源码文件未携带第二漏洞特征。
在本申请实施例中,优选的,第一漏洞特征为目标函数,目标函数为与第二函数调用信息指示的用于触发漏洞执行的函数调用关系中最后被调用的函数。
更进一步的,本申请实施例提供的一种漏洞检测装置还包括:漏洞结果生成单元,用于生成漏洞检测结果,漏洞检测结果指示源码集合中存在漏洞的各个目标源码文件。
在本申请实施例中,优选的,漏洞检测结果还包括目标源码文件中漏洞的描述信息,描述信息包括漏洞危险等级、漏洞修复信息和漏洞在目标源码文件的位置信息中的任意一项或多项。
为了便于理解,现从服务器的角度对本申请实施例提供的一种漏洞检测方法进行详细说明。服务器可以是网络侧为用户提供服务的服务设备,其可能是多台服务器组成的服务器集群,也可能是单台服务器。
图8为本申请实施例提供的一种服务器的硬件结构框图。参照图8,服务器的硬件结构可以包括:处理器81,通信接口82,存储器83和通信总线84;
在本发明实施例中,处理器81、通信接口82、存储器83、通信总线84的数量均可以为至少一个,且处理器81、通信接口82、存储器83通过通信总线84完成相互间的通信;
处理器81可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路等;
存储器83可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory)等,例如至少一个磁盘存储器;
其中,存储器存储有程序,处理器可调用存储器存储的程序,程序用于:
反编译应用安装包生成应用的源码集合,源码集合包括至少一个源码文件;
扫描源码文件的文件内容判断源码文件是否携带第一漏洞特征,第一漏洞特征与语义无关;
若源码文件携带第一漏洞特征,对源码文件进行语义分析得到源码文件的语义分析结果;
根据源码文件的语义分析结果检测源码文件是否携带与第一漏洞特征匹配的第二漏洞特征;
若源码文件携带与第二漏洞特征,确定源码文件存在漏洞。
可选的,程序的细化功能和扩展功能可参照上文描述。
进一步的,本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机可执行指令,该计算机可执行指令用于执行上述漏洞检测方法。
可选的,计算机可执行指令的细化功能和扩展功能可参照上文描述。
本申请提供一种漏洞检测方法、装置、服务器及存储介质,通过反编译应用安装包生成应用的源码集合,扫描源码集合中源码文件的文件内容判断源码文件是否携带第一漏洞特征,进而在源码文件携带第一漏洞特征的情况下,对源码文件进行语义分析并基于源码文件的语义分析结果检测源码文件是否携带与第一漏洞特征匹配的第二漏洞特征,若源码文件携带与第一漏洞特征匹配的第二漏洞特征,则确定源码文件存在漏洞。本申请提供的通过与语义无关的第一漏洞特征确定源码文件是否可能存在漏洞,在源码文件可能存在漏洞的基础上再对源码文件进行语义分析以确定源码文件是否确实存在漏洞的方式,不仅可以实现对源码文件的漏洞检测,还可以有效提高漏洞检测效率。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对本发明所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (9)
1.一种漏洞检测方法,其特征在于,包括:
反编译应用安装包生成所述应用的源码集合,所述源码集合包括至少一个源码文件;
扫描所述源码文件的文件内容判断所述源码文件是否携带第一漏洞特征,所述第一漏洞特征与语义无关;
若所述源码文件携带第一漏洞特征,则以所述源码文件为圆心,以所述源码文件中的类文件为半径,构建所述源码文件的语法树,以实现对所述源码文件的语义分析,并减少对所述源码集合中进行语义分析的源码文件的数量;
根据所述源码文件的语法树检测所述源码文件是否携带与所述第一漏洞特征匹配的第二漏洞特征;
若所述源码文件携带与所述第二漏洞特征,确定所述源码文件存在漏洞。
2.根据权利要求1所述的方法,其特征在于,所述扫描所述源码文件的文件内容判断所述源码文件是否携带第一漏洞特征,包括:
扫描所述源码文件的文件内容正则检测所述文件内容中是否携带预设的至少一个第一漏洞特征中的漏洞特征;
若所述源码文件的文件内容中携带所述至少一个第一漏洞特征中的漏洞特征,确定所述源码文件携带第一漏洞特征;
若所述源码文件的文件内容中不携带所述至少一个第一漏洞特征中的漏洞特征,确定所述源码文件未携带第一漏洞特征。
3.根据权利要求1所述的方法,其特征在于,所述根据所述源码文件的语法树检测所述源码文件是否携带与所述第一漏洞特征匹配的第二漏洞特征,包括:
根据所述源码文件的语法树生成所述源码文件中的第一函数调用信息;
确定预设的与所述第一漏洞特征匹配的第二漏洞特征;
检测所述第一函数调用信息是否与所述第二漏洞特征表征的第二函数调用信息相同;
若所述第一函数调用信息与所述第二函数调用信息相同,确定所述源码文件携带所述第二漏洞特征;
若所述第一函数调用信息与所述第二函数调用信息不相同,确定所述源码文件未携带所述第二漏洞特征。
4.根据权利要求3所述的方法,其特征在于,所述第一漏洞特征为目标函数,所述目标函数为与所述第二函数调用信息指示的用于触发漏洞执行的函数调用关系中最后被调用的函数。
5.根据权利要求1所述的方法,其特征在于,还包括:
生成漏洞检测结果,所述漏洞检测结果指示所述源码集合中存在漏洞的各个目标源码文件。
6.根据权利要求5所述的方法,其特征在于,所述漏洞检测结果还包括所述目标源码文件中漏洞的描述信息,所述描述信息包括漏洞危险等级、漏洞修复信息和漏洞在所述目标源码文件的位置信息中的任意一项或多项。
7.一种漏洞检测装置,其特征在于,包括:
源码集合生成单元,用于反编译应用安装包生成所述应用的源码集合,所述源码集合包括至少一个源码文件;
判断单元,用于扫描所述源码文件的文件内容判断所述源码文件是否携带第一漏洞特征,所述第一漏洞特征与语义无关;
语义分析单元,用于若所述源码文件携带第一漏洞特征,则以所述源码文件为圆心,以所述源码文件中的类文件为半径,构建所述源码文件的语法树,以实现对所述源码文件的语义分析,并减少对所述源码集合中进行语义分析的源码文件的数量;
检测单元,用于根据所述源码文件的语法树检测所述源码文件是否携带与所述第一漏洞特征匹配的第二漏洞特征;
漏洞确定单元,用于若所述源码文件携带与所述第二漏洞特征,确定所述源码文件存在漏洞。
8.一种服务器,其特征在于,包括:至少一个存储器和至少一个处理器;所述存储器存储有程序,所述处理器调用所述存储器存储的程序,所述程序用于实现如权利要求1-6任意一项所述的漏洞检测方法。
9.一种计算机可读存储介质,其特征在于,用于存储实现如权利要求1-6任意一项所述的漏洞检测方法的程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911193347.1A CN110968874B (zh) | 2019-11-28 | 2019-11-28 | 一种漏洞检测方法、装置、服务器及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911193347.1A CN110968874B (zh) | 2019-11-28 | 2019-11-28 | 一种漏洞检测方法、装置、服务器及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110968874A CN110968874A (zh) | 2020-04-07 |
CN110968874B true CN110968874B (zh) | 2023-04-14 |
Family
ID=70032321
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911193347.1A Active CN110968874B (zh) | 2019-11-28 | 2019-11-28 | 一种漏洞检测方法、装置、服务器及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110968874B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112131536B (zh) * | 2020-05-19 | 2021-07-20 | 北京天德科技有限公司 | 一种防止Java程序被反编译的方法 |
CN113206849B (zh) * | 2021-04-29 | 2022-12-20 | 杭州安恒信息安全技术有限公司 | 一种基于ghidra的漏洞扫描方法、装置及相关设备 |
CN113806750B (zh) * | 2021-09-24 | 2024-02-23 | 深信服科技股份有限公司 | 文件安全风险检测方法、模型的训练方法、装置和设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106295346A (zh) * | 2015-05-20 | 2017-01-04 | 深圳市腾讯计算机系统有限公司 | 一种应用漏洞检测方法、装置及计算设备 |
CN107229563A (zh) * | 2016-03-25 | 2017-10-03 | 中国科学院信息工程研究所 | 一种跨架构的二进制程序漏洞函数关联方法 |
CN108595952A (zh) * | 2018-03-30 | 2018-09-28 | 全球能源互联网研究院有限公司 | 一种电力移动应用软件漏洞的检测方法及系统 |
CN108763928A (zh) * | 2018-05-03 | 2018-11-06 | 北京邮电大学 | 一种开源软件漏洞分析方法、装置和存储介质 |
CN110188544A (zh) * | 2019-05-30 | 2019-08-30 | 北京百度网讯科技有限公司 | 漏洞检测方法及装置、设备及存储介质 |
CN110298171A (zh) * | 2019-06-17 | 2019-10-01 | 暨南大学 | 移动互联网大数据应用的智能检测与安全防护方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9569334B2 (en) * | 2013-03-14 | 2017-02-14 | Whitehat Security, Inc. | Techniques for traversing representations of source code |
US9405915B2 (en) * | 2013-03-14 | 2016-08-02 | Whitehat Security, Inc. | Techniques for correlating vulnerabilities across an evolving codebase |
CN104252599B (zh) * | 2013-06-28 | 2019-07-05 | 深圳市腾讯计算机系统有限公司 | 一种检测跨站脚本漏洞的方法及装置 |
CN106548076A (zh) * | 2015-09-23 | 2017-03-29 | 百度在线网络技术(北京)有限公司 | 检测应用漏洞代码的方法和装置 |
CN108416216A (zh) * | 2018-02-28 | 2018-08-17 | 阿里巴巴集团控股有限公司 | 漏洞检测方法、装置及计算设备 |
CN109635569B (zh) * | 2018-12-10 | 2020-11-03 | 国家电网有限公司信息通信分公司 | 一种漏洞检测方法及装置 |
-
2019
- 2019-11-28 CN CN201911193347.1A patent/CN110968874B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106295346A (zh) * | 2015-05-20 | 2017-01-04 | 深圳市腾讯计算机系统有限公司 | 一种应用漏洞检测方法、装置及计算设备 |
CN107229563A (zh) * | 2016-03-25 | 2017-10-03 | 中国科学院信息工程研究所 | 一种跨架构的二进制程序漏洞函数关联方法 |
CN108595952A (zh) * | 2018-03-30 | 2018-09-28 | 全球能源互联网研究院有限公司 | 一种电力移动应用软件漏洞的检测方法及系统 |
CN108763928A (zh) * | 2018-05-03 | 2018-11-06 | 北京邮电大学 | 一种开源软件漏洞分析方法、装置和存储介质 |
CN110188544A (zh) * | 2019-05-30 | 2019-08-30 | 北京百度网讯科技有限公司 | 漏洞检测方法及装置、设备及存储介质 |
CN110298171A (zh) * | 2019-06-17 | 2019-10-01 | 暨南大学 | 移动互联网大数据应用的智能检测与安全防护方法 |
Non-Patent Citations (2)
Title |
---|
Dhika Rizki Anbiya 等.Vulnerability Detection in PHP Web Application Using Lexical Analysis Approach with Machine Learning.《2018 5th International Conference on Data and Software Engineering (ICoDSE)》.2018,第1-6页. * |
刘敬.基于机器学习的入侵检测和告警关联关键技术研究.《中国博士学位论文全文数据库信息科技辑》.2018,(第02期),第I139-20页. * |
Also Published As
Publication number | Publication date |
---|---|
CN110968874A (zh) | 2020-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10152594B2 (en) | Method and device for identifying virus APK | |
CN110968874B (zh) | 一种漏洞检测方法、装置、服务器及存储介质 | |
RU2551820C2 (ru) | Способ и устройство для проверки файловой системы на наличие вирусов | |
US8601451B2 (en) | System, method, and computer program product for determining whether code is unwanted based on the decompilation thereof | |
JP5793764B2 (ja) | マルウェアの誤検出を低減する方法及び装置 | |
JP5507176B2 (ja) | ソフトウェアの信頼性を測定する方法及び装置 | |
JP5507699B2 (ja) | 悪性サイト検出装置及び方法 | |
Ng et al. | Expose: Discovering potential binary code re-use | |
CN106845223B (zh) | 用于检测恶意代码的方法和装置 | |
JP6176622B2 (ja) | マルウェアの検出方法 | |
US20140215614A1 (en) | System and method for a security assessment of an application uploaded to an appstore | |
CN101964026A (zh) | 网页挂马检测方法和系统 | |
US20110219454A1 (en) | Methods of identifying activex control distribution site, detecting security vulnerability in activex control and immunizing the same | |
CN111343154A (zh) | 漏洞检测方法、装置、终端设备以及存储介质 | |
CN112084497A (zh) | 嵌入式Linux系统恶意程序检测方法及装置 | |
CN113342673A (zh) | 漏洞检测方法、设备及可读存储介质 | |
CN108898014A (zh) | 一种病毒查杀方法、服务器及电子设备 | |
CN114707150A (zh) | 一种恶意代码检测方法、装置、电子设备和存储介质 | |
KR101324691B1 (ko) | 모바일 악성 행위 어플리케이션 탐지 시스템 및 방법 | |
CN109145589B (zh) | 应用程序获取方法及装置 | |
CN116450533B (zh) | 用于应用程序的安全检测方法、装置、电子设备和介质 | |
El-Rewini et al. | Dissecting residual APIs in custom android ROMs | |
US9483645B2 (en) | System, method, and computer program product for identifying unwanted data based on an assembled execution profile of code | |
US20190132348A1 (en) | Vulnerability scanning of attack surfaces | |
CN112613893A (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40022173 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |