本文主要介绍日志安全相关知识,所用到的漏洞应用和代码可以在https://github.com/AndroidAppSec/vuls/releases/tag/v1.1下载
三、日志安全
1、日志基本介绍
为了便于开发调试, Android 提供了用于日志打印输出的工具类: android.util.Log。日志输出分为不同的等级:VERBOSE(全部信息)、DEBUG(调试信息)、INFO(一般信息)、WARN(警告信息)、ERROR(错误信息)、ASSERT(断言信息)。对应的方法如下:
以上的日志级别从上到下依次升高,例如,当查看日志时,DEBUG 级别会输出 VERBOSE 级别的信息,而 VERBOSE 级别不会输出 DEBUG 级别的信息。
2、日志查看方法
比较简单方便的就是使用 Android Studio 自带的 Logcat 工具来查看日志,如下图:
当然,你也可以使用adb logcat命令来查看。
3、常见安全问题
程序员在使用日志的过程中,常常在打包 release 版本的 apk 文件时,忘记去掉相关日志代码,会造成安全隐患。
1)、被恶意程序读取敏感信息
要读取系统日志,需要申请 android.permission.READ_LOGS 权限。这个权限在 Android 4.1 版本之前是所有应用都可以申请的,也就意味着在 Android 4.1 版本之前,普通应用能够轻易获取任意应用的日志信息。在 Android 4.1 版本之后,只有系统应用才能够申请这个权限,也就是说虽然普通应用无法获取其他应用日志信息,但是在 ROOT 的手机上,恶意应用还是可以获取其他应用日志信息的。
2)、泄漏程序逻辑
其实更多的场景是,日志信息可能会泄漏整个应用的逻辑,为逆向分析提供便利。
一种常见的日志使用错误就是配置日志开关,在 release 版本中,只是把开关关掉。这种做法虽然正常情况下不会打印输出日志,但是所有日志记录的代码还都在。攻击者只要去重新打包 apk或者采用 hook 方式,将日志开关打开,就可以看见日志输出了。比如以下代码,只要修改getDecideResult()的返回值为 true 即可。
4、缓解措施
可以通过在 ProGuard 中配置规则来删除对应的日志代码。
可以通过添加以下 ProGuard 的规则来删除相应的代码:
反编译之后,发现日志对应代码已经被不见了:
参考:
https://sushi2k.gitbooks.io/the-owasp-mobile-security-testing-guide/content/0x05d-Testing-Data-Storage.html
领取专属 10元无门槛券
私享最新 技术干货