秘密管理是一种允许开发人员在具有严格访问控制的安全环境中安全地存储敏感数据(例如密码、密钥和令牌)的做法。对于小型软件项目,秘密管理可以很简单地实现。但随着团队和软件代码库的增长,应用程序生态系统中散布着更多的秘密,使它们更难管理。微服务、开发工具、容器、编排器和 API 连接都需要秘密来执行它们的功能,并且这些必须以安全的方式存储和交付。
将秘密硬编码到脚本、配置或源代码中是很常见的,这使得攻击者可以轻松访问它们。秘密管理解决方案可以确保敏感信息永远不会以明文形式嵌入到任何工件中,将秘密与代码分开保存,并通过对所有访问尝试实施基于特权的会话来提供审计跟踪。
秘密管理挑战
IT 生态系统越复杂,机密越多样化、数量越多,安全存储、传输和跟踪机密的难度就越大。以下是与秘密管理相关的一些常见风险和注意事项。
1. 手动分享和未能轮换敏感数据
如果没有秘密管理,使软件系统能够相互访问的唯一方法是在团队内手动共享秘密,或者将它们嵌入代码或配置中。这导致使用弱密码,以及跨系统重用密码。
此外,如果没有秘密管理,就很难轮换秘密,因为对密码的任何更改都需要更改代码、配置或在不安全的通道中重新共享密码。密码和访问权限在不再需要时无法轻易撤销。
2. 硬编码凭证
应用程序到应用程序和应用程序到数据库的访问和通信需要特权密码等秘密来启用身份验证。IoT 设备和应用程序通常使用默认的硬编码(嵌入式)凭据,黑客可以使用扫描仪、字典攻击或猜测技术轻松破解这些凭据。尤其是 DevOps 工具,通常会将秘密嵌入到文件或脚本中,从而危及自动化过程的安全性。
3. 缺乏意识和可见度
在一个组织的环境中通常部署了许多特权应用程序、帐户、工具、微服务或容器,以及它们相关的秘密,例如密钥和密码。一些组织拥有数百万个 SSH 密钥,这只是整体秘密管理负担的一部分。
去中心化的生态系统对于管理秘密尤其成问题,因为不同的开发人员、管理员等独立管理秘密(如果有的话)。缺乏企业范围的监督确保了安全漏洞和审计困难。
4. 云计算特权
Office 365 和 AWS 等虚拟化和云管理员控制台使用超级用户权限,允许用户访问广泛的资源并快速启动或关闭应用程序和虚拟机。每个 VM 实例都有需要管理的单独秘密和特权。云环境的规模增加了管理机密的负担。
5. DevOps 解决方案
机密需要跨组织的 IT 生态系统进行管理,但 DevOps 环境往往会放大机密管理的挑战。DevOps 团队通常使用许多不同的配置管理和编排工具,采用依赖秘密操作的自动化技术和平台。应用最佳实践来保护这些秘密非常重要,例如轮换凭证、限制访问、审计等。
6. 第三方账户和远程访问
第三方供应商和外部用户经常使用通过远程访问解决方案连接的帐户访问敏感资源。确保外部用户实施正确的远程访问实践和授权具有挑战性。在这些情况下,组织依靠第三方来管理机密,从而放弃对 IT 系统安全性的一些控制。
7. 管理机密的手动流程
密码和秘密安全不应该是人类的唯一责任,人类容易出错和管理不善。手动安全流程更有可能存在漏洞和较差的秘密卫生,包括默认密码、重复使用或共享密码、硬编码秘密和不复杂的密码。人为错误和疏忽会暴露秘密并导致泄露。
8. 缺乏集中的秘密管理
另一个问题是需要集中式秘密管理。随着 IT 系统的数量、种类和复杂性的增加,跨系统实施和管理一致的策略、了解机密在哪里以及如何使用它们变得越来越困难。这个问题被称为“秘密蔓延”——秘密分布在不同的系统中,每个系统都有自己独特的秘密管理策略。因为每个应用程序、云提供商或组织单位都有自己的安全模型,所以整个组织都没有可见性。
什么是秘密管理工具,为什么它们很重要?
秘密管理工具可以解决这些挑战并防止未经授权访问敏感数据。这降低了数据泄露、数据盗窃以及未经授权操纵或更改敏感公司数据和个人身份信息(PII) 的风险。所有这些都可能给组织带来灾难性后果,包括直接财务损失、声誉损害、法律风险和监管罚款。
秘密管理工具允许公司维护密码、加密密钥、SSH 密钥、API 密钥、数据库凭据、令牌和证书(包括 TLS/SSL 证书和私有证书)等数据的机密性。这些工具可以安全地存储、传输和管理数字凭证。
企业使用机密管理解决方案来集中管理整个 IT 生态系统的机密。这些工具降低了与不适当和手动秘密管理相关的风险,例如将秘密硬编码到脚本中、使用默认密码、手动共享密码以及无法轮换凭据。
秘密管理工具取代了手动秘密管理(例如,使用敏感系统的凭据维护电子表格),并为整个组织的秘密提供集中的可见性、监控和管理。这些工具最常被软件开发人员、安全专业人员和 IT 运营团队(DevOps 或DevSecOps)使用。
机密管理的最佳实践
区分秘密和标识符
机密是密码、连接字符串和其他信息,一旦泄露可能会危及您的组织。它应该只与受信任的应用程序和经过身份验证的用户或服务共享。
系统上的其他信息,如标识符、IP 地址、用户名和 DNS 名称,应谨慎共享。这些不是秘密,但不应轻易被第三方猜到,应尽可能保密。标识符对于授权服务器的所有客户端都应该是唯一的。
由于标识符的风险远低于秘密,因此明确区分它们并与秘密分开管理非常重要。机密信息需要受到非常严格的控制,因为一旦泄露,它们会直接对应用程序和业务造成严重损害。
管理权限
在任何组织中,受信任的用户帐户和应用程序都可以访问敏感数据和资源。这增加了数据被恶意内部人员或无意暴露的风险。遵循最小权限原则很重要,在该原则中,用户或应用程序仅在执行其角色所必需时才被授予权限。当不再需要访问时,应将其撤销。升级权限时,例如启用紧急维护工作,应该有充分的理由并在有限的时间内完成。应仔细监控特权会话,以改进监控和问责制。
经常轮换秘密
使用后应定期更改密码和其他机密信息。如果一个秘密长期保持不变,更多的用户和系统会获得它的访问权,并可能危及它。组织内外的员工可能会在不知不觉中泄露机密,也可能会被恶意代理人有意获取。使用机密管理工具时,请确保使用其机密轮换功能并将轮换设置为足够高的频率。
使用 KMS 加密数据
确保所有敏感数据都经过加密以增加安全性。因为加密密钥是敏感的,丢失就意味着底层数据的丢失,所以建议使用密钥管理服务(KMS)。KMS 存储和管理密钥,并在数据需要加密或解密时自动提供它们。它还可以使用不同的加密密钥加密每个数据集或资源,帮助您更精细地控制访问。
检测未经授权的访问
即使有最好的安全实践和工具,漏洞也不可避免地会发生。确保您有一个强大的流程来监控和识别未经授权的访问。安全、开发和运营团队应建立事件响应流程,以快速响应漏洞并快速修复任何受影响的系统,从而最大限度地减少对组织的损害。