跳到正文
RadarAI· GitHub Blog·· 4 天前AI 评分36

GitHub 详解基于 ModernBERT 的密钥检测模型如何以更低成本和噪音找到更多真实密钥

AI 导读

GitHub 公开其密钥扫描分类器设计:先用正则生成候选,再用微调 ModernBERT 结合文件路径、变量名与上下文判断是否为真实密钥。相比此前 LLM 管线,仓库所有者加权接受率提升 11.5%,post-push 扫描中位执行时间降低 86%,服务成本下降超过 98%。模型导出为 ONNX 并做 8-bit 量化,通用密钥检测已扩展到 push protection。

正文 · AI 翻译

GitHub Blog· Batu Ozturkler·2026-10-14 01:56· 1 小时前AI 评分51

GitHub 的密钥检测模型:以更少噪声发现更多密钥

AI 导读

GitHub 公开其新密钥扫描分类器的设计与训练细节:先用正则生成候选,再用微调 ModernBERT 结合文件路径、变量名和上下文判断是否为真实密钥。相比此前 LLM 管线,仓库所有者加权接受率提升 11.5%,post-push 扫描中位执行时间降低 86%,服务成本下降超过 98%;模型导出为 ONNX 并做 8-bit 量化,且已将通用密钥检测扩展到 push protection。

正文

我们的管线与之前的 LLM 管线对比

更智能的密钥扫描,成本仅为原来的一小部分

11.5%

更高的接受率

所有者加权的告警精确率

86%

更低的中位扫描执行时间

Post-push 扫描

98%

更低的 serving 成本

紧凑模型与远程 LLM 调用对比

当开发者对检测结果有信心时,密钥扫描才能发挥最佳效果。漏报太多,真实凭据可能留在仓库中。告警太频繁,开发者可能花时间排查并非密钥的字符串。

通用密钥让这种平衡尤为困难。同一个字符串可能是真实凭据,也可能是文档占位符,因此检测它需要理解周围的代码和文本。

为应对这一挑战,我们专门针对 GitHub 的产品需求训练了一个密钥分类器:在满足大规模扫描的速度和效率要求的同时,区分真实凭据与相似字符串。

在我们的配套文章 密钥保护必须与软件同步扩展 中,我们解释了为什么密钥保护必须跟上 AI 加速的开发步伐。在这里,我们深入介绍支撑这项工作的上下文感知分类器:我们如何设计、训练和评估它,以更少的噪声发现更多真实密钥。

我们实现了什么

GitHub 密钥扫描在两个关键时刻运行:

  • Push protection 通过在推送被接受前扫描变更,帮助防止密钥进入仓库,让开发者有机会处理检测结果。
  • Post-push 扫描 在代码提交后运行,持续扫描仓库内容,并在检测到潜在密钥时创建告警,以便开发者和安全团队调查和修复。

我们开发了一个快速分类器,与之前基于 LLM 的管线相比,将 post-push 扫描的中位执行时间降低了 86%。这种效率使得将通用密钥检测扩展到 push protection 变得切实可行,在开发者推送变更之前就返回结果,而不仅仅是在代码提交之后。

密钥扫描在模型检测到文件第 5 行的密钥后,通过 push protection 阻止提交

为什么密钥难以检测

结构化凭据通常包含独特的前缀、长度、字符集或校验和。通用密钥则可能没有。它们的语法与构建标识符、校验和、资产哈希、示例值以及其他非敏感字符串重叠。上下文才是决定性信号。

可能是真实凭据可能是无害的相似字符串
生产数据库 URL 旁边赋值的密码测试夹具中同样形状的密码值
部署配置中的连接字符串设置指南中的 localhost 连接字符串
绑定到 API 凭据的高熵值高熵校验和、构建 ID 或资产哈希

这些案例属于困难负样本:它们匹配凭据模式,但并非可用凭据。增加更多规则可以抑制其中一部分,但每一条例外都有可能掩盖真正的密钥。而学习型分类器则可以利用文件路径、密钥类型、变量名以及附近的代码或文本等信号。

