CN113419971B - 安卓***服务漏洞检测方法及相关装置 - Google Patents
安卓***服务漏洞检测方法及相关装置 Download PDFInfo
- Publication number
- CN113419971B CN113419971B CN202110978263.XA CN202110978263A CN113419971B CN 113419971 B CN113419971 B CN 113419971B CN 202110978263 A CN202110978263 A CN 202110978263A CN 113419971 B CN113419971 B CN 113419971B
- Authority
- CN
- China
- Prior art keywords
- interface
- system service
- data
- local system
- case data
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- 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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- 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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/12—Computing arrangements based on biological models using genetic models
- G06N3/126—Evolutionary algorithms, e.g. genetic algorithms or genetic programming
-
- 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/034—Test or assess a computer or a system
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Biophysics (AREA)
- Software Systems (AREA)
- Evolutionary Biology (AREA)
- Computing Systems (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Genetics & Genomics (AREA)
- Physiology (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本公开提供一种安卓***服务漏洞检测方法及相关装置,基于安卓***源码,获取本地***服务接口;获取所述本地***服务接口对应的数据类型;基于所述数据类型,利用遗传算法构造接口测试用例;基于所述接口测试用例,对所述本地***服务接口进行模糊测试,以发现所述漏洞,本公开能够有效发现安卓本地***服务的漏洞,提高安卓本地***服务的安全性。
Description
技术领域
本公开涉及***安全技术领域,尤其涉及一种安卓***服务漏洞检测方法及相关装置。
背景技术
手机端操作***占比较高的仍然是安卓,这得益于安卓***的每个版本都会开源。很多手机厂商基于这种开源自定义拥有自己特色的安卓操作***。安卓操作***提供了很多快捷实用的功能,如拍照、多媒体播放和发送彩信等功能。这些功能以安卓***服务的形式实现。然而,***服务也是攻击者青睐的的目标,一旦***服务被攻击就可以直接造成安卓***的崩溃甚至更严重的问题。尽管安卓***服务每年都会更新,但仍被报告存在大量的漏洞。这其中很多的漏洞都属于本地***服务,且在安卓官方发布的补丁中修复的漏洞中占比较高的也是由于***服务导致的。
发明内容
有鉴于此,本公开的目的在于提出一种安卓***服务漏洞检测方法及相关装置。
基于上述目的,本公开提供了一种安卓***服务漏洞检测方法,包括:
基于安卓***源码,获取本地***服务接口;
获取所述本地***服务接口对应的数据类型;
基于所述数据类型,利用遗传算法构造接口测试用例;
基于所述接口测试用例,对所述本地***服务接口进行模糊测试,以发现所述漏洞。
基于同一发明构思,本公开提供了一种安卓***服务漏洞检测装置,包括:
接口获取模块,被配置为基于安卓***源码,获取本地***服务接口;
数据类型获取模块,被配置为获取所述本地***服务接口对应的数据类型;
接口测试用例构造模块,被配置为基于所述数据类型,利用遗传算法构造接口测试用例;
模糊测试模块,被配置为基于所述接口测试用例,对所述本地***服务接口进行模糊测试,以发现所述漏洞。
基于同一发明构思,本公开提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述的方法。
基于同一发明构思,本公开提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行上述方法。
从上面所述可以看出,本公开提供的安卓***服务漏洞检测方法及相关装置,基于安卓***源码,获取本地***服务接口;获取所述本地***服务接口对应的数据类型;基于所述数据类型,利用遗传算法构造接口测试用例;基于所述接口测试用例,对所述本地***服务接口进行模糊测试,以发现所述漏洞,本公开能够有效发现安卓本地***服务的漏洞,提高安卓本地***服务的安全性。
附图说明
为了更清楚地说明本公开或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例提供的安卓***服务漏洞检测方法的一种流程示意图;
图2为根据本公开实施例提供的本地***服务接口获取方法的一种流程示意图;
图3为根据本公开实施例提供的数据类型获取方法的一种流程示意图;
图4为根据本公开实施例提供的安卓本地***服务中客户端给服务端发送服务调用的一段示例代码示意图;
图5为根据本公开实施例提供的接口测试用例构造方法的一种流程示意图;
图6为本公开实施例提供的安卓***服务漏洞检测装置的一种结构示意图;
图7为本公开实施例提供的一种更为具体的电子设备硬件结构示意图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
需要说明的是,除非另外定义,本公开实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
根据背景技术的记载可知,检测安卓本地***服务的漏洞是很有必要的,但是相关技术中针对安卓***服务的漏洞研究较少,最早在2016年Feng等人通过记录30个流行应用程序的请求来捕获目标服务的输入模型。这种方法的一个缺点是它不能恢复精确的接口传递参数的数据类型,例如,变量名和类型。此外,由于接口和数据类型的获取完全依赖于APP的使用过程中触发的功能,该方法很难无法发现被很少使用的或深层嵌套的接口的数据,也就无法发现这些接口的漏洞。次年,Iannillo等人提出一个工具Chizpurfle,它利用Java反射获取接口的参数类型,以测试非AOSP***中的自定义的JavaService的漏洞。但是这样的方法不能用于识别获取安卓本地***服务的接口和传递数据类型。也就是说,相关技术中,均不能准确有效的发现安卓本地***服务的漏洞。
有鉴于此,本公开提出一种安卓***服务漏洞检测方法及相关装置。
参考图1,其为本公开实施例提供的安卓***服务漏洞检测方法的一种流程示意图;面向安卓***服务的漏洞检测方法,包括:
S110、基于安卓***源码,获取本地***服务接口。
本公开基于安卓原生***实现,因此基于安卓***源码(AOSP,Android OpenSource Project)获取本地***服务接口(interface)。
参考图2,其为根据本公开实施例提供的本地***服务接口获取方法的一种流程示意图。其中,S110具体包括:
S210、将所述安卓***源码编译为C++语言格式的安卓***源码文件。
AOSP中***服务接口的实现形式有两种:一种是C++语言格式的文件;另一种是ALDL(Android Interface Definition Language,Android接口定义语言)语言格式的文件。其中,ALDL文件可以在AOSP编译后转换成C++语言格式的文件。为了基于AOSP,在客户端中找到所有属于本地***服务的的接口(包括接口的定义类和函数),本公开首先将安卓***源码统一为C++语言格式,为了方便表述,将统一为C++语言格式的安卓***源码称为安卓***源码文件,在这种情况下,安卓***源码中包含的所有本地***服务接口也都统一成了C++语言格式,方便进行后续的搜索以及提取。
S220、基于预先确定的部分所述本地***服务接口,得到所述本地***服务接口的接口特征。
其中,定义一个接口,并且定义一个实现类A,该类A只能实现接口中规范好的抽象方法(不能在实现方法下面继续重载该方法);但是可以创建一个类B来继承类A然后重写类A中实现接口的方法。
由于所有本地***服务接口的实现类均继承于接口代理(BpInterface),所以所有本地***服务接口的方法中均存在统一的接口代理。因此,基于预先确定的部分本地***服务接口,能够得到所有本地***服务接口的接口特征,即所有本地***服务接口的方法中均存在统一的接口代理。
S230、基于所述接口特征构建识别所述本地***服务接口的规则,并利用所述规则,遍历所述安卓***源码文件,搜索得到所有所述本地***服务接口的接口名称和接口路径。
读取安卓***源码文件中的每一个文件,并获取其中的内容。针对文件中的所有方法(方法的含义来源:定义一个接口,并且定义一个实现类A,该类A只能实现接口中规范好的抽象方法)进行单独的识别,显然,属于本地***服务接口的方法都存在统一的代理接口(继承来到)。本公开通过规则匹配对所有的方法进行匹配,一旦匹配成功,即获取接口名称(interfaceName)和接口路径,并记录下来。
S120、获取所述本地***服务接口对应的数据类型。
本公开通过模拟本地***服务的客户端给服务端发送真实的数据来调用服务运行,因此针对获取的本地***服务的客户端接口,基于抽象语法树的语法解析方法获取每个接口中发送给服务端的数据类型。
参考图3,其为根据本公开实施例提供的数据类型获取方法的一种流程示意图。其中,S120具体包括:
S310、将所述本地***服务接口的代码转换成抽象语法树(AST, AbstractSyntax Tree)。
S320、遍历所述抽象语法树,获取所有所述本地***服务接口发送给服务端的数据类型。
具体包括:
从所述抽象语法树的根节点开始遍历每一个节点,响应于确定所述节点中存在数据标识,获取该节点所保存的类型属性值,并将所述类型属性值存储在类型存储变量中;
响应于确定所述节点属于条件分支节点,对于每个属于所述条件分支节点下的子节点的子树进行所述数据类型的识别,并将所有所述数据类型存储至数据类型集合中。
参考图4,其为安卓本地***服务中客户端给服务端发送服务调用的一段示例代码。其中,第11行的代码为客户端调用事务发送函数transact实现与***服务的服务端通信。通信的过程中传输给服务端的数据为包裹(Parcel)类型的数据(data),SET_RETRANSMIT_ENDPOINT是调用的目的服务,reply是用于服务端给客户端回传信息。从第6行到第9行的代码可以看出,data包含的数据类型有Int32和Int,不同的服务会使用其他不同的数据类型。不同的数据类型在data中占据的字节数不同,服务端在接收到数据并解析data时,会按照同样的字节数反序列出对应的每个数据,否则就会造成读取的字节数越界,导致***服务崩溃异常。
本公开提取的目标发送数据就是每个接口中Parcel类型的data。为了识别出data中所有可能的数据类型,采用AST的方法对客户端源代码进行解析。抽象语法的结果可以得到data完整的数据类型,同时可以获取到不同的逻辑条件分支下data的不同的数据类型情况。
基于AST提取data中写入的数据类型的过程中:抽象语法树是客户端的接口代码转换成AST的形式。从AST的根节点开始遍历每一个节点node,如果node存在data的标识,就获取该节点所保存的类型属性值type。然后将该属性值存储在类型存储变量ExpRet中。如果node节点属于条件分支IfStmt就表明data的填充数据会存在多种分支情况。为了获取到data的全部可能类型,复制ExpRet的数据为ExpRetNew,然后对于每个属于条件分支节点下的子节点CallExpx的子树childTree进行重复上述过程的data类型的识别。最终数据类型集合DataTypeSet保存了所有可能情况的data填充的数据类型。
S130、基于所述数据类型,利用遗传算法构造接口测试用例。
用例的初始化(生成)需要依赖于上述过程分析得到的数据类型。数据类型包括整型(Int)、浮点型(Float)、字符串型(String)等常规数据类型,还包括Binder等***类类型。
参考图5,其为根据本公开实施例提供的接口测试用例构造方法的一种流程示意图。其中,S130具体包括:
S510、根据所述数据类型,初始化用例数据,并将所述用例数据添加到用例数据集中。
为了最大概率使得用例触发***服务的异常,针对每种常规数据类型都采用边界值进行初始化。针对***类类型,本公开前面分析客户端接口的可以得到属于对象类的构造方法,因此可以获取到对应的类的实体。
S520、利用遗传算法对所述用例数据集中的每个所述用例数据进行构造,以得到所述接口测试用例。
具体包括:
响应于确定所述用例数据触发了异常,确定所述用例数据的适应度为零;响应于确定所述用例数据没有触发异常,确定所述用例数据的适应度为其驱动的服务的覆盖率。
响应于确定所述用例数据的所述适应度大于阈值,将所述用例数据添加到备选用例数据集中。
其中,当某个用例的适应度值大于阈值才会被留下存在备选用例数据集。如果阈值设置的过大则会导致大量的用例被剔除掉,如果阈值设置的太小又会导致测试用例太多会导致降低了测试效率,可选的,在一些实施方式中,阈值可以设定为20%。
对所述备选用例数据集中的所述用例数据进行变异操作直到所述用例数据触发了异常或者达到最大迭代次数,作为所述接口测试用例并添加到所述接口测试用例集中。
其中,被筛选后的用例需要对其包含的数据进行变异操作。前期分析可知本地***服务的用例中包含的数据个数几乎都是大于1,这就导致在参数变异阶段需要解决多参数变异的问题。本公开设计的变异方法基于用例测试效率为前提,即要保证测试的覆盖率也要减少测试时间。因此将用例中的参数设定为两个优先级:优先级高的是非数组类型的参数;次优先级的是数组类型的参数。用例中的参数首先选取高优先级的参数进行变异,然后再处理低优先级的参数。针对同一个优先级的参数采用随机筛选的方法,但会保证不会对同一个参数进行重复的变异处理。如算法所述在备选用例数据集中随机的获取其中的一个用例,获取该用例的参数优先级的顺序列表。按照参数优先级进行变异形成新的用例加入到用例数据集。
为了保证用例的测试效率,当用例触发了异常则用例不需要再进行变异。当用例的变异迭代次数已经达到了最大值(作为一个示例,最大值设置为400)则用例也不会继续变异测试。
S140、基于所述接口测试用例,对所述本地***服务接口进行模糊测试,以发现所述漏洞。
基于所述本地***服务接口和所述接口测试用例,自定义调用本地***服务的脚本,通过所述脚本调用transact函数实现所述本地***服务与所述服务端的通信,动态的对所有所述本地***服务接口进行模糊测试,以发现所述漏洞。
模糊测试(Fuzzing),是一种通过向目标***提供非预期的输入并监视异常结果来发现软件漏洞的方法。
在一些实施例中,在进行模糊测试的过程中,同时监控***的异常日志及测试的***服务的代码覆盖率,测试过程中所有的异常数据都进行存储,以便后续的漏洞发现;其中,每次使用的测试种子数据及其所驱动的代码覆盖率都进行记录。
从上面所述可以看出,本公开提供的安卓***服务漏洞检测方法及相关装置,基于安卓***源码,获取本地***服务接口;获取所述本地***服务接口对应的数据类型;基于所述数据类型,利用遗传算法构造接口测试用例;基于所述接口测试用例,对所述本地***服务接口进行模糊测试,以发现所述漏洞,本公开能够有效发现安卓本地***服务的漏洞,提高安卓本地***服务的安全性。
具体的,本公开能够恢复精确的接口传递参数的数据类型;能够发现被很少使用的或深层嵌套的接口的数据,也就可以发现这些接口的漏洞;测试用例变换并非是基于随机生成的,可以保证用例的测试覆盖率。
需要说明的是,本公开实施例的方法可以由单个设备执行,例如一台计算机和安卓测试机等。
需要说明的是,上述对本公开的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种安卓***服务漏洞检测装置。
参考图6,所述安卓***服务漏洞检测装置,包括:
接口获取模块610,被配置为基于安卓***源码,获取本地***服务接口;
数据类型获取模块620,被配置为获取所述本地***服务接口对应的数据类型;
接口测试用例构造模块630,被配置为基于所述数据类型,利用遗传算法构造接口测试用例;
模糊测试模块640,被配置为基于所述接口测试用例,对所述本地***服务接口进行模糊测试,以发现所述漏洞。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本公开时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的装置用于实现前述任一实施例中相应的安卓***服务漏洞检测方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的安卓***服务漏洞检测方法。
图7示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器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)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
需要说明的是,本公开的实施例还可以以下方式进一步描述:
一种安卓***服务漏洞检测方法,包括:
基于安卓***源码,获取本地***服务接口;
获取所述本地***服务接口对应的数据类型;
基于所述数据类型,利用遗传算法构造接口测试用例;
基于所述接口测试用例,对所述本地***服务接口进行模糊测试,以发现所述漏洞。
可选的,其中,所述基于安卓***源码,获取本地***服务接口,包括:
将所述安卓***源码编译为C++语言格式的安卓***源码文件;
基于预先确定的部分所述本地***服务接口,得到所述本地***服务接口的接口特征;
基于所述接口特征构建识别所述本地***服务接口的规则,并利用所述规则,遍历所述安卓***源码文件,搜索得到所有所述本地***服务接口的接口名称和接口路径。
可选的,其中,所述获取所述本地***服务接口对应的数据类型,包括:
将所述本地***服务接口的代码转换成抽象语法树;
遍历所述抽象语法树,获取所有所述本地***服务接口发送给服务端的数据类型。
可选的,其中,所述遍历所述抽象语法树,获取所有所述本地***服务接口发送给服务端的数据类型,包括:
从所述抽象语法树的根节点开始遍历每一个节点,响应于确定所述节点中存在数据标识,获取该节点所保存的类型属性值,并将所述类型属性值存储在类型存储变量中;
响应于确定所述节点属于条件分支节点,对于每个属于所述条件分支节点下的子节点的子树进行所述数据类型的识别,并将所有所述数据类型存储至数据类型集合中。
可选的,其中,所述基于所述数据类型,利用遗传算法构造接口测试用例,包括:
根据所述数据类型,初始化用例数据,并将所述用例数据添加到用例数据集中;
利用遗传算法对所述用例数据集中的每个所述用例数据进行构造,以得到所述接口测试用例。
可选的,其中,所述利用遗传算法对所述用例数据集中的每个所述用例数据进行构造,以得到所述接口测试用例,包括:
响应于确定所述用例数据触发了异常,确定所述用例数据的适应度为零;响应于确定所述用例数据没有触发异常,确定所述用例数据的适应度为其驱动的服务的覆盖率;
响应于确定所述用例数据的所述适应度大于阈值,将所述用例数据添加到备选用例数据集中;
对所述备选用例数据集中的所述用例数据进行变异操作直到所述用例数据触发了异常或者达到最大迭代次数,作为所述接口测试用例并添加到所述接口测试用例集中。
可选的,其中,所述基于所述接口测试用例,对所述本地***服务接口进行模糊测试,以发现所述漏洞,包括:
基于所述本地***服务接口和所述接口测试用例,自定义调用本地***服务的脚本,通过所述脚本实现所述本地***服务与所述服务端的通信,动态的对所有所述本地***服务接口进行模糊测试,以发现所述漏洞。
一种安卓***服务漏洞检测装置,包括:
接口获取模块,被配置为基于安卓***源码,获取本地***服务接口;
数据类型获取模块,被配置为获取所述本地***服务接口对应的数据类型;
接口测试用例构造模块,被配置为基于所述数据类型,利用遗传算法构造接口测试用例;
模糊测试模块,被配置为基于所述接口测试用例,对所述本地***服务接口进行模糊测试,以发现所述漏洞。
一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述的方法。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本公开实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
另外,为简化说明和讨论,并且为了不会使本公开实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本公开实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本公开实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本公开实施例。因此,这些描述应被认为是说明性的而不是限制性的。
尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
本公开实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本公开实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。
Claims (7)
1.一种安卓***服务漏洞检测方法,包括:
基于安卓***源码,获取本地***服务接口,具体包括:
将所述安卓***源码编译为C++语言格式的安卓***源码文件;
基于预先确定的部分所述本地***服务接口,得到所述本地***服务接口的接口特征,具体包括:定义第一接口和第一实现类,所述第一实现类用于实现所述第一接口中规范的方法;定义第二接口和第二实现类,所述第二实现类继承所述第一实现类,并用于实现所述第二接口中规范的方法;
基于所述接口特征构建识别所述本地***服务接口的规则,并利用所述规则,遍历所述安卓***源码文件,搜索得到所有所述本地***服务接口的接口名称和接口路径;
获取所述本地***服务接口对应的数据类型;
基于所述数据类型,利用遗传算法构造接口测试用例,具体包括:
根据所述数据类型,初始化用例数据,并将所述用例数据添加到用例数据集中;
利用遗传算法对所述用例数据集中的每个所述用例数据进行构造,以得到所述接口测试用例,具体包括:响应于确定所述用例数据触发了异常,确定所述用例数据的适应度为零;响应于确定所述用例数据没有触发异常,确定所述用例数据的适应度为其驱动的服务的覆盖率;响应于确定所述用例数据的所述适应度大于阈值,将所述用例数据添加到备选用例数据集中;对所述备选用例数据集中的所述用例数据进行变异操作直到所述用例数据触发了异常或者达到最大迭代次数,作为所述接口测试用例并添加到所述接口测试用例集中;
基于所述接口测试用例,对所述本地***服务接口进行模糊测试,以发现所述漏洞。
2.根据权利要求1所述的方法,其中,所述获取所述本地***服务接口对应的数据类型,包括:
将所述本地***服务接口的代码转换成抽象语法树;
遍历所述抽象语法树,获取所有所述本地***服务接口发送给服务端的数据类型。
3.根据权利要求2所述的方法,其中,所述遍历所述抽象语法树,获取所有所述本地***服务接口发送给服务端的数据类型,包括:
从所述抽象语法树的根节点开始遍历每一个节点,响应于确定所述节点中存在数据标识,获取该节点所保存的类型属性值,并将所述类型属性值存储在类型存储变量中;
响应于确定所述节点属于条件分支节点,对于每个属于所述条件分支节点下的子节点的子树进行所述数据类型的识别,并将所有所述数据类型存储至数据类型集合中。
4.根据权利要求2所述的方法,其中,所述基于所述接口测试用例,对所述本地***服务接口进行模糊测试,以发现所述漏洞,包括:
基于所述本地***服务接口和所述接口测试用例,自定义调用本地***服务的脚本,通过所述脚本实现所述本地***服务与所述服务端的通信,动态的对所有所述本地***服务接口进行模糊测试,以发现所述漏洞。
5.一种安卓***服务漏洞检测装置,包括:
接口获取模块,被配置为基于安卓***源码,获取本地***服务接口,具体被配置为:
将所述安卓***源码编译为C++语言格式的安卓***源码文件;
基于预先确定的部分所述本地***服务接口,得到所述本地***服务接口的接口特征,具体被配置为:定义第一接口和第一实现类,所述第一实现类用于实现所述第一接口中规范的方法;定义第二接口和第二实现类,所述第二实现类继承所述第一实现类,并用于实现所述第二接口中规范的方法;
基于所述接口特征构建识别所述本地***服务接口的规则,并利用所述规则,遍历所述安卓***源码文件,搜索得到所有所述本地***服务接口的接口名称和接口路径;
数据类型获取模块,被配置为获取所述本地***服务接口对应的数据类型;
接口测试用例构造模块,被配置为基于所述数据类型,利用遗传算法构造接口测试用例,具体被配置为:
根据所述数据类型,初始化用例数据,并将所述用例数据添加到用例数据集中;
利用遗传算法对所述用例数据集中的每个所述用例数据进行构造,以得到所述接口测试用例,具体被配置为:响应于确定所述用例数据触发了异常,确定所述用例数据的适应度为零;响应于确定所述用例数据没有触发异常,确定所述用例数据的适应度为其驱动的服务的覆盖率;响应于确定所述用例数据的所述适应度大于阈值,将所述用例数据添加到备选用例数据集中;对所述备选用例数据集中的所述用例数据进行变异操作直到所述用例数据触发了异常或者达到最大迭代次数,作为所述接口测试用例并添加到所述接口测试用例集中;
模糊测试模块,被配置为基于所述接口测试用例,对所述本地***服务接口进行模糊测试,以发现所述漏洞。
6.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如权利要求1至4任意一项所述的方法。
7.一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行权利要求1至4任一所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110978263.XA CN113419971B (zh) | 2021-08-25 | 2021-08-25 | 安卓***服务漏洞检测方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110978263.XA CN113419971B (zh) | 2021-08-25 | 2021-08-25 | 安卓***服务漏洞检测方法及相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113419971A CN113419971A (zh) | 2021-09-21 |
CN113419971B true CN113419971B (zh) | 2021-12-14 |
Family
ID=77719357
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110978263.XA Active CN113419971B (zh) | 2021-08-25 | 2021-08-25 | 安卓***服务漏洞检测方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113419971B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114626071B (zh) * | 2022-03-21 | 2023-04-07 | 中国人民解放军国防科技大学 | 一种漏洞导向的模糊测试方法、***和介质 |
CN114938341B (zh) * | 2022-05-30 | 2024-02-20 | 中国工商银行股份有限公司 | 一种环境检测方法、装置、电子设备和存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7293213B1 (en) * | 2004-09-16 | 2007-11-06 | At&T Corp. | Method for detecting software errors and vulnerabilities |
CN103984900B (zh) * | 2014-05-19 | 2017-03-01 | 南京赛宁信息技术有限公司 | Android应用漏洞检测方法及*** |
CN105303112B (zh) * | 2014-06-24 | 2018-11-06 | 腾讯科技(深圳)有限公司 | 组件调用漏洞的检测方法及装置 |
CN106294102B (zh) * | 2015-05-20 | 2021-04-09 | 腾讯科技(深圳)有限公司 | 应用程序的测试方法、客户端、服务器及*** |
CN110135168B (zh) * | 2019-05-16 | 2021-04-20 | 北京字节跳动网络技术有限公司 | 应用程序的检测方法、装置、***、终端设备及存储介质 |
CN112733158B (zh) * | 2021-04-06 | 2021-08-03 | 北京邮电大学 | Android***漏洞检测方法、电子设备及存储介质 |
-
2021
- 2021-08-25 CN CN202110978263.XA patent/CN113419971B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN113419971A (zh) | 2021-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10481964B2 (en) | Monitoring activity of software development kits using stack trace analysis | |
US10505960B2 (en) | Malware detection by exploiting malware re-composition variations using feature evolutions and confusions | |
CN111124926B (zh) | 模糊测试方法、装置、电子设备及存储介质 | |
CN113419971B (zh) | 安卓***服务漏洞检测方法及相关装置 | |
CN112417461B (zh) | 设备固件的模糊测试方法及*** | |
CN111460446B (zh) | 基于模型的恶意文件检测方法及装置 | |
US10241847B2 (en) | Anomaly detection using sequences of system calls | |
CN113114680B (zh) | 用于文件上传漏洞的检测方法和检测装置 | |
CN109308263A (zh) | 一种小程序测试方法、装置及设备 | |
CN110209520B (zh) | 一种提高ssd测试效率的方法、装置、计算机设备及存储介质 | |
CN111339531B (zh) | 恶意代码的检测方法、装置、存储介质及电子设备 | |
CN113703996B (zh) | 基于用户和yang模型分组的访问控制方法、设备及介质 | |
CN111190791A (zh) | 应用异常上报方法、装置和电子设备 | |
CN113535577A (zh) | 基于知识图谱的应用测试方法、装置、电子设备和介质 | |
CN112685255A (zh) | 一种接口监控方法、装置、电子设备及存储介质 | |
CN114879985B (zh) | 一种证书文件的安装方法、装置、设备及存储介质 | |
CN116260643A (zh) | 一种物联网web服务的安全测试方法、装置及设备 | |
CN113626823B (zh) | 一种基于可达性分析的组件间交互威胁检测方法及装置 | |
US11573887B2 (en) | Extracting code patches from binary code for fuzz testing | |
CN111309311B (zh) | 一种漏洞检测工具生成方法、装置、设备及可读存储介质 | |
CN114328171A (zh) | 测试用例库的生成方法、装置、设备及存储介质 | |
CN112671671A (zh) | 基于第三方库的第三方流量识别方法、装置及设备 | |
CN112486497A (zh) | 编译配置文件的生成方法、装置、电子设备及存储介质 | |
CN112307475A (zh) | 一种***检测方法及装置 | |
WO2020193331A1 (en) | Feature detection with neural network classification of images representations of temporal graphs |
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 |