转载:http://blog.csdn.net/yanbober/article/details/46417531


1 背景

其实这篇文章可能有些小题大作,但回过头想想还是很有必要的,有点阴沟里翻船的感觉。相信大家都知道Android API Level 8开始提供了为应用程序备份和恢复数据的功能,此功能的开关可以通过应用程序中AndroidManifest.xml文件的allowBackup属性值进行配置,默认是True,所以用户可以对我们应用程序进行数据备份。相信很多人都和我一样一直当作耳边风过了一下Android这个特性,然后就一直没再打理了。然而旧事重提的故事是下面这样开始的:

前不久突然收到了一个Bug反馈,来自国内著名的白帽子组织乌云平台,关于这个组织就不作介绍了,相信大家一定知道问题的严重性,关于修复这个Bug是很快的事情,但是修复完这个Bug以后不得不让我进入思考(就像之前处理SQL注入一样),所以写出此文记录。

其实allowBackup的风险原理主要是允许通过adb backup对打开USB调试的设备进行数据备份,一旦得到备份文件之后那就不好说了,譬如邪恶的人可以再通过adb restore将你的数据恢复到自己的设备上,然后就完全在自己的设备上以你的名义去玩弄App;或者通过代码分析出备份文件中你登陆App的一些账户密码等核心信息。总之,Google当初设计的核心肯定是为了方便备份数据考虑的,但是大家自己开发的应用似乎忽略了手机丢失或者被他人捡到的问题,譬如通讯录或者名片、支付类等App如果一旦出现此类问题后果还是很严重的,所以有必要重视一下。

2 实例还原

为了验证该小问题可能带来的重大敏感信息泄露问题,我们下面选几个代表App进行测试,这样就可以直观的让你感受到泄露的一点危机。

特别声明: 本文实例中涉及的应用只为验证,且本问题一般不会造成太大风险,故烦请大家保持学习心态而不要肆意污蔑应用开发者;当然我也已经通过乌云漏洞平台对下面涉及到的应用进行了漏洞提交,相信这些应用新的迭代版本中很快就会解决掉的。

《简书》Android 1.9.7版本测试

结论: 会存在帐号被盗取问题。

验证: 设备A上登陆帐号密码后如下:

然后在该设备上执行如下命令将数据备份到电脑上:

XXX@ThinkPad:~/workspace/myself/temp$ adb backup -f back.ab -noapk com.jianshu.haruki
Now unlock your device and confirm the backup operation.
  • 1
  • 2

此时换一台设备B安装此应用,但是不登陆任何帐号密码,执行如下命令:

XXX@ThinkPad:~/workspace/myself/temp$ adb restore back.ab
Now unlock your device and confirm the restore operation.
  • 1
  • 2

可以看见,设备B没有进行帐号密码登陆,只是通过恢复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的初心是好的,但是一旦被别有用心的人瞄上了这个突破点问题就严重了。譬如再高端一点,别有用心的人专门写一段代码去执行数据备份上传到自己的云端服务器,然后解析这些备份数据,小则个人信息泄露,大则哈哈,你懂的。

既然这样肯定你也会关心解决方案吧,具体解决比较容易,如下:

方案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做法。

