移动安全 - 敏感信息安全 - 文件存储权限和logcat日志


敏感信息安全主要检查客户端是否保存明文(或者容易被破解)的敏感信息,以及敏感信息的非授权访问。

目前安卓实现数据持久化的方式有4种:文件存储、SharedPreferences存储、数据库存储、SD卡存储。因此咱们得先学习下安卓的数据存储(持久化)相关的知识。本着光说不练假把式,只看不练一用就废的原则,还是结合具体代码例子来学习。前面说了,咱除了安卓手机之外对安卓一无所知,所以每次看安卓安全方面的东西,都会自己改app代码来做实验,这样更直观,更容易理解,也不容易忘~

1. 文件存储权限 

文件存储是将所有数据原封不动的保存到文件中,适合简单文本和二进制数据,下面的代码是将输入内容保存到名为save_data的文件中:

运行app输入内容:

在android-sdk\tools\lib\monitor-x86_64目录下找到monitor.exe并启动,找到data/data/com.example.persistencetest/file文件夹下的文件,就是我们写入的文件了:

将文件导出来:

用root用户进入adb shell查看save_data文件,该文件所属用户是:u0_a56,权限为:-rw-rw----

代码中Context设置的是MODE_PRIVATE,表明该数据只能被应用本身(或者root)访问:

Context.MODE_PRIVATE:默认模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。

Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。

Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取。

Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。

接下来开启另一个应用drozer,并且用drozer连接模拟器进入adb shell,此时的用户是u0_a57,根据MODE_PRIVATE的设置,此时是无法访问save_data文件的:

现在将文件的context改为MODE_WORLD_READABLE,这个属性在高版本的安卓已经被抛弃了666~

再开drozer就能读取这个文件了

用root用户查看该文件的权限变成了-rw-rw-r--

虽然高版本的Android已经弃用了MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE,但不妨碍之前低版本已经使用过这两个属性的App,以及因为特殊需求仍然在高版本使用的App。因此在开发APP时应尽量避免设置此类权限,以免造成安全隐患。在做APP检查时,应注意检查赋予此类权限的APP相关文件,具体问题具体分析

2. logcat 日志

主要是检查客户端程序存储在手机中的日志是否含有敏感信息。

我们在写程序时为了方便调试,或者发布后方便记录数据或者排查问题,一般都会生成日志文件(包括操作日志、错误日志等)。但是一些敏感数据,比如用户密码、配置密码、IP、github地址、JWT Token等敏感信息最好不要存储(或者明文存储)在日志中,在很多攻击案例中,日志就是突破点~

Android也支持写入日志,并且可以通过命令直接查看日志。假设在代码中将密码写入日志:

运行一下:

然后进入adb shell查看日志,执行:logcat -d

输出日志,发现密码:

也可以输出日志文件到本机:adb shell logcat -d > D:\1.txt

 

本文仅用于技术学习和交流,严禁用于非法用途,否则产生的一切后果自行承担。

如需转载,请注明出处,这是对他人劳动成果的尊重。

相关