一种面向安卓应用的WebView桥接口污点映射及分析方法与流程

文档序号:13520941阅读:356来源:国知局

本发明涉及移动端安全领域,特别是一种面向安卓应用的webview桥接口污点映射及分析方法。



背景技术:

随着移动互联网技术的发展以及移动端智能设备的普及,移动互联网在生活中逐渐占据了重要的地位。移动端智能设备存储了大量用户隐私信息,随之而来的隐私泄漏问题逐渐被人们所关注。

污点分析是指通过分析程序运行时可能的数据流,来标记跟踪特定数据的过程。污点分析可以分为四个部分,污点、污点源(source)、传播过程和污点库(sink)。污点就是指要追踪的特定数据;污点源(source)则是能够导致污点传播的来源,可以是程序的输入,也可以是调用污点的函数;污点库(sink)是指可能将污点发送出应用程序的相关操作代码。污点分析要求预先定义好source和sink,source指的是那些能够提供敏感信息的库,如提供通讯录信息的api,sink则是指那些可能会泄露数据的库,如能够将信息传送到某个恶意第三方服务器的方法。然后追踪来自source的污点数据在source和sink之间是否存在数据流。

污点分析技术能够有效的发现移动端隐私信息泄漏的问题,其主要分为动态污点分析和静态污点分析。动态污点分析是一种动态的实时检测技术,不需要程序源代码即可在程序运行的同时在二进制平台下以运行时机器指令流为依据完成监控检测任务。动态污点分析作为信息流思想的一种具体体现,最近若干年被应用在信息安全验证、恶意代码分析、隐私泄露分析、协议格式逆向分析等领域,近期有研究人员将其扩展到android平台上,比较典型的动态污点分析工具有taintdroid、appfence以及aasandbox等。分析时,首先将未获取安全认证的输入数据打上污点标记,然后根据程序实时指令和运行时状态信息,依据制定的污点流传播规则,分析带有污点标记的数据在寄存器和内存中的传播过程,同时在程序敏感字段设置检测点,当检测到带有污点标记的数据导入时采取相应的安全决策措施。静态污点分析是指在不运行且不修改代码的前提下,通过分析程序变量间的数据依赖关系来检测数据能否从污点源(source)传播到污点库(sink)。静态污点分析的对象一般是程序的源码或中间表示,可以将对污点传播中显示流的静态分析问题转化为对程序中静态数据依赖的分析:首先根据程序中的函数调用关系构建调用图;然后在函数内或者函数间根据不同的程序特性进行具体的数据流传播分析。常见的显式流污点传播方式包括直接赋值传播、通过函数(过程)调用传播以及通过别名(指针)传播。比较典型的静态污点分析工具有flowdroid、leakminer以及androidleaks等。

最近几年新兴的web型应用和混合型应用,与传统的原生应用相比,最显著的不同在于程序的部分功能在web环境中运行。目前针对web环境的javascript语言,比较典型的动态污点分析工具有jsta以及dominator,静态污点分析工具有jsflow、scanjs以及jsprime等。

在混合移动应用多语言架构体系下,webview桥接口为实现数据在android原生环境(java语言)与web环境(javascript语言)之间跨语言传输提供了支持。虽然桥接口通信机制增强了混合移动应用使用本地设备的能力,但也带来了严重的跨语言安全风险,可能导致用户敏感数据通过该通道向外泄露。例如javascript代码可以通过webview桥接口调用java代码获取设备的敏感信息,并通过web环境向外发送。由于数据在java语言与javascript语言之间传输时,由于其污点标记在数据转换过程中丢失,因此无法简单的结合现有的单语言污点分析方法进行跨语言污点分析。

因此,针对上述问题,有必要提供一种面向安卓应用的webview桥接口污点映射及分析方法,使得数据在java语言与javascript语言之间传输时,能够实现跨语言污点分析。



技术实现要素:

本发明所要解决的技术问题是,提供一种面向安卓应用的webview桥接口污点映射及分析方法,本发明能在目前已经存在的一些针对android原生环境和web环境的单语言污点分析方法之间建立起桥梁,本发明具有通用性高、覆盖广的特点。

发明的技术解决方案如下:

