APP客户端本地数据安全问题

App本地客户端数据安全

参考资料:

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.在应用中进行操作,如下图输入登录名和密码

img

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

img

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

img

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

img

修复建议

数据在内存中加载时应进行加密保护。

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文件中。

1
2
cp xxx.db /mnt/sdcard
adb pull mnt/sdcard/divanotes.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文件下

1
2
3
cd /data/data/ddns.android.vuls
cd shared_prefs
cat xxx.xml     //看xml文件中是否存在泄露敏感信息如登录账号密码

修复建议

SharedPerferece主要用于各类简单配置项的保存,不应在其中保存用户的敏感信息,如需保存用户信息,则应使用其他存储方式,如数据库或内部存储等方式,并进行加密处理。

4. LogCat输出敏感信息漏洞

4.1.检测项概述

在APP的开发过程中,为了方便调试,开发者通常会用logcat输出info、debug、error 等信息。如果在APP发布时没有去掉logcat信息,可能会导致攻击者通过查看logcat日志获得敏感信息

一般来说,LogCat敏感信息输出漏洞包括:

  1. 应用层Log敏感信息输出
  2. 应用层System.out.println敏感信息输出
  3. 系统bug异常导致Log输出
  4. Native层敏感Log输出

4.2.测试详情

1
adb logcat |grep diva

修复建议

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
cd data/data/jakhar.aseem.diva
ls

修复建议

1.不要将敏感信息存入本地固定的文件中,哪怕是加密存储也可能面临暴力破解的风险

2.对于保存信息的代码段进行混淆加密,使其难以被逆向人员简单分析获取

By Lsec
最后更新于 Dec 30, 2025 16:10 +0800
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计
¹鵵ҳ