参考资料:
https://www.eet-china.com/mp/a163935.html
https://www.52pojie.cn/thread-1613856-1-1.html
https://zhuanlan.zhihu.com/p/454294322
https://blog.csdn.net/weixin_39190897/article/details/113064716
https://www.eet-china.com/mp/a163935.html
1.内存明文存储敏感信息
1.1.检测项概述
因为Android将应用程序存储在内存中(即使在使用后),直到内存被回收,加密密钥可能会保留在内存中。发现或窃取设备的攻击者可以附加调试器并从应用程序转储内存,或者加载内核模块以转储内存中的全部内容。
1.2.测试详情
1.在应用中进行操作,如下图输入登录名和密码

2.使用monitor导出应用JVM堆栈信息,并将其转换为标准格式

3.使用hprof-covn将文件格式进行转换

4.使用MAT搜索,未在堆栈中查找到对应的信息

修复建议
数据在内存中加载时应进行加密保护。
2.SQLite数据库文件存储敏感信息
2.1.检测项概述
App在处理运行时产生的敏感数据(如账号、密码、Cookie、Token等业务相关敏感信息)时,将未经加密的敏感信息以明文的形式保存在SQLite数据库中。当用户手机失窃,或者连接到电脑时,这些明文的敏感数据可能被第三方程序获取,导致用户信息泄露、身份认证信息被窃取。
2.2.测试详情
http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2012-08187
默认存储路径:/data/data/packagename/databases
获取APP的DB文件

使用第三方工具查看该DB文件,确定存在姓名,账号,密码信息明文存储在DB文件中。
|
|

修复建议
尽量不在本地存储用户信息;若需在本地存储用户信息,需要对信息进行合理的加密存储
3.Shared Preference文件明文存储敏感信息
3.1.检测项概述
有些时候,应用程序有少量的数据需要保存,并且这些数据的格式很简单。比如:软件设置、用户账户设置,用户习惯设置等,这个时候就可以用到SharedPreferences。其实,SharedPreferences使用xml格式为Android应用提供一种永久的数据存贮方式。将未经加密的敏感信息以明文的形式保存在SharedPreferences中。当用户手机失窃,或者连接到电脑时,这些明文的敏感数据可能被第三方程序获取,导致用户信息泄露、身份认证信息被窃取。
3.2.测试详情
漏洞案例:
网易阅读Android客户端漏洞导致账号密码泄漏:http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2012-010056
高朋团购Android客户端敏感信息泄露:http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2012-016309
苏宁易购APP客户端敏感信息泄露:http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2012-014308
在使用应用一段时间后,尝试在应用空间中查看是否存在各类xml文件并且可以直接查看其中的敏感文件,如在xxx.xml里面存在姓名,账号明文信息
2.切换到/data/data/应用包名下,查看其中的sharedprefs目录下的xml文件,没有发现敏感信息明文存储在xml文件下
|
|

修复建议
SharedPerferece主要用于各类简单配置项的保存,不应在其中保存用户的敏感信息,如需保存用户信息,则应使用其他存储方式,如数据库或内部存储等方式,并进行加密处理。
4. LogCat输出敏感信息漏洞
4.1.检测项概述
在APP的开发过程中,为了方便调试,开发者通常会用logcat输出info、debug、error 等信息。如果在APP发布时没有去掉logcat信息,可能会导致攻击者通过查看logcat日志获得敏感信息
一般来说,LogCat敏感信息输出漏洞包括:
- 应用层Log敏感信息输出
- 应用层System.out.println敏感信息输出
- 系统bug异常导致Log输出
- Native层敏感Log输出
4.2.测试详情
|
|

修复建议
1.Android Studio中配置ProGuard实现release版apk自动删除Log.d()/v()等代码
2.使用自定义LogCat类,上线前关闭LogCat开关
5.内部/外部存储文件
5.1.测试项概述
我们讲述的文件存储,现在的手机很多的公共目录都是自身自带的存储空间,Android系统的文件一般都存储在sdCard和应用的私有目录下,任何在Android Manifest中声明读写sdcard权限的应用都可以对sdcard进行读写。
5.2.测试项详情
|
|

修复建议
1.不要将敏感信息存入本地固定的文件中,哪怕是加密存储也可能面临暴力破解的风险
2.对于保存信息的代码段进行混淆加密,使其难以被逆向人员简单分析获取