不安全数据存储漏洞 是指应用程序在本地存储敏感数据(如用户名、密码、Token、个人隐私信息、加密密钥等)时,未采取安全的保护措施,导致数据可能被未经授权的人员获取、分析或篡改。
常见于:
- Web 应用与服务器端配置(数据库、日志、配置文件)
- 移动应用(本地存储、缓存、日志)
- 桌面软件(注册表、配置文件、临时文件)
- 物联网设备(固件、存储芯片、调试接口)
-
明文存储敏感信息
- 直接以明文保存密码、API 密钥、Token、隐私数据。
-
弱加密或错误加密
- 使用弱算法(MD5、SHA1、RC4 等)或错误的加密实现(硬编码密钥、ECB 模式)。
-
存储位置不安全
- 将敏感数据存放在易被访问的位置(如 Web 根目录、公共文件夹)。
-
日志与缓存泄露
- 在日志文件、Crash Dump、缓存中无意记录敏感数据。
-
权限控制不当
- 数据文件权限过宽(如 777 权限),导致低权限用户可访问。
-
缺乏数据生命周期管理
- 过期数据、临时数据未及时清理。
| 攻击方式 | 描述 |
|---|---|
| 本地文件读取 | 攻击者读取应用的配置文件、数据库、缓存文件获取敏感信息。 |
| 逆向工程与提取 | 反编译应用或分析固件,提取硬编码密钥或凭据。 |
| 日志分析 | 从日志文件中提取口令、会话令牌等信息。 |
| 越权访问 | 利用错误的文件权限访问敏感数据。 |
| 物理攻击 | 从设备存储芯片中直接提取数据(IoT、移动端)。 |
-
Android 应用明文存储 Token
- 在
SharedPreferences或 SQLite 数据库中明文保存会话令牌,被 Root 用户或恶意应用读取。
- 在
-
Web 服务器泄露配置文件
- 服务器误配置导致
.env、config.php可被直接下载,暴露数据库密码。
- 服务器误配置导致
-
日志中泄露密码
- 应用调试日志记录了用户登录请求的明文密码。
-
IoT 设备固件硬编码密钥
- 固件中存放了云端 API 密钥,被逆向分析后批量利用。
-
账户与凭据泄露
攻击者可直接登录系统或调用 API。 -
数据隐私泄露
用户个人信息、财务信息被曝光。 -
进一步入侵与横向移动
使用泄露的凭据攻击其他系统(凭据填充攻击)。 -
业务破坏与伪造
修改本地存储的配置或数据,绕过验证、制造假数据。
-
加密存储敏感数据
- 使用强加密算法(AES-256、RSA)和安全模式(CBC/GCM)。
- 密钥应安全存储(密钥管理服务、硬件安全模块 HSM)。
-
最小化存储
- 不在本地存储长期有效的敏感数据。
- 使用一次性 Token 或短期有效凭据。
-
安全存储位置
- 移动端使用安全存储机制(Android Keystore、iOS Keychain)。
- 服务器端将配置文件放在非 Web 可访问目录。
-
访问控制与权限限制
- 限制文件访问权限(最小权限原则)。
-
日志脱敏
- 日志中隐藏或加密敏感字段。
-
数据生命周期管理
- 定期清理临时文件、缓存与过期数据。
-
代码审计
检查敏感数据的存储与加密实现。 -
文件系统扫描
搜索明文凭据、配置文件、密钥等。 -
移动应用安全测试
使用adb、越狱/Root 工具访问应用数据目录分析存储情况。 -
固件分析
对 IoT 固件进行解包与静态分析。
不安全数据存储漏洞往往源于开发人员为方便实现而忽视安全要求。
安全设计应遵循 “不存储则最安全,必须存储则必须加密” 的原则,并配合安全的密钥管理、访问控制、数据清理机制,以减少数据泄露风险。