一种面向安卓应用的webview桥接口污点映射方法,包括以下步骤:

步骤1、定义桥接口sink和桥接口source;

(i)桥接口sink包括跨语言数据传输的桥接口通信方法,即web环境下的桥接口方法及其对应的本地java方法;

(ii)桥接口source为敏感数据传输到另一语言环境后对应的数据,包括web环境下的桥接口方法返回值和该桥接口方法对应的本地java方法参数值;

步骤2:建立跨java语言与javascript语言的污点映射关系;包括对桥接口sink实现污点记录和对桥接口source实现污点还原;

(a)对桥接口sink实现污点记录的方法为:每使用桥接口sink传输一条敏感数据,则产生一条污点记录,每一条污点记录包括以下信息:

所使用的桥接口方法名;

所使用的桥接口方法参数污点信息,桥接口方法参数污点信息包括该参数在web环境下的数据类型、原始值和污点标记;

所使用的桥接口方法对应的本地java方法返回值污点信息,本地java方法返回值污点信息包括该返回值在本地java环境下的数据类型、原始值和污点标记;

将污点记录写入污点记录日志中;

(b)对桥接口source实现污点还原的方法为:

首先在污点记录日志中找到与该桥接口source匹配的污点记录,最后将该桥接口source的污点标记还原为污点记录中匹配数据的污点标记,即将桥接口方法返回值的污点标记还原为该桥接口方法对应的本地java方法返回值污点信息中的污点标记,将桥接口方法对应的本地java方法参数值的污点标记还原为桥接口方法参数值污点信息的污点标记。

进一步地,通过修改jni数据类型转换方法实现污点记录和污点还原,即在桥接口通信方法中对进行jni数据类型转换前的敏感数据进行污点记录,对进行jni数据类型转换后的相应敏感数据进行污点还原。

本发明还提供了一种面向安卓应用的webview桥接口污点分析方法,其特征在于,当敏感数据在android原生环境与web环境之间通过webview桥接口进行传输时,首先通过权利要求1所述的污点映射方法,使得敏感数据的污点标记能够跟随数据进行跨语言传输;然后使用针对android原生环境的污点分析系统,基于污点标记来检测和跟踪敏感数据在android原生环境下的传输,使用针对web环境的污点分析系统,基于污点标记来检测和跟踪敏感数据在web环境下的传输,从而实现跨语言污点分析。

本发明的原理为:

(1)webview桥接口通信数据传输机制分析

在安卓平台下,开发者通过webview桥接口方法来完成java代码到javascript代码间的跨语言数据传输。具体来说,java数据以本地java方法的返回值的形式传输到javascript环境,javascript数据则以webview桥接口方法的参数值的形式传输到java环境,详细的webview桥接口通信过程和数据传输过程如图1所示,包含以下5个步骤:

(i)java对象注入。开发者首先通过webview组件的addjavascriptinterface接口将本地java对象注入到javascript环境。该接口需要指定两个参数,第一个参数为注入的java对象,第二个参数为注入到javascript环境中的webview桥接口对象名;

(ii)webview桥接口方法调用。当注入java对象后,开发者便可以在javascript代码中访问注入对象,并通过调用桥接口方法来执行被注入对象的本地java方法。安卓系统将根据桥接口对象名和方法名来匹配对应的本地java对象以及本地java方法;

(iii)webview桥接口方法参数转换。匹配到对应java方法后,安卓系统中的jni(javanativeinterface,java本地调用)数据类型转换机制将桥接口方法中的javascript类型参数值转换为相应的java类型变量值,作为本地java方法的参数值,从而将javascript数据传输到java环境;

(iv)本地java方法执行。在参数转换完成后,安卓系统调用转换后的参数来执行本地java方法;

(v)返回值转换。执行完本地java方法后,jni数据类型转换机制将本地java方法的返回值转换为相应的javascript变量值,并将其返回给javascript环境,作为桥接口方法的返回值。