【转】Android应用开发allowBackup敏感信息泄露的一点反思的更多相关文章

  1. Android应用开发allowBackup敏感信息泄露的一点反思

    1 背景 [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重劳动成果] 事实上这篇文章可能有些小题大作,但回过头想想还是非常有必要的,有点阴沟里翻船的感觉. ...

  2. 敏感信息泄露 - Pikachu

    概述: 由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到. 比如:---通过访问url下的目录,可以直接列出目录下的文件列表;---输入错误的url参数后报错信息里面包含 ...

  3. pikachu 目录遍历 敏感信息泄露

    目录遍历漏洞概述在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能变的更加灵活. 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执 ...

  4. Pikachu-URL重定向、目录遍历、敏感信息泄露模块

    一.不安全的URL跳转 1.概述 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方.如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地 ...

  5. Nginx敏感信息泄露漏洞(CVE-2017-7529)

    2017年7月11日,为了修复整数溢出漏洞(CVE-2017-7529), Nginx官方发布了nginx-1.12.1 stable和nginx-1.13.3 mainline版本,并且提供了官方p ...

  6. 逆向路由器固件之敏感信息泄露 Part2

    之前的文章中详细介绍了各种解包路由器固件的工具.解包之后就获得了固件中的文件.下一步就是分析文件寻找漏洞了.这次分析的目标是Trendnet路由器,分析的漏洞是一个远程获取路由器权限的漏洞. 初步分析 ...

  7. ThinkPHP5 SQL注入漏洞 && 敏感信息泄露

    访问看到用户名被显示了 http://192.168.49.2/index.php?ids[]=1&ids[]=2 访问http://your-ip/index.php?ids[0,updat ...

  8. ThinkPHP使用不当可能造成敏感信息泄露

    ThinkPHP在开启DEBUG的情况下会在Runtime目录下生成日志,如果debug模式不关,可直接输入路径造成目录遍历. ThinkPHP3.2结构:Application\Runtime\Lo ...

  9. Android安全开发之浅谈密钥硬编码

    Android安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很大风 ...

随机推荐

  1. IT从业人员必看的十几个论坛

    IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多,往哪里去,新浪论坛,网易是经常去的,人多啊,好几十万,去了以后才发现没有意思,没有共同的语言,于是逛专 ...

  2. SpringMVC Maven创建项目

    一.配置Maven环境: 1.去官网下载好Maven,并解压: 2.添加环境变量: ①添加环境变量,如下: ②把maven的bin目录添加到环境变量path下面,如下(我系统是win10,win7编辑 ...

  3. android SurfaceView绘制 重新学习--控制动画移动

    直接上demo,图是自己切的,将就用吧.点击左右两边分别向左右移动. public class MySurfaceView extends SurfaceView implements Callbac ...

  4. IOS7,做为开发者,你需要知道的变更

    IOS7即将发布,那么我们需要做些什么呢? 升级你的程序Icon至 120*120 更新一张包含状态栏大小的闪屏图片 还有些什么东西呢? IOS7中需要使用更加扁平化的设计,所以BUTTON的图片,边 ...

  5. Nexus 7 跳过网络验证

     本文从著名安卓论坛 xda-developers 搬运而来,原文链接 http://forum.xda-developers.com/showthread.php?t=1909602 由于众所周知的 ...

  6. 使用ImageMagick和Tesseract进行简单数字图像识别

    使用ImageMagick和Tesseract进行简单数字图像识别 由于直接使用 tesseract 进行识别,识别率很低, ImageMagick 安装.配置及使用: 平台:winXP 1. 安装I ...

  7. VS2010皮肤控件介绍

    在我们平时使用的各种工具中,如QQ,迅雷,以及各种空间等,都提供了一些换肤功能,可以让我们选择各种我们喜欢的界面.本文就对VS中常用的窗口程序做一个简单的换肤,利用一个dll文件来进行实现. 首先我们 ...

  8. 剖析Qt的事件机制原理

    版权声明 请尊重原创作品.转载请保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正. QT源码解析(一) QT创建窗口程序.消息循环和WinMai ...

  9. 开发的时候,一定要及时控制CPU使用率以及使用内存大小等三个问题(一个星期检查一次)

    一直专注于功能的开发,没注意CPU和内存.昨天无意中发现两个问题: 1. 程序启动后,什么都没干,CPU就50%了(单核).现在想找原因降低使用率,感觉无从下手,要是平时就注意这个问题就好了. 2. ...

  10. ASP.NET MVC4 UEditor 的上传图片配置路径

    ASP.NET MV4下,使用UEditor1.4.3最新版本,网址就不说了,去百度官网下载即可,关于在Controler下如何配置,直接上图: 然后再Views下面来个页面引用如下:     < ...