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

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

2014-12-16 10:27:08 阅读:0次 收藏 来源: 360安全播报

上一期中,我们讨论了”Shared Preferences”本地存储的安全性,本期中我们来看看Android中其他本地存储的相关安全问题。

文件下载:

SQLite 数据库

SQLite是一种基于文件的轻量级数据库。通常使用”.db”,”.sqlite”作为其数据库文件的扩展名。Android为SQLite提供了相当全面的支持。我们的应用创建的数据库只能被该应用访问,其他应用无法访问。

下载上面提供的文件,安装并运行。然后向咱们上一期那样在应用中输入一些数据。

下面的代码片段就是应用操作SQLite数据库的方法。

首先,应用一收到用户输入的用户名和密码,应用就会打开数据库,插入数据然后关闭数据库,如图:

t0193a8970e4b83f21d.png

下图为插入数据的代码片段,我们扩展了“SQLiteOpenHelper”类。如图,我们将用户输入的数据插入了变量”TABLE_NAME”保存的表名中。

t01d6764da64adaf961.png

现在我们弄清楚了应用如何向数据插入数据,现在我们来看看这些数据在应用中是如何储存的,并想办法把它读取出来。

应用的数据库一般存储在下面的地方:

/data/data/<package name>/databases/<databasename.db>

现在让咱们去上面这个目录下看看应用是否创建了数据库。

跟SharedPreferences一样,我们可以使用adb把文件下载到本地,但这次我们换个姿势。

这次我们使用Eclipse里面的一个叫”DDMS”的功能来从设备中提取数数据,在Eclipse中启用了”DDMS”后,我们就可以干很多有意思的事情。

Ecllispse打开DDMS后如图:

t01a9d70d5d416c9e50.png

使用DDMS,我们只用点点鼠标就能读取出设备中的文件,而不用像使用ADB那样需要敲命令。

在我们的例子中,我们需要进入”/data/data/”下的”com.adnroidpentesting.sqlitestorage”目录。展开目录后就会显示出下面所以的文件,我们感兴趣的SQLite 文件在”databases”目录下,下面的PWNSQLITEDATA.db就是我们需要的文件。我们可以把文件下载到本地电脑上,然后进行如下操作。

1、在电脑上安装SQLite3客户端

2、使用下面的命令连接数据库

Sqlite3 PWNSWLITEDATA.db

3、使用”.tables”命令列出所有的表名。

4、使用”select * from table_name”查询表中所有的数据。

如下图:

t017ef14926be69f877.png

内部存储

Android应用保存数据的另一种方法就是使用本地存储。打开应用,输入测试用的信用卡号,点击保存。

以下的代码片段显示了应用如何保存数据:

t018c73544e2223fea6.png

应用接收到用户输入后,将其保存到了”secret.txt”文件中。

打开DDMS将对应的secret.txt文件下载到本地。

t0127aae815d707314d.png

Cat一下:

t0162156848108cd8a1.png

外部存储

SDCARD也是Android中一直重要的存储应用数据的地方,例如whatsapp就将其所有数据存储在SDCARD上。

但开发者需要注意的是,SDCARD上的数据可被任意访问。把SD卡从设备上拆下来,放到其他设备也可以完全读取其中的数据。

测试APP可以在上面的连接中下到,安装后输入一点测试数就。

以下就是应用存取SD卡数据的代码片段。

t0193573e5788393f36.png

以上代码需要”WRITE_EXTERNAL_STORAGE”权限,需要在AndroidManifest.xml加入权限声明:

t01cbec0c1be8a21f1a.png

用户字典

Android还提供了一种叫”用户字典(User Dictionary Cache)”特性。我们可以向用户字典中加入单词,下次用户输入相识的单词时就会给出提示。如果应用允许用户缓存一些敏感信息的话,这些信息就存在一个名为”user_dict.db”的数据库中,任何应用都可以同过用户字典的Content Provider 访问。

另一种办法就是把数据库下载到本地,然后用SQLite 客户端打开,如下图:

t01329a15864d4db0fc.png

使用adb下载数据

t0135ed6bbf64c46a18.png

使用SQLite客户端读取数据库中的数据。

总结

本文中,我们介绍了SQLite,本地存储,外部存储等在Android中的实现,我们也演示了通过物理接触能很轻易盗取到这些数据,所以强烈建议开发者们在存储以下敏感信息的时候对数据进行加密。

目录

安卓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-10-insecure-local-storage/

参与讨论,请先 | 注册 | 匿名评论
发布
用户评论
无任何评论