硬编码密码
定义:硬编码密码是指在应用程序的源代码、配置文件、脚本或固件中直接以明文形式写入的固定密码。
危害:
-
极度缺乏机密性:
-
代码泄露即密码泄露:任何能访问代码的人(如开发人员、版本控制系统参与者、通过供应链攻击获取代码的攻击者)都能立即获得密码。GitHub 上每天都有大量因误传配置文件而泄露的数据库密码和API密钥。
-
难以轮换:要更改密码,必须修改代码、重新编译并重新部署整个应用程序。这个过程繁琐、耗时,且容易出错,导致密码长期不变,增加了暴露风险。
-
-
权限滥用:
-
硬编码的密码通常用于访问数据库、第三方API、内部服务等。如果这些凭证拥有过高权限,一旦泄露,攻击者就能获得对关键系统的广泛访问权。
-
-
违反安全合规性:
-
几乎所有的安全标准和法规(如 GDPR, HIPAA, PCI DSS, SOC 2)都明确禁止使用硬编码密码。使用它们会导致无法通过审计。
-
-
横向移动:
-
攻击者利用一个被攻破的硬编码凭证,可以将其作为跳板,在企业网络内部进行横向移动,访问更多敏感系统和数据。
-
修复方案:
-
立即将密码从代码中移除:
-
这是第一步,也是必须做的一步。从所有源代码、配置文件中删除明文的密码。
-
-
使用安全的凭据管理服务:
-
将密码、API密钥等敏感信息转移到专业的秘密管理服务中,例如:
-
云厂商提供的服务:AWS Secrets Manager / Parameter Store, Azure Key Vault, Google Cloud Secret Manager。
-
第三方工具:HashiCorp Vault, CyberArk, Thycotic等。
-
-
应用程序在运行时动态地从这些服务中获取凭据。
-
-
使用环境变量(注意:这并非最佳实践,但优于硬编码):
-
将密码存储在部署环境(如服务器、容器)的环境变量中。
-
优点:实现了代码和配置的分离。
-
缺点:环境变量可能通过日志、错误信息或
/proc文件系统意外泄露,权限管理可能不精细。建议仅用于开发环境或非关键系统。
-
-
实施最小权限原则:
-
为应用程序使用的服务账户分配严格且最小化的权限。确保它只能访问其正常运行所必需的资源。
-
-
自动化和定期轮换凭据:
-
利用秘密管理服务的功能,自动定期生成和更换密码。即使密码不慎泄露,其有效期也很短,能有效降低风险。
-
-
使用代码扫描工具:
-
在CI/CD管道中集成静态应用程序安全测试(SAST) 工具(如 SonarQube, Checkmarx, Snyk Code, GitGuardian),自动扫描代码库中的硬编码密码、密钥和令牌,并在合并请求中阻止它们。
-
2319

被折叠的 条评论
为什么被折叠?



