W e S D
0 1

[安卓安全] 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

 

 

posted @ 2015-11-23 20:45  SD.Team  阅读(761)  评论(0编辑  收藏  举报