转载: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做法。

转载于:https://www.cnblogs.com/exmyth/p/5135170.html

【转】Android应用开发allowBackup敏感信息泄露的一点反思相关推荐

  1. Spring Boot框架敏感信息泄露的完整介绍与SRC实战(附专属字典与PoC)

    转载于:https://www.freebuf.com/vuls/289710.html #前言 ##Spring Boot框架介绍 Spring框架功能很强大,但是就算是一个很简单的项目,我们也要配 ...

  2. 检测到目标url存在内部ip地址泄露_Cendertron,动态爬虫与敏感信息泄露检测

    Cendertron,动态爬虫与敏感信息泄露检测 Cendertron = Crawler + Rendertron Cendertron https://url.wx-coder.cn/HinPM ...

  3. 目录遍历及敏感信息泄露原理及案例(实验操作)

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

  4. 【web渗透思路】敏感信息泄露(网站+用户+服务器)

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

  5. 【web渗透思路】框架敏感信息泄露(特点、目录、配置)

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

  6. 应急响应-敏感信息泄露怎么解决?

    敏感信息 在业务系统中的保密性要求较高的数据,通常包括系统敏感信息和引用敏感信息.系统敏感信息指的是业务系统本身的基础环境信息,比如系统信息,中间件版本之类的,一旦泄露可能可以协助攻击者提供更多的攻击 ...

  7. 浅谈“敏感信息泄露“

    一:漏洞名称: 敏感信息泄露 描述: 敏感数据包括但不限于:口令.密钥.证书.会话标识.License.隐私数据(如短消息的内容).授权凭据.个人数据(如姓名.住址.电话等)等,在程序文件.配置文件. ...

  8. 数据库服务敏感信息泄露

      数据库服务敏感信息泄露 2 详细描述 检测到服务器返回的页面信息中包含数据库错误信息,这是由于web应用程序没有正确处理用户输入和处理数据库异常导致的.通过数据库错误信息可以得知后台数据库类型,甚 ...

  9. 【Web安全从入门到放弃】11_目录遍历和敏感信息泄露漏洞

    11_目录遍历和敏感信息泄露漏洞 目录遍历漏洞概述 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活.当用户发起一个前端的请求时,便会将请求的这个文件的值( ...

最新文章

  1. 使用 Eclipse 调试 Java 程序的 10 个技巧
  2. [YTU]_2475( C++习题 多重继承)
  3. 深度学习---卷积神经网络(CNN)
  4. pr基本图形模板无法使用_PR模板21个时尚排版竖屏封面图形标题动画【资源分享1218】...
  5. matlab2c使用c++实现matlab函数系列教程-real函数
  6. 4.4 Spark SQL实现用户ip地址热度分析
  7. Mac上安装PL/SQL Developer
  8. 28个UI免费漂亮的切换开关PSD下载
  9. 升级鸿蒙系统手机网络信号变差了,这是为什么?
  10. 如何加快客户端更新脱机地址簿
  11. seo关键字_SEO最佳关键字研究技术
  12. 腾讯云轻量数据库服务简单测评
  13. LaTex 图文混排 文字环绕
  14. 团体队列(Team Queue,UVA 540)
  15. 锐龙4800h笔记本安装Ubuntu20.04.1填坑实录
  16. 数据结构与算法Python版-第五周作业
  17. 寿星万年历---java算法实现
  18. 数据采集系统优缺点分析,全面了解!
  19. 无人车系统(二):横向动力学模型
  20. 【ELMAN预测】基于布谷鸟算法改进ELMAN动态递归神经网络实现数据预测matlab源码

热门文章

  1. Hibernate 关联映射 之 多对多 关联(二) 之拆分
  2. html form表单提交数据并后台获取
  3. poj2516 最小费用最大流
  4. go预防CSRF攻击
  5. 大型网站核心架构要素--可用性
  6. Nginx-05:Nginx配置实例之反向代理2
  7. lua源代码分析01:lua源代码结构分析
  8. C#之windows桌面软件第二课:向单片机发信息的串口工具
  9. 用XFTP向Linux上传文件时出现Permission is not allowed
  10. 汇编:JCXZ条件转移指令