CN111563260B - 一种面向安卓应用程序的Web注入代码执行漏洞检测方法及系统 - Google Patents
一种面向安卓应用程序的Web注入代码执行漏洞检测方法及系统 Download PDFInfo
- Publication number
- CN111563260B CN111563260B CN202010229835.XA CN202010229835A CN111563260B CN 111563260 B CN111563260 B CN 111563260B CN 202010229835 A CN202010229835 A CN 202010229835A CN 111563260 B CN111563260 B CN 111563260B
- Authority
- CN
- China
- Prior art keywords
- web
- application program
- injection code
- interface
- web injection
- 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.)
- Active
Links
Images
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/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种面向安卓应用程序的Web注入代码执行漏洞检测方法及系统,所述方法包括以下步骤:步骤1:对给定安卓应用程序执行静态程序分析,获取该应用程序中可能导致Web注入代码执行的跨语言通信接口信息;步骤2:选定一个字符串数据作为跨语言通信接口引入的Web数据,分别针对不同的跨语言通信机制,完成Web注入代码样例的构造;步骤3:在应用程序运行过程中拦截其与服务器间的通信流量,修改服务器的响应数据,往里面注入构造好的Web注入代码样例;如果在该应用程序运行过程中观察到界面上弹出与选定的字符串数据相应的消息,则判定该应用程序存在Web注入代码执行漏洞。本发明能够准确并有效地检测安卓应用程序是否存在Web注入代码执行漏洞。
Description
技术领域
本发明涉及移动端安全领域,特别是一种面向安卓应用程序的Web注入代码执行漏洞检测方法及系统。
背景技术
随着移动网络的迅速发展,现在,类似浏览器应用程序才具备的加载和显示网页的功能在普通应用程序里边已经十分普遍。安卓提供WebView控件来解释和执行Web代码(HTML代码和JavaScript代码),允许开发者在应用程序里展示各种各样的网页,网页中Web代码与本地代码(Java代码)的交互由安卓Web-Native(网络-本地)跨语言通信机制支持。Web-Native跨语言通信机制能满足用户需求,给应用程序开发带来极大便利,但也造成了跨平台的代码侵入,存在严重的安全问题。
针对WebView加载的页面是否安全,安卓系统本身并不做检查,而是由开发者在应用程序的代码实现中做相应的限制,比如采取URL过滤(域名匹配)方式对要加载网页进行过滤,以保证加载的网页的安全。因此,当开发者没有在应用程序的代码实现中对要加载页面进行限制时,就可能给攻击者留有漏洞利用的机会。
在实际开发中,应用程序通常需要具备访问远程服务器的功能,在安卓平台上可以使用WebView的loadUrl()方法来展示服务器传送来的网页内容。因为显示内容总是变动,所以如果把网页URL固定地写在应用程序里,那么每当变换一次内容就需要改动一次源代码,并重新把应用程序打包成APK文件。为了方便,开发者可以选择使用Web-Native跨语言通信接口传送待加载页面的URL。Web-Native跨语言通信接口的使用带来严重的跨语言安全风险,包括隐私泄露和Web数据注入。所谓Web数据注入问题,即攻击者可以通过劫持服务器或中间人方式篡改Web端的输入,并利用应用程序的漏洞,使得Web代码运行时网页中有害数据注入到本地环境,从而造成危害。由于在现实应用程序中,开发者在完成功能需求的过程中,经常忽略对外来不安全数据的验证。于是,当loadUrl()方法加载的数据来自可以传递任意字符串形式的Web-Native跨语言通信接口,并且攻击者具备篡改服务器与应用程序间通信内容的能力时,可以完成任意数据包括代码的注入,再由于loadUrl()方法除了显示页面外还具备执行JavaScript代码的能力,可最终实现注入代码的执行。针对这种漏洞利用方式,现有的研究没有提出相应的漏洞检测方法。
在数据注入型的漏洞检测方面,现有研究多使用静态程序分析方法,通过控制流或数据流分析发现潜在的漏洞,然后通过动态运行应用程序来验证漏洞是否真实存在,这种漏洞检测方式的操作较为复杂。
综上,为避免未经安全验证的Web数据由多种Web-Native跨语言通信接口引入后,被传送到WebView提供的loadUrl()方法中执行,有必要提出一种面向安卓应用程序的Web注入代码执行漏洞检测方法。
发明内容
本发明所要解决的技术问题是,针对现有技术的不足,提供一种面向安卓应用程序的Web注入代码执行漏洞检测方法,能够准确并有效地检测安卓应用程序是否存在Web注入代码执行漏洞。
本发明所提供的技术方案如下:
一方面,提供一种面向安卓应用程序的Web注入代码执行漏洞检测方法,包括以下步骤:
步骤1:对给定安卓应用程序执行静态程序分析,获取该应用程序中可能导致Web注入代码执行的Web-Native跨语言通信接口信息,获取的接口信息用来构造触发Web-Native跨语言通信接口执行的Web注入代码样例;
步骤2:选定一个字符串数据作为Web-Native跨语言通信接口引入的Web数据,基于静态程序分析结果中具体的接口信息和选定的字符串数据,分别针对不同的Web-Native跨语言通信机制,完成Web注入代码样例的构造;
步骤3:运行应用程序,在该应用程序运行过程中拦截该应用程序与服务器间的通信流量,当截获到来自服务器的响应数据时,修改响应数据,往里面注入构造好的Web注入代码样例;如果在该应用程序运行过程中观察到界面上弹出与选定的字符串数据相应的消息,则判定该应用程序存在Web注入代码执行漏洞,否则说明该应用程序不存在Web注入代码执行漏洞。
进一步地,所述步骤1中,应用程序中可能导致Web注入代码执行的Web-Native跨语言通信接口包括桥接口通信机制下的addJavascriptInterface,事件处理通信机制下的onJsAlert、onJsConfirm、onJsPrompt、onConsoleMessage和onReceivedTitle,以及Scheme跳转通信机制下的uiOverrideUrlLoading;这7个Web-Native跨语言通信接口可以传递任意字符串数据到本地环境,可能导致注入代码的执行。
进一步地,所述步骤2中,不同的Web-Native跨语言通信机制包括安卓系统支持的桥接口、事件处理和Scheme跳转这三种Web-Native跨语言通信机制。
进一步地,所述步骤1具体包括以下步骤:
(i)对给定安卓应用程序包(APK文件)进行解压缩操作,获取包含应用程序源代码的classes.dex文件和包含应用程序的包名、使用权限和组件等基本信息的AndroidManifest.xml文件;其中,从APK中直接解压出来的AndroidManifest.xml文件是一个二进制XML文件;
(ii)对步骤(i)获取的classes.dex文件进行反编译操作,将DEX代码转换成易于分析的中间语言Jimple,得到相应的Jimple文件;并对步骤(i)获取的AndroidManifest.xml文件(二进制XML文件)进行反编译操作,得到具有高可读性的源AndroidManifest.xml文件;
(iii)对反编译后的源码进行程序分析,包括反编译后得到的Jimple文件和AndroidManifest.xml文件;具体地,通过在Jimple文件中匹配关键字addJavascriptInterface,获取桥接口信息,即addJavascriptInterface接口生成的Java对象名和对象中的桥方法的方法名和参数;通过在Jimple文件中匹配关键字setWebChromeClient,获取重写的事件处理方法的方法名,进而获取能够传递任意字符串数据的事件处理方法的方法名;通过在Jimple文件中匹配关键字getQueryParameter,获取由uiOverrideUrlLoading()方法捕获的Scheme链接数据中Scheme链接可以携带的参数的名称,进而获取打开可浏览Activity的Scheme链接可以携带的参数的名称;通过解析反编译后的AndroidManifest.xml文件获取打开可浏览Activity的Scheme链接的组成,包括协议、端口、主机和路径。
进一步地,所述步骤2中,选定字符串"javascript:alert('attack')"作为Web-Native跨语言通信接口引入的Web数据;
相应地,所述步骤3中,如果在该应用程序运行过程中观察到界面上有弹出传递字符串数据"attack"的警告消息框,则判定该应用程序存在Web注入代码执行漏洞。
因为WebView的loadUrl()方法用来执行JavaScript代码时,参数是带有前缀"javascript:"的待执行的JavaScript代码形式的字符串数据,所以当成功实现Web数据"javascript:alert('attack')"的注入时,如果应用程序存在Web注入代码执行漏洞,则测试应用程序时会在界面上弹出定制的警告消息框(该警告消息框传递字符串数据"attack"),由此可以在应用程序运行过程中直观地判断出注入的JavaScript代码是否被执行了。
进一步地,所述步骤2中,针对三种不同的Web-Native跨语言通信机制,分别采用以下方法完成Web注入代码样例的构造:
(i)针对桥接口通信方式,基于静态程序分析结果中由桥接口生成的Java对象名和对象中的桥方法的方法名和参数,对带有String类型参数的桥方法执行Web注入代码样例的构造,即将String类型参数的参数值赋为选定的字符串数据;构造的Web注入代码样例是:桥接口生成的Java对象名.对象中的桥方法的方法名("选定的字符串数据");
(ii)针对事件处理通信方式,基于静态程序分析结果中重写的事件处理方法的方法名,对能够传递任意字符串数据的事件处理方法执行Web注入代码样例的构造,即将其传递的数据赋值为选定的字符串数据;针对事件处理通信机制下的onJsAlert、onJsConfirm、onJsPrompt、onConsoleMessage和onReceivedTitle,构造的Web注入代码样例分别为alert("选定的字符串数据")、confirm("选定的字符串数据")、prompt("选定的字符串数据")、console.log("选定的字符串数据")和<title>选定的字符串数据</title>;
(iii)针对Scheme跳转通信方式,基于静态程序分析结果中打开可浏览Activity的Scheme链接的组成和Scheme链接可以携带的参数的名称,对可以携带参数的Scheme链接执行Web注入代码样例的构造,即将Scheme链接携带的参数赋值为选定的字符串数据;构造的Web注入代码样例<a href="协议名://主机名:端口号/路径?参数名=选定的字符串数据">schemeLink</a>;
另一方面,提供一种面向安卓应用程序的Web注入代码执行漏洞检测系统,包括以下模块:
静态程序分析模块,用于对给定安卓应用程序执行静态程序分析,获取该应用程序中可能导致Web注入代码执行的Web-Native跨语言通信接口信息;
Web注入代码样例构造模块,用于选定一个字符串数据作为Web-Native跨语言通信接口引入的Web数据,基于静态程序分析结果中具体的接口信息和选定的字符串数据,分别针对不同的Web-Native跨语言通信机制,完成Web注入代码样例的构造;
Web注入代码执行漏洞检测模块,用于在应用程序运行过程中拦截该应用程序与服务器间的通信流量,当截获到来自服务器的响应数据时,修改响应数据,往里面注入构造好的Web注入代码样例;判断在该应用程序运行过程中界面上是否弹出与选定的字符串数据相应的消息,若是,则判定该应用程序存在Web注入代码执行漏洞,否则判定该应用程序不存在Web注入代码执行漏洞。
有益效果:
本发明上述技术方案针对开发者在开发应用程序的过程中,经常忽略对由Web-Native跨语言通信接口传入的Web数据进行安全检查或验证,未经安全检查或验证的不安全的Web数据由多种Web-Native跨语言通信接口引入后,被传送到WebView中用来加载页面数据的方法loadUrl()中执行,从而导致安全风险的问题(Web注入代码执行漏洞问题),提出了一种面向安卓应用程序的Web注入代码执行漏洞检测方法,考虑了多种Web-Native跨语言通信接口引入Web数据的情况,将静态分析和动态检测方式相结合,通过构造Web注入代码样例,并在应用程序运行过程中注入构造样例来完成漏洞的检测:给定一个应用程序,首先通过静态程序分析获取应用程序使用的Web-Native跨语言通信机制及相关接口信息,然后基于静态分析结果自动生成漏洞测试样例,最后通过拦截通信流量方式在应用程序利用WebView加载来自远程服务器的响应数据时完成Web代码的注入,通过能否成功执行注入的JavaScript代码判定应用程序是否存在漏洞。本发明能有效检测安卓应用程序中覆盖多种Web-Native跨语言通信机制(包括安卓支持的桥接口、事件处理和Scheme跳转三种跨语言通信机制)的Web注入代码执行漏洞,可以在应用程序运行过程中通过注入构造样例直观地判断注入的Web代码是否得到执行,能够准确并有效地检测安卓应用程序是否存在Web注入代码执行漏洞,能用于发现开发者在应用程序中是否存在没有验证WebView加载Web数据的不安全编码行为,覆盖面广且通用性高。
附图说明
图1为利用Web注入代码执行漏洞的攻击场景图;
图2为本发明实施例提供的一种面向安卓应用程序的Web注入代码执行漏洞检测方法示意图;
图3为本发明实施例中桥接口通信示例;
图4为本发明实施例中AndroidManifest.xml文件中注册可浏览Activity示例;
图5为本发明实施例中uiOverrideUrlLoading()方法的关键代码显示;
图6为本发明实施例中应用程序中BrowsableActivity的关键代码显示;
图7为本发明实施例中Scheme跳转通信下的Web数据注入通路示例;
图8为本发明实施例中静态程序分析流程图;
图9为本发明实施例中对AndroidManifest.xml文件的解析流程图;
图10为本发明实施例中基于Mitmproxy的实现桥接口样例注入的Python脚本示例图。
具体实施方式
以下将结合附图和具体实施例对本发明作进一步详细说明:
实施例1:
图1为利用Web注入代码执行漏洞的攻击场景图,总结了攻击者利用漏洞实现注入脚本执行的攻击场景:由于不同形式的方法参数使得loadUrl()实现不同的功能,所以当开发者通过Web-Native跨语言通信接口传递URL给loadUrl()来显示网页,并且没有在应用程序里验证loadUrl()加载的数据时,攻击者可以通过中间人方式修改待加载网页的URL为JS(JavaScript)脚本,使得应用程序最终不显示页面内容,而是执行JavaScript代码;针对这种漏洞利用方式,现有的研究没有提出相应的漏洞检测方法;
为此,本发明的实施例提出了一种面向安卓应用程序的Web注入代码执行漏洞检测方法,能够发现应用程序中未验证WebView加载Web数据的不安全编码,在应用程序运行过程中注入构造样例来直观地判断应用程序是否存在Web注入代码执行漏洞;
图2为本发明一种面向安卓应用程序的Web注入代码执行漏洞检测方法示意图,具体步骤如下:
一种面向安卓应用程序的Web注入代码执行漏洞检测方法,包括以下步骤:
步骤1:对给定应用程序执行静态程序分析,获取开发者在应用程序里使用的可能导致Web注入代码执行的Web-Native跨语言通信接口;
可以传递任意字符串数据给WebView的loadUrl()方法的Web-Native跨语言通信接口可能导致注入代码的执行,针对安卓系统支持的桥接口、事件处理和Scheme跳转这三种Web-Native跨语言通信机制(方式),这样的Web-Native跨语言通信接口有7个;
表1罗列了覆盖三种Web-Native跨语言通信机制的可以传递任意字符串数据的7个Web-Native跨语言通信接口;
表1可以传递任意字符串数据的7个Web-Native跨语言通信接口
其中,针对桥接口通信机制,由WebView提供的桥接口(addJavascriptInterface接口)实现网页中JavaScript代码对本地Java代码的调用;在应用程序开发时,开发者可以调用该桥接口创建一个Java对象,JavaScript代码可以访问该对象并调用对象中的桥方法(即桥接口创建的Java对象中定义的方法);当桥方法有参数且参数类型属于String类型时,可能导致Web注入代码执行;图3是一个针对安卓应用程序的桥接口通信示例;如图3中第7行所示,开发者通过WebView的addJavascriptInterface接口创建了一个Memory类的Java对象,对象名为"memo";如图3中第12-15行所示,在Memory类中定义了一个由@JavascriptInterface注解(图3中第12行)的桥方法save();如图3中第18-20行所示,在WebView加载页面中可以通过访问对象"memo"对桥方法save()进行调用;此例中通过桥方法save()将Web端的字符串数据"This is a piece of text."传递到本地环境;
针对事件处理通信机制,安卓WebView组件在应用程序框架层扩展了多个API接口作为事件处理方法,这些方法能够在WebView加载页面时捕获由Web代码产生的Web事件及数据;安卓系统提供了Web事件的默认处理方式,开发者也可以选择重写事件处理方法来自定义Web事件的处理过程;当开发者重写在表1中罗列的5个事件处理接口时,可能导致Web注入代码执行;
针对Scheme跳转通信机制,它实现了点击页面上的Scheme链接就能跳转到可浏览(Browsable)Activity的功能,其实现需要在应用程序的AndroidManifest.xml文件中注册一个能响应特定Scheme链接的Activity组件,该Activity组件即可浏览Activity。在AndroidManifest.xml文件中设置Scheme链接的组成,包括协议、端口、主机和路径;图4为一个可浏览Activity注册示例,该例中,可浏览Activity为BrowsableActivity(图4中第1行),不携带参数的Scheme链接的URL为"myapp://demo.app/s"(图4中第6行);
当在页面上点击上述Scheme链接时,安卓系统会调用框架层定义的uiOverrideUrlLoading()方法来响应该链接点击事件并捕获数据,启动BrowsableActivity,完成Web页面到Activity页面的跳转;图5给出了在安卓框架层定义的uiOverrideUrlLoading()方法的关键代码显示,如图5所示,在uiOverrideUrlLoading()方法中将捕获的Scheme链接数据写入意图Intent中(图5中第3行),然后调用startActivity()方法来启动相应的可浏览Activity(图5中第7行);
图6显示了应用程序中BrowsableActivity的关键代码,在启动BrowsableActivity时,开发者在应用程序中通过getIntent()方法获取到系统通过uiOverrideUrlLoading()方法构造的Intent(图6中第6行),然后通过Intent的getData()方法获取写入Intent中的Scheme链接数据(图6中第9行);如果想通过Scheme链接传递参数,则需要开发者在应用程序里通过调用Uri的getQueryParameter()方法设置Scheme链接可以携带的参数的名称;如图6中第11行所示,该例中,应用程序里设置的Scheme链接的名称为"info",此时在Web端可以让URL为"myapp://demo.app/s"的Scheme链接携带上参数info,并通过info传递字符串数据到本地;当应用程序里设置了Scheme链接可以携带的参数的名称时,可能导致Web注入代码执行;
图7是一个Scheme跳转机制下的数据通路实例。如图7所示,由于开发者在应用程序中调用方法getQueryParameter()设置Scheme链接可以携带的参数的名称为"info"(图7中第11行),所以点击图7所示第18行的Scheme链接就能在启动BrowsableActivity的同时,传递Web端的字符串数据"https://m.baidu.com"到本地环境;开发者在应用程序中通过调用getQueryParameter()方法设置Scheme链接可以携带的参数的名称为"info",通过它来提取参数的值(图7中第11行),并将其传送给loadUrl()方法(图7中第13行),旨在通过Scheme链接携带参数传送WebView要加载的网页URL;
上述三种Web-Native跨语言通信机制都需要在Web端对Web-Native跨语言通信接口(方法)进行显式调用,才会执行相应的本地代码段;所述步骤1中,静态程序分析获取的接口信息就是用来构造触发Web-Native跨语言通信接口执行的Web代码的;针对桥接口通信机制,获取由桥接口生成的Java对象名和对象中的桥方法的签名(包括方法名和方法参数);针对事件处理通信机制,获取重写的事件处理方法的方法名;针对Scheme跳转通信机制,获取打开可浏览Activity的Scheme链接的组成,以及Scheme链接可以携带的参数的名称;
图8为本发明静态程序分析流程图;如图8所示,获取应用程序中可能导致Web注入代码执行的Web-Native跨语言通信接口的静态程序分析过程主要包括如下3步:
(i)对安卓应用程序包(APK)进行解压缩操作,获取包含应用程序源代码的classes.dex文件和包含应用程序包名、使用权限和组件等基本信息的AndroidManifest.xml文件;其中,从APK中直接解压出来的AndroidManifest.xml文件是一个二进制XML文件;
(ii)对classes.dex文件进行反编译操作,将DEX代码转换成易于分析的中间语言Jimple,得到相应的Jimple文件;同时反编译二进制XML文件,得到高可读性的源AndroidManifest.xml文件;
(iii)对反编译后的源码进行程序分析,包括反编译后得到的Jimple文件和AndroidManifest.xml文件;
对Jimple文件进行遍历,通过关键字匹配方式定位到关键语句,对相关代码段进行解析来获取需要的信息;表2罗列了需要在Jimple文件中匹配的关键字,以及解析相关代码段能够获取到的接口信息;
表2需要在Jimple文件中匹配的关键字以及获取到的接口信息
对反编译后的AndroidManifest.xml文件进行逐行解析,如果存在可浏览Activity,则获取打开该可浏览Activity的Scheme链接的组成;如图9所示,先解析AndroidManifest.xml文件中申明的Activity的属性,判断某个Activity是否为可浏览Activity,可浏览Activity应同时满足图9所示的条件1、条件2和条件3;如果是可浏览Activity,则解析语句获取打开该可浏览Activity的Scheme链接的组成,包括图3所示的协议、端口、主机和路径;如果不是可浏览Activity,则解析下一个Activity的属性,直至AndroidManifest.xml文件中申明的Activity的属性全部被解析完毕;
本发明将静态分析结果中每个具体的接口信息作为一条接口记录,以键值对方式保存每一条接口记录,在构造Web注入代码样例时可以通过读取接口记录里键的名称获取相应的值(接口信息值),表3罗列了标记不同Web-Native跨语言通信接口信息的键的名称;
表3标记不同Web-Native跨语言通信接口信息的键的名称
步骤2:选择一个字符串数据作为Web-Native跨语言通信接口引入的Web数据,基于静态程序分析结果中具体的接口信息和选定的字符串数据(选定好的Web数据),分别针对三种不同的Web-Native跨语言通信机制,完成Web注入代码样例的构造;具体地:
首先,在构造Web注入代码样例前,选定字符串"javascript:alert('attack')"作为Web-Native跨语言通信接口引入的Web数据;因为WebView的loadUrl()方法用来执行JavaScript代码时,参数是带有前缀"javascript:"的待执行的JavaScript代码形式的字符串数据,所以当成功实现Web数据"javascript:alert('attack')"的注入时,如果应用程序存在Web注入代码执行漏洞,则测试应用程序时会在界面上弹出定制的警告消息框(该消息框传递字符串数据"attack"),由此可以在应用程序运行过程中直观地判断出注入的JavaScript代码是否被执行了;
然后,分别针对三种不同的Web-Native跨语言通信机制,完成Web注入代码样例的构造:
(i)针对桥接口通信机制,读取一条接口记录里键obj和bm的值,首先根据bm的值判断该桥方法是否带有String类型参数;如果不带有String类型参数,则不执行Web注入代码样例的构造;如果带有String类型参数,则参数值赋为字符串"javascript:alert('attack')",根据读取的obj和bm的值,通过字符串拼接方式完成Web注入代码样例的构造;针对图3中的例子,通过静态程序分析方法可以得到一条桥接口记录是{obj="memo";bm="save(String)"},则构造的Web注入代码样例是memo.save("javascript:alert('attack')");
(ii)针对事件处理通信机制,读取一条接口记录里键eh的值,首先根据eh的值判断该重写的事件处理方法是否属于可以传递任意字符串数据的5个事件处理接口;如果不属于,则不执行Web注入代码样例的构造;如果属于,则根据读取的eh的值,进行相应的Web注入代码样例的构造;一个事件处理方法对应唯一的Web注入代码样例,表4根据eh的值给出了针对5个不同事件处理方法的唯一的Web注入代码样例;
表4 5个不同事件处理方法的唯一的Web注入代码样例
(iii)针对Scheme跳转通信机制,读取一个接口记录里Scheme链接的组成(包协议、端口、主机和路径),即键scheme、port、host、path和para的值,首先判断para的值是否为空;如果为空,则不执行Web注入代码样例的构造;如果不为空,则将Scheme链接的参数值赋为字符串"javascript:alert('attack')",根据读取的scheme、port、host、path和para的值,通过字符串拼接方式完成Web注入代码样例的构造;针对图4中例子,通过静态程序分析方法可以得到的一条接口记录是{scheme="myapp";port=null;host="demo.app";path="/s";para="info"},则构造的Web注入代码样例是<a href="myapp://demo.app/s?info=javascript:alert('attack')">schemeLink</a>;
步骤3:运行应用程序,在应用程序运行过程中拦截应用程序与远程服务器间的通信流量,当截获到来自远程服务器的响应数据时,修改响应数据,往里面注入构造好的Web注入代码样例;本实施例中通过设置中间人代理方式来完成通信流量的拦截与修改;具体地,选择中间人代理工具Mitmproxy作为应用程序与远程服务器间的通信代理,在运行应用程序前设置好代理并启动代理Mitmproxy,由Mitmproxy在应用程序运行过程中拦截应用程序与远程服务器间的通信流量,当截获到来自远程服务器的响应数据时,修改响应数据往里面注入构造好的Web注入代码样例;如果在应用程序运行过程中观察到界面上有弹出定制的警告消息框,则判定应用程序存在Web注入代码执行漏洞,否则说明无漏洞。
Mitmproxy是基于Python开发的开源工具,用来拦截、修改和保存客户端发出的请求或来自远程服务器的响应;开发者可以通过Mitmproxy提供的Python接口,自定义Python脚本来实现对通信内容的拦截与修改;
图10展示了一个基于Mitmproxy的Python脚本示例,利用Mitmproxy提供的Python接口完成桥接口样例的注入;如图10所示,这段Python脚本(图10中第1-8行)实现的功能是当中间代理Mitmproxy截获到远程服务器的响应数据时注入预先构造好的桥接口样例,使得移动客户端加载的页面中有对桥方法的显式调用;
实施例2:
本实施例提供一种面向安卓应用程序的Web注入代码执行漏洞检测系统,包括以下模块:
静态程序分析模块,用于对给定安卓应用程序执行静态程序分析,获取该应用程序中可能导致Web注入代码执行的Web-Native跨语言通信接口信息;
Web注入代码样例构造模块,用于选定一个字符串数据作为Web-Native跨语言通信接口引入的Web数据,基于静态程序分析结果中具体的接口信息和选定的字符串数据,分别针对不同的Web-Native跨语言通信机制,完成Web注入代码样例的构造;
Web注入代码执行漏洞检测模块,用于在应用程序运行过程中拦截该应用程序与服务器间的通信流量,当截获到来自服务器的响应数据时,修改响应数据,往里面注入构造好的Web注入代码样例;判断在该应用程序运行过程中界面上是否弹出与选定的字符串数据相应的消息,若是,则判定该应用程序存在Web注入代码执行漏洞,否则判定该应用程序不存在Web注入代码执行漏洞。
上述各模块功能的实现原理参见实施例1提供的一种面向安卓应用的Web注入代码执行漏洞检测方法的具体实现步骤。
实验验证:
本部分将验证本发明一种面向安卓应用程序的Web注入代码执行漏洞检测方法的准确性和可行性。
本部分构建了覆盖共7个Web-Native跨语言通信接口的有漏洞和无漏洞应用程序相配对的样例集PairBench,来验证漏洞检测方法的准确性和可行性;
表5给出了完成本部分测试实验的实验环境;
表5实验环境
本部分选择360显微镜和腾讯金刚审计系统,两个线上漏洞检测平台,作为本发明一种面向安卓应用程序的Web注入代码执行漏洞检测方法(简称为WNDetector)的比较对象;
首先,使用本发明WNDetector对样例集PairBench进行检测,然后分别在360显微镜和腾讯金刚审计系统这两个漏洞检测平台上提交PairBench中的应用程序,完成两个平台对PairBench的检测;它们对PairBench的检测结果可以通过在线上平台输入应用程序的MD5值来获取;在两个平台上查看检测报告,依次对每组内的两个应用程序进行同一平台上检测结果的比对,通过观察某一平台是否能从成对应用程序中区分出有漏洞和无漏洞的应用程序,来判断360显微镜或腾讯金刚审计系统是否能检测到应用程序中的Web注入代码执行漏洞;表6罗列了样例集PairBench的详细情况,以及本发明WNDetector和两个漏洞检测平台针对PairBench的Web注入代码执行漏洞的检测结果;其中打“√”表示检测到Web注入代码执行漏洞,打“×”表示没有检测到Web注入代码执行漏洞。
表6样例集PairBench的详细情况及检测结果
如表6所示,WNDetector能成功检测到应用程序中存在的Web注入代码执行漏洞,准确区分一个组内有漏洞和无漏洞的样例应用程序;而360显微镜和腾讯金刚审计系统在每组两个应用程序上都报告一样的风险或者漏洞检测结果,无法从检测报告中区分成对的应用程序,所以判定360显微镜和腾讯金刚审计系统都不能针对应用程序中的Web注入代码执行漏洞进行检测;
本部分的实验结果表明本发明的漏洞检测方法能够准确并有效地检测出安卓应用程序中的Web注入代码执行漏洞。
Claims (5)
1.一种面向安卓应用程序的Web注入代码执行漏洞检测方法,其特征在于,包括以下步骤:
步骤1:对给定安卓应用程序执行静态程序分析,获取该应用程序中可能导致Web注入代码执行的Web-Native跨语言通信接口信息;
步骤2:选定一个字符串数据作为Web-Native跨语言通信接口引入的Web数据,基于静态程序分析结果中具体的接口信息和选定的字符串数据,分别针对不同的Web-Native跨语言通信机制,完成Web注入代码样例的构造;
步骤3:运行应用程序,在该应用程序运行过程中拦截该应用程序与服务器间的通信流量,当截获到来自服务器的响应数据时,修改响应数据,往里面注入构造好的Web注入代码样例;如果在该应用程序运行过程中观察到界面上弹出与选定的字符串数据相应的消息,则判定该应用程序存在Web注入代码执行漏洞,否则说明该应用程序不存在Web注入代码执行漏洞;
所述步骤1具体包括以下步骤:
(i)对给定安卓应用程序包进行解压缩操作,获取包含应用程序源代码的classes.dex文件和包含应用程序基本信息的AndroidManifest.xml文件;
(ii)对步骤(i)获取的classes.dex文件进行反编译操作,将DEX代码转换成中间语言Jimple,得到相应的Jimple文件;并对步骤(i)获取的AndroidManifest.xml文件进行反编译操作,得到源AndroidManifest.xml文件;
(iii)对反编译操作得到的Jimple文件和源AndroidManifest.xml文件进行程序分析,从Jimple文件中获取桥接口即addJavascriptInterface接口生成的Java对象名和对象中的桥方法的方法名和参数,重写的事件处理方法的方法名,以及由uiOverrideUrlLoading()方法捕获的Scheme链接数据中的Scheme链接可以携带的参数的名称;从源AndroidManifest.xml文件中获取打开可浏览Activity的Scheme链接的组成,包括其协议、端口、主机和路径;
所述步骤2中,针对三种不同的Web-Native跨语言通信机制,分别采用以下方法完成Web注入代码样例的构造:
(i)针对桥接口通信方式,基于静态程序分析结果中由桥接口生成的Java对象名和对象中的桥方法的方法名和参数,对带有String类型参数的桥方法执行Web注入代码样例的构造,即将String类型参数的参数值赋为选定的字符串;
(ii)针对事件处理通信方式,基于静态程序分析结果中重写的事件处理方法的方法名,对能够传递任意字符串数据的事件处理方法执行Web注入代码样例的构造,即将其传递的数据赋值为选定的字符串;
(iii)针对Scheme跳转通信方式,基于静态程序分析结果中打开可浏览Activity的Scheme链接的组成和Scheme链接可以携带的参数的名称,对可以携带参数的Scheme链接执行Web注入代码样例的构造,即将Scheme链接携带的参数赋值为选定的字符串。
2.根据权利要求1所述的面向安卓应用程序的Web注入代码执行漏洞检测方法,其特征在于,所述步骤1中,应用程序中可能导致Web注入代码执行的Web-Native跨语言通信接口包括桥接口通信机制下调用的addJavascriptInterface,事件处理通信机制下调用的onJsAlert、onJsConfirm、onJsPrompt、onConsoleMessage和onReceivedTitle,以及Scheme跳转通信机制下调用的uiOverrideUrlLoading。
3.根据权利要求1所述的面向安卓应用程序的Web注入代码执行漏洞检测方法,其特征在于,所述步骤2中,不同的Web-Native跨语言通信机制包括安卓系统支持的桥接口、事件处理和Scheme跳转这三种Web-Native跨语言通信机制。
4.根据权利要求1所述的面向安卓应用程序的Web注入代码执行漏洞检测方法,其特征在于,所述步骤2中,选定字符串"javascript:alert('attack')"作为Web-Native跨语言通信接口引入的Web数据;
相应地,所述步骤3中,如果在该应用程序运行过程中观察到界面上有弹出传递字符串数据"attack"的警告消息框,则判定该应用程序存在Web注入代码执行漏洞。
5.一种面向安卓应用程序的Web注入代码执行漏洞检测系统,其特征在于,包括以下模块:
静态程序分析模块,用于对给定安卓应用程序执行静态程序分析,获取该应用程序中可能导致Web注入代码执行的Web-Native跨语言通信接口信息;
Web注入代码样例构造模块,用于选定一个字符串数据作为Web-Native跨语言通信接口引入的Web数据,基于静态程序分析结果中具体的接口信息和选定的字符串数据,分别针对不同的Web-Native跨语言通信机制,完成Web注入代码样例的构造;
Web注入代码执行漏洞检测模块,用于在应用程序运行过程中拦截该应用程序与服务器间的通信流量,当截获到来自服务器的响应数据时,修改响应数据,往里面注入构造好的Web注入代码样例;判断在该应用程序运行过程中界面上是否弹出与选定的字符串数据相应的消息,若是,则判定该应用程序存在Web注入代码执行漏洞,否则判定该应用程序不存在Web注入代码执行漏洞;
所述静态程序分析模块,工作步骤包括:
(i)对给定安卓应用程序包进行解压缩操作,获取包含应用程序源代码的classes.dex文件和包含应用程序基本信息的AndroidManifest.xml文件;
(ii)对步骤(i)获取的classes.dex文件进行反编译操作,将DEX代码转换成中间语言Jimple,得到相应的Jimple文件;并对步骤(i)获取的AndroidManifest.xml文件进行反编译操作,得到源AndroidManifest.xml文件;
(iii)对反编译操作得到的Jimple文件和源AndroidManifest.xml文件进行程序分析,从Jimple文件中获取桥接口即addJavascriptInterface接口生成的Java对象名和对象中的桥方法的方法名和参数,重写的事件处理方法的方法名,以及由uiOverrideUrlLoading()方法捕获的Scheme链接数据中的Scheme链接可以携带的参数的名称;从源AndroidManifest.xml文件中获取打开可浏览Activity的Scheme链接的组成,包括其协议、端口、主机和路径;
所述Web注入代码样例构造模块,针对不同的Web-Native跨语言通信机制,完成Web注入代码样例的构造的工作步骤包括:
(i)针对桥接口通信方式,基于静态程序分析结果中由桥接口生成的Java对象名和对象中的桥方法的方法名和参数,对带有String类型参数的桥方法执行Web注入代码样例的构造,即将String类型参数的参数值赋为选定的字符串;
(ii)针对事件处理通信方式,基于静态程序分析结果中重写的事件处理方法的方法名,对能够传递任意字符串数据的事件处理方法执行Web注入代码样例的构造,即将其传递的数据赋值为选定的字符串;
(iii)针对Scheme跳转通信方式,基于静态程序分析结果中打开可浏览Activity的Scheme链接的组成和Scheme链接可以携带的参数的名称,对可以携带参数的Scheme链接执行Web注入代码样例的构造,即将Scheme链接携带的参数赋值为选定的字符串。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010229835.XA CN111563260B (zh) | 2020-03-27 | 2020-03-27 | 一种面向安卓应用程序的Web注入代码执行漏洞检测方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010229835.XA CN111563260B (zh) | 2020-03-27 | 2020-03-27 | 一种面向安卓应用程序的Web注入代码执行漏洞检测方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111563260A CN111563260A (zh) | 2020-08-21 |
CN111563260B true CN111563260B (zh) | 2023-03-14 |
Family
ID=72074205
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010229835.XA Active CN111563260B (zh) | 2020-03-27 | 2020-03-27 | 一种面向安卓应用程序的Web注入代码执行漏洞检测方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111563260B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113326539B (zh) * | 2021-06-23 | 2022-05-17 | 支付宝(杭州)信息技术有限公司 | 针对小程序进行隐私数据泄露检测的方法、装置及系统 |
CN116049582B (zh) * | 2023-03-31 | 2023-07-04 | 深圳依时货拉拉科技有限公司 | WebView监控方法、计算机设备和计算机可读存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9329844B2 (en) * | 2014-05-30 | 2016-05-03 | Apple Inc. | Programming system and language for application development |
US10025701B2 (en) * | 2016-05-16 | 2018-07-17 | Google Llc | Application pre-release report |
CN108667816B (zh) * | 2018-04-19 | 2021-07-13 | 重庆邮电大学 | 一种网络异常的检测定位方法及系统 |
CN109460658B (zh) * | 2018-11-16 | 2022-03-25 | 成都网域复兴科技有限公司 | 一种针对恶意勒索样本的检测方法 |
-
2020
- 2020-03-27 CN CN202010229835.XA patent/CN111563260B/zh active Active
Non-Patent Citations (2)
Title |
---|
junyang bai.《BridgeTaint: A Bi-Directional Dynamic Taint Tracking Method for JavaScript Bridges in Android Hybrid Applications》.2018,全文. * |
王建新 等.《无线局域网中的入侵检测》.2004,全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111563260A (zh) | 2020-08-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9268945B2 (en) | Detection of vulnerabilities in computer systems | |
TWI603600B (zh) | 利用運行期代理器及網路探查器判定漏洞之技術 | |
Fonseca et al. | Testing and comparing web vulnerability scanning tools for SQL injection and XSS attacks | |
US8752183B1 (en) | Systems and methods for client-side vulnerability scanning and detection | |
US8458798B2 (en) | Detection of vulnerabilities in computer systems | |
US20060259973A1 (en) | Secure web application development environment | |
WO2016086767A1 (zh) | 实现浏览器安全的方法、浏览器客户端和装置 | |
CN110460612B (zh) | 安全测试方法、设备、存储介质及装置 | |
Barua et al. | Server side detection of content sniffing attacks | |
US10491629B2 (en) | Detecting sensitive data sent from client device to third-party | |
Späth et al. | {SoK}:{XML} parser vulnerabilities | |
Song et al. | Understanding javascript vulnerabilities in large real-world android applications | |
CN110855642B (zh) | 应用漏洞检测方法、装置、电子设备及存储介质 | |
CN111563260B (zh) | 一种面向安卓应用程序的Web注入代码执行漏洞检测方法及系统 | |
Bai et al. | BridgeTaint: a bi-directional dynamic taint tracking method for JavaScript bridges in android hybrid applications | |
Hsu | Practical security automation and testing: tools and techniques for automated security scanning and testing in devsecops | |
KR100984639B1 (ko) | 보안검수 자동화 시스템 및 방법 | |
Li et al. | Minitracker: Large-scale sensitive information tracking in mini apps | |
Pieczul et al. | Runtime detection of zero-day vulnerability exploits in contemporary software systems | |
CN118036009A (zh) | 处理安全漏洞的方法、装置及电子设备 | |
AlJarrah et al. | The demon is in the configuration: Revisiting hybrid mobile apps configuration model | |
CN112379965A (zh) | 沙盒文件映射系统、客户端装置、映射端装置、沙盒文件映射方法以及电子设备 | |
Rafnsson et al. | Fixing vulnerabilities automatically with linters | |
CN112287349A (zh) | 安全漏洞检测方法及服务端 | |
CN111414525B (zh) | 小程序的数据获取方法、装置、计算机设备和存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |