【转】为什么我说 Android 很糟糕
http://zhuanlan.zhihu.com/wooyun/19879016
Android 的安全问题一直被吐槽,包括不安全的APP市场、上次的远程命令执行漏洞、还有它的权限机制,总之一团糟,这些还是可以忍的,APP市场总是在规范化,大的漏洞很快就会被应急,权限问题也在慢慢改善。
今天要说的是一个 Android 下很有生命力的漏洞,刚刚提到的远程命里执行漏洞也是把所有涉及到浏览器的应用给走了一遍,包括 QQ、微博、UC浏览器,这次要说的也是关于浏览器的漏洞,叫 UXSS。
首先科普下 UXSS 和 WebView
通俗的说下
- UXSS:当你访问 A 网站的时候A网站可以跨域获取你在 B 网站的一切信息。
- WebView:安卓浏览器的浏览器组件,做网页展示都需要用到它。
他们是什么关系呢?
Webview 的底层的是 webkit,但是是比较老的 webkit。
这就出现一个问题, 大家用老版本的东西的时候可能是想着稳定性,还要注意一点的就是安全性,漏洞补丁往往是随着应用升级一起发布的。
老版本的 webkit 存在大量的已披露 UXSS 漏洞(即 POC 公开)。
再说说 UXSS 的攻击流程
正常情况下我们会访问各种各样的网站,比如我常上的网站是知乎和乌云。
如果有一天,邪恶的剑心想通过 UXSS 漏洞攻击我的知乎账户,那么他只要在乌云的网站中插入一段 JS 执行 UXSS 漏洞代码即可劫持我知乎账户的 session。
- 正常用户==request==> http://wooyun.org
- http://wooyun.org ==script exec ==> uxss.js
- uxss.js ==bypass SOP==> http://zhihu.com
- done,session get!
不只是浏览器,还包括 微信、QQ、微博等所有涉及网页浏览的应用。
上面这个漏洞,可以直接在任意一个网页中插入上面漏洞的代码,发给好友 URL,就可以获得她的QQ权限。
再看来这个,是浏览器的,平时我们会使用手机浏览器登陆很多网站,这样更有利于攻击,可以直接一次攻击获得你所有登陆过的网站的身份。
还有很多,这些都是由于 webkit 版本低造成的。
- 猎豹/360/欧鹏/百度/遨游等手机浏览器安卓客户端UXSS(影响android4.4以下版本)
- 各大手机浏览器厂商存在UXSS绕过漏洞合集
- 猎豹/360/搜狗/百度/遨游等手机浏览器安卓客户端SOP绕过漏洞(UXSS,可窃取cookie等)
不关我事
说了这么久危害,再来说说厂商的态度。
有生命力的漏洞往往处于灰色地带,什么意思呢?
简单说来就是‘推卸责任’,在这个案例里还好只是单向的,要归责任大多确实归 Android,但由于Android版本混乱,且这块不身不太重视,缺少猥琐流团队的支持,如果 APP 不主要防御的话很长段时间内都存在很大的危害。
引用某厂商对此漏洞的回应:
非常感谢您的报告,此问题属于android webkit的漏洞,请尽量使用最新版的android系统。
的确漏洞产生的原因是因为 kitkat(android 4.4)之前 webview 组件使用 webkit 内核而遗留的漏洞。使用最新的 android 系统当然安全性要更高而且运行更流畅,但是有多少人能升级或者使用到相对安全的 android 版本了。
下图来自谷歌官方 2014.09.09 的统计数据:
看起来情况不是太糟糕,有 24.5% 的 android 用户是处于相对安全的版本下。但是官方数据的是来 Google play 明显和大陆水土不服。国内就只能使用相对靠谱的本土第三方统计了。
下图是 Umeng 八月的统计情况:
能使用到相对安全的 android 系统的用户不到 8%,那么问题来了~我要换一个什么的样的手机了。忘记我是个屌丝了,破手机无法升级到 kitkat 也没钱换手机。那就只能选择使用相对安全的应用来尽量避免我受到攻击。
Talk is cheap
我们收集了一些命中率较高的 POC 来验证到底哪些app更靠谱一些。
下图为360浏览器在 android 4.2.2 下的测试结果
下图为搜狗浏览器在 android 4.4.3 下的测试结果
我们对主流手机浏览器进行了横向对比,测试对象包括:UC浏览器、搜狗浏览器、百度浏览器、360安全浏览器、欧鹏浏览器、遨游云浏览器、猎豹浏览器。
测试结果:
你觉得如何?
感谢 瘦蛟舞@wooyun 做的测试与数据,想了解更多技术细节的可以看:Android UXSS阶段性小结及自动化测试 和 茄子在乌云峰会上的议题 RAyH4c(茄子)《细数安卓WebView的那些神洞》。
【转】为什么我说 Android 很糟糕的更多相关文章
- 收藏的Android很好用的组件或者框架。
收藏的Android很好用的组件或者框架. android框架 先说两个站点: http://www.androidviews.net/ 非常好的国外开源码站,就是訪问速度有点慢啊 http://w ...
- 分享几个Android很强势的的开源框架
前言 今天介绍一下android开发者中比较热门的开源代码,这些代码绝大多数可以直接应用到项目中.更多可参考很值得收藏的安卓开源控件库 一个强大的图片选择器,支持多选,和选聘选择 项目地址: http ...
- Android中糟糕的AsyncTask
上周做一个Android中的帧动画,因为每帧图片都比较大,所以采用每次读取一帧,延时再读取下一帧的方式实现.在读取的时候,采用AsyncTask,去设置ImageView的背景.但是发现需要切换帧动画 ...
- android 很详细的序列化过程Parcelable
直接上代码:注释都写的很清楚了. public class Entry implements Parcelable{ public int userID; public String username ...
- CSDN的验证码,真得很糟糕
这是以三种不同的高度来分割各字符 第一张图片是以宽度3来分割,可以看得出,验证码元素保存完好,但 Y 和 9 仍然连在一起 第二张图片是以宽度4来分割,看到了,N已经断了,肉眼虽然仍看得出来是N,但是 ...
- Android线程管理之ThreadLocal理解及应用场景
前言: 最近在学习总结Android的动画效果,当学到Android属性动画的时候大致看了下源代码,里面的AnimationHandler存取使用了ThreadLocal,激起了我很大的好奇心以及兴趣 ...
- android快捷开发之Retrofit网络加载框架的简单使用
大家都知道,安卓最大的特点就是开源化,这自然会产生很多十分好用的第三方API,而基本每一个APP都会与网络操作和缓存处理机制打交道,当然,你可以自己通过HttpUrlConnection再通过返回数据 ...
- 对Android开发者有益的40条优化建议
下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激 ...
- Google Developing for Android 二 - Memory 最佳实践 // lightSky‘Blog
Google Developing for Android 二 - Memory 最佳实践 | 分类于 Android最佳实践 原文:Developing for Android, II Th ...
随机推荐
- 查询SQL SERVER数据库日志工具
在SQL SERVER中查看操作日志,一直是一个比较麻烦的事情,因为微软并没有提供直接的系统工具可以查看日志内容,虽然可以通过非正式的隐藏接口dbcc log 获取日志的非解析编码但是要还原是个非常麻 ...
- spring--mybatis事务总结
spring--事务原理.mybatis--MapperScannerConfigurer 和 mybatis--MapperProxy事务,最近想把spring mybatis中的事务和mapper ...
- angularJs中上传图片/文件功能:ng-file-upload
原文技术交流:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/angularjs-ng-file-upload/ 在做网站的过程中难 ...
- dfa最小化,上一个版本采用的是moore的打表法,这个版本采用的是hopcroft的方法,但是实现中采用链表而不是栈来优化。
hopcroft法的复杂度,他们说是nlogn,可是都没有严格的证明.难得找到一篇讲的详细点的论文,却又啰里啰唆的,不过那篇论文里面采用的是颜色树这个结构,有点意思. 前面的那个算法是n的平方复杂度, ...
- 使用JDBC-ODBC读取Excel文件
以下代码我没有真正去实践,紧做为总结,方便以后查阅: 这种方法需要设置ODBC源..... 参考: http://xytang.blogspot.com/2008/02/how-to-connect- ...
- entOS查看系统信息-CentOS查看命令
一:查看cpu more /proc/cpuinfo | grep "model name" grep "model name" /proc/cpuinfo 如 ...
- SimpleDateFormat 相关用法
parse(String s)返回的是一个Date类型数据,format(Date d)返回的是一个String类型的数据 SimpleDateFormat sd = new SimpleDateFo ...
- JS内存泄露常见原因
详细内容请点击 分享的笔记本-前端 开发中,我们常遇见的一些关于js内存泄露的问题,有时候我们常常会找半天找不出原因,这里给大家介绍简单便捷的方法 1.闭包上下文绑定后没有释放: 2.观察者模式在 ...
- CSS3 照片墙
HTML <body> <h2>照片墙制作</h2> <div class="container"> <img class=& ...
- SQLite&&SharedPreferences&&IO读写Sdcard学习笔记
SQLite 轻量级的.嵌入式的.关系型数据库 Android.IOS等广泛使用的的数据库系统 SQLite数据库之中可以方便的使用SQL语句,实现数据的增加.修改.删除.查询等操作 SQLiteOp ...