Cordova应用中跨域访问行为的识别与风险评估

2020-03-11 12:50莫芊芊
计算机应用与软件 2020年2期
关键词:跨域插件开发者

莫芊芊 张 源

(复旦大学软件学院 上海 201203)

0 引 言

混合模式移动应用(Hybrid App,以下简称为混合移动应用)凭借着跨平台开发和优秀的交互体验吸引了大批开发人员。与此同时,市面上出现了数十种混合移动开发框架,这些框架帮助开发者快速简便地创建和部署混合移动应用。在这些混合移动应用框架中,Cordova[1]是目前市场上占有率最高的混合移动应用开发框架。通过提供一组JavaScript API,Cordova框架可以支持Web代码访问移动设备的底层资源。

本文发现Cordova应用中存在跨域访问的安全隐患,该问题源于Cordova框架提供的一个插件InAppBrowser。该插件用于加载和渲染网页,并且支持开发者的定制扩展。本文发现该插件提供了一组API,使得Cordova应用可以操纵任意已加载的Web资源,例如,应用可以调用executeScript向已加载的网页注入任意JavaScript代码并得到返回值。然而,Cordova框架并未提供相应的保护策略,因此Cordova应用可以利用这些API操纵任意的Web资源,即使这些资源不归应用所有。例如,一个恶意应用利用InAppBrowser加载了URL为“www.facebook.com”的网页,并调用executeScript方法向网页注入恶意代码,不仅可以窃取Facebook所有用户的隐私数据,而且难以被Facebook和用户所察觉。总而言之,由Cordova框架提供的具有访问Web资源能力的API将对用户的隐私数据带来严重的安全风险。此外,由于Cordova框架是其他众多混合应用开发框架的核心组件,包括PhoneGap、Ionic和AppBuilder等,所以影响范围将进一步扩大。

针对这一问题,本文系统性研究如何大规模地分析和识别Cordova应用中存在的跨域访问行为。虽然跨域访问的安全问题由前人总结提出,但是尚未有研究工作面向Cordova应用展开。而且由于Cordova应用和原生移动应用存在本质上的区别,所以前人提出的跨域访问行为检测方法无法适用于分析大规模的Cordova应用。本文的工作面临以下三个挑战:定义Cordova应用中的域特征;判断一个访问行为是否是跨域行为;自动化地评估跨域行为的风险性。为了解决这些挑战,本文设计并实现了一个自动化检测工具COCAScanner。该工具可以批量检测Cordova应用中的跨域访问行为,并对这些行为进行风险评估,以减少人工分析的工作量。不仅仅是Cordova应用,本文提出的分析方法同样适用于其他混合移动应用开发框架中的跨域访问行为检测。本文使用COCAScanner分析了Google Play中的7 791个Cordova应用,发现10.5%的Cordova应用中存在跨域访问行为,并且其中13.1%的Cordova应用具有高风险。通过人工分析,本文发现了一个恶意应用和多个高风险应用。在整个实验过程中,COCAScanner的跨域行为判断的准确率为83%和86.9%,判断无风险行为的准确率和召回率分别为91.4%和87%。

1 背景与相关工作

1.1 混合移动应用中的安全问题

许多研究者发现在混合移动应用中的安全漏洞会危及所在设备的私有资源。文献[3-4]发现了在混合移动应用框架中Web端和App端之间的通信渠道存在漏洞,使得在恶意网页可以利用通信渠道访问移动设备的私有资源。他们调研了大规模的PhoneGap应用,证实该漏洞存在并有效。文献[5]提出了一个框架,使得开发人员可以限制第三方插件的权限,阻止恶意插件得到过高的权限。混合移动应用中核心组件WebView的安全问题一直是近几年来的研究热点。一方面,文献[6-9]指出开发者在WebView中增加的Java接口可被恶意网页利用来窃取移动应用的私有文件或进行越权操作。文献[10]发现恶意网页可以利用HTML5 API通过WebView获得地理位置等隐私信息。为了减少这类安全隐患,文献[11-12]提出了细粒度的访问控制策略,用于保护应用和设备的资源。另一方面,文献[13-14]发现恶意的移动应用可以利用WebView向它所加载的Web网页注入JavaScript代码,以此来监听和拦截网页跳转,甚至窃取网页资源。而文献[15]把前人提出的由移动应用端攻击Web网页端的安全问题归类为WebView的跨域访问问题,设计并实现了一个自动化检测工具XPMChecker。通过分析80 694个安卓应用,他们发现接近半数的Web资源访问行为是跨域访问行为,并且找到了数十个恶意应用跨域攻击知名网站的资源。

