CN113468534B - 针对安卓应用程序的漏洞检测方法及相关装置 - Google Patents
针对安卓应用程序的漏洞检测方法及相关装置 Download PDFInfo
- Publication number
- CN113468534B CN113468534B CN202111018641.6A CN202111018641A CN113468534B CN 113468534 B CN113468534 B CN 113468534B CN 202111018641 A CN202111018641 A CN 202111018641A CN 113468534 B CN113468534 B CN 113468534B
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- android application
- control flow
- information
- application program
- 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/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
- 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
Abstract
本公开提供一种针对安卓应用程序的漏洞检测方法及相关装置,包括:构建目标安卓应用程序的控制流图;基于控制流图,构建目标安卓应用程序的程序依赖图;根据程序依赖图,构建目标安卓应用程序的漏洞特征;利用漏洞特征训练预先构建的机器学习模型,得到漏洞检测模型,并基于漏洞检测模型检测目标安卓应用程序的漏洞。本公开提供的针对安卓应用程序的漏洞检测方法及相关装置,根据获取到的具有语义的安卓应用程序的漏洞特征,训练得到具有上下文感知的漏洞检测模型,能够快速有效的检测安卓应用程序的漏洞。
Description
技术领域
本公开涉及信息安全技术领域,尤其涉及一种针对安卓应用程序的漏洞检测方法及相关装置。
背景技术
近几年,安卓应用程序的数量一直处于快速增长中,但是随之增长的还有安卓应用程序所产生的漏洞。如《2020年我国互联网网络安全态势综述》所述,国家信息安全漏洞共享平台(CNVD)收录的安全漏洞数量中移动互联网漏洞占全年收录数量的8.0%,同2019年相比,同比增长为37.1%。所有的安卓应用程序的漏洞都存在被攻击者潜在利用的可能,因此更全面的了解漏洞,从而发现漏洞并修复它,是避免软件遭受攻击的有效方法。
为了更快速有效地发现大量安卓应用程序中的漏洞,相关技术中已经有了一些研究成果,包括基于规则的漏洞检测和基于学习的漏洞检测。基于规则的漏洞检测方法需要依赖人工的专家经验提取规则,这样既耗费人力,又存在大量的漏报。基于学习的安卓应用程序漏洞检测方法则缺少针对安卓本身运行机制所导致的漏洞的研究。也就是说,现有的两种漏洞检测方法的效率以及准确率较低。
发明内容
有鉴于此,本公开的目的在于提出一种针对安卓应用程序的漏洞检测方法及相关装置。
基于上述目的,本公开提供了一种针对安卓应用程序的漏洞检测方法,包括:
构建目标安卓应用程序的控制流图;
基于所述控制流图,构建所述目标安卓应用程序的程序依赖图;
根据所述程序依赖图,获取所述目标安卓应用程序的疑似漏洞点;提取所述疑似漏洞点的前向切片和后向切片;提取所述前向切片和后向切片中的方法,并提取所述方法中的对象的前向切片和后向切片;将所有所述前向切片和后向切片存储至树结构中;遍历所述树结构中的所述前向切片和后向切片,将所有所述前向切片和后向切片汇总形成所述疑似漏洞点的代码抽象表达式,作为所述目标安卓应用程序的漏洞特征;
利用所述漏洞特征训练预先构建的机器学习模型,得到漏洞检测模型,并基于所述漏洞检测模型检测所述目标安卓应用程序的漏洞。
基于同一发明构思,本公开提供了一种针对安卓应用程序的漏洞检测装置,包括:
控制流图构建模块,被配置为构建目标安卓应用程序的控制流图;
程序依赖图构建模块,被配置为基于所述控制流图,构建所述目标安卓应用程序的程序依赖图;
漏洞特征构建模块,被配置为根据所述程序依赖图,获取所述目标安卓应用程序的疑似漏洞点;提取所述疑似漏洞点的前向切片和后向切片;提取所述前向切片和后向切片中的方法,并提取所述方法中的对象的前向切片和后向切片;将所有所述前向切片和后向切片存储至树结构中;遍历所述树结构中的所述前向切片和后向切片,将所有所述前向切片和后向切片汇总形成所述疑似漏洞点的代码抽象表达式,作为所述目标安卓应用程序的漏洞特征;
漏洞检测模型构建模块,被配置为利用所述漏洞特征训练预先构建的机器学习模型,得到漏洞检测模型,并基于所述漏洞检测模型检测所述目标安卓应用程序的漏洞。
基于同一发明构思,本公开提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述的方法。
基于同一发明构思,本公开提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行上述方法。
从上面所述可以看出,本公开提供的针对安卓应用程序的漏洞检测方法及相关装置,包括:构建目标安卓应用程序的控制流图;基于控制流图,构建目标安卓应用程序的程序依赖图;根据程序依赖图,构建具有上下文关联的目标安卓应用程序的漏洞特征;利用漏洞特征训练预先构建的机器学习模型,得到漏洞检测模型,并基于漏洞检测模型检测目标安卓应用程序的漏洞,本公开得到的漏洞特征保持了相对的逻辑顺序性,能够用于快速有效的检测安卓应用程序的漏洞。
附图说明
为了更清楚地说明本公开或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例提供的针对安卓应用程序的漏洞检测方法的一种流程示意图;
图2为根据本公开实施例提供的漏洞特征修正方法的一种流程示意图;
图3为本公开实施例提供的针对安卓应用程序的漏洞检测装置的一种结构示意图;
图4为本公开实施例提供的一种更为具体的电子设备硬件结构示意图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
需要说明的是,除非另外定义,本公开实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
如背景技术部分所述,相关技术在进行安卓应用程序的漏洞检测时,效率以及准确率较低,并且,相关技术中,基于代码中关键字符串计数的特征方法无法表现语义信息,也无法体现漏洞的上下文关联信息。有鉴于此,本公开提出一种针对安卓应用程序的漏洞检测方法及相关装置,根据获取到的具有语义的安卓应用程序的漏洞特征,训练得到具有上下文感知的漏洞检测模型,能够快速有效的检测安卓应用程序的漏洞。
图1为本公开实施例提供的针对安卓应用程序的漏洞检测方法的一种流程示意图;针对安卓应用程序的漏洞检测方法,包括:
S110、构建目标安卓应用程序的控制流图。
控制流图(Control Flow Graph,CFG),也叫控制流程图,是一个过程或程序的抽象表现,是用在编译器中的一个抽象数据结构,由编译器在内部维护,代表了一个程序执行过程中会遍历到的所有路径。它用图的形式表示一个过程内所有基本块执行的可能流向,也能反映一个过程的实时执行过程。
其中,S110具体包括:
基于预先构建的入口节点,构建所述目标安卓应用程序的控制流图GFG=(N,E,nentry,nexit)|E={<nk,nw>|nk,nw∈N};
其中,GFG表示控制流图,N表示控制流图的节点集,E表示控制流图的边集,nentry和nexit分别表示目标安卓应用程序的入口节点和出口节点,nk和nw表示控制流图的节点集中的两个节点。
目标安卓应用程序中的每个语句都对应控制流图中的一个节点,因此nk和nw表示控制流图的节点集中的两个节点,也分别与目标安卓应用程序中的语句对应。
对于边集E={<nk,nw>|nk,nw∈N},nk执行后,可能立即执行nw。
控制流图具有唯一的起始节点START和唯一的终止节点STOP。控制流图中的每个节点至多只能有两个直接后继。对于有两个直接后继的节点v,其出边具有属性“T”或“F”,并且对于控制流图中的任意节点N,均存在一条从START经N到达STOP的路径。
控制流图中每个在图形中的节点代表一个基本块,例如,没有任何跳跃或跳跃目标的直线代码块;跳跃目标以一个块开始,和以一个块结束。定向边缘被用于代表在控制流中的跳跃。在那里,在大部分介绍中,两个特定的设计块:项目块,通过它控制到流图的输入,和编辑块,通过它全面控制流输出。
控制流图能反映出一个过程的许多信息,例如包括:一个过程的入口(第一个基本块)和出口(最后一个基本块);一个基本块的所有可能的下一个基本块(所有的出口);一个基本块的所有可能的上一个基本块(所有的入口);一个基本块所对应的语句表。对于一个动态控制流图而言,它还包含下列信息:当前活动的基本块;上次执行的基本块;执行流向,即上次执行的基本块到当前活动基本块之间的连线。
将控制流图CFG应用到安卓应用程序中的一个难点在于,安卓应用程序中没有主入口函数(即没有入口节点),因此,在相关技术中,不能实现构建安卓应用程序的控制流图。但是,本公开通过预先构建一些必要的入口节点,能够实现构建安卓应用程序的控制流图。具体的,本公开通过分析安卓的四种组件的启动入口节点和中间状态的转换关系以及安卓的UI界面反射入口等特性,构建了如表1所示的入口节点。
表1 预先构建的入口节点
S120、基于所述控制流图,构建所述目标安卓应用程序的程序依赖图。
程序依赖图(Program Dependence Graph,PDG)是程序的一种图形表示,它是带有标记的有向多重图。程序依赖图能够表示程序的控制依赖和数据依赖关系。
其中,S120具体包括:
以所述控制流图为基础,去掉所述控制流图的控制流边,加入数据和新的控制流边,得到所述程序依赖图PDG=(V’,E’)|E’={<sk,sw>|sk,sw∈V’};
其中,PDG表示程序依赖图,V’表示程序依赖图的节点集,E’表示程序依赖图的边集,sk,sw表示程序依赖图的节点集中的两个节点。
任意一个节点sk或者sw表示语句或控制谓词表达式,边集E’表示程序组成部分之间的依赖关系,包括控制依赖和数据依赖。如果PDG中的语句sk和sw可以通过控制流或者数据流来彼此关联,则两点之前存在一条边。程序依赖图包括了数据依赖图和程序依赖图。数据依赖图定义了数据之间的约束关系,控制依赖图定义了语句执行情况的约束关系。因此,PDG中既包含程序中语句之间的数据依赖关系又包含了控制依赖关系,所以可减少漏洞信息搜索空间。
S130、根据所述程序依赖图,获取所述目标安卓应用程序的疑似漏洞点;提取所述疑似漏洞点的前向切片和后向切片;提取所述前向切片和后向切片中的方法,并提取所述方法中的对象的前向切片和后向切片;将所有所述前向切片和后向切片存储至树结构中;遍历所述树结构中的所述前向切片和后向切片,将所有所述前向切片和后向切片汇总形成所述疑似漏洞点的代码抽象表达式,作为所述目标安卓应用程序的漏洞特征。
获取所述目标安卓应用程序的疑似漏洞点。
选取疑似存在漏洞的疑似漏洞点,作为一个示例,获取IIS(互联网信息服务,Internet Information Services)的疑似漏洞点为inp。
本公开现阶段已知:目标安卓应用程序的程序依赖图PDG,疑似漏洞点inp以及存储切片代码treeNode。
目标:疑似漏洞点inp的代码抽象表达式,即漏洞特征。
提取所述疑似漏洞点的前向切片和后向切片。
提取所述前向切片和后向切片中的方法,并提取所述方法中的对象的前向切片和后向切片。
所述方法即取设置参数的方法,将每一个涉及参数设置的方法都作为新的疑似漏洞点,并提取所述疑似漏洞点的前向切片和后向切片。
将所有所述前向切片和后向切片存储至树结构中。
遍历所述树结构中的所述前向切片和后向切片,将所有所述前向切片和后向切片汇总形成所述疑似漏洞点的代码抽象表达式,作为所述目标安卓应用程序的所述漏洞特征。
得到的所述疑似漏洞点的代码抽象表达式保持了相对的逻辑顺序性。
漏洞特征中包含自定义的变量和应用程序编程接口API等噪声数据,本公开进一步的优化漏洞特征以便于模型更好的识别漏洞。
图2为根据本公开实施例提供的漏洞特征修正方法的一种流程示意图,其中,在所述根据所述程序依赖图,构建所述目标安卓应用程序的漏洞特征之后,还包括:
S210、移除所述漏洞特征中的所述方法的异常处理信息。
从目标安卓应用程序中提取出来的漏洞特征中包含了方法的异常处理信息,这些异常处理信息不会影响到能否检测到漏洞的存在,但是会降低模型检测漏洞的准确率。经分析,这些异常处理信息是在符号@后的字符,因此。本公开获取符号@在所述漏洞特征中的位置,移除所述位置后面的表示异常处理信息的字符串,以修正所述漏洞特征。
S220、统一所述漏洞特征中的自定义信息。
例如,每个开发者自定义的变量命名不同,所以自定义变量就是噪声数据,会影响模型对漏洞的识别。
其中,所述自定义信息具体包括自定义变量信息、自定义方法信息和自定义类信息;则S220,具体包括:
获取所述漏洞特征中的所述自定义信息,按照先后顺序对所述自定义信息进行替换变成统一的命名方式;其中,不同的所述自定义变量信息、自定义方法信息和自定义类信息按照序号进行区分;相同的所述自定义变量信息、自定义方法信息和自定义类信息在不同的位置保持命名一致。
在一些实施方式中,将自定义信息进行统一的重新定义,以自定义变量信息为例,获取漏洞特征中每个自定义变量vari,然后按照其先后顺序i对其进行替换变成统一的命名VERi,这样漏洞特征中的不同i的自定义变量只是编号不同,其他的都是统一的VERi字符串表示;同样的方法依次将自定义方法信息变成FUNi,自定义类信息变成CLASSi;不同的自定义变量信息、自定义方法信息和自定义类信息按照序号i进行区分;相同的自定义变量信息、自定义方法信息和自定义类信息在不同的位置保持命名一致。
S230、移除所述漏洞特征中的应用程序编程接口信息的包名只保留类名。
获取所述漏洞特征中的所述应用程序编程接口信息,去掉所有的所述应用程序编程接口信息的包名只保留类名。
漏洞特征中,应用程序编程接口API的方法都是展示的完整的全限定位名,如Java/lang/String,也就是包含了类所在的包名。对于API只需要类名就可以知道它属于哪个包,包名对于漏洞的识别是无意义的信息。因此,本公开获取所述漏洞特征中的所述应用程序编程接口信息,去掉所有的所述应用程序编程接口信息的包名只保留类名。例如,Java/lang/String简化后为String。
S240、对于同一所述对象的所述方法进行组合,得到修正的漏洞特征。
对比所述漏洞特征来说,所述修正的漏洞特征含有较少噪声数据,能够较大程度还原所述目标安卓应用程序的原本语句表达形式。
S140、利用所述漏洞特征训练预先构建的机器学习模型,得到漏洞检测模型,并基于所述漏洞检测模型检测所述目标安卓应用程序的漏洞。
经过上述阶段后的漏洞特征仍然是字符串(代码)的形式,这种格式的特征,模型是无法直接识别的,所以也就无法将它当作输入变量,需要将特征转换成模型可识别的向量。
其中,具体包括:
对所述漏洞特征进行向量化处理,得到漏洞特征词向量,并将所述漏洞特征词向量加入到模型训练数据集中。
在一些实施方式中,利用word2vector工具对字符串形式的漏洞特征进行向量化处理,得到模型可处理的词向量;
可选的,对漏洞特征词向量进行归一化处理:如果漏洞特征词向量的长度小于预设的阈值(作为一个示例,阈值取值为200),在漏洞特征词向量后进行补0操作;如果漏洞特征词向量的长度大于阈值,从后边进行截断操作;最后统一添加至模型训练数据集中。
利用所述模型训练数据集训练预先构建的所述机器学习模型,得到所述漏洞检测模型。
所述机器学习模型包括Bi-LSTM(双向长短时记忆)模型;所述机器学习模型中加入了注意力机制。
Bi-LSTM模型是由前向LSTM与后向LSTM组合而成,可以看作是两层神经网络,第一层从左边作为系列的起始输入,在文本处理上可以理解成从句子的开头开始输入,而第二层则是从右边作为系列的起始输入,在文本处理上可以理解成从句子的最后一个词语作为输入,反向做与第一层一样的处理处理,最后对得到的两个结果进行处理。Bi-LSTM模型捕捉双向语义依赖的能力较强。
需要说明的是,本公开不涉及对于Bi-LSTM模型本身以及引入注意力机制的改进,因此,对于Bi-LSTM模型本身以及引入注意力机制,在此不再赘述。
从上面所述可以看出,本公开提供的针对安卓应用程序的漏洞检测方法及相关装置,包括:构建目标安卓应用程序的控制流图;基于控制流图,构建目标安卓应用程序的程序依赖图;根据程序依赖图,构建目标安卓应用程序的漏洞特征;利用漏洞特征训练预先构建的机器学习模型,得到漏洞检测模型,并基于漏洞检测模型检测目标安卓应用程序的漏洞。本公开提供的针对安卓应用程序的漏洞检测方法及相关装置,在一些实施例中,根据获取到的具有语义的安卓应用程序的漏洞特征,训练得到具有上下文感知的漏洞检测模型,能够快速有效的检测安卓应用程序的漏洞。
需要说明的是,本公开实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本公开实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
需要说明的是,上述对本公开的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种针对安卓应用程序的漏洞检测装置。
参考图3,所述针对安卓应用程序的漏洞检测装置,包括:
控制流图构建模块310,被配置为构建目标安卓应用程序的控制流图。
程序依赖图构建模块320,被配置为基于所述控制流图,构建所述目标安卓应用程序的程序依赖图。
漏洞特征构建模块330,被配置为根据所述程序依赖图,构建所述目标安卓应用程序的漏洞特征。
漏洞检测模型构建模块340,被配置为利用所述漏洞特征训练预先构建的机器学习模型,得到漏洞检测模型,并基于所述漏洞检测模型检测所述目标安卓应用程序的漏洞。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本公开时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的装置用于实现前述任一实施例中相应的针对安卓应用程序的漏洞检测方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的针对安卓应用程序的漏洞检测方法。
图4示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器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)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的针对安卓应用程序的漏洞检测方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
需要说明的是,本公开的实施例还可以以下方式进一步描述:
一种针对安卓应用程序的漏洞检测方法,包括:
构建目标安卓应用程序的控制流图;
基于所述控制流图,构建所述目标安卓应用程序的程序依赖图;
根据所述程序依赖图,获取所述目标安卓应用程序的疑似漏洞点;提取所述疑似漏洞点的前向切片和后向切片;提取所述前向切片和后向切片中的方法,并提取所述方法中的对象的前向切片和后向切片;将所有所述前向切片和后向切片存储至树结构中;遍历所述树结构中的所述前向切片和后向切片,将所有所述前向切片和后向切片汇总形成所述疑似漏洞点的代码抽象表达式,作为所述目标安卓应用程序的漏洞特征;
利用所述漏洞特征训练预先构建的机器学习模型,得到漏洞检测模型,并基于所述漏洞检测模型检测所述目标安卓应用程序的漏洞。
可选的,其中,所述构建目标安卓应用程序的控制流图,包括:
基于预先构建的入口节点,构建所述目标安卓应用程序的控制流图GFG=(N,E,nentry,nexit)|E={<nk,nw>|nk,nw∈N};
其中,GFG表示控制流图,N表示控制流图的节点集,E表示控制流图的边集,nentry和nexit分别表示目标安卓应用程序的入口节点和出口节点,nk和nw表示控制流图的节点集中的两个节点。
可选的,其中,所述基于所述控制流图,构建所述目标安卓应用程序的程序依赖图,包括:
以所述控制流图为基础,去掉所述控制流图的控制流边,加入数据和新的控制流边,得到所述程序依赖图PDG=(V’,E’)|E’={<sk,sw>|sk,sw∈V’};
其中,PDG表示程序依赖图,V’表示程序依赖图的节点集,E’表示程序依赖图的边集,sk,sw表示程序依赖图的节点集中的两个节点。
可选的,其中,在得到所述目标安卓应用程序的漏洞特征之后,还包括:
移除所述漏洞特征中的所述方法的异常处理信息;
统一所述漏洞特征中的自定义信息;
移除所述漏洞特征中的应用程序编程接口信息的包名只保留类名;
对于同一所述对象的所述方法进行组合,得到修正的漏洞特征。
可选的,其中,所述自定义信息包括自定义变量信息、自定义方法信息和自定义类信息;所述统一所述漏洞特征中的自定义信息,包括:
获取所述漏洞特征中的所述自定义信息,按照先后顺序对所述自定义信息进行替换变成统一的命名方式;其中,不同的所述自定义变量信息、自定义方法信息和自定义类信息按照序号进行区分;相同的所述自定义变量信息、自定义方法信息和自定义类信息在不同的位置保持命名一致。
可选的,其中,所述利用所述漏洞特征训练预先构建的机器学习模型,得到漏洞检测模型,并基于所述漏洞检测模型检测所述目标安卓应用程序的漏洞,包括:
对所述漏洞特征进行向量化处理,得到漏洞特征词向量,并将所述漏洞特征词向量加入到模型训练数据集中;
利用所述模型训练数据集训练预先构建的所述机器学习模型,得到所述漏洞检测模型;所述机器学习模型包括Bi-LSTM模型;所述机器学习模型中加入了注意力机制。
一种针对安卓应用程序的漏洞检测装置,包括:
控制流图构建模块,被配置为构建目标安卓应用程序的控制流图;
程序依赖图构建模块,被配置为基于所述控制流图,构建所述目标安卓应用程序的程序依赖图;
漏洞特征构建模块,被配置为根据所述程序依赖图,获取所述目标安卓应用程序的疑似漏洞点;提取所述疑似漏洞点的前向切片和后向切片;提取所述前向切片和后向切片中的方法,并提取所述方法中的对象的前向切片和后向切片;将所有所述前向切片和后向切片存储至树结构中;遍历所述树结构中的所述前向切片和后向切片,将所有所述前向切片和后向切片汇总形成所述疑似漏洞点的代码抽象表达式,作为所述目标安卓应用程序的漏洞特征;
漏洞检测模型构建模块,被配置为利用所述漏洞特征训练预先构建的机器学习模型,得到漏洞检测模型,并基于所述漏洞检测模型检测所述目标安卓应用程序的漏洞。
一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述的方法。
一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行上述方法。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本公开实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
另外,为简化说明和讨论,并且为了不会使本公开实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本公开实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本公开实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本公开实施例。因此,这些描述应被认为是说明性的而不是限制性的。
尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
本公开实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本公开实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。
Claims (8)
1.一种针对安卓应用程序的漏洞检测方法,包括:
基于预先构建的入口节点,构建目标安卓应用程序的控制流图;其中,所述预先构建的入口节点包括:onCreate(Bundle savedInstanceState)、onClick(View v)、onStart()、onCreate()、onStart(Intent intent)、onBind(Intent intent)、onUnbind(Intentintent)、onRebind(Intent intent)和onReceive(Context curContext, IntentbroadcastMsg);
基于所述控制流图,构建所述目标安卓应用程序的程序依赖图;
根据所述程序依赖图,获取所述目标安卓应用程序的疑似漏洞点;提取所述疑似漏洞点的前向切片和后向切片;提取所述前向切片和后向切片中的方法,并提取所述方法中的对象的前向切片和后向切片;其中,所述方法即设置参数的方法,将每一个涉及参数设置的方法都作为新的疑似漏洞点,并提取所述新的疑似漏洞点的前向切片和后向切片;将所有所述前向切片和后向切片存储至树结构中;遍历所述树结构中的所述前向切片和后向切片,将所有所述前向切片和后向切片汇总形成所述疑似漏洞点的代码抽象表达式,作为所述目标安卓应用程序的漏洞特征;其中,在得到所述目标安卓应用程序的漏洞特征之后,还包括:移除所述漏洞特征中的所述方法的异常处理信息;统一所述漏洞特征中的自定义信息;移除所述漏洞特征中的应用程序编程接口信息的包名,只保留类名;对于同一所述对象的所述方法进行组合,得到修正的漏洞特征;
利用所述漏洞特征训练预先构建的机器学习模型,得到漏洞检测模型,并基于所述漏洞检测模型检测所述目标安卓应用程序的漏洞。
2.根据权利要求1所述的方法,其中,所述构建目标安卓应用程序的控制流图,包括:
基于预先构建的入口节点,构建所述目标安卓应用程序的控制流图GFG=(N,E,nentry,nexit)|E={<nk,nw>|nk,nw∈N};
其中,GFG表示控制流图,N表示控制流图的节点集,E表示控制流图的边集,nentry和nexit分别表示目标安卓应用程序的入口节点和出口节点,nk和nw表示控制流图的节点集中的两个节点。
3.根据权利要求1所述的方法,其中,所述基于所述控制流图,构建所述目标安卓应用程序的程序依赖图,包括:
以所述控制流图为基础,去掉所述控制流图的控制流边,加入数据和新的控制流边,得到所述程序依赖图PDG=(V’,E’)|E’={<sk,sw>|sk,sw∈V’};
其中,PDG表示程序依赖图,V’表示程序依赖图的节点集,E’表示程序依赖图的边集,sk,sw表示程序依赖图的节点集中的两个节点。
4.根据权利要求1所述的方法,其中,所述自定义信息包括自定义变量信息、自定义方法信息和自定义类信息;所述统一所述漏洞特征中的自定义信息,包括:
获取所述漏洞特征中的所述自定义信息,按照先后顺序对所述自定义信息进行替换变成统一的命名方式;其中,不同的所述自定义变量信息、自定义方法信息和自定义类信息按照序号进行区分;相同的所述自定义变量信息、自定义方法信息和自定义类信息在不同的位置保持命名一致。
5.根据权利要求1所述的方法,其中,所述利用所述漏洞特征训练预先构建的机器学习模型,得到漏洞检测模型,并基于所述漏洞检测模型检测所述目标安卓应用程序的漏洞,包括:
对所述漏洞特征进行向量化处理,得到漏洞特征词向量,并将所述漏洞特征词向量加入到模型训练数据集中;
利用所述模型训练数据集训练预先构建的所述机器学习模型,得到所述漏洞检测模型;所述机器学习模型包括Bi-LSTM模型;所述机器学习模型中加入了注意力机制。
6.一种针对安卓应用程序的漏洞检测装置,包括:
控制流图构建模块,被配置为基于预先构建的入口节点,构建目标安卓应用程序的控制流图;其中,所述预先构建的入口节点包括:onCreate(Bundle savedInstanceState)、onClick(View v)、onStart()、onCreate()、onStart(Intent intent)、onBind(Intentintent)、onUnbind(Intent intent)、onRebind(Intent intent)和onReceive(ContextcurContext, Intent broadcastMsg);
程序依赖图构建模块,被配置为基于所述控制流图,构建所述目标安卓应用程序的程序依赖图;
漏洞特征构建模块,被配置为根据所述程序依赖图,获取所述目标安卓应用程序的疑似漏洞点;提取所述疑似漏洞点的前向切片和后向切片;提取所述前向切片和后向切片中的方法,并提取所述方法中的对象的前向切片和后向切片;其中,所述方法即设置参数的方法,将每一个涉及参数设置的方法都作为新的疑似漏洞点,并提取所述新的疑似漏洞点的前向切片和后向切片;将所有所述前向切片和后向切片存储至树结构中;遍历所述树结构中的所述前向切片和后向切片,将所有所述前向切片和后向切片汇总形成所述疑似漏洞点的代码抽象表达式,作为所述目标安卓应用程序的漏洞特征;其中,在得到所述目标安卓应用程序的漏洞特征之后,还被配置为:移除所述漏洞特征中的所述方法的异常处理信息;统一所述漏洞特征中的自定义信息;移除所述漏洞特征中的应用程序编程接口信息的包名,只保留类名;对于同一所述对象的所述方法进行组合,得到修正的漏洞特征;
漏洞检测模型构建模块,被配置为利用所述漏洞特征训练预先构建的机器学习模型,得到漏洞检测模型,并基于所述漏洞检测模型检测所述目标安卓应用程序的漏洞。
7.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如权利要求1至5任意一项所述的方法。
8.一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行权利要求1至5任一所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111018641.6A CN113468534B (zh) | 2021-09-01 | 2021-09-01 | 针对安卓应用程序的漏洞检测方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111018641.6A CN113468534B (zh) | 2021-09-01 | 2021-09-01 | 针对安卓应用程序的漏洞检测方法及相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113468534A CN113468534A (zh) | 2021-10-01 |
CN113468534B true CN113468534B (zh) | 2022-02-11 |
Family
ID=77867127
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111018641.6A Active CN113468534B (zh) | 2021-09-01 | 2021-09-01 | 针对安卓应用程序的漏洞检测方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113468534B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115277198A (zh) * | 2022-07-27 | 2022-11-01 | 西安热工研究院有限公司 | 一种工控系统网络的漏洞检测方法、装置及存储介质 |
CN116028941B (zh) * | 2023-03-27 | 2023-08-04 | 天聚地合(苏州)科技股份有限公司 | 接口的漏洞检测方法、装置、存储介质及设备 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130179863A1 (en) * | 2012-01-11 | 2013-07-11 | Microsoft Corporation | Bug variant detection using program analysis and pattern identification |
CN107832619B (zh) * | 2017-10-10 | 2020-12-15 | 电子科技大学 | Android平台下应用程序漏洞自动化挖掘系统及方法 |
CN107885999B (zh) * | 2017-11-08 | 2019-12-24 | 华中科技大学 | 一种基于深度学习的漏洞检测方法及系统 |
CN110245496B (zh) * | 2019-05-27 | 2021-04-20 | 华中科技大学 | 一种源代码漏洞检测方法及检测器和其训练方法及系统 |
CN112699377B (zh) * | 2020-12-30 | 2023-04-28 | 哈尔滨工业大学 | 基于切片属性图表示学习的函数级代码漏洞检测方法 |
-
2021
- 2021-09-01 CN CN202111018641.6A patent/CN113468534B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN113468534A (zh) | 2021-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113468534B (zh) | 针对安卓应用程序的漏洞检测方法及相关装置 | |
CN112262390A (zh) | 基于肯定和否定模式匹配示例的正则表达式生成 | |
US11106437B2 (en) | Lookup table optimization for programming languages that target synchronous digital circuits | |
US8578334B2 (en) | Dynamic language-based integrated development environment | |
US9524279B2 (en) | Help document animated visualization | |
US10437574B2 (en) | System and method for providing code completion features for code modules | |
WO2015165412A1 (en) | Method for modifying webpage and apparatus for modifying webpage | |
US8954928B2 (en) | Version labeling in a version control system | |
US20090319239A1 (en) | Topology modeling application that handles abstract entities through the realization of conceptual objects | |
WO2015026554A1 (en) | Efficient directed acyclic graph pattern matching to enable code partitioning and execution on heterogeneous processor cores | |
WO2019165706A1 (zh) | 表达式处理方法、装置、设备及计算机可读存储介质 | |
US11586839B2 (en) | Code completion of method parameters with machine learning | |
CN105378658A (zh) | 自动源代码生成 | |
CN111241496B (zh) | 确定小程序特征向量的方法、装置和电子设备 | |
EP4111302A1 (en) | Detection of runtime errors using machine learning | |
CN109634569B (zh) | 基于注解的流程实现方法、装置、设备及可读存储介质 | |
CN112328298A (zh) | 移动端的代码库裁剪方法及装置 | |
CN116400910A (zh) | 一种基于api替换的代码性能优化方法 | |
CN107562423B (zh) | Ui页面开发方法及装置 | |
US11194885B1 (en) | Incremental document object model updating | |
CN114462381A (zh) | 数据处理方法、装置、设备及存储介质 | |
US9542182B2 (en) | Standardization of variable names in an integrated development environment | |
CN113031952A (zh) | 深度学习模型的执行代码的确定方法、装置及存储介质 | |
CN105868113B (zh) | 字符串查找方法及装置 | |
JP6453685B2 (ja) | 演算制御装置、演算制御方法及び演算制御プログラム |
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 |