这就是我们推出采用两阶段流水线的新扫描器的原因:

  1. 候选生成:正则过滤器以高召回率扫描内容中的潜在密钥。这一阶段经过优化,能够快速、确定性地捕获广泛的类凭据模式。
  2. 上下文感知分类:一个经过微调的 ModernBERT 分类器会评估每个候选及其周围上下文。它经过训练,能够识别区分真实密钥与误报的信号,包括占位符值、示例、文档片段、生成内容以及非敏感标识符。由于该模型体积小,且在我们的推理基础设施上运行高效,其服务成本远低于基于 LLM 的流水线,也更容易扩展。

影响:

  • 用户接受度提升 11.5%,减少了误报。
  • 推送后密钥检测执行时间加快 86%。
  • 与基于 LLM 的流水线相比,成本节省超过 98%。

我们的流水线如何工作

在扫描内容时,正则模式会撒下一张大网,标记任何看起来像凭据的内容,因此真正的密钥在开始阶段不会被漏掉。每个候选随后会进入经过微调的 ModernBERT 分类器,该分类器会结合其文件路径、变量名和周围代码来读取该值。分类器会估计它是真实密钥的可能性。高置信度的发现会变成警报,而占位符、测试夹具和校验和等相似内容会在到达开发者之前被过滤掉。

我们的流水线如何工作

先广撒网,再仔细甄别

步骤 1

扫描

仓库内容、提交、拉取请求以及其他被扫描的表面。

步骤 2

生成候选

正则模式识别可能的令牌、密钥和类凭据字符串。

步骤 3

分类

经过微调的 ModernBERT 评估候选 + 上下文,并给出其为真实密钥的可能性。

步骤 4

警报或抑制

高置信度的发现继续推进;可能的误报被过滤掉。

重要的设计选择在于,该模型并不取代确定性扫描,而是对其进行补充。正则仍然是快速查找候选字符串的正确工具。分类器则用于机器学习最能发挥杠杆作用的地方:区分“看起来像密钥”和“很可能是真实密钥”。

该分类器模型尽最大努力区分“看起来像密钥”和“很可能是真实密钥”。

困难负样本问题:几乎看起来像真的密钥

大多数误报并非随机产生。它们是困难负样本:匹配凭据模式但并非可用凭据的字符串。示例包括文档占位符、测试中的玩具示例、已脱敏的值、非敏感 ID 以及生成的夹具。这些案例对正则来说很容易匹配,而对纯基于规则的系统来说,要在不意外丢失真实密钥的情况下抑制它们则很难。

ModernBERT 之所以有帮助,是因为它可以将候选内容与附近的代码和文本一起读取,提供与 LLM 相当的情境理解能力,同时没有生成自然语言输出所带来的延迟和计算开销。例如,一个候选内容周围出现“example”“dummy”“fake”或“replace-me”等词时,其风险可能低于被分配到部署文件中的环境变量的候选内容。分类器从标注示例中学习这些上下文差异,而不需要工程师将每个例外都编码为另一条规则。

我们选择 ModernBERT 是因为它非常适合这一工作负载:它紧凑、高效,非常适合对代码相邻文本进行分类。对于密钥扫描,模型需要在短候选窗口上以高吞吐量和低延迟做出校准决策。

这使得微调的编码器分类器在流水线的这一阶段比通用 LLM 具有更好的服务形态。模型可以直接在我们的决策边界上训练,并使用对密钥扫描质量至关重要的相同召回率和精确率指标进行评估。

我们如何训练

挑战在于为仅凭语法就会产生误导的情况找到有代表性的数据。训练和评估策略结合了三个来源:

  • 来自 GitHub 仓库的产品衍生示例,使用密钥检测体验的反馈以及额外的人工验证。
  • 来自 GitHub 仓库数据的高召回率正则候选,包括人工标注示例和用于扩大覆盖范围的弱标签。
  • 针对稀疏和困难情况的合成示例,例如文档密钥、测试夹具、公钥、校验和、结构化相似项以及近似误配对。

