移动安全-Android APP敏感信息测试

移动金融APP备案

最近在接触新的工作项目——移动金融APP备案,需要对金融 APP 客户端进行安全测试,在此总结记录下相关的部分测试内容和方法。
在这里插入图片描述

关于移动金融APP备案,

Part1:首先看中国互联网金融协会的通知

为落实《中华人民共和国网络安全法》要求,加强移动金融客户端应用软件(以下简称客户端软件)安全管理,根据中国人民银行印发的《关于发布金融行业标准 加强移动金融客户端应用软件安全管理的通知》(银发〔2019〕237号,以下简称《通知》),中国互联网金融协会(以下简称协会)于2019年12月启动了客户端软件实名备案工作。

客户端软件备案工作启动以来,各金融从业机构积极通过移动金融客户端应用软件备案管理系统(https://finapp.nifa.org.cn)向协会登记了有关备案信息。依据中国人民银行发布的《移动金融客户端应用软件安全管理规范》,协会结合相关检测机构出具的测评结果,经综合审核,于5月19日对首批拟备案的33家机构的73款客户端软件名单在协会官网(http://www.nifa.org.cn)和《金融时报》予以公示。后续,协会将按照《通知》要求,持续做好客户端软件备案、风险监测等行业自律管理工作,督促引导各金融从业机构严格落实法律规定和监管要求,为金融消费者提供安全、便捷、满意的移动金融产品及服务。

随着第一批名单的公布,想必现在各个公司老板都已经在催运营部门准备备案了吧。

Part2:解读一下政策

  1. 是人民银行要监管各大贷款APP,互联网金融协会负责去落实做这个事情;
  2. 互联网金融协会拉了几个检测机构做这个事情;
  3. 互联网金融协会组织了培训,会员单位免费一人参加,不是会员的交2500元。如果是大型金融机构,建议加入协会会员,否则你不会是第一批,你懂的。这个是定期开展的,不是天天搞。
  4. 培训后,要按照相关法律文件进行整改。
  5. 公安部署名的那个《APP违法违规XXX》这个是高压线;中国人民银行《移动金融客户端XXXX》这个是参考书;《个人金融信息保护技术规范》这个是给开发人员看的标准。
  6. 改完,花点小钱找检测结构检测。

Part3:附相关法律文件名称

  1. 《网络安全法》-国家层面的立法
  2. 《金融科技(FinTech)发展规划(2019-2021年)》-懂政治
  3. 《个人金融信息保护技术规范》(以下简称规范)(JR/T 0171-2020)-随便看看
  4. 《App违法违规收集使用个人信息行为认定方法》-国家互联网信息办公室、工业和信息化部、公安部、市场监管总局四部委–高压线
  5. 《关于发布金融行业标准 加强移动金融客户端应用软件安全管理的通知》(银发〔2019〕237号)–领会文件精神
  6. 《移动金融客户端应用软件安全管理规范》-中国人民银行–参考书

Android APP数据存储

先来看看中国人民银行发布的《移动金融客户端应用软件安全管理规范》中对APP客户端本地存储数据的安全要求:
在这里插入图片描述
本文将简单介绍 Android APP 客户端的四种数据存储方式(分别为:文件存储数据、SQLite数据库存储数据、使用ContentProvider存储数据、使用SharedPreferences存储数据)与相关风险点,从安全的角度出发,对本地信息存储进行安全测试以及描述涉及到的检测方法与流程。

关于Android数据存储的持久化技术,详情可参见我的另一篇博文:Android-持久化技术

以下是对几种数据本存储方式的介绍:

sdcard 文件

文件存储方式主要是使用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"/>

SQLite数据库

SQLite是轻量级嵌入式数据库引擎,支持 SQL 语言,并且只利用很少的内存就有很好的性能,是android等主流移动设备上的复杂数据存储引擎。SQLiteDatabase 类为我们提供了很多种方法,支持增删查改等基本的数据库操作。

APP 运行生成的*.db文件一般位于:

/data/data/<package name>/databases/*db

ContentProvider

ContentProvider 主要用于程序之间的数据交换,这些数据包括文件数据、数据库数据和其他类型的数据。一个程序可以通过实现一个 Content Provider 的抽象接口将数据暴露出去,其他的应用程序可以通过统一的接口保存、读取、修改、添加、删除此 Content Provider 的各种数据(涉及到一定权限)。

Content Provider 中使用的查询字符串有别于标准的SQL查询。很多诸如 select, add, delete, modify 等操作我们都使用一种特殊的URI来进行,这种 URI 由3个部分组成 “content://”, 代表数据的路径,和一个可选的标识数据的 ID。

sharedPreferences

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

APP 的 sharedPreferences 文件存储路径为:

/data/data/<package name>/shared_prefs

APK客户端敏感信息测试

介绍完移动金融APP备案的项目背景、以及Android本地数据存储技术,下面开始步入正题,介绍如何进行APK客户端敏感信息测试。

1、APK数据安全测试要点

在对本地信息存储方面进行安全测试时,一般主要检查:

  1. SQLite 数据库文件是否保存、泄漏敏感信息;
  2. SharedPreferances 配置文件是否保存、泄漏敏感信息;
  3. APP客户端本地 log 运行日志是否打印、泄露用户敏感信息。

2、APK数据安全测试工具

在此次的安全测试中,主要使用AndroidSDK(Software Development)中集合的软件开发工具,主要包括:

  1. ADB(Android Debug Bridge),Android sdk中的一个工具,分为客户端(电脑)和服务端(android手机或者模拟器),可以用来直接操作管理android模拟器或者真实的android设备。
  2. DDMS(Dalvik Debug Monitor Service),Android sdk 中的一个工具,是 Android 开发环境中的 Dalvik 虚拟机调试监控服务。提供例如:为测试设备截屏,查看正在运行的线程以及堆信息、APP运行日志 Logcat、APP文件管理等服务。通存放在sdk/tools/路径下,直接双击ddms.bat运行。
  3. Sqlite3数据库管理工具,Android SDK 的adk/platform-tools目录下提供的一个简单的 sqlite 数据库管理工具。可以方便的使用其对sqlite数据库进行命令行的操作,也可以安装SQLite Expert进行图形化的操作。

Logcat 运行日志

下面先来看看 APP 运行日志的检查,本次测试我是用的是 Genymotion 手机模拟器,模拟器型号为 Google Nexus 6。
在这里插入图片描述

1、启动模拟器后,首先在 Android SDK 安装路径下找到 monitor.bat,双击运行 DDMS 工具:
在这里插入图片描述
不知道为何我的 DDMS 工具出问题了(原本好好的…),解决办法是打开另一个:
在这里插入图片描述
DDMS 打开后页面如下:
在这里插入图片描述2、先重点关注 Logcat 日志模块,在不过滤日志的情况下,所有运行的进程日志都会被打印显示,显得十分杂乱:
在这里插入图片描述3、可以右键选择 “Find” 按键对日志进行关键字搜索,此处演示某 APP 登录时的日志打印了用户的手机号码和密码(目测 Base 64 值):
在这里插入图片描述
4、同时可以创建日志过滤条件,记录指定进程或APP的日志,如图创建过滤器,记录QQ浏览器的日志:
在这里插入图片描述那么在对于的过滤器里,将全部是QQ浏览器的日志:
在这里插入图片描述进一步地还可以把日志保存到 PC 本地文件留存或者搜索,很简单,不演示。

ADB 工具提供了 logcat 命令在终端中可查看 APP 的运行日志,详情参见Adb logcat命令显示Android设备上的Log日志。此处不介绍,DDMS的可视化界面不香吗……

SQLite 数据库

查完敏感的运行日志,接下来查一下 SQLite 数据库是否存储敏感信息,这时候就要借助 DDMS 的 File Exploer模块了:
在这里插入图片描述从图中我们可以在/data/data/<package name>/databases/*db路径下找到对应APP的本地 SQLite 数据库文件。

【注意】/data/data 路径下的文件是需要 root 权限才能访问的,故需要一个已经 root 的测试机(模拟器默认都是已经 root 的)。

对于一些测试机,如果暂时没有权限查看到/data目录下的文件,需要使用adb shell以 root 身份(手机需要 root)将 data 目录下的文件读写权限进行更改(最简单粗暴就是设置为 777),如下图所示:
在这里插入图片描述
1、在获得 root 权限并对 data 目录设置 777后,使用 File Explorer 打开 /data/data,查看所要测试的包名下的 db 文件:
在这里插入图片描述2、将整个待测APP的 databases 文件导出到本地 PC(注意如果此处无法成功导出文件,则要么文件权限尚未设置777,要么手机未完全root):
在这里插入图片描述

3、最后,使用 SQLite Expert 可视化数据库管理工具逐一查看获取到的 db 文件,是否包含敏感的信息,如下发现存储了用户的手机号码明文:
在这里插入图片描述

sharedPreferences

SQLite 数据库文件查完了,接下来查一下/data/data/<package name>/shared_prefs路径下的sharedPreferences文件,同样的需要借助 File Explorer 将待测 APP 对应的 shared_prefs 文件夹整个导出到 PC 本地:
在这里插入图片描述导出到本地桌面文件夹:
在这里插入图片描述编辑器打开文件查看是否存在敏感信息,发现明文存储了用户的手机号码、邮箱:
在这里插入图片描述

其他本地文件的检查

除了重点对 SQLite 数据库文件和 SharedPreferences 配置文件进行安全检查外,其他的文件夹均可进行敏感文件、关键字的搜索。
在这里插入图片描述

Genymotion模拟器补充

当您尝试在 Genymotion中 安装针对 ARM 体系结构编译的应用程序时 ,会出现以下错误消息:

INSTALL_FAILED_CPU_ABI_INCOMPATIBLE

原因是 Genymotion 使用 x86 架构,因此您的 ARM 64 位应用程序不直接兼容。根据您的情况,请采用以下两种方法之一:

您是应用程序的开发人员

您只需要将x86构建目标添加到当前目标。有关更多信息,请单击 此处。

您不是应用程序的开发人员

您可以将ARM安装到x86翻译库(可以在Internet上找到),也可以与应用程序的开发人员联系以寻求x86架构支持。

具体解决方案参见博文:Genymotion-ARM-Translation.zip各安卓版本合集

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页