当前位置: 首页 > 专利查询>南京大学专利>正文

基于静态分析的Binder通信过载漏洞的检测方法技术

技术编号:29330950 阅读:19 留言:0更新日期:2021-07-20 17:48
本发明专利技术公开了一种基于静态分析的安卓应用Binder通信过载漏洞的检测方法,包括:分析安卓框架源代码建立函数调用图,基于传输函数transact前向分析确定安卓框架暴露的Binder通信接口函数;对安卓应用代码进行静态分析,通过上下文不敏感、流敏感、路径不敏感的函数间数据流分析技术,建立完毕单个函数的数据包含关系表;选取其中与Binder通信接口函数相关的函数建立应用数据包含关系总表;基于扩容传输的模式查找符合模式的扩容传输对象,分析扩容传输对象的扩容语句判断是否满足循环条件,检测得到符合循环扩容传输模式的Binder通信过载漏洞。本发明专利技术采取静态程序分析的手段,通过建立整个应用的数据包含关系确定传输对象,达到检测Binder通信过载漏洞的技术效果。

【技术实现步骤摘要】
基于静态分析的Binder通信过载漏洞的检测方法
本专利技术涉及安卓应用Binder通信过载漏洞的检测
,具体而言涉及一种基于静态分析的安卓应用Binder通信过载漏洞的检测方法、装置、电子设备和存储介质。
技术介绍
随着信息技术的发展,以安卓平台为代表的移动终端早已成为人们生活中不可或缺的部分,越来越多的手机用户开始通过智能手机发送邮件、查看图片、浏览视频,移动应用程序的功能愈发强大,随之而来的是移动应用程序运行的占用内存也越来越大。安卓系统是一个基于服务的系统,通过框架提供或者自行开发的各种各样的服务对外提供系统最基本最核心的功能,包括了位置管理(LocationManager)、包管理(PackageManager)、活动管理(ActivityManager)等最为重要的服务,而所有的服务都离不开安卓系统提供的Binder通信框架。Binder通信框架作为安卓系统提供的跨进程通信的手段,相比于传统的跨进程通信手段如管道、Socket、共享内存等,具有单次数据拷贝、传输效率高、使用简单等优点,同时拥有安全性强等特点。安卓系统为了平衡跨进程通信的效率和内存占用,限制了Binder通信传输大小为1M,超出限定范围则会抛出异常导致应用程序崩溃,造成用户数据丢失,极大地影响用户体验和应用评价。现有的应对Binder通信过载问题的方法,主要包括了调试工具和开发工具。调试工具如TooLargeTool,通过对部分安卓框架提供的开放接口进行hook,在开发日志中输出当前传输对象的大小,实现对Binder通信传输对象大小的监听。开发工具如Bridge,通过注解的方式改变了传输对象的存储方式,将传输对象储存在内存而非Binder缓存中,以牺牲效率为代价减小传输对象大小。以上两种方式都依赖于实际的程序执行,并且无法提前定位到Binder传输对象的位置。组件间通信是Binder通信的一个重要组成部分,针对组件间通信的测试工具存在很多,但是只有较少的几篇工作涉及了Binder通信过载问题,主要原因在于难以通过简单的测试用例触发Binder通信过载漏洞。而且并没有针对改该问题定制测试用例。
技术实现思路
本专利技术针对现有技术中的不足,提供一种基于静态分析的安卓应用Binder通信过载漏洞的检测方法、装置、电子设备和存储介质,采取静态程序分析的手段,通过建立整个应用的数据包含关系确定传输对象,达到检测Binder通信过载漏洞的技术效果。为实现上述目的,本专利技术采用以下技术方案:第一方面,本申请实施例提供了一种基于静态分析的安卓应用Binder通信过载漏洞的检测方法,所述检测方法包括以下步骤:S1,分析安卓框架源代码建立函数调用图,基于传输函数transact前向分析确定安卓框架暴露的Binder通信接口函数;S2,对安卓应用代码进行静态分析,从安卓应用中使用的Binder通信接口函数出发,通过上下文不敏感、流敏感、路径不敏感的函数间数据流分析技术,其中数据流分析的迭代终止条件为ContainerMap不再变化,建立完毕单个函数的ContainerMap;选取其中与Binder通信接口函数相关的函数建立ContainerMap_app;S3,基于步骤S2所述的ContainerMap_app,基于扩容传输的模式查找符合模式的扩容传输对象,分析扩容传输对象的扩容语句判断是否满足循环条件,检测得到符合循环扩容传输模式的Binder通信过载漏洞。进一步地,步骤S1中,所述分析安卓框架源代码建立函数调用图,基于传输函数transact前向分析确定安卓框架暴露的Binder通信接口函数的过程包括以下步骤:静态分析安卓框架代码并建立函数调用关系图;基于Binder通信传输原理,从Binder传输在Java层面的最底层函数transact出发,通过上下文不敏感、流不敏感、路径不敏感的前向静态分析分析函数调用关系图,得到安卓框架源代码中所有直接或间接调用传输函数transact的函数,将其中暴露给开发者的函数作为安卓框架提供的Binder传输接口函数。进一步地,所述得到安卓框架源代码中所有直接或间接调用传输函数transact的函数的过程包括以下步骤:从Binder传输在Java层面的最底层函数transact出发,将transact函数放入待分析函数队列Q;从Q中取出transact函数作为当前分析函数m,分析m所在类的继承实现关系得到其父类,将父类中与m签名相同的函数添入Q中,之后分析函数调用关系图得到所有调用过m的函数,并添入Q中;迭代分析函数直至Q为空,所有分析过的函数即为所有直接或间接调用传输函数transact的函数。进一步地,步骤S2中,通过上下文不敏感、流敏感、路径不敏感的函数间数据流分析技术,建立完毕单个函数的ContainerMap的过程包括以下步骤:为当前函数创建一个空的ContainerMap、DependencyMap;从当前函数的起始语句出发,逐条分析语句并更新ContainerMap和DependencyMap;其中DependencyMap的更新使用的是Def-Use方式,当分析至赋值语句时,赋值语句左值变量即被赋值变量,若右值变量为新建对象,在DependencyMap中左值变量的定义被更新为新建对象,否则DependencyMap中左值变量的定义被更新为当前右值对象的定义。当分析到的语句使用到DependencyMap中的变量时,获取到该变量在分析该语句时的定义。ContainerMap的更新包括对扩容语句和函数调用语句的处理,重复分析直至当前函数的ContainerMap不再变化;持续分析直至为所有Binder传输接口函数相关函数生成ContainerMap,建立函数与ContainerMap的映射即为ContainerMap_app。进一步地,所述ContainerMap的更新包括:对于定义完整的容器扩容语句,将容器对象和元素对象添加进入ContainerMap;其中,容器扩容语句是指容器对象的操作函数,且该操作会向容器对象中增加元素;对于函数调用语句,如果被调用函数m存在ContainerMap_m,则利用ContainerMap_m进行包含关系映射,如果不存在ContainerMap_m,则分析被调用函数生成ContainerMap_m。进一步地,所述ContainerMap和DependencyMap均采用以键值对形式存储的哈希表形式,键是唯一的、一个键只能对应一个值;所述ContainerMap的键代表着容器对象,值表示容器对象所包含元素对象的集合;当每次分析到新的扩容操作时,会向当前ContainerMap中的容器对象所对应的元素对象集合加入扩容操作对应的元素对象;所述DependencyMap的键为数据对象,值为数据对象对应的定义集合,表示键所指对象在当前分析语句时可能的定义集合,每次分析至定义语句时均会更新本文档来自技高网
...

