Skip to main content

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

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

关于使用 Copilot 机密扫描 进行 通用机密检测

Copilot 机密扫描 的 通用机密检测 是 AI 支持的 secret scanning 扩展,用于标识源代码中的非结构化机密(密码),然后生成警报。

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

当检测到密码时,警报会在 secret scanning 警报的“试验”列表中显示(位于存储库、组织或企业的“安全”选项卡下),以便维护人员和安全经理可以查看该警报,并在必要时移除凭据或实施修复。

若要使用 通用机密检测,企业所有者必须先在企业级别设置一个策略,以控制组织中的存储库是否可以启用或禁用 AI 检测。 默认情况下,此策略设置为“允许”。 然后,必须为存储库和组织启用该功能。

输入处理

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

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

输出和显示

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

这些检测到的字符串在 secret scanning 警报页上显示为警报,但其显示在与常规 机密扫描警报 分开的其他列表中。 这样做的目的是对此单独的列表进行更严格的审查,以核实调查结果的有效性。 每个警报都注明是使用 AI 检测到的。

提高 通用机密检测 的性能

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

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

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

通用机密检测 的限制

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

作用域受限

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

潜在的误报警报

与现有的 secret scanning 功能(检测合作伙伴模式且误报率非常低)相比,通用机密检测 可能会生成更多误报警报。 为了减轻这种过多的噪音,警报将分组到与合作伙伴模式警报不同的列表中,安全经理和维护人员应该对每条警报进行分类以验证其准确度。

报告可能不完整

通用机密检测 可能会遗漏签入存储库的凭据实例。 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 Red Teaming 约束,GitHub 将继续监视该功能的长期有效性和安全性。

延伸阅读