CN107368741A - 一种基于静态分析的Android应用JavaScript安全漏洞检测方法 - Google Patents
一种基于静态分析的Android应用JavaScript安全漏洞检测方法 Download PDFInfo
- Publication number
- CN107368741A CN107368741A CN201610320037.1A CN201610320037A CN107368741A CN 107368741 A CN107368741 A CN 107368741A CN 201610320037 A CN201610320037 A CN 201610320037A CN 107368741 A CN107368741 A CN 107368741A
- Authority
- CN
- China
- Prior art keywords
- javascript
- android
- webview
- interface
- security breaches
- 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.)
- Pending
Links
Classifications
-
- 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/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提出一种基于静态分析的Android应用中的JavaScript安全漏洞检测方法,使用Soot工具对Android应用中的APK文件进行反编译,获得Jimple字节码;对Jimple字节码进行分析,判断所述Android应用的JavaScript使用模式;根据所述JavaScript使用模式判断所述Android应用是否存在JavaScript安全漏洞;该方法通过分析和明确Android应用中的JavaScript使用模式及其对应的漏洞类型,能够检测Android应用中所有类型的JavaScript漏洞,具有检测速度快、检测效果好等特点。
Description
技术领域
本发明涉及安卓应用安全技术领域,具体涉及一种基于静态分析的Android应用中JavaScript安全漏洞的检测方法,用于检测安卓应用中是否存在与JavaScript相关的安全漏洞。
背景技术
Android系统是当前发展最好的移动平台之一,Android系统上的应用已经覆盖了我们衣食住行的方方面面。与此同时,Android应用上的安全漏洞也是层出不穷,其中,很大一部分漏洞与JavaScript相关。JavaScript是一种直译式客户端脚本语言,最早用来给HTML网页增加动态功能,后来广泛用于Web应用开发和安卓应用开发。由于开发者在开发过程中使用JavaScript时没有采取安全防护措施,给应用留下了一些漏洞,导致黑客通过使用注入恶意JavaScript的方式去攻击安卓应用。
目前国内外对于Android应用的JavaScript漏洞检测方法分为两类。第一类方法检测Android应用中的WebView跨站点脚本漏洞,第二类检测Android应用中的接口对象注入漏洞。这两类检测方法对于特定类型漏洞的检测具有良好的成效,但是无法覆盖所有不同类型的JavaScript漏洞。另外,这些方法没有明确其检测漏洞的规则,即没有明确JavaScript是如何被使用在Android应用中,总共有多少种使用模式,哪些使用模式会导致什么类型的安全漏洞。这将导致开发者或用户在使用这种方法进行JavaScript安全漏洞检测时,并不清楚Android应用具体是如何使用JavaScript的,以及这些使用又是如何产生安全漏洞的。
因此,检测Android应用中JavaScript安全漏洞的难点为:一是如何总结安全漏洞形成的规则,包括JavaScript在Android应用中的使用模式,可能形成的安全漏洞,以及使用模式与安全漏洞二者之间的对应关系;二是缺少一种方法能够检测到所有不同类型的JavaScript安全漏洞
发明内容
本发明的目的在于提供一种基于静态分析的Android应用中的JavaScript安全漏洞检测方法,该方法通过分析和明确Android应用中的JavaScript使用模式及其对应的漏洞类型,能够检测Android应用中所有类型的JavaScript漏洞,本发明方法具有检测速度快、检测效果好等特点。
为了解决上述技术问题,本发明提供一种基于静态分析的Android应用JavaScript安全漏洞检测方法,使用Soot工具对Android应用中的APK文件进行反编译,获得Jimple字节码;对Jimple字节码进行分析,判断所述Android应用的JavaScript使用模式;根据所述JavaScript使用模式判断所述Android应用是否存在JavaScript安全漏洞。
进一步,反编译时,先使用Soot工具将Android应用解压缩,获得APK中的资源文件、AndroidManifest.xml和Dex文件;然后解析Dex文件,使用Baf将Dex文件转换为Jimple文件。
进一步,所述JavaScript使用模式包括本地模式、远程模式、接口模式和回调模式;所述JavaScript安全漏洞包括WebView跨站点脚本漏洞、WebView导航漏洞和接口对象注入漏洞;所述本地模式是指,Android应用使用WebView加载了一个本地的JavaScript文件或者加载了一个包含JavaScript代码的本地html文件;本地模式不产生JavaScript安全漏洞;所述远程模式是指,Android应用使用WebView加载了一个远程的JavaScript库或者打开了包含JavaScript的远程网址;远程模式会产生WebView跨站点脚本漏洞,同时有可能产生WebView导航漏洞;所述接口模式是指,Android应用为WebView注册了一个能实现JavaScript与Android交互的接口;接口模式有可能产生接口对象注入漏洞;所述回调模式是指,Android应用使用WebView的evaluateJavascript()方法直接在UI线程异步执行JavaScript,并且获得一个回调值;回调模式不产生JavaScript安全漏洞。
进一步,遍历所有Jimple文件,查找Android应用是否允许使用JavaScript;若Android应用使用setJavaScriptEnabled(true)来允许程序执行JavaScript,则继续后续检测工作,否则,检测终止;经判断,如果JavaScript使用模式为本地模式,则将该模式加入模式列表;经判断,如果JavaScript使用模式为远程模式,则将该模式加入模式列表,并将WebView跨站点脚本漏洞加入漏洞列表;然后进一步检测是否存在WebView导航漏洞,如果存在WebView导航漏洞,则将WebView导航漏洞加入漏洞列表;经判断,如果JavaScript使用模式为接口模式,则将该模式加入模式列表,并检测是否存在接口对象注入漏洞,如果存在接口对象注入漏洞,则将接口对象注入漏洞加入漏洞列表;经判断,如果JavaScript使用模式为返回模式,则将该模式加入模式列表。
进一步,如果检测到Android应用加载JavaScript的方法参数是以file://、“data://”或者“javascript:”开头,则其JavaScript使用模式为本地模式;如果检测到Android应用加载JavaScript的方法参数是以“http://”或者“https://”开头,则其JavaScript使用模式为远程模式;如果检测到Android应用使用WebView的addJavascriptInterface()方法注册了一个JavaScript接口,则其JavaScript使用模式为接口模式;如果检测到Android应用使用WebView的evaluateJavaScript()方法加载JavaScript并获取返回值,则其JavaScript使用模式为回调模式。
进一步,根据WebView是否可以导航来检测是否存在WebView导航漏洞,具体为:判断WebView是否添加了WebViewClient实例,如果WebView没有添加WebViewClient实例,则该WebView不具备导航能力;如果添加了WebViewClient实例,则进一步判断该WebViewClient实例是否覆盖了shouldOverrideUrlLoading()方法;如果没有覆盖shouldOverrideUrlLoading()方法,或者该shouldOverrideUrlLoading()方法使用WebView加载新的URL,则WebView可以导航,否则该WebView不可以导航;当WebView可以导航时,存在WebView导航漏洞。
进一步,检测是否存在接口对象注入漏洞的方法为:遍历注册的接口类的所有方法,查看Android应用是否对其中可供JavaScript访问的方法加了@JavaScriptInterface注解,如果没有加@JavaScriptInterface注解,则存在接口对象注入漏洞。
进一步,检测是否存在接口对象注入漏洞的方法为:遍历整个Android应用的所有方法,以判断Android应用在使用完接口后,是否通过removeJavascriptInterface()方法移除了接口,如果在使用完毕后没有移除接口,则存在接口对象注入漏洞。
进一步,JavaScript安全漏洞检测结束后生成漏洞检测报告,所述漏洞检测报告包括对所有输入的Android应用的漏洞检测结果,对每个Android应用,漏洞检测报告记录有Android应用的名称、版本号、所匹配的JavaScript使用模式以及各种模式的使用次数、存在的漏洞类型以及每种漏洞产生的次数,对于接口对象注入漏洞,还记录Android应用暴露给JavaScript的接口个数。
本发明与现有技术相比,其显著优点在于,(1)本发明总结了Android应用中常见的JavaScript使用模式。本发明总结了Android应用中目前常用的四种JavaScript使用模式,而这正是精确、快速地进行漏洞检测的关键;(2)本发明覆盖了Android应用中所有类型的与JavaScript相关的安全漏洞,能够检测现有的Android应用中三种类型的JavaScript安全漏洞,而现有的方法只检测一种类型的JavaScript安全漏洞;(3)能一次检测大量的Android应用是否存在JavaScript安全漏洞,本发明方法能以成百上千的Android应用作为输入,得到JavaScript安全漏洞检测结果。并且,本发明方法采用静态分析,速度快,覆盖率高。
附图说明
图1为本发明方法流程图;
图2为本发明中总结的Android应用中四种JavaScript使用模式的示意图,其中,(1)为本地模式,(2)为远程模式,(3)为接口模式,(4)为回调模式;
图3为本发明中总结的Android应用中三种JavaScript安全漏洞的示意图,其中,(1)为WebView跨站点脚本漏洞,(2)为WebView导航漏洞,(3)为JavaScript接口对象注入漏洞;
图4为本发明中模式匹配与漏洞检测部分的流程图。
具体实施方式
容易理解,依据本发明的技术方案,在不变更本发明的实质精神的情况下,本领域的一般技术人员可以想象出本发明基于静态分析的Android应用中的JavaScript安全漏洞检测方法的多种实施方式。因此,以下具体实施方式和附图仅是对本发明的技术方案的示例性说明,而不应当视为本发明的全部或者视为对本发明技术方案的限制或限定。
本发明的基本思路是,采用静态分析的方法,使用Soot工具,对Android应用程序安装包也就是APK文件进行反编译,获取中间形式的Jimple字节码;然后对Jimple字节码进行分析,判断该应用是否匹配预先确定的四种JavaScript使用模式,若匹配其中的一个或者多个使用模式,则进一步判断所匹配的使用模式是否会导致预先确定的三种JavaScript安全漏洞;最后生成漏洞分析报告。
如图1所示,本发明方法的输入是大量的Android应用安装包,即APK文件,输出是这些应用的漏洞检测报告,其技术流程包括三大部分:反编译,模式匹配与漏洞分析,以及漏洞检测报告的生成。
反编译
反编译的功能是将APK文件反编译为Jimple文件。此部分需要借助Soot这个Java优化框架来执行。
APK文件是Android Package的缩写,即Android应用安装包。一个Android应用通常被打包成一个APK文件,其中包含了Dex文件格式的应用代码和图片等资源。本发明方法借助Soot工具,将APK文件中的源代码和资源反编译出来。对源代码进行反编译得到的是以Java字节码形式存储的文件,而分析Java字节码是非常复杂的。因此本发明借助Soot工具进一步将Java字节码文件转化成Jimple文件,Jimple文件是Soot工具的一种中间代理。Jimple文件是一个紧凑、无栈、类型化的三地址代码中间表示法,相对来讲其结构更清晰,每条指令都有显式的操作数,更适用于本发明后续的基于静态分析的模式匹配与漏洞分析工作。
模式匹配和漏洞分析
本部分的功能是对反编译得到的Jimple文件进行静态分析,分析应用程序是否匹配预先总结出来的几种JavaScript使用模式,以及分析这些JavaScript使用模式是否会产生JavaScript安全漏洞。
本发明总结出四种JavaScript使用模式,这四种JavaScript使用模式如图2所示,包括本地模式、远程模式、接口模式和回调模式。本发明还总结出部分JavaScript使用模式可能产生的三种JavaScript安全漏洞,三种JavaScript安全漏洞如图3所示,包括WebView跨站点脚本漏洞、WebView导航漏洞和JavaScript接口对象注入漏洞。另外,本发明给出了本地模式和远程模式下经常使用的WebView(Android中一个浏览器控件)的三种方法,如表1所示。
表1本地模式和远程模式下常用的WebView的三种方法
(1)本地模式。Android应用使用WebView加载了一个本地的JavaScript文件或者加载了一个包含JavaScript代码的本地html文件。因为在这种模式下,WebView加载的JavaScript是本地生成的,所以本发明把这种模式命名为本地模式。如下所示,如果一个Android应用中某处代码使用了表1中WebView三种方法中的某个方法去加载Url,且该方法的参数即加载的Url是以“file://”,“data://”或者“javascript:”开头的本地JavaScript时,则可以认定该Android应用使用了本地模式。
WebView myWbv=new WebView(this);
myWbv.getSettings().setJavaScriptEnabled(true);
myWbv.loadUrl("file://android_asset/index.html");
myWbv.loadUrl("javascript:alert('Hello,JS')");
在本地模式中,WebView所加载的JavaScript是在本地生成的,即Android应用的内部文件或代码,因此这种模式不会产生JavaScript安全漏洞。
(2)远程模式。Android应用使用WebView加载一个远程的JavaScript库或是打开包含JavaScript的远程网址。因为在这种模式下,WebView加载的JavaScript是远程的,故本发明称这种模式为远程模式。如下所示,若一个Android应用中某处代码使用了表1中WebView三个方法中的某个方法去加载Url,且该方法的参数为以“http://”或“https://”开头的远程JavaScript时,则可以认定该Android应用使用了远程模式。
myWbv.loadUrl("http://www.facebook.com/");
myWbv.loadUrl("http://media.admob.com/mraid/v1/mraid_app_interstitial.js");
在远程模式中,WebView所加载的JavaScript是远程的,有可能受网络环境的影响,因此这种模式可能会产生JavaScript安全漏洞。
(3)接口模式。Android应用为WebView注册一个能实现JavaScript与Android交互的接口。这种方式下,Android应用的Java代码可以调用JavaScript,JavaScript也可以通过注册的接口类的名称来调用这个接口类中的方法。因为这种模式主要通过注册JavaScript接口的方式来实现JavaScript与Android应用内部代码的双向交互,所以本发明把这种模式称为接口模式。如下所示,若一个Android应用中某处代码不仅使用WebView的三种方法加载Url,还使用WebView的addJavascriptInterface()方法来注册一个JavaScript接口,则可以认定该Android应用为接口模式。
这种模式通过注册一个接口,相当于在Android应用程序和网页之间架起了一座桥梁,实现了Android应用程序与JavaScript的双向交互,给开发带来便利。
(4)回调模式。Android应用使用Android 4.4之后新的API,即WebView的evaluateJavascript()方法直接在UI线程异步执行JavaScript,并且获得一个回调值,应用代码再根据这个回调值决定下一步的操作。因为在这种模式下,WebView加载JavaScript会获得一个回调值,Android应用内部的Android代码接收到这个返回值后,再做出下一步操作,也就是说这种模式通过回调的方式实现JavaScript与Android应用内部的Android代码的双向交互,所以本发明把这种模式称为回调模式。如下所示,若一个Android应用使用WebView的evaluateJavaScript()方法加载Url,则可以认定这个Android应用使用了回调模式。
这种模式通过采用回调的方式,将JavaScript执行的返回值传递给Android应用的回调函数,回调函数中的Java代码再根据返回值来决定下一步操作。这种模式是Android的4.4之后的新机制,也能够完成应用程序和网页之间的双向交互。
根据分析,在前述四种使用模式中,只有本地模式和回调模式是安全的,其他两种模式可能产生漏洞。其中,远程模式会产生WebView跨站点脚本漏洞,同时可能会产生WebView导航漏洞,接口模式可能会产生接口对象注入漏洞。
(1)WebView通用跨站点脚本漏洞。WebView通用跨站点脚本漏洞是由于浏览器或者浏览器扩展程序对于用户输入检查不足而产生的一种漏洞。据报道,谷歌基于WebKit内核的Chrome浏览器此前就出现过各种通用型的跨站点脚本漏洞。虽然这种漏洞在PC版Chrome浏览器上已经修复,但Google把WebKit内核移植到了Android上,并将其作为WebView组件封装在Android SDK中,导致曾经在WebKit上出现过的漏洞在Android系统上再一次重现。在Android 4.4(KitKat)之前,WebView使用的是WebKit内核,进而导致使用该版本之前WebView的Android应用都受到通用型跨站点脚本漏洞的影响。当Android应用使用远程模式加载JavaScript时,黑客可以向WebView加载的网页中注入一段恶意JavaScript,从而利用这种跨站点脚本漏洞来获取用户在应用中留下的敏感信息,如Cookie等。
(2)WebView导航漏洞。Android应用在使用远程模式加载JavaScript时,可以设置WebView具备或者不具备导航能力。如果Android应用设置了可导航的WebView,那么当用户点击WebView已经加载的网页上的链接时,该Android应用继续使用WebView加载被点击的链接所指向的新网页。如果Android应用使用了未加密的HTTP连接,或者用户连接了不安全的WIFI网络,一个中间攻击者很有可能抓住机会向页面中注入恶意JavaScript。这种漏洞的最大影响在于它增加了应用受到攻击的可能性。一旦WebView配备了导航能力,WebView就可以引导用户从原始网页上的页面链接跳转到新的恶意页面,这个新的页面又有可能跳转到其他网页,而黑客可能在任意一个第三方网站中注入JavaScript从而攻击WebView乃至Android应用。
(3)接口对象注入漏洞。接口模式给Android应用和网页之间搭起了一架桥梁。通过这架桥梁,WebView加载的网页中的JavaScript代码也可以访问Android应用中的数据和代码。这不仅帮助开发者实现了网页和Android应用之间的双向交互,也给黑客攻击Android应用提供了一条绿色通道。事实上,允许JavaScript调用Android应用的内部代码打破了传统的浏览器安全模型。黑客可以利用注册的接口,通过反射机制调用恶意的Java代码,以攻击Android应用。
本发明将所述四种JavaScript使用模式与三种JavaScript安全漏洞之间的关系用表2表示出来。在四种JavaScript使用模式中,只有本地模式和回调模式是安全的,其他两种模式可能产生漏洞。其中,远程模式会产生WebView跨站点脚本漏洞,同时可能会产生WebView导航漏洞,接口模式可能会产生接口对象注入漏洞。
表2四种JavaScript使用模式与三种JavaScript安全漏洞之间的关系
在进行静态分析之前,本发明方法设置几个计数器。对当前Android应用,分别用八个计数器来统计Android应用中使用四种模式的次数,产生三种漏洞的次数,以及对于第三种接口对象注入漏洞中Android应用所暴露出的JavaScript接口个数。这八个计数器内的值在初始化时均为0。
如图4所示,本发明方法对反编译得到的Jimple文件进行线性扫描,遍历Android应用的每个类,深入到每个方法,以及每条语句,以检测应用是否允许使用JavaScript,所使用的JavaScript匹配哪种使用模式,所匹配的使用模式会产生哪几种JavaScript安全漏洞。对Android应用的每个方法,本发明判断以下内容:
(1)Android应用是否允许执行JavaScript。主要是通过判断Android应用是否将WebView的WebView.getSettings().setJavaScriptEnabled()方法的值设置为true,若该方法的值设置为true,则表示Android应用允许JavaScript的执行,进入(2)进行下一步分析;否则结束对当前方法的分析。
(2)分析Android应用在此处使用JavaScript的方式匹配哪种使用模式。
1)如果检测到Android应用在此处使用表1所列的WebView的三种方法加载JavaScript,并且方法的参数是以“file://”,“data://”或者“javascript:”开头的本地JavaScript,则该Android应用匹配本地模式,将本地模式加入模式列表中,并把本地模式计数器的值加1,结束对当前方法的分析;
2)如果检测到Android应用在此处使用表1所列的WebView的三种方法加载JavaScript,并且方法的参数为以“http://”或者“https://”开头的远程JavaScript时,应用匹配远程模式,本发明将远程模式加入模式列表中,把远程模式计数器的值加1,并将WebView跨站点脚本漏洞加入到漏洞列表,将WebView跨站点脚本漏洞计数加1,而后进入(3),进行WebView导航漏洞分析;
3)如果检测到Android应用在此处不仅使用上述WebView的三种方法加载JavaScript,还使用WebView的addJavascriptInterface()方法来注册一个JavaScript接口,则判断该Android应用在此处匹配接口模式,然后将接口模式加入模式列表,把接口模式计数器的值加1,而后进入(4),进行接口对象注入漏洞分析;
4)如果检测到Android应用在此处使用WebView的evaluateJavaScript()方法加载JavaScript并获取返回值,则判定该Android应用在此处匹配回调模式,将回调模式加入模式列表,把回调模式计数器的值加1,结束对当前方法的分析;
(3)如果Android应用匹配远程模式,则进一步判断该Android应用在此处设置WebView是否可以导航。首先判断该WebView是否被添加了WebViewClient实例,如果Android应用没有给该WebView添加WebViewClient实例,那么该WebView没有导航能力;反之如果添加了WebViewClient实例,则再判断该实例中shouldOverrideUrlLoading()方法的具体设置,即如果该方法没有被重载或者该方法中代码使用WebView加载新的Url,则当前WebView是可以导航的,否则不能导航。若最终判断出WebView可以导航,则将WebView导航漏洞加入到漏洞列表,并把WebView导航漏洞计数器的值加1;否则不做处理。最后结束对当前方法的分析。
(4)如果Android应用匹配接口模式,则进一步判断应用在注册接口时是否采取了漏洞防护措施。这需要做两个工作:一是通过遍历注册的接口类的所有方法,查看应用是否对可供JavaScript访问的方法加了@JavaScriptInterface注解,以防止黑客利用此接口类通过反射机制来攻击应用;二是通过遍历整个Android应用程序,以判断应用是否在使用完该接口后,通过removeJavascriptInterface()方法移除了这个不安全的接口。如果应用不仅没有给接口类的任意方法加上注解,也没有在使用完毕后移除该接口,那么将接口对象注入漏洞加入到漏洞列表中,把接口对象注入漏洞计数器的值加1;否则不做处理。最后结束对当前方法的分析。
漏洞检测报告生成
在模式匹配和漏洞分析工作结束之后,生成一份漏洞检测报告。漏洞检测报告包括对所有输入的Android应用的漏洞检测结果,对每个应用,漏洞检测报告记录了Android应用的名称、应用的版本号、应用所匹配的JavaScript使用模式以及使用各种模式的次数、存在的漏洞以及每种漏洞产生的次数。对于接口对象注入漏洞,特别记录Android应用暴露给JavaScript的接口个数。
实施例
本实施例使用Adobe Reader(一款用于PDF阅读、编辑的Android应用)11.1.3版本的APK,详细说明本发明的具体实施。
(1)使用Soot工具,将AdobeReader.apk解压缩,获得APK中的资源文件、AndroidManifest.xml文件和Dex文件;
(2)Soot解析Dex文件,即Dalvik虚拟机字节码文件,再使用Baf将所有字节码文件转换为可分析的Jimple文件;
(3)遍历所有Jimple文件,查找应用是否允许使用JavaScript。在Adobe Reader应用中,本发明方法查找到有几处使用setJavaScriptEnabled(true)来允许程序执行JavaScript,故继续下一步的检测工作。
(4)检测Android应用是否匹配本地模式。即如果应用使用表1所列的WebView的三种方法加载JavaScript,并且方法的参数是以“file://”,“data://”或者“javascript:”开头的本地JavaScript时,则该Android应用匹配本地模式。本实施例成功检测到该Android应用有7次匹配本地模式,将本地模式加入模式列表中。
(5)检测Android应用是否匹配远程模式。即如果应用使用表1所列的WebView的三种方法加载JavaScript,并且方法的参数为以“http://”或者“https://”开头的远程JavaScript时,应用匹配远程模式。本实施例成功检测到该应用有8次匹配远程模式,将该模式加入模式列表中,将WebView跨站点脚本漏洞加入漏洞列表中,并进入(6)检测此处是否存在WebView导航漏洞。
(6)进一步判断应用在使用远程模式时是否设置WebView可以导航,首先判断该WebView是否添加了WebViewClient实例。如果WebView没有添加WebViewClient实例,则该WebView不具备导航能力,如果添加WebViewClient实例,则判断该实例是否覆盖了shouldOverrideUrlLoading()方法。如果没有覆盖这个方法,或者这个方法使用WebView加载新的URL,那么WebView可以导航,否则不能。本实施例检测出AdobeReader中有4处设置了WebView可以导航,当用户点击页面链接时,应用继续使用WebView加载下一个页面。因此,这个应用存在WebView导航漏洞,把此类漏洞加入漏洞列表。
(7)检测应用是否匹配接口模式。即如果应用不仅使用上述WebView的三种方法加载JavaScript,还使用WebView的addJavascriptInterface()方法来注册一个JavaScript接口,那么这个应用匹配接口模式。本实施例检测到该应用有9处匹配接口模式,将该模式加入模式列表中,并进入(8)检测是否导致接口对象注入漏洞。
(8)进一步判断应用在使用接口模式时是否采取了漏洞防护措施。一是追溯注册的接口类的定义,通过遍历这个接口类的所有方法,查看应用是否对其中可供JavaScript访问的方法加了@JavaScriptInterface注解,以防止黑客利用此接口类通过反射机制来攻击应用;二是通过遍历整个应用的所有方法,以判断应用在使用完该接口后,是否通过removeJavascriptInterface()方法移除了这个不安全的接口。本实施例检测出应用不仅没有给接口类的任何方法加上注解,也没有在使用完毕后移除该接口,这将导致接口对象注入漏洞,将其加入漏洞列表中。
(9)分析完所有的方法后,生成漏洞检测报告。报告包括Adobe Reader应用匹配的JavaScript使用模式,使用各种模式的频率,以及存在的漏洞。该应用有7处匹配本地模式,8处匹配远程模式,9处匹配接口模式,未使用回调模式。因为该应用有8处匹配远程模式,故这8处存在WebView跨站点脚本漏洞,其中,有4处在使用此模式时设置了可以导航的WebView,故这4处存在WebView导航漏洞。因为应用有9处匹配接口模式,并且这9处均没有采取漏洞防护措施,故这9处均存在接口对象注入漏洞。
Claims (9)
1.一种基于静态分析的Android应用JavaScript安全漏洞检测方法,其特征在于,使用Soot工具对Android应用中的APK文件进行反编译,获得Jimple字节码;对Jimple字节码进行分析,判断所述Android应用的JavaScript使用模式;根据所述JavaScript使用模式判断所述Android应用是否存在JavaScript安全漏洞。
2.如权利要求1所述Android应用JavaScript安全漏洞的检测方法,其特征在于,反编译时,先使用Soot工具将Android应用解压缩,获得APK中的资源文件、AndroidManifest.xml和Dex文件;然后解析Dex文件,使用Baf将Dex文件转换为Jimple文件。
3.如权利要求1所述Android应用JavaScript安全漏洞的检测方法,其特征在于,所述JavaScript使用模式包括本地模式、远程模式、接口模式和回调模式;所述JavaScript安全漏洞包括WebView跨站点脚本漏洞、WebView导航漏洞和接口对象注入漏洞;
所述本地模式是指,Android应用使用WebView加载了一个本地的JavaScript文件或者加载了一个包含JavaScript代码的本地html文件;本地模式不产生JavaScript安全漏洞;
所述远程模式是指,Android应用使用WebView加载了一个远程的JavaScript库或者打开了包含JavaScript的远程网址;远程模式会产生WebView跨站点脚本漏洞,同时有可能产生WebView导航漏洞;
所述接口模式是指,Android应用为WebView注册了一个能实现JavaScript与Android交互的接口;接口模式有可能产生接口对象注入漏洞;
所述回调模式是指,Android应用使用WebView的evaluateJavascript()方法直接在UI线程异步执行JavaScript,并且获得一个回调值;回调模式不产生JavaScript安全漏洞。
4.如权利要求3所述Android应用JavaScript安全漏洞的检测方法,其特征在于,
遍历所有Jimple文件,查找Android应用是否允许使用JavaScript;若Android应用使用setJavaScriptEnabled(true)来允许程序执行JavaScript,则继续后续检测工作,否则,检测终止;
经判断,如果JavaScript使用模式为本地模式,则将该模式加入模式列表;
经判断,如果JavaScript使用模式为远程模式,则将该模式加入模式列表,并将WebView跨站点脚本漏洞加入漏洞列表;然后进一步检测是否存在WebView导航漏洞,如果存在WebView导航漏洞,则将WebView导航漏洞加入漏洞列表;
经判断,如果JavaScript使用模式为接口模式,则将该模式加入模式列表,并检测是否存在接口对象注入漏洞,如果存在接口对象注入漏洞,则将接口对象注入漏洞加入漏洞列表;
经判断,如果JavaScript使用模式为返回模式,则将该模式加入模式列表。
5.如权利要求4所述Android应用JavaScript安全漏洞的检测方法,其特征在于,
如果检测到Android应用加载JavaScript的方法参数是以file://、“data://”或者“javascript:”开头,则其JavaScript使用模式为本地模式;
如果检测到Android应用加载JavaScript的方法参数是以“http://”或者“https://”开头,则其JavaScript使用模式为远程模式;
如果检测到Android应用使用WebView的addJavascriptInterface()方法注册了一个JavaScript接口,则其JavaScript使用模式为接口模式;
如果检测到Android应用使用WebView的evaluateJavaScript()方法加载JavaScript并获取返回值,则其JavaScript使用模式为回调模式。
6.如权利要求4所述Android应用JavaScript安全漏洞的检测方法,其特征在于,根据WebView是否可以导航来检测是否存在WebView导航漏洞,具体为:
判断WebView是否添加了WebViewClient实例,如果WebView没有添加WebViewClient实例,则该WebView不具备导航能力;如果添加了WebViewClient实例,则进一步判断该WebViewClient实例是否覆盖了shouldOverrideUrlLoading()方法;如果没有覆盖shouldOverrideUrlLoading()方法,或者该shouldOverrideUrlLoading()方法使用WebView加载新的URL,则WebView可以导航,否则该WebView不可以导航;当WebView可以导航时,存在WebView导航漏洞。
7.如权利要求4所述Android应用JavaScript安全漏洞的检测方法,其特征在于,检测是否存在接口对象注入漏洞的方法为:遍历注册的接口类的所有方法,查看Android应用是否对其中可供JavaScript访问的方法加了@JavaScriptInterface注解,如果没有加@JavaScriptInterface注解,则存在接口对象注入漏洞。
8.如权利要求4所述Android应用JavaScript安全漏洞的检测方法,其特征在于,检测是否存在接口对象注入漏洞的方法为:遍历整个Android应用的所有方法,以判断Android应用在使用完接口后,是否通过removeJavascriptInterface()方法移除了接口,如果在使用完毕后没有移除接口,则存在接口对象注入漏洞。
9.如权利要求1至8所述Android应用JavaScript安全漏洞的检测方法,其特征在于,JavaScript安全漏洞检测结束后生成漏洞检测报告,所述漏洞检测报告包括对所有输入的Android应用的漏洞检测结果,对每个Android应用,漏洞检测报告记录有Android应用的名称、版本号、所匹配的JavaScript使用模式以及各种模式的使用次数、存在的漏洞类型以及每种漏洞产生的次数,对于接口对象注入漏洞,还记录Android应用暴露给JavaScript的接口个数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610320037.1A CN107368741A (zh) | 2016-05-13 | 2016-05-13 | 一种基于静态分析的Android应用JavaScript安全漏洞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610320037.1A CN107368741A (zh) | 2016-05-13 | 2016-05-13 | 一种基于静态分析的Android应用JavaScript安全漏洞检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107368741A true CN107368741A (zh) | 2017-11-21 |
Family
ID=60304189
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610320037.1A Pending CN107368741A (zh) | 2016-05-13 | 2016-05-13 | 一种基于静态分析的Android应用JavaScript安全漏洞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107368741A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109542509A (zh) * | 2018-11-13 | 2019-03-29 | 北京梆梆安全科技有限公司 | 一种资源文件的风险检测方法及装置 |
CN109857637A (zh) * | 2018-12-25 | 2019-06-07 | 杭州茂财网络技术有限公司 | 一种基于注解的Java语言方法覆盖率和方法输入输出统计方法及装置 |
CN110795734A (zh) * | 2019-10-12 | 2020-02-14 | 南京信息职业技术学院 | 一种恶意移动应用检测方法 |
CN114077728A (zh) * | 2020-08-12 | 2022-02-22 | 电子科技大学 | 基于静态检测的Android应用生物认证安全性方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105550594A (zh) * | 2015-12-17 | 2016-05-04 | 西安电子科技大学 | 安卓应用文件的安全性检测方法 |
-
2016
- 2016-05-13 CN CN201610320037.1A patent/CN107368741A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105550594A (zh) * | 2015-12-17 | 2016-05-04 | 西安电子科技大学 | 安卓应用文件的安全性检测方法 |
Non-Patent Citations (3)
Title |
---|
ALEXANDRE BARTEL等: "Dexpler:Converting Android Dalvik Bytecode to Jimple for Static Analysis with Soot", 《PROCEEDINGS OF THE ACM SIGPLAN INTERNATIONAL WORKSHOP ON STATE OF THE ART IN JAVA PROGRAM ANALYSIS》 * |
ERIKA CHIN等: "Bifocals:Analyzing WebView Vulnerabilities in Android Applications", 《PROCEEDINGS OF 14TH INTERNATIONAL WORKSHOP ON INFORMATION SECURETY APPLICATIONS(WISA)》 * |
LEEHONG2005: "Android WebView的Js对象注入漏洞解决方案", 《HTTP://BLOG.CSDN.NET/LEEHONG2005/ARTICLE/DETAILS/11808557》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109542509A (zh) * | 2018-11-13 | 2019-03-29 | 北京梆梆安全科技有限公司 | 一种资源文件的风险检测方法及装置 |
CN109857637A (zh) * | 2018-12-25 | 2019-06-07 | 杭州茂财网络技术有限公司 | 一种基于注解的Java语言方法覆盖率和方法输入输出统计方法及装置 |
CN109857637B (zh) * | 2018-12-25 | 2022-04-15 | 杭州茂财网络技术有限公司 | 基于注解的Java语言方法覆盖率和方法输入输出统计方法 |
CN110795734A (zh) * | 2019-10-12 | 2020-02-14 | 南京信息职业技术学院 | 一种恶意移动应用检测方法 |
CN114077728A (zh) * | 2020-08-12 | 2022-02-22 | 电子科技大学 | 基于静态检测的Android应用生物认证安全性方法 |
CN114077728B (zh) * | 2020-08-12 | 2023-05-02 | 电子科技大学 | 基于静态检测的Android应用生物认证安全性方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104834859B (zh) | 一种Android应用中恶意行为的动态检测方法 | |
Chugh et al. | Staged information flow for JavaScript | |
US9900340B2 (en) | Testing web applications for security vulnerabilities with metarequests | |
US8793665B2 (en) | Performing taint analysis for javascript software using a control flow graph | |
Hiremath et al. | MyWebGuard: toward a user-oriented tool for security and privacy protection on the web | |
Hassanshahi et al. | Web-to-application injection attacks on android: Characterization and detection | |
CN107368741A (zh) | 一种基于静态分析的Android应用JavaScript安全漏洞检测方法 | |
Huang et al. | Detecting sensitive data disclosure via bi-directional text correlation analysis | |
Xue et al. | xfuzz: Machine learning guided cross-contract fuzzing | |
Hedin et al. | Information-flow security for JavaScript and its APIs | |
Ocariza Jr et al. | Automatic fault localization for client‐side JavaScript | |
Leithner et al. | Hydra: Feedback-driven black-box exploitation of injection vulnerabilities | |
Alnaeli et al. | Source code vulnerabilities in IoT software systems | |
Kang et al. | Scaling javascript abstract interpretation to detect and exploit node. js taint-style vulnerability | |
Alnaeli et al. | Vulnerable C/C++ code usage in IoT software systems | |
Hamadouche et al. | Virus in a smart card: Myth or reality? | |
Calzavara et al. | Fine-grained detection of privilege escalation attacks on browser extensions | |
Ferrara et al. | : Backward Context-Sensitive Flow Reconstruction of Taint Analysis Results | |
Sayed et al. | If-transpiler: Inlining of hybrid flow-sensitive security monitor for JavaScript | |
Kerschbaumer et al. | Information flow tracking meets just-in-time compilation | |
Sultana et al. | A study examining relationships between micro patterns and security vulnerabilities | |
Edalat et al. | ConsiDroid: A concolic-based tool for detecting SQL injection vulnerability in android apps | |
Silva et al. | Identifying classes in legacy JavaScript code | |
Phung et al. | A user-oriented approach and tool for security and privacy protection on the web | |
Kang | A review on javascript engine vulnerability mining |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171121 |