1.2 Cordova框架及原理

Cordova框架用于开发混合移动应用,目前主流的移动应用开发模式可以分为三种:原生移动应用(Native Apps)、Web移动应用(Web-Based Apps)和混合移动应用。原生移动应用能够最大程度地利用平台的优势为用户提供全面的功能,然而它的开发成本很高,而且App版本更新时需要重新下载安装包手动更新。而Web移动应用的本质是一个运行在移动浏览器上的Web应用,因此开发成本较低。然而它无法使用设备的硬件接口和原生组件,很多功能无法实现。而混合移动应用兼备了前两类应用的优势,其本质和Web移动应用类似,但是它提供了一套Web语言和原生语言的通信机制,使得访问移动平台的原生组件和设备资源变得可能。所以它可以为用户提供更加丰富的功能,同时又可以大幅度地降低开发成本。

如图1所示,Cordova框架包涵3个主要模块:Web App模块,WebView模块和插件模块。Web App是应用程序的逻辑代码所在部分,由HTML、JavaScript和CSS语言编写。Cordova WebView与移动系统提供的原生组件WebView[2]不同,除了具备基础的渲染网页的功能外,还提供一组标准的JavaScript API(图1中的Native API)让开发者使用Cordova插件。Cordova插件为移动平台的原生组件提供了通信接口,并且绑定了对应组件的API调用,使得开发者可以使用JavaScript调用原生方法。Cordova官方提供了一套移动系统核心功能的插件,包括相机、内置浏览器等,也允许开发者扩展自定义的插件。

图1 Cordova的总体架构

2 Cordova应用中的跨域访问行为

2.1 跨域行为的安全问题

移动应用的跨域访问行为由文献[15]首次提出,用于描述移动应用访问Web资源的行为。为了清楚地描述这个行为,本文需要对一些重要的定义进行特别说明:

定义1移动应用访问Web资源的行为叫作访问行为。

定义2访问Web资源的代码所属的主体叫作App域。

定义3被访问的Web资源所属的主体叫作Web域。

定义4当App域和Web域不同时叫作跨域。

需要特别强调的是,这里的“域”和浏览器中同源策略的“域”不同,同源策略的“域”是指URL的协议、域名和端口号,这里的“域”是访问行为涉及到的两个平台的主体。

图2 Cordova应用中的跨域访问行为

本文用一个例子来说明跨域访问问题的安全风险。如图2所示,一个Cordova应用创建了一个InAppBrowser[16]对象,并以此来加载不属于该应用的Web网页。InAppBrowser是Cordova官方提供的一个插件,不仅提供类似于内置浏览器的功能,而且支持开发者的定制。在这个例子中,App域是指Cordova应用本身,Web域是指Web网页的主体。当跨域访问行为发生时,攻击者可以通过定制InAppBrowser向Web网页注入恶意代码并窃取Web资源。跨域访问问题发生在应用和Web网页的开发者不同时,应用可以将Web网页加载到InAppBrowser中,从而完全控制网页中的所有资源。不仅是Cordova框架开发的混合移动应用都有可能存在跨域访问问题,集成了Cordova框架的其他框架也受到影响,如PhoneGap、Ionic等。

2.2 难点与挑战

虽然前人提出的XPMChecker[15]工具可以检测原生移动应用中的跨域访问行为,但是由于混合移动应用和原生移动应用存在差异,使得之前的方法已不再适用。本文的工作面临以下几个挑战:

1) 定义混合移动应用中的App域。由于在混合移动应用中,应用程序的实体是Web App。不同于传统移动应用拥有丰富的代码结构,比如类名、方法签名等,Web App的简单结构反而无法直接提取有意义的标识特征作为App域。另外,由于混合移动应用中的Web App大多数以本地文件存在,所以无法使用远程URL与Web资源的URL进行直接判断是否跨域。

2) 判断混合移动应用中的跨域访问行为。由于跨域访问行为涉及到两个完全不同的平台,无论是网页,还是移动应用,开发者都可能使用不同的命名规则来声明自己的资源。这使得区分不同的资源主体变得困难,为了解决这个问题,XPMChecker利用了搜索引擎结果的相关性来判断资源宿主是否属于同一主体,虽然这个方法较为通用有效,但是需要依赖第三方的搜索结果,无法直接根据原信息判断。因此,本文需要寻找一个不依赖其他方信息且直接有效的判断方法。

