[安卓安全] 01.安卓本地数据存储:Shared Preferences安全风险浅析

Android本地数据存储:Shared Preferences安全风险浅析

安卓Shared Preferences存储安全风险描述

Android系统提供了以下四种Android应用本地存储方式:Shared Preferences、SQLite Databases、Internal Storage(内存储)、External Storage(外存储)等存储方式。Shared Preferences是一种轻量级的基于XML文件存储的键值对(key-value)数据的数据存储方式,一般用于储存应用的配置等信息。

Shared Preferences存储安全风险

  1. 开发者在创建文件时没有正确的选取合适的创建模式(MODE_PRIVATEMODE_WORLD_READABLE以及MODE_WORLD_WRITEABLE)进行权限控制。
  2. 开发者过度依赖Android系统内部存储安全机制,将用户信息、密码等敏感重要的信息明文存储在Shared Preferences文件中,导致攻击者可通过root手机来查看敏感信息。

在乌云漏洞平台上,存在大量Shared Preferences文件中明文存储个人身份信息、密码以及token等重要敏感信息导致泄露的漏洞,如网易阅读Android客户端漏洞导致账号密码泄漏、高朋团购网泄漏用户敏感信息、苏宁易购用户敏感信息泄露。

Shared Preferences存储安全影响范围

Android所有系统。

Shared Preferences存储安全风险详情

// 取得活动的preferences对象.
SharedPreferences uiState = act.getSharedPreferences(CONFIG_DATA, mode);
  1. 上面这段代码,是取得活动的preferences对象,如果是MODE_WORLD_READABLE模式创建Shared Preferences文件,其他应用对该文件具有可读权限。使用攻击代码,会查看到这个文件的数值。
  2. 若使用MODE_WORLD_WRITEABLE模式创建Shared Preferences文件并含有“android:sharedUserId”属性值,使得其他应用对该应用的Shared Preferences文件具备可写的权限。使用MODE_WORLD_WRITEABLE模式创建Shared Preferences,虽然其他应用不可读取该应用的Shared Preferences文件,但是如果恶意应用与该应用具有相同的“android:sharedUserId”属性值和签名key时,恶意应用即可对其Shared Preferences文件进行写操作,使用攻击代码,可以获取这个文件的读写权限并修改文件中的数值。
  3. 在具备root权限的程序或用户对任何应用程序通过任意模式创建的的Shared Preferences文件都具有可读可写的权限。使用攻击代码,可以任意读写应用创建的文件。

    root下可任意读写应用创建的Shared Preferences,因此不可将密码等用户敏感信息明文存储在其中。

Shared Preferences存储安全风险修复建议

  1. 避免使用MODE_WORLD_WRITEABLE和MODE_WORLD_READABLE模式创建进程间通信的文件。
  2. 如果需要进程间数据共享,可考虑content provider。
  3. 避免将密码等敏感数据信息明文存储在Shared Preferences中。
  4. 避免滥用“android:sharedUserId”属性。

 

 

本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4989641.html

 

 

转载于:https://www.cnblogs.com/superdo/p/4989641.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
出现Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:错误通常是由于Gradle版本不兼容或项目中的依赖项冲突引起的。解决此问题的方法如下: 1.检查le版本是否正确。可以在项目的build.gradle文件中找到Gradle版本。确保使用的Gradle版本与Android Studio版本兼容。可以在Gradle官网上查看Gradle版本和Android Studio版本的兼容性。 2.清除项目并重新构建。可以通过选择Build->Clean Project和Build->Rebuild Project来清除项目并重新构建。 3.检查项目中的依赖项是否存在冲突。可以在项目的build.gradle文件中查看依赖项。如果存在冲突,可以尝试升级或降级依赖项版本,以解决冲突。 4.检查项目中的代码是否存在语法错误。可以在Android Studio的“Messages”窗口中查看详细的错误信息,以确定是否存在语法错误。 5.尝试禁用Instant Run。有时,启用Instant Run会导致构建错误。可以在Android Studio的“Preferences”菜单中禁用Instant Run,然后重新构建项目。 以下是一个例子,演示如何解决Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:错误: ```groovy // 检查Gradle版本是否正确 buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:4.1.0' } } // 清除项目并重新构建 // 选择Build->Clean Project和Build->Rebuild Project // 检查项目中的依赖项是否存在冲突 dependencies { implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' } // 检查项目中的代码是否存在语法错误 // 尝试禁用Instant Run // 在Android Studio的“Preferences”菜单中禁用Instant Run,然后重新构建项目 --相关问题--:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值