Skip to main content
Skip to content

用于拉取请求的 AI 扫描

AI 扫描使用基于 AI 的扫描引擎来查找拉取请求中未涵盖 CodeQL的语言和框架的安全漏洞。

注意

AI 扫描目前处于 公开预览 阶段,后续可能会有所变动。

AI 扫描使用基于 AI 的扫描引擎生成额外的安全结果,该引擎对拉取请求运行,并对 CodeQL 形成补充。 与警报不同 CodeQL ,AI 扫描发现仅适用于拉取请求,不会在存储库的安全视图中显示为积压工作警报。

虽然 CodeQL 为一组支持的语言和查询提供高精度静态分析,但许多存储库使用不涵盖的语言和框架 CodeQL 。 AI 扫描将覆盖范围扩展到 code scanning 这些领域,帮助你在不添加新工具或配置的情况下找到漏洞。

在 公开预览 期间,AI 扫描需要 GitHub Advanced Security 许可证和 GitHub Copilot 许可证。

使用会消耗 AI credits。 请参阅“组织和企业的基于使用情况的计费”。

AI 扫描的工作原理

当为存储库启用 code scanning、该存储库的生效 AI Scan 设置已启用,且符合条件的拉取请求包含使用受支持的语言或框架所做、但不在 CodeQL 覆盖范围内的符合条件的更改时,AI Scan 会自动运行。 这些条件还确定 AI 扫描使用情况何时开始。 扫描会在创建拉取请求时触发,并在每次有新提交后触发,与 CodeQL 相同。

AI 扫描不需要 CodeQL 默认设置,也不依赖于分析状态 CodeQL 。 如果 CodeQL 分析失败或处于等待状态,AI 扫描仍将运行。

AI 扫描结果仅供参考,不会阻止拉取请求合并。 它们提供有关代码安全性在不中断工作流的情况下可以改进的位置的信号。

AI 扫描引擎直接处理拉取请求中的代码,无需构建系统。 它使用代码搜索等工具在决定是否标记问题时从存储库收集其他上下文。 它使用自己的专用提示,不使用自定义指令文件,例如 /.github/copilot-instructions.md/CLAUDE.md

结果会在被发现后立即发布到拉取请求中。 如果 CodeQL 扫描需要更长时间才能完成,你可能会在 CodeQL 结果出现之前先看到 AI 扫描发现,反之亦然。

AI 扫描结果如何在拉取请求中显示

AI 扫描结果与 **** 警报一起显示在拉取请求的 “对话” 和 CodeQL 选项卡上。 每个发现都标有一个“AI”指示器,以便你可以将其与 CodeQL 警报区分开来。

每个发现都包括安全问题的说明和风险的说明。 大多数发现还包括建议的修正,但并不是每个发现都有一个。 如果有可用的建议修复方案,则会包含 Copilot Autofix,并由其提供推荐的代码更改以修复该问题,与它对 CodeQL 警报的处理方式相同。 发现结果还包括一种向上/向下反馈机制,有助于随时间推移提高检测质量。

Limitations

  • AI Scan 仅分析拉取请求。 不支持完整存储库扫描。
  • AI 扫描发现尚不能用于规则集来强制实施合并要求。
  • AI 扫描不会在来自派生仓库的拉取请求或由 Dependabot 创建的拉取请求上运行。
  • 随着功能的发展,检测类别和支持的语言可能会发生变化。
  • 与任何基于 AI 的工具一样,AI 扫描结果也可能会出现误报。 使用反馈机制报告不准确的结果。

支持的语言

AI 扫描旨在涵盖当前 CodeQL不支持的语言和框架。 这包括但不限于 PHP、Shell/Bash、Terraform 配置(HCL)和 Dockerfile 等语言,以及框架覆盖空白,例如用于 Java 的 JSP 和用于 C# 的 Blazor。

有关支持 CodeQL的语言的完整列表,请参阅 使用 CodeQL 扫描代码

检测类别

AI 扫描目前涵盖以下类别。 这些类别描述如何对发现进行分类。 随着模型改进,扫描引擎可能会随着时间推移而演变。

  • 字符串注入 — 不安全的字符串拼接生成的 SQL、HTML、Shell、JSON 或 YAML,存在缺失或不正确的转义或清理。
  • 弱加密 - 弱 算法、小密钥、不安全随机性、缺失加密或弱密码哈希。
  • 中断的访问控制 - 路径遍历、CSRF 间隙或用户驱动的开放重定向。
  • 敏感数据泄露 - 机密、令牌、密码或堆栈跟踪存储、记录或发送,且没有充分保护。
  • 安全配置错误 - 有风险的默认值或设置,例如禁用安全控制或启用调试功能。
  • 身份验证失败 - 缺少 TLS 或验证、不安全的身份验证流或缺少速率限制。
  • 数据完整性失败 — 不安全的反序列化、对敏感操作使用 HTTP、原型污染,或执行不可信内容。
  • 服务器端请求伪造 (SSRF) - 服务器提取攻击者控制的 URL、主机或协议。
  • 供应链风险 — 未固定的第三方操作、包或映像,或者未进行完整性检查的下载内容。

启用 AI 扫描

默认情况下,不允许在企业级别进行 AI 扫描,并在组织和存储库级别禁用。 企业所有者必须先允许 AI 扫描,组织管理员才能启用 AI 扫描。 为组织启用 AI 扫描后,会将其应用到已启用 code scanning 的符合条件的仓库。 存储库管理员可以选择退出单个存储库。 对于个人帐户拥有的符合条件的公共存储库,存储库管理员必须直接为存储库启用 AI 扫描。

无需选择模型来启用 AI 扫描。

  • 企业:“代码安全性”下的 AI 扫描 策略控制组织是否可以启用该功能。 请参阅“强制实施企业的代码安全性和分析策略”。
  • 组织:在“代码扫描”下,AI Scan 设置会为已启用 code scanning 的组织中的符合条件仓库启用 AI Scan。 请参阅“配置组织的全局安全设置”。
  • 存储库:对于组织拥有的存储库,“代码扫描”下的 AI 扫描 切换允许存储库管理员在为组织启用 AI 扫描时选择退出。 对于个人帐户拥有的合格公共存储库,该开关直接启用或禁用 AI 扫描。

可以使用 REST API 管理组织或存储库 ai-scan 设置。 请参阅“适用于代码扫描的 REST API 终结点”。