移动安全 - 敏感信息安全 - 文件存储权限和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
本文仅用于技术学习和交流,严禁用于非法用途,否则产生的一切后果自行承担。
如需转载,请注明出处,这是对他人劳动成果的尊重。