什么是机密?
机密是允许访问敏感系统和数据的凭证。常见示例包括
- 用于与外部服务进行身份验证的 API 密钥和令牌
- 数据库密码和连接字符串
- 云供应商凭证和服务账户令牌
- 证书和加密密钥
当机密被提交到仓库时,它们会成为 硬编码凭证,直接嵌入到源代码或配置文件中。这些硬编码的机密会成为 Git 历史的一部分,即使在最新提交中删除,它们仍然可以被访问。这意味着解决凭证泄露不仅需要删除文件,还必须撤销并更换凭证,以防止未授权访问。
机密是如何被曝光的
机密蔓延指的是凭证在没有集中管理或可视化的情况下在多个仓库、团队和系统中扩散。这使得难以追踪哪些机密存在、它们的使用位置以及是否已被曝光。机密通常通过以下几种常见模式进入仓库。
开发工作流
- 在本地测试期间添加的硬编码凭证,意外提交
- 配置文件中的机密,例如
.env文件或基础设施即代码模板 - 在文档、维基或 README 文件中包含真实 API 密钥或令牌的示例凭证
仓库管理
- 包含被遗忘但仍然有效凭证的旧仓库
- 在 GitHub Issue、Pull Request 评论、讨论或 Gist 中共享的机密
- 外部贡献者或承包商引入的凭证
版本控制传播
- 即使在当前代码中移除,机密仍会保留在 Git 历史中。
- 凭证会传播到分叉仓库、备份系统和 CI/CD 日志中。
- 公开仓库中泄露的机密会被搜索引擎和专业扫描服务索引。
安全风险
泄露的机密可能导致多种安全事件。
未授权访问
凭证泄露使未授权用户直接访问您的系统。泄露后,硬编码的机密可被利用来
- 利用泄露的云供应商凭证在您的账户上配置基础设施或服务
- 通过被泄露的数据库凭证访问敏感的客户或组织数据
- 通过泄露的服务账户令牌进入生产系统
数据泄露
凭证泄露使未授权用户直接访问您的系统,导致数据泄露。攻击者通过曝光的凭证获取访问权限后,可能会窃取敏感数据、修改或删除关键信息,并破坏客户信任。数据泄露需要立即进行事件响应,包括撤销凭证、系统修复以及评估泄露的范围和影响。
供应链攻击
泄露的包仓库令牌可用于发布恶意版本的软件,影响依赖您包的下游用户和组织。
财务影响
泄露的机密会以多种方式给组织带来费用。
- 意外的云账单:泄露的 API 密钥让攻击者使用您的云资源。他们可以在您的账户上运行计算实例、存储数据或进行加密货币挖矿,从而产生巨额账单。
- 事件响应:调查泄露、轮换凭证以及审计系统需要大量的工程时间和资源。
- 法律费用:数据泄露可能导致罚款、法律费用和通知费用。
- 长期损害:安全事件公开后,失去客户、保险费用上升以及错失业务机会。
使用 GitHub 的机密安全
GitHub 提供工具帮助您防止、检测并修复机密泄露
1. 防止新的机密被提交
启用 Push protection(推送保护),在 git push 操作期间扫描代码,阻止包含检测到的机密的提交进入仓库。此功能可防止硬编码凭证被添加到代码库,并在风险点向开发者提供实时反馈,覆盖已知服务的提供商模式以及私钥和通用 API 密钥等非提供商模式。
鼓励各位开发者在个人账号上启用推送保护,以保护他们在 GitHub 上的所有推送,无论组织政策如何。这有助于通过在泄露的凭证到达仓库之前捕获它们,防止机密蔓延。
2. 检测已存在的机密
使用 secret scanning(机密扫描)持续监控仓库中的硬编码机密,并在检测到凭证时生成警报,使您能够快速撤销并轮换受损凭证。除了默认的提供商模式检测外,您还可以将扫描扩展到非提供商模式,并为组织特定的机密定义自定义模式。这有助于您了解组织内部机密蔓延的全貌。
后续步骤
保护组织免受机密泄露
-
运行免费机密风险评估以了解您当前的曝光情况。运行安全风险评估
-
启用推送保护,以防止新的机密被提交。
-
启用机密扫描,开始检测已存在的机密泄漏。
-
为开发团队建立安全的凭证管理实践。
欲了解 GitHub 机密安全功能概览,请参阅 关于使用 GitHub 的机密安全。