图2是一个混合应用跨语言传输实例,其通过webview桥接口方法调用来将手机imei号和cookie信息进行跨语言传输并发送给攻击者。开发者通过webview桥接口通信数据传输机制将本地java代码中bridge类注入到web环境下(图2中第8行)。当混合应用加载index.html主页面时,其页面中的javascript代码获得当前页面的cookie信息(图2中第23行)并通过桥接口方法调用(图2中第24行bridge.send方法)将其传输到对应的本地java方法中(图2中第14行send方法)。send方法将接收到的cookie信息通过func2方法发送给攻击者(图2中第15行),并将获取到的手机imei号传输到web环境(图2中第16-18行)。最后,imei号通过web环境下的func1方法泄露给攻击者(第25行)。

(2)webview桥接口污点映射方法

步骤1、定义桥接口sink和桥接口source;

(i)桥接口sink

桥接口sink包括跨语言数据传输的桥接口通信方法,即web环境下的桥接口方法以及对应的本地java方法,并对web环境下的桥接口方法的参数值以及对应的本地java方法的返回值的污点信息进行记录。在图2所示的示例代码中,本发明将分别对对bridge.send方法中的变量a(第24行)和和send方法中的变量c(第18行)的污点信息进行记录。

(ii)桥接口source

桥接口source是敏感数据传输到另一语言环境后对应的数据,如表1所示。这些数据包括web环境下的桥接口方法的返回值和相应本地java方法的参数值。在图2所示的示例代码中,变量a和变量c对应的跨语言映射数据分别为变量data(第14行)和变量b(第24行)。

表1桥接口sink点和桥接口source点

java语言和javascript语言的数据通过调用webview桥接口方法和数据类型转换而传输到另一种语言环境下。数据在java语言环境与javascript语言环境中互相转换时可通过多种api进行,但是从底层的角度看,都会通过jni进行转换。因此为了达到跨语言污点分析的目的,本发明对进行jni数据类型转换前的敏感数据进行污点记录,并根据记录的污点映射关系对进行jni数据类型转换后的该敏感数据进行污点还原,使得数据无论通过哪种api传输都能被检测到。

如图3所示,其中实线部分是针对特定语言环境的传统污点分析方法,虚线部分即是本发明webview桥接口污点分析原理,其基本过程如下:首先,当敏感数据通过webview桥接口通信时,本发明在webview桥接口方法和对应的本地java方法中分别对进行jni数据类型转换前的敏感数据(即桥接口方法中的参数值和本地java方法的返回值)进行污点记录,为多语言环境下的敏感数据提供准确的污点映射关系;其次,在敏感数据经过jni转数类型据换到达另一种语言环境后,本发明根据跨语言污点映射关系将转换后的对应敏感数据进行污点还原。

步骤2、精确的跨java语言与javascript语言的污点映射

为了实现精确的跨语言污点映射,即对webview桥接口方法和对应本地java方法的参数值和返回值一一映射。污点记录方法需要保证每次数据传输对应的污点记录的唯一性和准确性,污点还原方法需要保证敏感数据污点标记还原的正确性。

(a)污点记录

首先,本发明通过记录数据传输的相关信息来保证其污点记录的唯一性。本发明将每次数据传输的信息作为一条污点记录,并将所有的污点记录写入污点记录日志中;污点记录包括三个元素(表示为三元组(m,a,r)),分别为桥接口方法名、桥接口方法参数值污点信息、桥接口方法对应的本地java方法返回值污点信息,桥接口方法参数污点信息和对应本地java方法返回值污点信息又分别包括三个元素(三元组(s,v,t)表示),分别为敏感数据在web环境和本地java环境下相应的数据类型、原始值和污点标记。图4为本发明污点记录的逻辑结构和示例应用的污点记录。因此,不管是相同桥接口方法传输不同敏感数据,还是不同桥接口方法传输同一敏感数据,某次数据传输对应的污点记录都是唯一的。

此外,为了保证跨语言传输污点记录的准确性,本发明在桥接口通信的底层jni数据类型转换方法中实现对敏感数据的污点信息记录。首先定位到jni中的函数javainstancejobject::invokemethod(constjavamethod*method,javavalue*args,bool&didraiseuncaughtexception),

