通过在网页上构建恶意脚本,攻击者可以绕过系统限制获得使用系统API的权利,从而窃取用户的隐私信息并进行远程非法控制。2网络视图漏洞分析网络视图漏洞位于安卓系统的网络视图组件中。攻击者利用本地的Java类构造恶意脚本并将其反映到系统API中,从而实现许多未经授权的功能。
1简介网络视图漏洞是安卓系统上的一个网络应用程序漏洞。通过在网页上构建恶意脚本,攻击者可以绕过系统限制获得使用系统API的权利,从而窃取用户的隐私信息并进行远程非法控制。目前,已经有相当数量的安卓应用被证实存在此漏洞,包括百度浏览器、QQ客户端、微信客户端等软件,其危害性不容忽视。2网络视图漏洞分析网络视图漏洞位于安卓系统的网络视图组件中。原因有二:(1)网络视图组件为网页提供了一个本地的Java类;(2)Java是一种具有反射机制的语言,一个Java类可以通过反射实现其他Java类的功能。如图1显示了攻击者利用网络视图漏洞的示意图。攻击者利用本地的Java类构造恶意脚本并将其反映到系统API中,从而实现许多未经授权的功能。2.1桥功能分析是根据WebView组件架构设计的,网页与Android系统之间采用Java类交互模式。本地方法通过调用系统提供的本地Java类来实现,提高了用户的交互性,丰富了网页的功能。Java类交互模式是通过在WebView组件上调用addJavaScriptInterface()函数建立的,它构建了网页与系统之间的桥梁关系,因此本文称之为桥梁函数。桥接函数有两个参数,第一个参数是在Android系统上实现的本地Java类的类名,即WebView组件提供给网页的本地Java类;第二个参数是用于访问本地Java类的入口名。示例:mywebview。add javascriptinterface(local _ object,“web _ object”);也就是说,网页可以通过门户“网页对象”调用本地的本地对象类。2.2恶意脚本绕过系统限制恶意脚本通过调用本地类Java的进入系统并通过反射绕过系统限制获得使用未授权API的权限,从而实现未授权功能。如图2展示了恶意脚本的攻击流程。Java语言允许程序在运行时通过反射获得任何已知名称的类的内部信息,包括其成员变量、内部方法、父类和其他相关信息,并且可以在运行时调用类的内部方法。恶意脚本通过网页调用进入,安卓系统的达尔维克虚拟机中的运行时,这是一个本地的Java类,然后使用Java反射机制显式调用系统API,从而实现系统功能。下面的代码:js2java.getclass()。for name(' Android . telephone . SMS manger ')。getmethod ('getdefault ',null)。调用(null,null)。发送文本消息(' 1511111111 ',null,' WebView漏洞!空,空).其中,Js2Java是由WebView组件提供给网页的本地Java类。上面的代码实现了以下功能:通过Js2Java将其反映到系统的Android . telephony . smsmsmanager类中,并调用sendText Message方法,将内容作为“WebView漏洞!”短信至1511111111。3网络视图漏洞检测3.1漏洞检测方案通过将静态分析和动态分析相结合,可以快速有效地检测出漏洞。静态分析是研究目标软件的反编译代码,分析桥接函数,得到要提供给网页的本地Java类,并将其分类到可疑Java类集中;动态分析是对对,静态分析生成的可疑Java类集进行黑盒测试,根据系统的反馈判断是否有漏洞。3.2静态分析静态分析主要包括四个步骤:获取先验信息、反编译获取源代码、代码分析和建立可疑的Java类集。首先,通过研究Android SDK查询的先验信息,我们可以知道addJavaScriptInterface()是目标桥函数。
然后对目标APK软件进行反编译,得到smail代码;使用遍历代码定位addJavaScriptInterface()函数,其smail代码如下:常量字符串,v0,' Js2Java'Invoke-virtual{p1,v1,p0},lcom/chong langmini/Android/browser/module/AC;addJavascriptinterface(Ljava/lang/ObJect;拉娃/郎/弦;v)根据代码分析,程序调用桥接函数addJavaScriptInterface(),提供给网页的本地Java类的名称是Js2Java,因此Js2Java类被归类为可疑的Java类集。3.3动态分析在静态分析和建立可疑Java类集的基础上,对对的可疑Java类集进行动态分析,进行黑盒测试,通过分析系统反馈,检测是否存在WebView漏洞。在黑盒检测之前,为了避免检测中的假阳性或假阴性,必须从网页上所有可以调用的类中筛选出Java类,以防止Java类和JavaScript类之间的混淆和冲突,影响检测效果。选择是否包含getClass()的内部方法作为判断Java类和Javascript类的基础。如果内部方法包含在类中,它将被判断为Java类,否则它将被判断为Javascript类。通过遍历,网页上的所有类,过滤并建立了网页可以调用的Java类库。然后,将筛选出的网页称为Java类库,将静态分析得到的可疑Java类库集合合成生成黑盒测试集。
检测模块采用黑盒测试方法和对测试类集进行测试。当网络应用程序访问构建的测试脚本时,系统给出相应的反馈,并根据系统反馈的信息判断网络视图漏洞的存在。恶意脚本控制系统的输入和输出代码如下:执行(['/system/bin/sh ','-c ','xxxxx