3) 自动化地评估跨域行为的风险性。在现代移动应用中,跨域行为非常常见。在工具识别出跨域行为之后,如果所有的结果都交给人工判断,不仅工作量繁重而且在缺失上下文的环境下容易发生误判。所以,自动化工具需要对大量的跨域行为作出预判,排除无风险或风险较低的行为,为最后阶段的人为确认减轻工作量。

3 COCAScanner的设计与实现

3.1 整体架构

根据上文中的目标和挑战,本文设计并实现了一个能够识别并判断混合移动应用中跨域访问行为的工具COCAScanner。其整体架构如图3所示。主要由4个关键模块构成:

(1) 静态分析模块。该模块的主要功能是从混合移动应用中提取与Web资源访问相关的行为信息。

(2) 域特征提取模块。该模块将提取App端和Web端的域特征。

(3) 跨域判断模块。该模块将基于域特征判断输入的Web资源访问行为是否属于跨域访问行为。

(4) 风险评估模块。该模块将自动化地对跨域访问行为进行风险评分。

图3 COCAScanner总体架构

3.2 静态分析模块

本文基于特征文件将Cordova应用从所有应用中提取出来,并作为工具的输入。根据Cordova官方文档,本文总结出了4个可以访问Web资源的InAppBrowser API,如表1所示。

表1 能够访问Web资源的API

COCAScanner具体的做法是,首先定位InAppBrowser对象的初始化,InAppBrowser对象的初始化声明了将要加载的URL信息,是分析Web资源访问行为的起点。如图4所示。

图4 InAppBrowser对象创建示例

调用cordova.InAppBrowser.open方法可以创建一个InAppBrowser对象,本文可以提取该方法的第一个参数加载到这个InAppBrowser对象中的URL。接着本文跟踪这个InAppBrowser对象(图4中的loginWindow),并记录该对象调用的方法及其参数。这样,本文就可以提取该App中所有Web资源访问行为。例如在图4中,我们可以知道该App利用InAppBrowser加载了“https://www.facebook.com”的资源,然后对“loadstart”事件进行监听以及将“jscode”注入到网页中。

3.3 域特征提取模块

3.3.1定义App域特征

由于混合移动应用的主体是Web App,所以本文将App的域特征定义为Web App中首页的关键词。在Cordova应用中,默认情况下MainActivity会加载asset/www/目录下的静态文件index.html作为该App的入口。本文从index.html文件中提取特征词作为域特征,其余的文件将加入语料库用于后续分析。

3.3.2定义Web域特征

本文将动态访问URL之后得到的HTML文档作为域特征的来源,并在该HTML文档上使用和App端一样的方法提取出特征词来作为Web端的域特征。这样既能够处理特殊的URL,又可以解决URL命名多样化的问题,并且当Web端和App端的信息源一致时,有利于本文采用相同的方法对它们进行建模和差异化分析,避免使用不同方法而可能引入的偏差。

3.3.3域特征提取算法

在上两个小节中,本文已经确定了从App端和Web端的HTML文档中提取关键词作为各自的域特征。接下来本文将使用文本分析中常用的TF-IDF算法提取关键词。TF-IDF的核心思想是当一个词在某一个文档中的出现频率很高,并且在其他文档中很少出现,则这个词对该文档很重要。

COCAScanner的具体做法是,首先提取HTML文件中的所有文字信息,然后进行分词、去除停用词的预处理。再计算剩下的每个词的词频TF,忽略大小写。语料库来源于App的除首页之外的其他HTML文件,本文将统计每个文件出现的词语。根据下式计算词语的逆文档率IDF:

(1)

式中:N表示语料库中所有文档的总数,D表示包含某词语的文档数。

最后,利用式(2)可以得到每个词语的权值。对于词语较多的文档,本文只取权值靠前的10个词语作为域特征。

tfidfi=tfi×idfi

(2)

3.4 跨域判断模块

在得到两组由关键词-权值表示的域特征之后,本文用权值作为特征值将它们向量化。由此得到两个1×N(N≤10)的向量:[A1,A2,A3,…,AN]和[W1,W2,W3,…,WN]。它们分别代表App端和Web端各自的域特征。使用下式可以计算两个向量的夹角θ的余弦值。

(3)

已知cosθ的取值范围为[-1, 1],而且cosθ的值越接近1,则表示两个向量越相似。本文首先选定了5组阈值t,分别为0.5、0.6、0.7、0.8、0.9,通过对比实验找出最优值。实验结果发现当阈值t=0.7时,判定结果的真阳率(True Positive Rate)最高。所以本文设定阈值t= 0.7,当cosθ≥0.7表示该行为属于同域,反之则判断该行为跨域,将进行下一步的风险评估。

3.5 风险评估模块

