跳至主要内容

使用 Copilot 密钥扫描负责任地检测通用密钥

了解 Copilot 密钥扫描如何负责任地使用 AI 来扫描和创建非结构化密钥(例如密码)的警报。

谁可以使用此功能?

Copilot 密钥扫描适用于以下代码库

关于使用 Copilot 密钥扫描检测通用密钥

Copilot 密钥扫描的通用密钥检测是密钥扫描的 AI 增强功能,它可以识别源代码中的非结构化密钥(密码),然后生成警报。

GitHub 高级安全用户已经可以接收在其源代码中找到的合作伙伴或自定义模式的密钥扫描警报,但非结构化密钥不容易发现。Copilot 密钥扫描使用大型语言模型 (LLM) 来识别此类型的密钥。

检测到密码时,警报会显示在密钥扫描警报的“实验性”列表中(位于代码库、组织或企业的**安全**选项卡下),以便维护者和安全管理员可以查看警报,并在必要时删除凭据或实施修复。

要使用通用密钥检测,企业所有者必须首先在企业级别设置策略,以控制组织中代码库的功能是否可以启用和禁用。此策略默认设置为“允许”。然后必须为代码库和组织启用此功能。

输入处理

输入限于用户已检入代码库的文本(通常是代码)。系统将此文本提供给 LLM,并附带一个元提示,要求 LLM 在输入范围内查找密码。用户不会直接与 LLM 交互。

系统使用 LLM 扫描密码。除了现有密钥扫描功能已收集的内容外,系统不会收集任何其他数据。

输出和显示

LLM 扫描类似于密码的字符串,并验证响应中包含的已识别字符串实际上是否存在于输入中。

这些检测到的字符串会作为警报显示在密钥扫描警报页面上,但它们会显示在与常规密钥扫描警报分开的其他列表中。目的是对这个单独的列表进行更严格的分类,以验证结果的有效性。每个警报都会指出它是使用 AI 检测到的。

提高通用密钥检测的性能

为了提高通用密钥检测的性能,我们建议适当地关闭误报警报。

验证警报的准确性并根据需要关闭

由于 Copilot 密钥扫描的通用密钥检测可能会生成比现有合作伙伴模式密钥扫描功能更多的误报,因此您必须检查这些警报的准确性。当您验证警报为误报时,请确保关闭警报并在 GitHub UI 中将原因标记为“误报”。GitHub 开发团队将使用有关误报量和检测位置的信息来改进模型。GitHub 无法访问密钥文字本身。

通用密钥检测的局限性

使用 Copilot 密钥扫描的通用密钥检测时,您应考虑以下限制。

范围有限

通用密钥检测目前仅查找 git 内容中的密码实例。此功能不查找其他类型的通用密钥,也不查找非 git 内容(例如 GitHub Issues)中的密钥。

可能出现误报警报

与现有密钥扫描功能(检测合作伙伴模式且误报率非常低)相比,通用密钥检测可能会生成更多误报警报。为了减少这种过多的噪音,警报与合作伙伴模式警报分组在一个单独的列表中,安全管理员和维护者应对每个警报进行分类以验证其准确性。

可能出现不完整的报告

通用密钥检测可能会错过已检入存储库的凭据实例。LLM 将随着时间推移而改进。您仍需对确保代码安全负最终责任。

设计上的局限性

通用密钥检测在设计上具有以下局限性:

  • Copilot 密钥扫描不会检测明显虚假或测试密码,或熵低的密码。
  • Copilot 密钥扫描每次推送最多只能检测 100 个密码。
  • 如果单个文件中五个或更多检测到的密钥被标记为误报,Copilot 密钥扫描将停止为此文件生成新的警报。
  • Copilot 密钥扫描不会检测生成的或供应商提供的文件中的密钥。
  • Copilot 密钥扫描不会检测加密文件中的密钥。
  • Copilot 密钥扫描不会检测以下文件类型中的密钥:SVG、PNG、JPEG、CSV、TXT、SQL 或 ITEM。
  • Copilot 密钥扫描不会检测测试代码中的密钥。Copilot 密钥扫描会跳过检测,其中:
    • 文件路径包含“test”、“mock”或“spec”。
    • 文件扩展名为.cs.go.java.js.kt.php.py.rb.scala.swift.ts

通用密钥检测的评估

通用密钥检测已接受负责任的 AI 红队测试,GitHub 将继续监控该功能的有效性和安全性。

进一步阅读