GitHub 推出基于 ModernBERT 的密钥检测分类器,扩展推送保护
Secret protection must scale with software
AI 导读
GitHub 发布与 Microsoft Applied Sciences 合作微调的 ModernBERT 分类器,用代码上下文识别无固定格式的密钥,可在 2 毫秒内评估一批候选密钥,官方称有望让可拦截的密钥数量翻倍以上。
摘要与补充说明
GitHub 用九个季度数据说明密钥泄露与代码量同步增长,并给出把检测成本压到 2 毫秒内的新分类器思路。
正文· AI 翻译
如今,GitHub 上每三个拉取请求中就有一个涉及 AI 智能体。一年前,这个数字还不到十分之一。如果这一速度保持不变,那么在接下来的两年内,推送到 GitHub 的大部分代码可能都由智能体编写。其中许多代码可能永远不会被人类完整阅读。
如果开发者和智能体的速度加快,我们有责任确保防护措施能跟上代码创建的加速步伐。这意味着要在更多泄露发生之前加以阻止,并让对仍然存在的暴露的响应更少依赖人工手动操作。
这对泄露的机密来说是一个关键时刻。开发者并没有变得更粗心;他们是被速度甩在了后面。那些让开发者能够创建更多软件的工具,也应该承担更多保护软件的工作。
在本文中,我分享了支撑这一说法的九个季度的数据。我还介绍了我们与 Microsoft Applied Sciences 共同构建的微调分类器,它将推送保护扩展到非结构化机密。该模型能在不到两毫秒内评估一整组候选机密,并可能使我们能够阻止的机密数量增加一倍以上。
被速度甩在后面,而非粗心大意
公开可见的代码中大约每两秒就会出现一个新的机密,过去三年每年翻一番。公众舆论很快跳到了“AI 让开发者变得粗心”的观点上。
在 2024 年第二季度至 2026 年第二季度之间,经过筛查的推送增长了 2.84 倍,而携带凭据的推送增长了 2.59 倍。在九个完整季度的数据中,我们没有发现每次推送中机密出现率存在统计学上可检测的趋势。与此同时,我们发现数据表明,开发者比以往任何时候都更了解意外暴露的风险,并且更不愿意接受这种风险。在同一时期,被开发者覆盖的推送路径拦截比例从 6.63% 线性下降到 3.93%。这些数字挑战了“智能体导致开发者变得更加粗心”的常见说法。
推送量增加,推送中机密出现率无明显上升
公开推送
推送中机密出现率
2.02 亿5.74 亿 · 2.8×
03 亿6 亿
0%0.5%1.0%
Q2Q3Q4Q1Q2Q3Q4Q1Q2202420252026
2026 Q2 · 5.74 亿次推送 · 0.47% 含机密
公开推送,2024 年 Q2 至 2026 年 Q2。推送中机密出现率是指检测到机密的推送所占比例。涵盖受支持的提供商模式,包括 GitHub 自身的令牌。
在固定比率下,活动量翻倍会使预期暴露量翻倍。如果每次暴露都需要相同的人工响应,工作量也会翻倍。手动撤销机密的平均时间徘徊在 40 天左右;大约五分之一的情况耗时超过 90 天。我们正在加速软件的创建,而暴露的凭据却可能保持可用数周或数月,因为人工修复无法以与开发相同的速度扩展。
仅仅告诉开发者要更加小心,本身并不能解决这个问题。随着代码量的增长,如果软件开发要保持可持续,我们必须阻止更多暴露,并减少对仍然存在的暴露所需的人工投入。
防护能力随算力扩展
过去几年我一直在 GitHub 从事机密扫描工作,过去一年担任该领域的产品负责人。我们最大的影响来自将检测与能够采取行动的系统连接起来。
GitHub 的目录通过我们的机密扫描合作伙伴计划覆盖了 150 多家技术合作伙伴。通过该合作伙伴计划,我们与参与的机密签发方合作构建检测器并报告公开暴露,以便他们能够响应。2026 年第二季度,公开扫描成功平均每秒报告 26 次凭据匹配,包括重复观测。收到通知后,大量此类合作伙伴会立即撤销令牌:OpenAI API 密钥、Google Cloud 账户凭据、Slack webhook、Hugging Face 用户令牌、SendGrid 密钥等。所有者可能仍需更换令牌,但撤销无需等待开发者找到并处理 GitHub 警报即可发生。
推送保护介入得更早。它在可识别的凭据进入仓库历史之前将其拦截,让开发者或代理有机会在出现需要调查的暴露之前修正更改。我们与技术合作伙伴合作,尽可能提高其检测器的精确率,直到我们有足够信心为开发者社区默认对这些机密启用推送保护。
得益于合作伙伴的努力,在过去一个月里,推送保护至少每秒拦截一次机密。就签发方绑定的凭据而言,GitHub 拦截的机密多于漏过的机密。我为我们把这件事对开发者而言变得如此平常而感到自豪。
修复能力随人力扩展
在纳入更多机密类型后,推送保护会在约 30% 的新检测机密进入仓库历史之前将其拦截。其余 70% 是在凭据不幸已经泄露之后才被发现的。而且:
- 防护能力随算力扩展,但修复能力仍然随人力扩展。
- 拒绝一次推送消耗的是算力;清理一个已经泄露到可见历史中的机密,消耗的是开发者的时间和注意力。
- 随着代码量增长,我们必须预防更多暴露,并减少剩余暴露所需的人力投入,否则引入的漏洞数量将变得难以承受。
告诉开发者要更加小心无法解决这种失衡。在开发流程中更早地识别更多此类机密,是平台必须承担的工作。
解决四体问题
在机密越过推送边界之前,阻止它的成本很小,决策是二元的:阻止或允许。一旦越过边界,同一个字符串就可以通过真实系统的身份验证,成本是无限的。
在许多情况下,我们唯一的检测线索可能是周围的代码和世界上下文。提供商签发的令牌可能有可识别的前缀。内部数据库密码可能完全无结构,根本没有可识别的模式。我们已经在利用上下文在推送后查找这些机密;问题在于如何在这种上下文感知判断与其他因素之间取得平衡。
我们将此称为秘密保护的“四体问题”:精度、延迟、吞吐量和成本是相互耦合的约束。防护措施必须值得开发者花时间。一个适合后续审查的发现,可能并不足以阻止一次推送。误报会打断开发者,并使下一次拦截更难被信任。检查如果太慢、太贵或难以扩展,就会限制其运行频率。
在推送时以不到 2 毫秒完成保护
我们新的 ModernBERT 分类器在上下文中评估候选秘密,不生成代码或文本。它不仅比现有的基于 LLM 的流水线更精确,而且速度极快,可在不到两毫秒内评估候选批次。它还极具成本效益,足以在关键路径上大规模运行。
将我们的模型纳入推送保护,使我们能够阻止的秘密数量增加一倍以上。该功能目前处于私有预览阶段。本月晚些时候,该功能将面向 Enterprise Cloud 和 GitHub Teams 中拥有 GitHub Secret Protection 的组织提供。它将消耗 AI 额度。
我们还将把该模型带到推送之外的开发者界面。
- 从今天起,任何 拥有 AI 秘密检测的组织 都将 自动 更新到 新模型。 这些推送后扫描产生的警报仍包含在组织购买的 secret scanning 中,无需额外费用。
- 该模型还将随 GitHub Enterprise Server 3.23 以公开预览形式发布,即使在气隙环境中,也能为 Secret Protection 客户带来 AI 检测的警报。
- 我们 正在将分类器添加到 Copilot CLI 和 Copilot App 的
/security-review命令中,这样 Copilot 用户即使没有组织的 GitHub Secret Protection 计划,也能在推送前处理秘密。AI 额度使用情况将在你的 AI 使用洞察中归属于 GitHub Secret Protection。
展望未来
我们希望的未来是:开发者可以将更多工作委托给代理,而无需监督每一个请求;组织维护凭据安全所需的人数不再随其编写的代码量而增长。我们在保护软件方面,应当为开发者社区带来与我们在生产软件方面同等的进步。
我们希望人们构建更多软件。我们保护软件的能力应当与创造软件的能力同步增长。
文章 秘密保护必须与软件同步扩展 首次发表于 The GitHub Blog。