COCAScanner将对executeScript API进行预评估,因为对比表1中的其他API,它能访问更加敏感的资源,而且它的风险程度取决于它注入的JavaScript代码,这需要本文对这些注入的代码进一步分析。

JavaScript能够访问修改HTML页面的DOM元素以及本地存储的资源,本文发现这些行为都是通过调用浏览器提供的API实现的。为了得到JavaScript代码调用浏览器API的情况,本文将JavaScript置于可控的执行环境中运行,记录下JavaScript的运行结果和行为特征,并根据其访问Web资源的情况作出风险评分。本文对开源的JavaScript引擎Rhino进行扩展,对document和window对象进行建模和初始化,并监听它们属性的状态,脚本运行完之后与初始状态比较,以此得到注入的JavaScript脚本对网页对象的操作情况。另外,本文增加了浏览器中的常用接口DOM和BOM 的实现,使得调用这些接口的脚本可以正常运行。本文通过对浏览器API的分析,筛选出来一些高风险的API,有getElementById、getElementsByClassName、getElementsByName、getElementsByTagName、localStorage.getItem等,这些API可以直接获取Web网页的资源。本文对这些API进行重写和设定风险分值,这样当它们被调用时,会及时更新风险总值。最终本文会根据风险值和操作网页对象的情况判断该JavaScript脚本的危险程度。

4 实验与分析

本文的实验环境是一台具有64个CPU内核(2 GHz)和188 GB内存的CentOS 7.4 64位服务器。该服务器运行的Java版本是1.8.0_171的64位虚拟机。

4.1 数据集

本文在2018年4月到10月之间使用网络爬虫从Google Play上爬取了大量安卓移动应用,去掉重复应用之后,本文成功下载了175 543个安卓移动应用。这些应用是随机爬取的,不区分类别和下载量,所以能够代表Google Play应用商场的整体情况。从这些应用中,使用上文给出的方法识别使用Cordova框架开发的混合移动应用,最终得到8 804个Cordova应用作为本文实验的总数据集,占应用总数的5.01%。

4.2 跨域访问行为的检测结果

本文在服务器上启动了9个进程来并行地运行分析程序,并为每个Cordova应用的分析时间设置上限为30分钟,一旦超过30分钟,该进程将被杀死,分析程序终止。对于数据库中8 804个应用,COCAScanner花费了大约52个小时完成所有应用的分析,每个应用的平均解析时间为20秒。

COCAScanner成功分析了7 791个应用,占所有应用的88.5%。本文把只调用了表1中的任意API的操作归为Web资源访问行为,如果只加载一个URL但并没有后续的操作,则认为并没有访问该URL的资源。在成功解析的Cordova应用中,COCAScanner发现有2 479个App中出现Web资源访问行为,一共有14 284个Web资源访问行为。接着对这些Web资源访问行为进行跨域判断,得到4 808个跨域行为,这些行为分布在819个App中。对于所有的跨域行为,COCAScanner将对所有发生跨域访问行为的App进行预评估,结果表示有107个有风险的Cordova应用。详细的数据可见表2,表中括号内的数字表示行为个数,括号外的是App的个数。

表2 实验总体结果

4.3 跨域访问行为检测的效果

本文在14 284个Web资源访问行为中,随机选择了100个行为进行人工判定,结果标记了84个跨域行为。COCAScanner成功判断了73个访问行为的跨域情况,有11个错误判断的原因主要是由于TF-IDF对于HTML文档结构不敏感,导致提取的关键词无效。

综合结果,本文得到COCAScanner的跨域行为判断的准确率和召回率分别为83%和86.9%,由于判断方法非常依赖于App中的文件,所以如果出现开发者更多的使用网络文件的情况,会导致App端的域特征提取错误。而对于关键词无效带来的错误率,本文可以通过改进关键词提取算法来减少。

4.4 风险评估模块效果

COCAScanner对Cordova应用中的4 808个跨域行为进行预评估。最终得到4 772个风险评分,分值最低分是0分,最高分为124分。本文发现有36个行为没有成功评分,人工分析发现它们大部分都使用了一些JavaScript第三方库,例如jQuery,导致一些特殊的符号没有办法被本文的JavaScript执行引擎识别,还有一些代码出现语法错误的情况,这可能是开发者编程错误造成的。COCAScanner判定4 808个行为中有4 470个行为是没有风险的,分布在712个App中,另外的401个行为是有风险的,分布在107个App中。