【技术保护点】
1.一种基于静态分析的Binder通信过载漏洞的检测方法,其特征在于,所述检测方法包括以下步骤:/nS1,分析安卓框架源代码建立函数调用图,基于传输函数transact前向分析确定安卓框架暴露的Binder通信接口函数;/nS2,对安卓应用代码进行静态分析,从安卓应用中使用的Binder通信接口函数出发,通过上下文不敏感、流敏感、路径不敏感的函数间数据流分析技术,其中数据流分析的迭代终止条件为数据包含关系表ContainerMap不再变化,建立完毕单个函数的ContainerMap;选取其中与Binder通信接口函数相关的函数建立应用数据包含关系总表ContainerMap_app;/nS3,基于步骤S2所述的ContainerMap_app,基于扩容传输的模式查找符合模式的扩容传输对象,分析扩容传输对象的扩容语句判断是否满足循环条件,检测得到符合循环扩容传输模式的Binder通信过载漏洞。/n

【技术特征摘要】
1.一种基于静态分析的Binder通信过载漏洞的检测方法,其特征在于,所述检测方法包括以下步骤:
S1,分析安卓框架源代码建立函数调用图,基于传输函数transact前向分析确定安卓框架暴露的Binder通信接口函数;
S2,对安卓应用代码进行静态分析,从安卓应用中使用的Binder通信接口函数出发,通过上下文不敏感、流敏感、路径不敏感的函数间数据流分析技术,其中数据流分析的迭代终止条件为数据包含关系表ContainerMap不再变化,建立完毕单个函数的ContainerMap;选取其中与Binder通信接口函数相关的函数建立应用数据包含关系总表ContainerMap_app;
S3,基于步骤S2所述的ContainerMap_app,基于扩容传输的模式查找符合模式的扩容传输对象,分析扩容传输对象的扩容语句判断是否满足循环条件,检测得到符合循环扩容传输模式的Binder通信过载漏洞。