合成行在纳入之前会通过确定性验证和基于模型的质量审查。训练侧重于真实密钥、现实中的误报,以及经常迷惑仅使用正则方法的困难负样本。每个模型输入都包含候选值、文件路径、密钥类型以及有限数量的周围上下文。我们通过离线评估选择阈值,然后在更广泛推广之前在生产类似流量上验证行为。

在拆分数据之前,我们按共享仓库、候选值或示例对行进行分组,这样近似重复项就不会同时出现在训练和评估中。

训练侧重于对告警质量最重要的案例:真实密钥、现实中的误报,以及正则经常匹配到的困难负样本。输入表示包括候选密钥字符串、文件路径、类型以及有限数量的周围上下文。输出是分类分数,供扫描器决定该候选是否应继续处理。

我们针对产品权衡进行了优化:在保持或提高召回率的同时减少误报和服务成本。在实践中,这意味着分类器阈值通过离线评估选择,然后在推广前针对生产类似流量进行验证。

最重要的训练原则是让模型看到那些令人困惑的示例。我们纳入了语法上类似真实密钥但语义不同的候选,这样模型不仅学习密钥看起来像什么,还学习误报在上下文中看起来像什么。

训练后的模型以 8 位量化导出为 ONNX 格式,从而实现快速推理。

评估结果

在线结果与之前 LLM 流水线的对比衡量指标
按仓库所有者加权的接受率 提高 11.5% 客户对检测结果的接受率 
推送后扫描执行时间中位数 降低 86% 生产环境扫描执行时间 
服务成本 降低超过 98% 紧凑分类器与远程 LLM 调用的成本对比 
针对我们微调模型与之前 LLM 流水线的客户 A/B 评估结果。

我们分两个阶段评估了新流水线在生产环境中的影响:首先在相同的公共流量上与生产基线对比,然后通过客户 A/B 实验进行验证。 

  • 离线评估:在推送后扫描中,当在相同的公共流量上评估时,新流水线相比之前的 LLM 流水线实现了精确率提高 13%、召回率提高 19%。 
  • 在线评估:随后我们通过针对之前 LLM 流水线的 A/B 实验,验证了这些质量改进是否转化为客户成果。按仓库所有者加权的接受率提高了 11.5%。我们按仓库所有者对接受率进行加权,以减少一次性批量解决大量告警的客户的影响,否则这可能会扭曲简单平均值。 

带走这些要点

最好的安全工具是开发者足够信任并愿意使用的工具。更高的精确率意味着更少分散注意力的告警。更高的召回率意味着捕获更多真实密钥。更低的成本意味着我们可以在不使扫描成本高得难以承受的情况下持续改进覆盖范围。

对于开发者和安全团队来说,这应转化为更少的误报,以及在最可能引入密钥的地方——提交、拉取请求和日常开发工作流中——获得更快的反馈。

混合系统很强大。正则表达式为我们提供速度、透明度和广泛的候选覆盖。ModernBERT 为我们提供学习到的上下文理解和误报减少。在此产品约束下,两者的结合优于单独使用任一方法。

我们还了解到,模型大小并不等同于模型有用性。当任务范围狭窄、决策边界可衡量且服务效率至关重要时,更小的微调分类器可能是正确答案。

这是朝着让密钥扫描更准确、更可扩展且更易用迈出的一步。展望未来,我们专注于两个领域:

  • 构建持续改进飞轮。我们将利用生产反馈循环来识别新的漏报和误报,将真实世界信号转化为更高质量的训练和评估数据。
  • 探索新的模型架构。我们正在研究能够一步完成密钥检测和提取的方法,在保持准确性和规模的同时降低流水线复杂性。

致谢

衷心感谢 GitHub 和 Microsoft 的工程、科学和产品团队,他们帮助构建了这个新密钥扫描器的训练数据、评估套件、服务栈和部署计划。

文章 GitHub 的密钥检测模型:以更少噪声发现更多密钥 首次发表于 The GitHub Blog。

来源:GitHub Blog · github.blog

来源:RadarAI · aihot.news