CN106156630A - 一种应用程序安装包的漏洞检测方法和装置 - Google Patents
一种应用程序安装包的漏洞检测方法和装置 Download PDFInfo
- Publication number
- CN106156630A CN106156630A CN201510196968.0A CN201510196968A CN106156630A CN 106156630 A CN106156630 A CN 106156630A CN 201510196968 A CN201510196968 A CN 201510196968A CN 106156630 A CN106156630 A CN 106156630A
- Authority
- CN
- China
- Prior art keywords
- function
- leak
- detected
- call
- cil
- 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
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
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test 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)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例公开了一种应用程序安装包的漏洞检测方法和装置,获取待检测安装包的CIL;通过分析得到所述CIL的CFG,所述CFG包括所述CIL中所述多个函数之间的调用关系和调用顺序;通过预设条件分析所述CIL,确定漏洞入口点语句以及包含所述漏洞入口点语句的待检测函数;当对所述待检测函数进行漏洞检测未发现漏洞,根据所述CFG中的所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述待检测函数之前的第一函数;结合所述待检测函数对所述第一函数进行漏洞检测,由此可以检测出需要多个函数共同参与才能造成的漏洞,提高了确定漏洞的准确性,降低了通过安装包安装App为***带来的安全隐患的可能。
Description
技术领域
本发明涉及计算机领域,特别是涉及一种应用程序安装包的漏洞检测方法和装置。
背景技术
随着智能终端技术的发展,应用程序(Application,App)使用越来越普遍,Android***、iOS***甚至Windows***中都可以安装App。为了提高***安全性,在向***中安装App之前,需要对App安装包进行漏洞检测,以降低***出现由于安装App导致被开了“后门”,植入木马的情况。
由于无法直接对App安装包进行漏洞检测,一般需要先将App安装包反编译成一种通用中间语言(Common Intermediate Language,CIL),然后对其中可能具有漏洞的函数进行漏洞分析,以此实现漏洞检测。
然而,如果一个漏洞需要多个函数共同参与才能造成,例如函数x需要通过函数y对其赋值后才能造成漏洞出现的情况,使用现有技术的漏洞检测方法无法检测出这种漏洞的存在,导致安装App为***带来的安全隐患。
发明内容
为了解决上述技术问题,本发明提供了一种应用程序安装包的漏洞检测方法和装置,在待检测函数未发现漏洞时,继续检测根据CFG中函数之间的调用关系确定与所述漏洞形成相关且调用顺序在调用所述待检测函数之前的第一函数,以此可以检测出需要多个函数共同参与才能造成的漏洞,提高了安全性
本发明实施例公开了如下技术方案:
一种应用程序安装包的漏洞检测方法,所述方法包括:
获取待检测安装包的通用中间语言CIL,所述CIL包括多个函数;
对所述CIL进行控制流图CFG分析,得到所述CIL的CFG,所述CFG包括所述CIL中所述多个函数之间的调用关系和调用顺序;
通过预设条件分析所述CIL,确定漏洞入口点语句以及包含所述漏洞入口点语句的待检测函数,所述漏洞入口点语句为具有漏洞形成条件的语句;
当对所述待检测函数进行漏洞检测未发现漏洞,根据所述CFG中的所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述待检测函数之前的第一函数,所述第一函数与所述待检测函数具有直接调用关系;
结合所述待检测函数对所述第一函数进行漏洞检测。
可选的,当结合所述待检测函数对所述第一函数进行漏洞检测未发现漏洞,还包括:
对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测,直到发现漏洞或遍历完根据所述CFG中所述调用关系确定的与所述漏洞形成相关的函数;
其中,对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测具体包括:
结合所述待检测函数、所述第一函数以及与所述漏洞形成相关的,调用顺序在调用所述第一函数之前,调用所述第二函数之后的函数,对所述第二函数进行漏洞检测,所述第二函数与所述漏洞形成相关,与所述第一函数具有直接或间接的调用关系,调用顺序在调用所述第一函数之后;
若未发现漏洞,根据所述CFG中的所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述第二函数之前的第三函数,所述第三函数与所述第二函数具有直接调用关系;
结合所述待检测函数、所述第一函数、与所述漏洞形成相关的,调用顺序在调用所述第一函数之前,调用所述第二函数之后的函数以及所述第二函数,对所述第三函数进行漏洞检测。
可选的,
若所述对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测,遍历完根据所述CFG中所述调用关系确定的与所述漏洞形成相关的函数,未发现漏洞,则判断所述待检测安装包没有漏洞。
可选的,
所述CIL具体为编译器Smali语言。
可选的,
所述待检测安装包为应用于安卓Android***中的安装包。
一种应用程序安装包的漏洞检测装置,包括:
获取单元,用于获取待检测安装包的通用中间语言CIL,所述CIL包括多个函数;
分析单元,用于对所述CIL进行控制流图CFG分析,得到所述CIL的CFG,所述CFG包括所述CIL中所述多个函数之间的调用关系和调用顺序;
第一确定单元,用于通过预设条件分析所述CIL,确定漏洞入口点语句以及包含所述漏洞入口点语句的待检测函数,所述漏洞入口点语句为具有漏洞形成条件的语句;
第二确定单元,用于当对所述待检测函数进行漏洞检测未发现漏洞,根据所述CFG中的所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述待检测函数之前的第一函数,所述第一函数与所述待检测函数具有直接调用关系;
第一检测单元,用于结合所述待检测函数对所述第一函数进行漏洞检测。
可选的,还包括:
第二检测单元,用于当所述第一检测单元未发现漏洞,对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测,直到发现漏洞或遍历完根据所述CFG中所述调用关系确定的与所述漏洞形成相关的函数;
其中,所述第二检测单元对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测,具体包括结合所述待检测函数、所述第一函数以及与所述漏洞形成相关的,调用顺序在调用所述第一函数之前,调用所述第二函数之后的函数,对所述第二函数进行漏洞检测,所述第二函数与所述漏洞形成相关,与所述第一函数具有直接或间接的调用关系,调用顺序在调用所述第一函数之后;若未发现漏洞,根据所述CFG中的所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述第二函数之前的第三函数,所述第三函数与所述第二函数具有直接调用关系;结合所述待检测函数、所述第一函数、与所述漏洞形成相关的,调用顺序在调用所述第一函数之前,调用所述第二函数之后的函数以及所述第二函数,对所述第三函数进行漏洞检测。
可选的,
若所述第二检测单元未发现漏洞,则判断所述待检测安装包没有漏洞。
可选的,
所述CIL具体为编译器Smali语言。
可选的,
所述待检测安装包为应用于安卓Android***中的安装包。
由上述技术方案可以看出,当通过检测具有出现漏洞可能性的待检测函数未检测出漏洞时,可以根据通过对CIL分析得到对应的CFG,通过所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述待检测函数之前的第一函数,并结合所述待检测函数对所述第一函数进行漏洞检测,由此可以检测出需要多个函数共同参与才能造成的漏洞,提高了确定漏洞的准确性,降低了通过安装包安装App为***带来的安全隐患的可能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种应用程序安装包的漏洞检测方法的方法流程图;
图2为本发明实施例提供的一种应用程序安装包的CIL的CFG结构示意图;
图3为本发明实施例提供的一种应用程序安装包的漏洞检测装置的装置结构图;
图4为本发明实施例提供的一种应用程序安装包的漏洞检测装置的装置结构图。
具体实施方式
对App安装包的漏洞检测的现有技术中,针对反编译出来的CIL,只会单独检测可能出现漏洞的函数,并不会考虑到需要通过函数之间的调用、赋值等交互情况才能产生的漏洞,这将直接影响到漏洞检测的精确程度,使得App安装包中需要通过多个函数共同参与才能造成的漏洞无法被现有技术检测出来。如果***安装了这种通过现有技术漏洞检测为“安全”的App安装包,***将不可避免的出现漏洞,给黑客提供了可乘之机,降低了***安全性,可能会对使用者造成不可估量的损失。
为此,本发明实施例提供了一种应用程序安装包的漏洞检测方法和装置,当通过检测具有出现漏洞可能性的待检测函数未检测出漏洞时,可以根据通过对CIL分析得到对应的控制流图(Control flow graph,CFG),通过所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述待检测函数之前的第一函数,并结合所述待检测函数对所述第一函数进行漏洞检测,由此可以提高检测出需要多个函数共同参与才能造成的漏洞的可能性,提高了发现漏洞的准确性,降低了通过安装包安装App为***带来的安全隐患的可能。
并且,当通过检测所述第一函数还不能检测出漏洞时,将根据所述CFG中的调用关系和调用顺序,对与所述漏洞形成相关的函数进行回溯递归查找,直到发现漏洞或者漏洞查找的函数为入度函数为止,入度函数可以理解为与入度函数具有调用关系的函数的调用顺序均在调用所述入度函数之后。这样的查找方式可以更加彻底的检测出需要多个函数共同参与才能造成的漏洞,进一步提高了发现漏洞的准确性。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
图1为本发明实施例提供的一种应用程序安装包的漏洞检测方法的方法流程图,所述方法包括:
S101:获取待检测安装包的CIL,所述CIL包括多个函数。
举例说明。App安装包可以为不同的文件格式,可以由不同的编译语言生成。可选的,所述待检测安装包为应用于安卓Android***中的安装包,也就是安卓安装包(Android Package,APK)的格式。也可以是其他格式例如可执行文件格式等。一般情况下无法直接获取App安装包中的内容,故需要对App安装包进行反编译得到对应的CIL后,才具有漏洞检测的条件。CIL有多种形式,本发明对CIL的形式不进行限定,不过,可选的,所述CIL具体可以为编译器(Smali)语言。在本发明实施例中,反编译得到的CIL中至少包括两个具有调用关系的函数。
S102:对所述CIL进行CFG分析,得到所述CIL的CFG,所述CFG包括所述CIL中所述多个函数之间的调用关系和调用顺序。
举例说明,通过附图对CIL的CFG的结构进行解释说明,图2为本发明实施例提供的一种应用程序安装包的CIL的CFG结构示意图。图2所示的可以为CIL的全部CFG或一部分CFG,其中函数之间的调用关系和调用顺序仅为了方便举例说明。如图2所示,CFG中具有八个函数,分别为函数0至函数7,其中箭头相连的函数之间均具有调用关系,调用顺序如箭头所示,以图2中最右边一路为例,可以为先调用函数1,再调用函数3,再调用函数5,再调用函数7的调用顺序。
S103:通过预设条件分析所述CIL,确定漏洞入口点语句以及包含所述漏洞入口点语句的待检测函数,所述漏洞入口点语句为具有漏洞形成条件的语句。
举例说明,所述预设条件可以为具有成为漏洞可能性的条件或特征,例如所述预设条件可以包括在本地保存通用格式的文件等可能会造成漏洞出现的操作。
需要注意的是,本发明并不限定S102和S103的执行顺序。
S104:当对所述待检测函数进行漏洞检测未发现漏洞,根据所述CFG中的所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述待检测函数之前的第一函数,所述第一函数与所述待检测函数具有直接调用关系。
S105:结合所述待检测函数对所述第一函数进行漏洞检测。
举例说明,若确定出的一条具有漏洞形成可能的语句A属于如图2所示的函数7中的一条语句,那么所述待检测函数就可以为函数7。在一些需要多个函数参与才能形成漏洞的情况下,例如语句A中具有变量,语句A具体的结果需要通过其他函数对所述变量的赋值后才能确定时,那么,直接对所述待检测函数也就是函数7进行漏洞检测将无法发现漏洞。
故当对函数7进行漏洞检测未发现漏洞时,需要根据所述CFG确定出所述第一函数,在图2所示的CFG结构中,函数4和函数5均与函数7具有调用关系,且函数4和函数5的调用顺序均在调用函数7之前。若函数4和函数5均与所述漏洞形成相关,则函数4和函数5均可以为所述第一函数。需要注意的是,所述第一函数与所述待检测函数具有直接调用关系,从图2所示结构中,假设函数3和函数1与所述漏洞形成相关,而且函数3和函数1的调用顺序也显然是在调用函数7(待检测函数)之前,但是函数3与函数7之间并不具备直接调用关系,而是通过函数5的一种间接调用关系,故在函数7为所述待检测函数的情况下,函数3并不能作为所述第一函数。同理函数1也不能作为所述第一函数。而只有与函数7具有直接调用关系的函数4和函数5可以作为所述第一函数。
可以结合函数7(待检测函数)对函数4(第一函数)进行漏洞检测,以及也可以结合函数7(待检测函数)对函数5(第一函数)进行漏洞检测。针对其中包括函数5的一支来说,由于所述漏洞的形成需要多个函数参与,也就是说至少需要函数7和函数5一起参与才可能形成漏洞,通过考虑函数5对函数7的影响例如对函数7中的语句A的赋值的情况,对函数5进行漏洞检测。由此可以有效检测出由两个函数共同参与才能形成的漏洞,提高了检测漏洞的能力。
由上述实施例可以看出,当通过检测具有出现漏洞可能性的待检测函数未检测出漏洞时,可以根据通过对CIL分析得到对应的CFG,通过所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述待检测函数之前的第一函数,并结合所述待检测函数对所述第一函数进行漏洞检测,由此可以提高检测出需要多个函数共同参与才能造成的漏洞的可能性,提高了发现漏洞的准确性,降低了通过安装包安装App为***带来的安全隐患的可能。
实施例二
在需要多个函数共同参与才能造成漏洞的情况下,可能会出现多于两个函数才能造成漏洞的情况。为此,本实施例将在图1所对应实施例的基础上,进一步解决需要多于两个函数共同参与才能造成漏洞的情况。
在执行S105中,若结合所述待检测函数对所述第一函数进行漏洞检测未发现漏洞,并不能确定不会出现所述漏洞,还需要根据所述CFG的所述调用关系确定是否有与所述漏洞形成相关,即与所述第一函数具有调用关系,且调用顺序在调用所述第一函数之前的函数,若有,对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测,直到发现漏洞或遍历完根据所述CFG中所述调用关系确定的与所述漏洞形成相关的函数。
其中,对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测具体包括:
结合所述待检测函数、所述第一函数以及与所述漏洞形成相关的,调用顺序在调用所述第一函数之前,调用所述第二函数之后的函数,对所述第二函数进行漏洞检测,所述第二函数与所述漏洞形成相关,与所述第一函数具有直接或间接的调用关系,调用顺序在调用所述第一函数之后;
若未发现漏洞,根据所述CFG中的所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述第二函数之前的第三函数,所述第三函数与所述第二函数具有直接调用关系;
结合所述待检测函数、所述第一函数、与所述漏洞形成相关的,调用顺序在调用所述第一函数之前,调用所述第二函数之后的函数以及所述第二函数,对所述第三函数进行漏洞检测。
举例说明,所述回溯递归查找可以理解为根据调用关系以及调用顺序,反向(与调用顺序相反)的一种查找过程,同时还需要注意查找到的函数需要与所述漏洞形成相关。以图2为例,函数7通过回溯递归查找到的函数可以为函数4和函数5,假设其中只有函数5与所述漏洞形成相关,那么通过对与所述漏洞形成相关的函数进行回溯递归查找只能查找到函数5,进一步查找到函数5的上一级函数:函数3(假设函数3与所述漏洞形成相关),再进一步查找到函数3的上一级函数:函数1(假设函数1与所述漏洞形成相关)。这里所说的函数X的上一级函数可以理解为与所述漏洞形成相关,调用顺序在调用所述函数X之前,且与所述函数X具有直接调用关系的函数。
通过图2所示的结构图进行举例说明,假设函数1、函数3和函数5均与所述漏洞形成相关,函数7为所述待检测函数。在本发明实施例中,函数5可以理解为所述第一函数,若结合函数7对函数5进行漏洞检测未发现漏洞,则对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测的过程可以为:函数3可以理解为第二函数,结合函数7和函数5对函数3进行漏洞检测,若未发现漏洞,函数1可以理解为第三函数,将结合函数7、函数5和函数3对函数1进行漏洞分析。若调用关系更多,参与的函数更多,也可以通过本实施例中的回溯递归的方式依次进行漏洞查找,直到发现漏洞或遍历完根据所述CFG中所述调用关系确定的与所述漏洞形成相关的函数,本发明不再对具有更多调用关系的CFG结构进行一一穷举。
所述遍历完根据所述CFG中所述调用关系确定的与所述漏洞形成相关的函数可以理解为进行漏洞检测的函数为入度函数的情况,所谓入度函数可以理解为与入度函数具有调用关系的函数的调用顺序均在调用所述入度函数之后,也就是说在所处调用关系链中最先调用的函数。可选的,若所述对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测,遍历完根据所述CFG中所述调用关系确定的与所述漏洞形成相关的函数,未发现漏洞,则判断所述待检测安装包没有漏洞。这种结束回溯递归查找并结束漏洞检测的条件,可以使得在本发明实施例中,可以尽可能的查找到由多个函数参与形成的漏洞,提高App安装包的安全性。
通过本实施例可以看出,当通过检测所述第一函数还不能检测出漏洞时,将根据所述CFG中的调用关系和调用顺序,对与所述漏洞形成相关的函数进行回溯递归查找,直到发现漏洞或者漏洞查找的函数为入度函数为止。这样的查找方式可以更加彻底的检测出需要多个函数共同参与才能造成的漏洞,进一步提高了发现漏洞的准确性。
实施例三
图3为本发明实施例提供的一种应用程序安装包的漏洞检测装置的装置结构图,包括:
获取单元301,用于获取待检测安装包的CIL,所述CIL包括多个函数。
举例说明。App安装包可以为不同的文件格式,可以由不同的编译语言生成。可选的,所述待检测安装包为应用于Android***中的安装包,也就是APK的格式。也可以是其他格式例如可执行文件格式等。一般情况下无法直接获取App安装包中的内容,故需要对App安装包进行反编译得到对应的CIL后,才具有漏洞检测的条件。CIL有多种形式,本发明对CIL的形式不进行限定,不过,可选的,所述CIL具体可以为Smali语言。在本发明实施例中,反编译得到的CIL中至少包括两个具有调用关系的函数。
分析单元302,用于对所述CIL进行CFG分析,得到所述CIL的CFG,所述CFG包括所述CIL中所述多个函数之间的调用关系和调用顺序。
第一确定单元303,用于通过预设条件分析所述CIL,确定漏洞入口点语句以及包含所述漏洞入口点语句的待检测函数,所述漏洞入口点语句为具有漏洞形成条件的语句。
举例说明,所述预设条件可以为具有成为漏洞可能性的条件或特征,例如所述预设条件可以包括在本地保存通用格式的文件等可能会造成漏洞出现的操作。需要注意的是,本发明并不限定触发所述分析单元302和所述第一确定单元303的先后顺序。
第二确定单元304,用于当对所述待检测函数进行漏洞检测未发现漏洞,根据所述CFG中的所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述待检测函数之前的第一函数,所述第一函数与所述待检测函数具有直接调用关系。
第一检测单元305,用于结合所述待检测函数对所述第一函数进行漏洞检测。
举例说明,若所述第一确定单元303确定出的一条具有漏洞形成可能的语句A属于如图2所示的函数7中的一条语句,那么所述待检测函数就可以为函数7。在一些需要多个函数参与才能形成漏洞的情况下,例如语句A中具有变量,语句A具体的结果需要通过其他函数对所述变量的赋值后才能确定时,那么,直接对所述待检测函数也就是函数7进行漏洞检测将无法发现漏洞。
故当对函数7进行漏洞检测未发现漏洞时,需要根据所述CFG确定出所述第一函数,在图2所示的CFG结构中,函数4和函数5均与函数7具有调用关系,且函数4和函数5的调用顺序均在调用函数7之前。若函数4和函数5均与所述漏洞形成相关,则函数4和函数5均可以为所述第一函数。需要注意的是,所述第一函数与所述待检测函数具有直接调用关系,从图2所示结构中,假设函数3和函数1与所述漏洞形成相关,而且函数3和函数1的调用顺序也显然是在调用函数7(待检测函数)之前,但是函数3与函数7之间并不具备直接调用关系,而是通过函数5的一种间接调用关系,故在函数7为所述待检测函数的情况下,函数3并不能作为所述第一函数。同理函数1也不能作为所述第一函数。而只有与函数7具有直接调用关系的函数4和函数5可以作为所述第一函数。
可以结合函数7(待检测函数)对函数4(第一函数)进行漏洞检测,以及也可以结合函数7(待检测函数)对函数5(第一函数)进行漏洞检测。针对其中包括函数5的一支来说,由于所述漏洞的形成需要多个函数参与,也就是说至少需要函数7和函数5一起参与才可能形成漏洞,通过考虑函数5对函数7的影响例如对函数7中的语句A的赋值的情况,对函数5进行漏洞检测。由此可以有效检测出由两个函数共同参与才能形成的漏洞,提高了检测漏洞的能力。
由上述实施例可以看出,当通过检测具有出现漏洞可能性的待检测函数未检测出漏洞时,可以根据通过对CIL分析得到对应的CFG,通过所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述待检测函数之前的第一函数,并结合所述待检测函数对所述第一函数进行漏洞检测,由此可以提高检测出需要多个函数共同参与才能造成的漏洞的可能性,提高了发现漏洞的准确性,降低了通过安装包安装App为***带来的安全隐患的可能。
实施例四
在需要多个函数共同参与才能造成漏洞的情况下,可能会出现多于两个函数才能造成漏洞的情况。为此,本实施例将在图3所对应实施例的基础上,进一步解决需要多于两个函数共同参与才能造成漏洞的情况。
图4为本发明实施例提供的一种应用程序安装包的漏洞检测装置的装置结构图,还包括:
第二检测单元401,用于当所述第一检测单元305未发现漏洞,对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测,直到发现漏洞或遍历完根据所述CFG中所述调用关系确定的与所述漏洞形成相关的函数;
其中,所述第二检测单元401对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测,具体包括结合所述待检测函数、所述第一函数以及与所述漏洞形成相关的,调用顺序在调用所述第一函数之前,调用所述第二函数之后的函数,对所述第二函数进行漏洞检测,所述第二函数与所述漏洞形成相关,与所述第一函数具有直接或间接的调用关系,调用顺序在调用所述第一函数之后;若未发现漏洞,根据所述CFG中的所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述第二函数之前的第三函数,所述第三函数与所述第二函数具有直接调用关系;结合所述待检测函数、所述第一函数、与所述漏洞形成相关的,调用顺序在调用所述第一函数之前,调用所述第二函数之后的函数以及所述第二函数,对所述第三函数进行漏洞检测。
举例说明,所述回溯递归查找可以理解为根据调用关系以及调用顺序,反向(与调用顺序相反)的一种查找过程,同时还需要注意查找到的函数需要与所述漏洞形成相关。以图2为例,函数7通过回溯递归查找到的函数可以为函数4和函数5,假设其中只有函数5与所述漏洞形成相关,那么通过对与所述漏洞形成相关的函数进行回溯递归查找只能查找到函数5,进一步查找到函数5的上一级函数:函数3(假设函数3与所述漏洞形成相关),再进一步查找到函数3的上一级函数:函数1(假设函数1与所述漏洞形成相关)。这里所说的函数X的上一级函数可以理解为与所述漏洞形成相关,调用顺序在调用所述函数X之前,且与所述函数X具有直接调用关系的函数。
通过图2所示的结构图进行举例说明,假设函数1、函数3和函数5均与所述漏洞形成相关,函数7为所述待检测函数。在本发明实施例中,函数5可以理解为所述第一函数,若结合函数7对函数5进行漏洞检测未发现漏洞,则对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测的过程可以为:函数3可以理解为第二函数,结合函数7和函数5对函数3进行漏洞检测,若未发现漏洞,函数1可以理解为第三函数,将结合函数7、函数5和函数3对函数1进行漏洞分析。若调用关系更多,参与的函数更多,也可以通过本实施例中的回溯递归的方式依次进行漏洞查找,直到发现漏洞或遍历完根据所述CFG中所述调用关系确定的与所述漏洞形成相关的函数,本发明不再对具有更多调用关系的CFG结构进行一一穷举。
所述遍历完根据所述CFG中所述调用关系确定的与所述漏洞形成相关的函数可以理解为进行漏洞检测的函数为入度函数的情况,所谓入度函数可以理解为与入度函数具有调用关系的函数的调用顺序均在调用所述入度函数之后,也就是说在所处调用关系链中最先调用的函数。可选的,若所述对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测,遍历完根据所述CFG中所述调用关系确定的与所述漏洞形成相关的函数,未发现漏洞,则判断所述待检测安装包没有漏洞。这种结束回溯递归查找并结束漏洞检测的条件,可以使得在本发明实施例中,可以尽可能的查找到由多个函数参与形成的漏洞,提高App安装包的安全性。
通过本实施例可以看出,当通过检测所述第一函数还不能检测出漏洞时,将根据所述CFG中的调用关系和调用顺序,对与所述漏洞形成相关的函数进行回溯递归查找,直到发现漏洞或者漏洞查找的函数为入度函数为止。这样的查找方式可以更加彻底的检测出需要多个函数共同参与才能造成的漏洞,进一步提高了发现漏洞的准确性。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到上述实施例方法中的全部或部分步骤可借助软件加通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者诸如媒体网关等网络通信设备)执行本发明各个实施例或者实施例的某些部分所述的方法。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备及***实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的设备及***实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本发明的优选实施方式,并非用于限定本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种应用程序安装包的漏洞检测方法,其特征在于,所述方法包括:
获取待检测安装包的通用中间语言CIL,所述CIL包括多个函数;
对所述CIL进行控制流图CFG分析,得到所述CIL的CFG,所述CFG包括所述CIL中所述多个函数之间的调用关系和调用顺序;
通过预设条件分析所述CIL,确定漏洞入口点语句以及包含所述漏洞入口点语句的待检测函数,所述漏洞入口点语句为具有漏洞形成条件的语句;
当对所述待检测函数进行漏洞检测未发现漏洞,根据所述CFG中的所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述待检测函数之前的第一函数,所述第一函数与所述待检测函数具有直接调用关系;
结合所述待检测函数对所述第一函数进行漏洞检测。
2.根据权利要求1所述的方法,其特征在于,当结合所述待检测函数对所述第一函数进行漏洞检测未发现漏洞,还包括:
对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测,直到发现漏洞或遍历完根据所述CFG中所述调用关系确定的与所述漏洞形成相关的函数;
其中,对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测具体包括:
结合所述待检测函数、所述第一函数以及与所述漏洞形成相关的,调用顺序在调用所述第一函数之前,调用所述第二函数之后的函数,对所述第二函数进行漏洞检测,所述第二函数与所述漏洞形成相关,与所述第一函数具有直接或间接的调用关系,调用顺序在调用所述第一函数之后;
若未发现漏洞,根据所述CFG中的所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述第二函数之前的第三函数,所述第三函数与所述第二函数具有直接调用关系;
结合所述待检测函数、所述第一函数、与所述漏洞形成相关的,调用顺序在调用所述第一函数之前,调用所述第二函数之后的函数以及所述第二函数,对所述第三函数进行漏洞检测。
3.根据权利要求2所述的方法,其特征在于,
若所述对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测,遍历完根据所述CFG中所述调用关系确定的与所述漏洞形成相关的函数,未发现漏洞,则判断所述待检测安装包没有漏洞。
4.根据权利要求1所述的方法,其特征在于,
所述CIL具体为编译器Smali语言。
5.根据权利要求1所述的方法,其特征在于,
所述待检测安装包为应用于安卓Android***中的安装包。
6.一种应用程序安装包的漏洞检测装置,其特征在于,包括:
获取单元,用于获取待检测安装包的通用中间语言CIL,所述CIL包括多个函数;
分析单元,用于对所述CIL进行控制流图CFG分析,得到所述CIL的CFG,所述CFG包括所述CIL中所述多个函数之间的调用关系和调用顺序;
第一确定单元,用于通过预设条件分析所述CIL,确定漏洞入口点语句以及包含所述漏洞入口点语句的待检测函数,所述漏洞入口点语句为具有漏洞形成条件的语句;
第二确定单元,用于当对所述待检测函数进行漏洞检测未发现漏洞,根据所述CFG中的所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述待检测函数之前的第一函数,所述第一函数与所述待检测函数具有直接调用关系;
第一检测单元,用于结合所述待检测函数对所述第一函数进行漏洞检测。
7.根据权利要求6所述的装置,其特征在于,还包括:
第二检测单元,用于当所述第一检测单元未发现漏洞,对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测,直到发现漏洞或遍历完根据所述CFG中所述调用关系确定的与所述漏洞形成相关的函数;
其中,所述第二检测单元对与所述漏洞形成相关的函数进行回溯递归查找,并进行漏洞检测,具体包括结合所述待检测函数、所述第一函数以及与所述漏洞形成相关的,调用顺序在调用所述第一函数之前,调用所述第二函数之后的函数,对所述第二函数进行漏洞检测,所述第二函数与所述漏洞形成相关,与所述第一函数具有直接或间接的调用关系,调用顺序在调用所述第一函数之后;若未发现漏洞,根据所述CFG中的所述调用关系确定与所述漏洞形成相关且调用顺序在调用所述第二函数之前的第三函数,所述第三函数与所述第二函数具有直接调用关系;结合所述待检测函数、所述第一函数、与所述漏洞形成相关的,调用顺序在调用所述第一函数之前,调用所述第二函数之后的函数以及所述第二函数,对所述第三函数进行漏洞检测。
8.根据权利要求7所述的装置,其特征在于,
若所述第二检测单元未发现漏洞,则判断所述待检测安装包没有漏洞。
9.根据权利要求6所述的装置,其特征在于,
所述CIL具体为编译器Smali语言。
10.根据权利要求6所述的装置,其特征在于,
所述待检测安装包为应用于安卓Android***中的安装包。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510196968.0A CN106156630A (zh) | 2015-04-23 | 2015-04-23 | 一种应用程序安装包的漏洞检测方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510196968.0A CN106156630A (zh) | 2015-04-23 | 2015-04-23 | 一种应用程序安装包的漏洞检测方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106156630A true CN106156630A (zh) | 2016-11-23 |
Family
ID=57347548
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510196968.0A Pending CN106156630A (zh) | 2015-04-23 | 2015-04-23 | 一种应用程序安装包的漏洞检测方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106156630A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108153659A (zh) * | 2016-12-02 | 2018-06-12 | 腾讯科技(深圳)有限公司 | 程序漏洞检测方法及相关装置 |
CN108959920A (zh) * | 2017-05-26 | 2018-12-07 | 阿里巴巴集团控股有限公司 | 一种应用程序风险操作识别方法及装置 |
CN108959931A (zh) * | 2017-05-24 | 2018-12-07 | 阿里巴巴集团控股有限公司 | 漏洞检测方法及装置、信息交互方法及设备 |
CN109101819A (zh) * | 2017-06-21 | 2018-12-28 | 中兴通讯股份有限公司 | 一种漏洞检测方法及终端、存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102945347A (zh) * | 2012-09-29 | 2013-02-27 | 中兴通讯股份有限公司 | 一种检测Android恶意软件的方法、***及设备 |
CN103164331A (zh) * | 2011-12-15 | 2013-06-19 | 阿里巴巴集团控股有限公司 | 一种应用程序的漏洞检测方法和装置 |
CN103473507A (zh) * | 2013-09-25 | 2013-12-25 | 西安交通大学 | 一种基于方法调用图的Android恶意软件检测方法 |
CN103714000A (zh) * | 2013-12-18 | 2014-04-09 | 杭州电子科技大学 | 一种面向敏感区域的嵌入式软件测试用例生成方法 |
CN104484607A (zh) * | 2014-12-16 | 2015-04-01 | 上海交通大学 | Android应用程序安全性测试的通用方法及*** |
-
2015
- 2015-04-23 CN CN201510196968.0A patent/CN106156630A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103164331A (zh) * | 2011-12-15 | 2013-06-19 | 阿里巴巴集团控股有限公司 | 一种应用程序的漏洞检测方法和装置 |
CN102945347A (zh) * | 2012-09-29 | 2013-02-27 | 中兴通讯股份有限公司 | 一种检测Android恶意软件的方法、***及设备 |
CN103473507A (zh) * | 2013-09-25 | 2013-12-25 | 西安交通大学 | 一种基于方法调用图的Android恶意软件检测方法 |
CN103714000A (zh) * | 2013-12-18 | 2014-04-09 | 杭州电子科技大学 | 一种面向敏感区域的嵌入式软件测试用例生成方法 |
CN104484607A (zh) * | 2014-12-16 | 2015-04-01 | 上海交通大学 | Android应用程序安全性测试的通用方法及*** |
Non-Patent Citations (2)
Title |
---|
任昌丁: "《软件工程》", 31 July 2012 * |
吴世忠等: "《信息安全技术》", 30 April 2014 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108153659A (zh) * | 2016-12-02 | 2018-06-12 | 腾讯科技(深圳)有限公司 | 程序漏洞检测方法及相关装置 |
CN108959931A (zh) * | 2017-05-24 | 2018-12-07 | 阿里巴巴集团控股有限公司 | 漏洞检测方法及装置、信息交互方法及设备 |
CN108959931B (zh) * | 2017-05-24 | 2022-03-01 | 阿里巴巴集团控股有限公司 | 漏洞检测方法及装置、信息交互方法及设备 |
CN108959920A (zh) * | 2017-05-26 | 2018-12-07 | 阿里巴巴集团控股有限公司 | 一种应用程序风险操作识别方法及装置 |
CN109101819A (zh) * | 2017-06-21 | 2018-12-28 | 中兴通讯股份有限公司 | 一种漏洞检测方法及终端、存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103577324B (zh) | 移动应用中隐私信息泄露的静态检测方法 | |
CN103984900B (zh) | Android应用漏洞检测方法及*** | |
CN108268371B (zh) | 面向Android应用的智能模糊测试方法 | |
CN104732152B (zh) | 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法 | |
CN106156630A (zh) | 一种应用程序安装包的漏洞检测方法和装置 | |
CN108459954B (zh) | 应用程序漏洞检测方法和装置 | |
CN110287693B (zh) | 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法 | |
CN104021084A (zh) | 一种Java源代码缺陷检测方法及装置 | |
CN104462962B (zh) | 一种检测未知恶意代码和二进制漏洞的方法 | |
JP2017045446A (ja) | ソフトウェアプログラムを修復する方法、記憶媒体及びシステム | |
US11888885B1 (en) | Automated security analysis of software libraries | |
CN109255240B (zh) | 一种漏洞处理方法和装置 | |
CN113158197B (zh) | 一种基于主动iast的sql注入漏洞检测方法、*** | |
CN105022958A (zh) | 一种安卓应用中基于代码库安全规约的应用程序漏洞检测分析方法 | |
CN106681923B (zh) | 一种软件测评方法及装置 | |
CN111290950B (zh) | 程序测试中测试点获取方法、装置、存储介质和设备 | |
CN110363004A (zh) | 一种代码漏洞检测方法、装置、介质及设备 | |
CN105204985A (zh) | 漏洞检测方法及装置 | |
CN107193732A (zh) | 一种基于路径比对的校验函数定位方法 | |
Alves et al. | Prioritizing test cases for early detection of refactoring faults | |
CN109522235A (zh) | 一种针对安卓动态加载的隐私泄露检测的方法 | |
CN108897678B (zh) | 静态代码检测方法和静态代码检测***、存储设备 | |
CN106650439A (zh) | 检测可疑应用程序的方法及装置 | |
CN105701004B (zh) | 一种应用测试方法和装置 | |
CN107798244A (zh) | 一种检测远程代码执行漏洞的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20161123 |
|
RJ01 | Rejection of invention patent application after publication |