2.根据权利要求1所述的基于静态分析的Binder通信过载漏洞的检测方法,其特征在于,步骤S1中,所述分析安卓框架源代码建立函数调用图,基于传输函数transact前向分析确定安卓框架暴露的Binder通信接口函数的过程包括以下步骤:
静态分析安卓框架代码并建立函数调用关系图;
基于Binder通信传输原理,从Binder传输在Java层面的最底层函数transact出发,通过上下文不敏感、流不敏感、路径不敏感的前向静态分析分析函数调用关系图,得到安卓框架源代码中所有直接或间接调用传输函数transact的函数,将其中暴露给开发者的函数作为安卓框架提供的Binder传输接口函数。


3.根据权利要求2所述的基于静态分析的Binder通信过载漏洞的检测方法,其特征在于,所述得到安卓框架源代码中所有直接或间接调用传输函数transact的函数的过程包括以下步骤:
从Binder传输在Java层面的最底层函数transact出发,将transact函数放入待分析函数队列Q;
从Q中取出transact函数作为当前分析函数m,分析m所在类的继承实现关系得到其父类,将父类中与m签名相同的函数添入Q中,之后分析函数调用关系图得到所有调用过m的函数,并添入Q中;
迭代分析函数直至Q为空,所有分析过的函数即为所有直接或间接调用传输函数transact的函数。


4.根据权利要求1所述的基于静态分析的Binder通信过载漏洞的检测方法,其特征在于,步骤S2中,通过上下文不敏感、流敏感、路径不敏感的函数间数据流分析技术,建立完毕单个函数的ContainerMap的过程包括以下步骤:
为当前函数创建一个空的ContainerMap、数据依赖关系表DependencyMap;
从当前函数的起始语句出发,逐条分析语句并更新ContainerMap和DependencyMap。
其中DependencyMap的更新使用的是Def-Use方式,当分析至赋值语句时,赋值语句左值变量即被赋值变量,若右值变量为新建对象,在DependencyMap中左值变量的定义被更新为新建对象,否则DependencyMap中左值变量的定义被更新为当前右值对象的定义。当分析到的语句使用到DependencyMap中的变量时,获取到该变量在分析该语句时的定义;
ContainerMap的更新包括对扩容语句和函数调用语句的处理,重复分析直至当前函数的ContainerMap不再变化;
持续分析直至为所有Binder传输接口函数相关函数生成ContainerMap,建立函数与ContainerMap的映射即...

【专利技术属性】
技术研发人员:刘少聪马骏陶先平
申请(专利权)人:南京大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1