什么是机密?
机密是授予对敏感系统和数据的访问权限的凭据。 常见示例包括:
- 用于通过外部服务进行身份验证的 API 密钥和令牌
- 数据库密码和连接字符串
- 云提供商凭据和服务帐户令牌
- 证书和加密密钥
将机密提交到存储库时,它们将成为直接嵌入在源代码或配置文件中的 硬编码凭据 。 这些硬编码的机密将成为 Git 历史记录的一部分,即使在从最新提交中删除后仍可访问这些机密。 这意味着解决凭据泄漏需要比删除文件更多;还必须撤销并替换凭据,以防止未经授权的访问。
如何公开机密
当凭据在存储库、团队和系统之间激增而无法集中管理和监控时,发生机密蔓延。 这使得很难跟踪存在哪些机密、所使用的机密以及它们是否已公开。 机密通常通过多种常见模式进入存储库。
开发工作流
- 在本地测试和无意中提交期间添加的硬编码凭据
- 配置文件中的机密,如
.env文件或基础结构即代码模板 - 文档、wiki 或自述文件中包含真实 API 密钥或令牌的示例凭据
存储库管理
- 包含被遗忘但仍处于活动状态的凭据的旧存储库
- 在 GitHub 中共享的秘密信息、issue、拉取请求中的评论、讨论或 gist
- 外部参与者或承包商引入的凭据
版本控制传播
- 即使从当前代码中删除,机密也会保留在 Git 历史记录中。
- 凭据传播到分叉存储库、备份系统和 CI/CD 日志。
- 具有公开机密的公共存储库由搜索引擎和专用扫描服务编制索引。
安全风险
公开的机密可能导致多种类型的安全事件。
未经授权的访问
凭据泄漏会让未经授权的用户直接访问你的系统。 公开后,可以利用硬编码的机密来:
- 使用泄露的云提供商凭据在帐户上预配基础结构或服务
- 通过泄露的数据库凭据访问敏感客户或组织数据
- 通过暴露的服务帐户令牌进入生产环境系统
数据泄露
凭据泄漏使未经授权的用户能够直接访问系统,从而导致数据泄露。 攻击者使用公开的凭据获取访问权限后,可以泄露敏感数据、修改或删除关键信息,并损害客户信任。 数据泄露需要立即事件响应,包括凭据吊销、系统修正和对违规范围和影响的评估。
供应链攻击
公开的包注册表令牌可用于发布软件的恶意版本,从而影响依赖于包的下游用户和组织。
财务影响
泄露的机密可能导致组织在多方面的经济损失。
-
**意外的云账单**:泄露的 API 密钥可让攻击者使用云资源。 他们可以在帐户上运行计算实例、存储数据或挖掘加密货币,从而生成大型账单。 -
**事件响应**:调查违规、轮换凭据和审核系统需要大量的工程时间和资源。 -
**法律成本**:数据泄露可能会导致罚款、法律费用和通知费用。 -
**长期损害**:客户丢失,保险成本较高,安全事件公开后错过了商机。
使用 GitHub 的秘密安全性
GitHub 提供了有助于防止、检测和修正机密泄漏的工具:
1.防止提交新机密
启用 推送保护以在git push操作期间扫描代码,并在检测到机密时阻止提交,以防止它们进入存储库。 这可以防止硬编码凭据被添加到代码库中,并在风险点为开发人员提供实时反馈,涵盖已知服务的提供程序模式以及诸如私钥和通用API密钥之类的非提供程序模式。
鼓励各个开发人员为其个人帐户启用推送保护,以保护其在 GitHub 上的所有推送,无论组织策略如何。 这有助于防止机密信息蔓延,因为能够在凭据到达存储库之前检测到泄露的凭据。
2.检测现有机密
使用 secret scanning 持续监视存储库中的硬编码机密,并在检测到凭据时生成警报,以便快速撤销和更换泄露的凭据。 除了默认检测提供程序模式之外,还可以将扫描扩展到非提供程序模式,并为组织特定的机密定义自定义模式。 这有助于了解整个组织的机密蔓延。
后续步骤
保护组织免受机密泄露:
-
运行免费的机密风险评估,了解当前风险。 了解如何运行免费的机密风险评估
-
启用推送保护以防止提交新机密。
-
启用 secret scanning 以开始检测现有机密泄漏。
-
为开发团队建立安全凭据管理做法。
关于GitHub的保密安全功能概述,请参阅关于使用 GitHub 的机密安全性。