吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 17914|回复: 20
收起左侧

[Android 原创] Android APP安全测试之敏感信息本地存储

[复制链接]
aerfa 发表于 2017-7-4 11:04
本帖最后由 aerfa 于 2017-7-4 11:33 编辑

1 Android数据存储方式
本文简单介绍
Android APP的五种数据存储方式(其中本地存储方式四种、网络存储方式一种,分别为:文件存储数据、SQLite数据库存储数据、使用ContentProvider存储数据、使用SharedPreferences存储数据、网络存储数据)与相关风险点,从安全的角度出发,对本地信息存储进行安全测试以及描述涉及到的检测方法与流程。以下是对5种数据本存储方式的介绍:

1.1  文件存储数据
文件存储方式主要是使用
IO流操作读写sdcard上的文件,比如应用程序数据文件夹下的某一文件被其他应用读取、写入等操作,其核心原理为: Context提供了两个方法来打开数据文件里的文件IO FileInputStream openFileInput(String name); FileOutputStream(Stringname , int mode),这两个方法第一个参数用于指定文件名,第二个参数指定打开文件的模式。不过权限需要在AndroidManifest.xml文件上进行配置:
  <uses-permission  android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  <uses-permission  android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  

1.2  
SQLite数据库存储数据

SQLite是轻量级嵌入式数据库引擎,支持 SQL 语言,并且只利用很少的内存就有很好的性能,是android等主流移动设备上的复杂数据存储引擎。SQLiteDatabase类为我们提供了很多种方法,支持增删查改等基本的数据库操作。程序运行生成的*.db文件一般位于/data/data/<package name>/databases/*db

1.3  
使用ContentProvider存储数据
ContentProvider主要用于程序之间的数据交换,这些数据包括文件数据、数据库数据和其他类型的数据。一个程序可以通过实现一个Content Provider的抽象接口将数据暴露出去,其他的应用程序可以通过统一的接口保存、读取、修改、添加、删除此Content Provider的各种数据(涉及到一定权限)。Content Provider中使用的查询字符串有别于标准的SQL查询。很多诸如select, add, delete, modify等操作我们都使用一种特殊的URI来进行,这种URI3个部分组成 “content://”, 代表数据的路径,和一个可选的标识数据的ID

1.4  
使用SharedPreferences存储数据

该存储方式通常用来存储应用的配置信息,保存方式基于
XML文件存储的key-value键值对数据,一般作为数据存储的一种补充。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口Editor对象实现。 SharedPreferences本身是一个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, intmode)方法来获取实例。存储路径为:/data/data/<package name>/shared_prefs目录下。

1.5 网络存储数据

以上四种存储都是将数据存储在本地设备上,除此之外,
Android APP也通过网络来实现数据的存储和获取。一般调用WebService返回的数据或是解析HTTP协议实现网络数据交互,不过前提是需要在配置文件(AndroidManifest.xml)中设置访问网络权限:<uses-permission android:name="android.permission.INTERNET" />


2
安全测试要点

在本地信息存储方面,一般主要从
SQLite数据库文件SharedPreferances配置文件是否泄漏敏感信息进行安全测试。此外通过反编译APP,分析源代码获取数据存储过程——>存储路径——>敏感数据文件方面进行考量。


3
安全测试工具
在此次的安全测试中,主要使用AndroidSDKSoftware Development)中集合的软件开发工具。

3.1 adb

adbAndroid Debug Bridge),android sdk中的一个工具,分为客户端(电脑)和服务端(android手机或者模拟器),可以用来直接操作管理android模拟器或者真实的android设备。主要功能有:* 运行设备的shell(命令行)* 管理模拟器或设备的端口映射* 计算机和设备之间上传/下载文件* 将本地apk软件安装至模拟器或android设备常用命令:
帮助信息:  adb help  
查看设备:
  adb devices  
登录设备:
  adb shell        adb  shell <command命令>  
上传文件:
   adb push <本地路径>  <远程路径>  
下载文件:
   adb pull <远程路径>  <本地路径>  
安装软件:
   adb install [-r强制安装] [-sapk安装在SD-Card]  
卸载软件:
   adb uninstall [-k 保留配置文件和缓存文件] <软件名>  

1.png


3.2 DDMSFile Explorer
DDMSDalvik Debug Monitor Service),android sdk中的一个工具,是 Android 开发环境中的Dalvik虚拟机调试监控服务。提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收 SMS、虚拟地理坐标等服务。通存放在sdk/tools/路径下,直接双击ddms.bat运行。
2.png


3.3 SQLite Expert
Android sqlite3数据库管理工具,Android SDKadk/platform-tools目录下提供的一个简单的sqlite数据库管理工具。可以方便的使用其对sqlite数据库进行命令行的操作,也可以安装SQLite Expert进行图形化的操作。
3.png

4 安全测试方法
4.1 usb连接手机

使用
usb线将测试手机与电脑进行连接,手机上允许USB调试,并使用adb查看手机终端状态,若出现设备说明连接成功。其他方式连接或使用android模拟器,此处不再叙述。
  adb  devices  
4.png



4.2 DDMS查看文件
运行
ddms.bat打开ddms,可以看到设备连接状态(自动连接)以及logcat实时打印的日志信息
依次点击Device——>File Explorer


查看手机上存储的文件:
7.png

4.3 data目录权限提升
SQLite数据库文件和SharedPreferances配置文件均在data目录下,但是目前是没有权限查看到的,需要使用adb shell命令进行权限的提升与data目录目前的读写设置(手机需要root使用adb shell进入操作系统命令行界面,当前无root权限:
8.png

首先进行权限提升,其次对data目录设置777权限:
9.png


4.4 DDMS获取敏感文件
在获得
root权限并对data目录设置777后,使用File Explorer打开/data/data,查看所要测试的包名,此处以某APP为例(com.xxx.yyy
选中databases,点击左上角向左的箭头导出到本地:
13.png
选中shared_prefs,点击左上角向左的箭头导出到本地:
14.png

4.5 检查SQLite数据库是否泄漏敏感信息

使用
SQLite Expert打开下载到本地的数据库文件,检查是否存在敏感信息泄露。注意选择文件的类型为any file
15.png

16.png

4.6 检查SharedPreferences是否泄漏敏感信息
使用十六进制工具,比如
UENotepad++等打开下载到本地的配置文件,并搜索是否包含敏感信息。
17.png

4.7 检查其他本地文件夹及文件是否泄漏敏感信息
除了重点对
SQLite数据库文件和SharedPreferences配置文件进行安全检查外,其他的文件夹均可进行敏感文件、关键字的搜索。
18.png

5 参考文档

http://www.cnblogs.com/phoenix--/p/4601724.html  
安全测试基础
http://www.cnblogs.com/pxsbest/p/5068482.html    Android数据存储五种方式总结


免费评分

参与人数 2威望 +1 吾爱币 +10 热心值 +2 收起 理由
qtfreet00 + 1 + 9 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zy1234 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| aerfa 发表于 2019-1-22 08:41
wushaominkk 发表于 2019-1-18 17:32
如果手机没有root,本地数据还是要加密的,因为allowbackup默认是true,如果开发者没有设置成false,可以通过备 ...

是的,通过备份导出

手机root的话,就直接连接去获取了
qtfreet00 发表于 2017-7-4 12:28
如果apk设置了allowbackup为false,并且xml属性都是private的话,在不root的情况下数据也算是安全的,如果通过root来获取信息的,那80%的数据都是不安全的,当然本地存储加密也是必要的
Cctv_Missx 发表于 2017-7-4 13:31
很赞的数据测试教程,但是我有一个问题,本地的数据都是不用加密的?
傲寒遥 发表于 2017-7-4 22:29
嘿嘿。我可不是存在这里的。。我直接序列化字对象节码文件,这样还怎么搞?
sayuwil 发表于 2017-7-5 06:23
谢谢,学习了。感谢楼主。
 楼主| aerfa 发表于 2017-7-5 09:33
Cctv_Missx 发表于 2017-7-4 13:31
很赞的数据测试教程,但是我有一个问题,本地的数据都是不用加密的?

不一定吧,不过遇到好多都是没有加密的
 楼主| aerfa 发表于 2017-7-5 09:35
傲寒遥 发表于 2017-7-4 22:29
嘿嘿。我可不是存在这里的。。我直接序列化字对象节码文件,这样还怎么搞?

不存在这里?一般的常见存储方式不都是这几种吗
 楼主| aerfa 发表于 2017-7-5 09:36
qtfreet00 发表于 2017-7-4 12:28
如果apk设置了allowbackup为false,并且xml属性都是private的话,在不root的情况下数据也算是安全的,如果 ...

版主说的很有道理
ThisT 发表于 2017-7-11 14:14
谢谢分享,共同学习!总结的很详细。
IceRainow 发表于 2018-3-22 16:37
很基础,很实用
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表