Android应用开发allowBackup敏感信息泄露的一点反思
1 背景
【工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处。尊重劳动成果】
事实上这篇文章可能有些小题大作,但回过头想想还是非常有必要的,有点阴沟里翻船的感觉。相信大家都知道Android API Level 8開始提供了为应用程序备份和恢复数据的功能。此功能的开关能够通过应用程序中AndroidManifest.xml文件的allowBackup属性值进行配置,默认是True。所以用户能够对我们应用程序进行数据备份。相信非常多人都和我一样一直当作耳边风过了一下Android这个特性,然后就一直没再打理了。然而旧事重提的故事是以下这样開始的:
前不久突然收到了一个Bug反馈。来自国内著名的白帽子组织乌云平台,关于这个组织就不作介绍了,相信大家一定知道问题的严重性,关于修复这个Bug是非常快的事情。可是修复完这个Bug以后不得不让我进入思考(就像之前处理SQL注入一样),所以写出此文记录。
事实上allowBackup的风险原理主要是同意通过adb backup对打开USB调试的设备进行数据备份。一旦得到备份文件之后那就不好说了,譬如邪恶的人能够再通过adb restore将你的数据恢复到自己的设备上,然后就全然在自己的设备上以你的名义去玩弄App。或者通过代码分析出备份文件里你登陆App的一些账户password等核心信息。总之。Google当初设计的核心肯定是为了方便备份数据考虑的,可是大家自己开发的应用似乎忽略了手机丢失或者被他人捡到的问题。譬如通讯录或者名片、支付类等App假设一旦出现此类问题后果还是非常严重的,所以有必要重视一下。
2 实例还原
为了验证该小问题可能带来的重大敏感信息泄露问题,我们以下选几个代表App进行測试,这样就能够直观的让你感受到泄露的一点危机。
特别声明: 本文实例中涉及的应用仅仅为验证,且本问题一般不会造成太大风险,故烦请大家保持学习心态而不要肆意污蔑应用开发人员。当然我也已经通过乌云漏洞平台对以下涉及到的应用进行了漏洞提交。相信这些应用新的迭代版本号中非常快就会解决掉的。
《简书》Android 1.9.7版本号測试
结论: 会存在帐号被盗取问题。
验证: 设备A上登陆帐号password后例如以下:
然后在该设备上运行例如以下命令将数据备份到电脑上:
XXX@ThinkPad:~/workspace/myself/temp$ adb backup -f back.ab -noapk com.jianshu.haruki
Now unlock your device and confirm the backup operation.
此时换一台设备B安装此应用。可是不登陆不论什么帐号password,运行例如以下命令:
XXX@ThinkPad:~/workspace/myself/temp$ adb restore back.ab
Now unlock your device and confirm the restore operation.
能够看见,设备B没有进行帐号password登陆。仅仅是通过恢复A设备的备份数据就成功登陆了A设备的信息。
《Sina微博》Android 5.1.0版本号測试
依照上面的相似流程測试微薄发如今设备B上面恢复设备A的数据无效,设备B依然显演示样例如以下:
也就是说Sina微博考虑的非常周全,已经修复了此类潜在的泄露风险,备份数据恢复无效,依然须要又一次登陆才干够。给一个赞。
《薄荷》Android 5.4.5.1版本号測试
这个应用根据上面相似操作后你会发现全然能够在设备B上不用登陆帐号,仅仅用恢复别人的备份帐号信息就可以进入别人帐号界面。例如以下:
上面为设备B上截图情况,直接能够在设备B上操作设备A的帐号。
3 反思与总结
【工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重劳动成果】
看了上面两部分的叙述以后你可能也会意识到这个问题潜在的严重性。Google的初心是好的,可是一旦被别实用心的人瞄上了这个突破点问题就严重了。
譬如再高端一点,别实用心的人专门写一段代码去运行数据备份上传到自己的云端server。然后解析这些备份数据,小则个人信息泄露,大则哈哈,你懂的。
既然这样肯定你也会关心解决方式吧,详细解决比較easy。例如以下:
方案1:
直接在你的Android清单文件里设置android:allowBackup=”false”就可以。例如以下:
<?
xml version="1.0" encoding="utf-8"?
>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.disallowbackup"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10"/>
<application
android:allowBackup="false"
android:label="@string/app_name">
<activity android:name="LoginActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
方案2:
不在你的Android清单文件里设置android:allowBackup=”false”,同意运行备份,可是在你应用启动页进行逻辑推断是否进行又一次登陆等,譬如查看设备唯一识别设备编号和备份前是否一致,不一致则直接跳转登陆页面的同一时候清空当前应用数据及缓存。
好了,个人愚见,不足说服力,仅仅是由于项目被乌云反馈而写的一点总结而已,眼下我们採用了相似新浪微博的方案1做法。
【工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处。尊重劳动成果】
Android应用开发allowBackup敏感信息泄露的一点反思的更多相关文章
- 【转】Android应用开发allowBackup敏感信息泄露的一点反思
转载:http://blog.csdn.net/yanbober/article/details/46417531 1 背景 其实这篇文章可能有些小题大作,但回过头想想还是很有必要的,有点阴沟里翻船的 ...
- 敏感信息泄露 - Pikachu
概述: 由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到. 比如:---通过访问url下的目录,可以直接列出目录下的文件列表;---输入错误的url参数后报错信息里面包含 ...
- pikachu 目录遍历 敏感信息泄露
目录遍历漏洞概述在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能变的更加灵活. 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执 ...
- Pikachu-URL重定向、目录遍历、敏感信息泄露模块
一.不安全的URL跳转 1.概述 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方.如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地 ...
- Nginx敏感信息泄露漏洞(CVE-2017-7529)
2017年7月11日,为了修复整数溢出漏洞(CVE-2017-7529), Nginx官方发布了nginx-1.12.1 stable和nginx-1.13.3 mainline版本,并且提供了官方p ...
- 逆向路由器固件之敏感信息泄露 Part2
之前的文章中详细介绍了各种解包路由器固件的工具.解包之后就获得了固件中的文件.下一步就是分析文件寻找漏洞了.这次分析的目标是Trendnet路由器,分析的漏洞是一个远程获取路由器权限的漏洞. 初步分析 ...
- ThinkPHP5 SQL注入漏洞 && 敏感信息泄露
访问看到用户名被显示了 http://192.168.49.2/index.php?ids[]=1&ids[]=2 访问http://your-ip/index.php?ids[0,updat ...
- ThinkPHP使用不当可能造成敏感信息泄露
ThinkPHP在开启DEBUG的情况下会在Runtime目录下生成日志,如果debug模式不关,可直接输入路径造成目录遍历. ThinkPHP3.2结构:Application\Runtime\Lo ...
- Android安全开发之浅谈密钥硬编码
Android安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很大风 ...
随机推荐
- JAVAscript学习笔记 js计时器与倒计时 第六节 (原创) 参考js使用表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Problem E: 可变长数组
Problem E: 可变长数组 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 472 Solved: 368[Submit][Status][Web ...
- 开源代码学习之Tinyhttpd
想开始陆续研究一些感兴趣的开源代码于是先挑一个代码量短的来过渡一下,写这篇博客的目的是记录下自己学习的过程.Tinyhttpd算是一个微型的web服务器,浏览器与Web服务器之间的通信采用的是Http ...
- MUI开发记录——我的考勤
已经好久没有更新技术博客了,因为最近一直在做跨平台web app应用的开发,由于是刚做这个,也没太多经验同大家分享,可我是一个闲不住的人,我还是决定于百忙之中抽空整理一篇,记录下开发历程......— ...
- 学python+django去北京找工作,靠谱吗?
有些朋友说,自己的学习能力还可以.倾向于python加框架,如django,python本来就会一些.不太了解北京公司的情况,想知道现学的python+django在北京找到工作有多少可能性. 要想知 ...
- c#关键字及ref和out
最近在写程序时遇到ref,out 参数问题.回头有自习看了看MSDN,才有巩固了基础.我把我的测试程序贴出来,大家分享一下. ref 关键字使参数按引用传递.其效果是,当控制权传递回调用方法时, ...
- [转载] epoll详解
转载自http://blog.csdn.net/xiajun07061225/article/details/9250579 什么是epoll epoll是什么?按照man手册的说法:是为处理大批量句 ...
- 通过游戏认识 --- JQuery与原生JS的差异
前言 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库( 或JavaScript框架).jQuery设计的宗旨是“write ...
- Kaggle实战之二分类问题
0. 前言 1. MNIST 数据集 2. 二分类器 3. 效果评测 4. 多分类器与误差分析 5. Kaggle 实战 0. 前言 "尽管新技术新算法层出不穷,但是掌握好基础算法就能解决手 ...
- SoapUI实践:自动化测试、压力测试、持续集成
因为项目的原因,前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api.下面将研究的成果展示给大家,希望对需要的人有所帮助. SoapUI 是什么? SoapUI 是一个开源测试工具,通过 ...