本文随机挑选了具有跨域访问行为的100个App进行人工分析,共计188个行为。人工判断其中的123个行为无风险。COCAScanner的判定结果是107个行为无风险,其中有16个无风险的行为被判断成了有风险的行为,原因是这些行为虽然调用了有风险的浏览器API,但是为了提供正常功能。

总而言之,风险评估模块判断风险的准确率为91.4%,召回率为87%。

4.5 案例分析

本文从无风险和有风险的App中各随机抽取了50个App进行人工的行为分析,总计100个App,帮助本文理解跨域访问行为的目的。最终,本文将这些跨域访问行为分为以下三类:

1) 实现正常功能的跨域访问行为。功能行为指为了辅助App的正常运行而进行跨域访问的行为。本文发现App通过跨域访问来扩展功能可能出于以下4种目的:

(1) 注入代码更改网页布局设置,使得页面对移动设备更加友好。

(2) 补充原生WebView不支持的操作,比如弹出消息框。

(3) 网页重定向,跳转到其他页面或者后退;例如,本文发现一些App会监听第三方账号授权页面的结果,如果发现授权失败,则执行一段被注入JavaScript脚本,将页面重定向到授权页面,等待用户重新进行授权操作。

(4) 向App端传递页面加载结果。例如,本文发现一些App会监听一些登录流程的URL,当到流程的最后一步时,会注入JavaScript脚本获取和登录状态有关的页面属性,并根据具体状态进行不同操作。

2) 具有恶意目的的跨域访问行为。恶意行为指通过跨域访问行为达到自己的不良意图,本文发现有以下2种恶意目的:

(1) 窃取Web网页的敏感数据,如用户名、密码等。例如一个名字是Profile Visitors的App,该App的包名为com.profile.visitors,当用户在App上登录了自己的Facebook账号之后,App将为用户显示有哪些账号在“偷偷关注”自己。实际上,该App注入了一段恶意的JavaScript代码到Facebook账号的登录网页,这段代码将从当前页面提取用户输入的email地址和密码发送,接着将用户的email地址和密码发送到App的服务器。

(2) 注入广告来推广自己的产品。例如一个名字是FinoZen的App,包名是com.ionicframework.helloandroid962651.apk。这是印度金融投资平台FinoZen的App,在Google Play上显示它的安装量在100 000以上。本文发现它会向印度的一家基金公司Reliance Mutual Fund注入一个JavaScript文件和一个CSS文件,与App并不属于同一个公司。本文发现注入的内容是向用户展示他们使用了FinoZen之后可以在一周中的哪个时间获得收益。当用户使用Reliance Mutual Fund的服务在线支付的时候,会看到FineZen的广告。FinoZen利用跨域访问帮自己打广告的行为损坏了其他公司的利益,属于非法获利的行为。

3) 意图不明行为的跨域访问行为。除了以上两种行为之外,本文还发现有些行为意图不明朗,比如有些跨域行为会篡改页面DOM元素、隐藏或删除一些元素,本文分析了这些被篡改的网页和元素,发现并不会对网页的整体功能产生影响。

综上所述,本文认为在大部分Cordova应用中,跨域行为是出于正常的目的,比如为了扩展功能、使界面更加友好等,然而本文也发现了一些高风险的恶意行为,说明了一些恶意开发者意识到可以利用Web资源访问API进行非法操作,实现他们的不良目的,所以混合移动应用中的跨域行为问题依然值得重视。

5 结 语

为了调研跨域访问行为在Cordova应用中的影响,本文设计并实现了一个自动化工具COCAScanner。该工具从HTML文档中提取关键词作为域特征,并通过余弦相似算法计算两个端域特征的相似度,以此来辨别跨域访问行为和正常行为。对于跨域访问行为,COCAScanner扩展了一般的JavaScript引擎,实现了风险评分功能。通过分析Google Play商城中7 791个Cordova应用,本文发现10.5%的Cordova应用中存在跨域访问行为,并且其中13.1%的Cordova应用具有风险。虽然大多数行为都是出于扩展应用功能的目的,但是本文也发现了一个恶意应用和多个高风险应用。证明了跨域访问问题存在于混合移动应用中,并影响着用户的信息安全。

猜你喜欢
跨域插件开发者
基于多标签协同学习的跨域行人重识别
为群众办实事,崂山区打出“跨域通办”组合拳
G-SRv6 Policy在跨域端到端组网中的应用
用好插件浏览器标签页管理更轻松
请个浏览器插件全能管家
基于jQUerY的自定义插件开发
“85后”高学历男性成为APP开发新生主力军
16%游戏开发者看好VR
“新都市电影”中的男性明星——身体、阶层与跨域想象
美国社交网站的周末大战