该函数用于javascript代码调用java方法,在该函数中可以通过method参数获取到所使用的webview桥接口方法名。同时invokemethod函数包含了对所调用java方法的参数和返回值的跨语言转换,具体而言,该函数会调用jvaluetojavavalue(constjvalue&,constjavatype&,boolrequireannotation)函数将javascript类型数据转换为java类型数据,在此函数中可以通过jvalue参数获取所使用的桥接口方法参数在web环境下的数据类型、原始值和污点标记等信息;调用javavaluetojvalue(constjavavalue&value)函数将java类型数据转换为javascript类型数据,在此函数中可以通过value参数获取所使用的桥接口方法对应的本地java方法返回值在本地java环境下的数据类型、原始值和污点标记等信息。由于数据类型、原始值、污点标记这三个信息和桥接口方法名信息不能同一个函数中获取,因此本发明采用添加结构体类型参数的方法来将它们进行关联,具体而言,修改上述两个转换函数的声明和实现,jvaluetojavavalue函数新增一个结构体类型参数struct1(如表2所示),该参数的结构体成员为桥接口方法名(通过invokemethod函数中的method参数获取并进行赋值)和所使用的桥接口方法参数污点信息(包括该参数在web环境下的数据类型、原始值和污点标记,可以通过jvaluetojavavalue函数中的jvalue参数直接获取并进行赋值);javavaluetojvalue函数新增一个结构体类型参数struct2(如表2所示),该参数的结构体成员为桥接口方法名(通过invokemethod函数中的method参数获取并进行赋值)和所使用的桥接口方法对应的本地java方法返回值污点信息(包括该返回值在本地java环境下的数据类型、原始值和污点标记,可以通过javavaluetojvalue函数中的value参数直接获取并进行赋值)。

表2新增结构体类型参数说明

通过上述修改即可通过新增的结构体类型参数将数据类型、原始值、污点标记和桥接口方法名进行绑定,在invokemethod函数中javascript代码调用java方法执行结束后将发生的数据传输的信息作为记录写入污点记录日志中。

由于android原生环境的java代码和web环境的javascript代码间的跨语言通信数据都需要经过jni进行转换,因此本发明能够保证污点记录的准确性,且污点标记不存在污点丢失和污点扩散。

(b)污点还原

污点还原的基本步骤是首先确定与桥接口source匹配的桥接口方法,然后在污点记录日志中找到包含该桥接口方法的污点记录,最后桥接口方法的返回值和本地java方法的参数值的污点标记还原为污点记录中本地java方法的返回值和桥接口方法的参数值的污点标记。

图5所示是示例应用的污点还原过程。当污点跟踪机制检测到桥接口source时(如图2中变量data和变量b),确定与桥接口source匹配的桥接口方法(即bridge.send),然后在污点记录日志中找到包含该桥接口方法(即bridge.send)的污点记录;当找到相应的污点记录后,将桥接口方法的返回值(变量b)和本地java方法的参数值(变量data)的污点标记还原为污点记录中本地java方法的返回值和桥接口方法的参数值的污点标记,即0x400和0x10000。

本发明覆盖的数据类型如表3所示:

表3覆盖的数据类型

有益效果:

本发明对android原生环境和web环境间的跨语言通信机制进行了详细分析。

本发明设计并实现了一种精确的跨语言污点映射方法,在webview桥接口通信数据传输方法中增加了对应的污点记录模块和污点还原模块,实现污点映射。当敏感数据在android原生环境与web环境之间通过webview桥接口进行传输时,能够通过该污点映射方法使敏感数据的污点标记跟随数据进行跨语言传输;再使用针对android原生环境的污点分析系统,基于污点标记来检测和跟踪敏感数据在android原生环境下的传输,使用针对web环境的污点分析系统,基于污点标记来检测和跟踪敏感数据在web环境下的传输,从而实现跨语言污点分析。

使得针对android原生环境的污点分析方法和针对web环境的污点分析方法不需要同时运行,只需要根据日志信息将污点记录进行还原即可,降低了结合两种不同的单语言污点分析方法的难度。

附图说明

图1为webview桥接口通信数据传输机制示意图;

图2为混合应用跨语言数据传输实例图;

图3为本发明一种面向安卓应用webview桥接口污点分析方法示意图;

图4为污点记录逻辑结构及示例应用的污点记录图;

图5为污点还原过程示意图。

具体实施方式

以下将结合附图和具体实施例对本发明做进一步详细说明:

实施例1:

