Vulnerability-wiki

硬编码密钥漏洞(Hardcoded Key Vulnerability)

1. 漏洞概述

硬编码密钥漏洞 是指应用在源代码、配置文件或二进制文件中直接明文存储敏感密钥(如加密密钥、API Key、Access Token、私钥等),导致攻击者通过逆向工程、内存分析或代码审计轻易获取密钥,从而绕过认证、解密敏感数据或直接访问受保护的服务。

这种漏洞广泛存在于:


2. 漏洞成因

  1. 开发便利
    • 为了简化调用第三方服务或快速调试,开发者直接在代码中写死密钥。
  2. 缺乏安全意识
    • 不理解密钥暴露的风险,认为“编译后的二进制不可轻易读取”。
  3. 缺少安全配置管理
    • 没有使用安全的密钥管理系统(KMS)或动态下发机制。
  4. 混淆/加密不足
    • 即使加了简单混淆,仍可通过反编译或调试还原密钥。

3. 攻击原理

攻击者通过逆向分析或内存调试获取硬编码密钥,然后利用该密钥直接访问敏感资源或绕过安全验证。

常见手段:


4. 常见攻击方式

攻击方式 描述 影响
反编译提取密钥 从 APK、IPA、JS 代码中提取硬编码 API Key 直接调用后端 API
固件分析 从 IoT 固件中找到 SSH 私钥或云服务密钥 远程控制设备
内存搜索 从运行内存中直接搜索已加载的密钥 解密通信内容
流量解密 利用硬编码密钥解密 HTTPS/TLS 之外的加密数据 窃取敏感信息

5. 危害


6. 典型案例

  1. 云服务密钥泄露
    某移动 App 硬编码 AWS Access Key,被爬虫提取后,大量占用云计算资源。

  2. 支付 API 被滥用
    电商 App 硬编码支付网关的商户密钥,攻击者利用它伪造支付请求,造成资金损失。

  3. IoT 设备远程接管
    智能摄像头固件中写死了 SSH 私钥,攻击者批量登录全球同型号设备。


7. 防御措施

  1. 不要在代码中硬编码密钥
    • 所有密钥应存储在安全的密钥管理系统(KMS)或安全服务器。
  2. 动态下发 & 最小权限
    • 应用启动后通过安全通道从服务端动态获取密钥,并限制有效期和使用范围。
  3. 环境隔离
    • 不同环境(开发、测试、生产)使用不同密钥。
  4. 混淆与加固
    • 即便需要在客户端存储,也应使用代码混淆、Native 层存储、白盒加密等多层防护。
  5. 密钥轮换机制
    • 定期更换密钥,并在发现泄露后立即吊销。
  6. 监控与限流
    • 后端监控 API 调用频率和来源,防止大规模滥用。

8. 检测方法


9. 总结

硬编码密钥漏洞的本质是将本应安全存储的凭证直接放在不安全的地方
防御关键在于: