当前位置:安全客 >> 知识详情

安卓hacking Part9: 不安全的本地存储:Shared Preferences

2014-12-15 17:40:50 阅读:0次 收藏 来源: 360安全播报

在前一篇文章中,我们讨论了开发者常用检查是否root的方法和绕过方法。在这次的文章中我们会讲解多种本地存储数据的方法和相应的安全性。

背景

我们经常会碰到手机丢失的情况。当攻击者可以物理接触设备时,他可以读取设备的个人信息和存储的数据。当你root之后会变得更糟。需要注意的是,如果本地存储实现做得不好,会导致严重的攻击。

安卓本地存储的技术

开发者可以使用多种方法存储数据在安卓应用之中,具体如下:

Shared Preferences

Shared Preferences是用key-value来存储私有的原始数据的一些xml文件。数据类型有布尔型,浮点型,整形,长整型和字符串。

SQLite数据库

SQLite数据库是轻量级基于文件的数据库。这些文件通常以db或者sqlite结尾。安卓默认提供了大量SQLite支持。由一个应用创建的数据只能由这个应用的类访问,其他应用没有权限。

内部存储

内部存储是我们存储文件的另一个方法。默认情况下,文件保存在内部存储中是私有的,其他应用无法访问,当用户卸载应用时,这些内部存储的文件也会被相应的删除。

外部存储

外部存储是一个你用于存储的地址。这个地址可以为一个可移除的存储媒介(例如SD卡)或者内存。SD卡可以被任意读取。

下一章节,我们来看看开发者怎么使用Shared Preferences来在设备上存储数据,并且从一个攻击者角度去读取这些数据。

环境:

l  安装安卓SDK的电脑

l  安装应用并Root过的手机

测试应用的功能

我开发了一个测试应用来展示这个漏洞。你可以下载这个应用。下载完之后在root后的手机上安装。

APP可以使用adb命令去安装:

adb install <apk名称>.apk

t012dcdff57d683e90a.png

所有的应用都有存储在应用中数据的特性。当我启动这个应用的时候,我们可以看到下面的图片(Shared Preferences)

t01997c9354988ea873.png

Shared preferences

让我们启动sharedpreferences应用并且插入一些用户名和密码。

Shared preferences由安卓的SharedPreferences类创建。下图是部分样本应用的代码。

t01487fbd7f2f1713a7.png

我们可以看到上图中,我们创建了一个SharedPreferences实例,我们使用使用Ediotr对象把数据插入到xml文件。

接着我们看看数据存在哪个位置。

通常情况下存储的路径为:

/data/data/<package name>/shared_prefs/<filename.xml>

因此我们进入下面的路径来查看一下

t01ede2a6ce638c3afc.png

上图中可以看到,有一个叫”shared_prefs”的目录。这个目录是使用sharedpreferences时创建的。我们可以进入到”shared_prefs”目录使用cat命令来查看应用的内容。我们可以下载xml文件到本地来查看。

t019ad9694db2439173.png

上图中可以看到“userdetails.xml”文件被拷贝到了本地的机器,文件内容如下。

t013ca207c9e84c4fc3.png

破解游戏修改分数

大部分手机游戏都不需要互联网,因此它的数据都是本地存储。在一个root之后的手机上我们可以浏览本地文件系统来查找存储游戏分数的文件,我们可以轻易修改游戏分数。

我们来破解一个流行的应用StickCricket。我们来看看怎么修改分数。

前提准备

l  Root过的设备

l  Droid Explorer用于文件浏览

l  ADB来访问设备

当我们加载StickCricket应用来玩的时候,它有一个activity来展示目前最高的分数。通常情况下很难在5轮拿到130以上的分数。

t01c3f248cfefbc05ed.png

下面我们来破解这个程序

我们来浏览一下安卓的文件系统来看一下它存储数据的位置。如下图:

t01e86aa869bf68adc5.png

我们打开一个adb命令行并使用su命令提升权限。每一个应用安装到安卓设备上都会创建一个自己的目录在/data/data目录下。所以我们进入/data/data/com.sticksports.stickcricket/目录。

接下来我们执行ls来查看里面的目录结构。我们感兴趣的是“shared_prefs“目录。现在我们进入到“shared_prefs“来看下有没有感兴趣的文件。如下图,

t016aeb3156df13a02b.png

目录中有3个XML文件,使用cat命令可以查看他们的内容,显然Cocos2dxPrefsFile.xml是用来存储分数的文件。接下来我们来替换来达到我们想要的目的。

我使用了windows下的一款工具叫做Droid Explorer。(http://de.codeplex.com/)

步骤如下

连接安卓设备到电脑

启动Droid Explorer浏览到目标目录
   

t01029991359f235e02.png


把文件下载并用文本编辑器打开

    在上图中,我们把分数从129改为180

t017f1693b93ffc8140.png

   

接着使用Droid Explorer替换Cocos2dxPrefsFile.xml文件。

t0133f1f55b3ade679f.png

    再次启动可以看到分数已变为180

t010a7bbf15132554dd.png

结论

在这篇文章中,我们展示了shared preferences在安卓应用中的安全问题。建议使用密码学模块来加密应用数据。我们在之后的文章中会讲解如何使用加密模块。在下篇文章中,我们讲解其他数据存储的安全问题。

目录

安卓Hacking Part 1: 应用组件攻防(连载) 

安卓Hacking Part 2: Content Provider攻防(连载)

安卓Hacking Part 3:Broadcast Receivers攻防(连载) 

安卓Hacking Part 4:非预期的信息泄露(边信道信息泄露)

安卓Hacking:Part 5:使用JDB调试Java应用 

安卓Hacking Part 6:调试Android应用 

安卓 Hacking Part7:攻击WebView

安卓Hacking Part 8:Root的检测和绕过

安卓hacking Part9: 不安全的本地存储:Shared Preferences 

安卓Hacking Part 10:不安全的本地存储

安卓Hacking Part 11:使用Introspy进行黑盒测试 

安卓Hacking Part 12: 使用第三方库加固Shared Preferences 

安卓Hacking Part 13:使用Drozer进行安全测试 

安卓Hacking Part 14:在没有root的设备上检测并导出app特定的数据




本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://resources.infosecinstitute.com/android-hacking-security-part-9-insecure-local-storage-shared-preferences/

参与讨论,请先 | 注册 | 匿名评论
发布
用户评论
DarkLoser 2014-12-19 14:47:34
回复 |  点赞

怎么没有下载啊

大爱媛姐 2014-12-15 18:18:05
回复 |  点赞

别问我是谁,我是媛姐的脑残粉~哦也~

查看更多