数据在java语言与javascript语言之间传输时,由于其污点标记在数据转换过程中丢失,因此无法简单的结合现有的单语言污点分析方法进行跨语言污点分析。

为此,本发明的实施例提出了一种面向安卓应用webview桥接口污点分析方法,能够使针对android原生环境的污点分析系统和针对web环境的污点分析系统相结合。

图3是本发明一种面向安卓应用webview桥接口污点分析方法示意图,具体步骤如下:

步骤一,选择一个针对android原生环境的污点分析系统。taintdroid是一个用于在安卓系统手机上实时监控敏感数据的污点分析系统,整合了变量级别、方法级别、消息级别以及文件级别等四种粒度的污点传播,同时对性能与分析精度进行了平衡,能够同时对多个来源的敏感数据进行有效的分析。使用taintdroid能够让用户监控敏感数据其被应用程序用于何处,同时可为专注于识别不良应用程序的互联网安全服务企业提供宝贵的信息。在本实施例中采用taintdroid作为android原生环境的污点分析系统。

步骤二,选择一个针对web环境的污点分析系统。jsta是一个针对javascript代码的动态污点分析系统。jsta基于ast抽象语法树(abstractsyntaxtree)改写技术,其基本思想是将污点分析逻辑插入到待分析的javascript代码ast结构中,并重新生成改写后的javascript代码,运行改写后的代码即可完成javascript的动态污点分析。在本实施例中采用jsta作为web环境的污点分析系统。

步骤三,修改安卓系统源代码(jni中的两个函数),在webview桥接口通信数据传输方法中,增加对应的污点还原模块和污点记录模块,通过精确的跨语言污点映射使得污点标记能够跟随数据在不同语言之中传输。

步骤四,重新编译安卓系统。由于jni部分代码涉及安卓系统底层,在进行修改后,需要将安卓系统重新编译才能起效。

完成后即得到一个覆盖了android原生环境和web环境的污点分析系统。

本发明在不影响安卓系统正常工作的前提下通过修改安卓系统的源代码实现了一种面向安卓应用webview桥接口污点分析方法,能够有效的进行跨语言污点分析。

下面将通过实施例2说明上述系统在实际应用中的作用。

实施例2:

选取117个获取特定类别敏感数据的六类市场应用对该系统进行针对性测试,测试的应用包括15个地图导航应用、40个天气预报应用、16个拍摄美化应用、13个联系人云备份应用、15个短信云备份应用和18个计步器应用。对这六类市场应用中通过单语言方法获取敏感数据的应用和通过桥接口获取敏感数据的应用进行了统计,详细数据如表4所示。

表4针对性测试统计数据

注:r表示读取敏感数据的应用数目,n表示通过单语言方法向服务器发送敏感数据的应用数目,b表示通过桥接口方法向服务器发送敏感数据的应用数目。

从表4的检测结果可以看出,在所测试的15个地图导航类市场应用中,该系统检测到这类应用都存在获取地理位置信息的行为(即访问设备的地理位置信息并将其发送给服务器),其中14个应用是通过单语言方法向服务器发送地理位置信息,1个应用通过桥接口方法获取地理位置信息并将其发送给服务器。同样,天气预报类市场也都存在类似的获取地理位置信息的通信行为。在拍照美化应用中,该系统检测到这类应用都存在获取相机信息的行为,其中通过单语言方法获取相机信息的应用占37.5%,通过桥接口方法获取的应用占62.5%。在联系人云备份、短信云备份应用的测试中,该系统发现这一类系统备份应用都存在获取联系人和短信的行为。在计步器应用的测试中,该系统检测到这类应用都获取了设备的加速度传感器数据。这些检测结果表明该系统成功检测到六类应用获取了应用所需的特定敏感数据,还检测到一些应用中也获取了其他敏感数据的,如imei号、手机号和wifi信息。

实验结果表明该污点分析系统不仅可以成功分析出混合应用中的桥接口通信行为,还可以有效的检测出潜在的安全隐患和安全漏洞。

尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:本发明的范围由权利要求及其等同方案限定,在不脱离本发明的原理和宗旨的情况下可以对上述实施例进行多种变化、修改、替换和变型,而这些变化、修改、替换和变型均应在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1