针对拉取请求的 AI 扫描使用基于 AI 的扫描引擎生成额外的安全发现,该引擎在拉取请求上运行并可补充 CodeQL。
AI 扫描扩展了拉取请求的覆盖范围,而无需单独的扫描工具或构建配置。
针对拉取请求的 AI 扫描是在**** 设置中归类于GitHub下的独立控制功能之一。 请参阅“关于 AI 扫描”。
Availability
可用性取决于谁拥有存储库及其可见性。
| 存储库所有者 | Visibility | 可用情况和要求 |
|---|---|---|
| 组织 | Public | 在没有 active-committer 许可证的情况下可用 |
| 组织 | 专用或内部 | 可用于 GitHub Code Security 或 GitHub Advanced Security |
| 个人账户 | Public | 可用的 |
| 个人账户 | 私密 | 不可用 |
即使该存储库已启用 托管用户帐户,位于 code scanning 的个人命名空间中的存储库也不支持拉取请求的 AI 扫描。
您无需GitHub Copilot许可证即可使用 AI Scan。
Billing
AI 扫描使用情况独立于主动提交者许可,并在 Code SecurityAI creditss SKU 下报告。 仅当扫描符合条件的拉取请求时,使用情况才会开始。
对于组织拥有的存储库,使用情况将计费给负责组织计费的帐户。
对于个人帐户拥有的公共存储库,除非存储库所有者具有 GitHub Copilot 组织或企业提供的许可证,否则使用情况将计入该个人帐户。 在这种情况下,使用费用将计入提供许可证的组织或企业。
如果计费帐户通过 AI credits 权益获得包含的 GitHub Copilot,AI 扫描将首先使用这些额度。 在包含额度用尽后,或者如果帐户没有包含额度,则按用量计费并受适用预算的约束。 如果硬性预算限制导致没有 Code SecurityAI credits 额度可用,AI 扫描无法生成发现。 当管理员增加限制预算或新的计费周期开始时,扫描将恢复。
有关计费模型的详细信息,请参阅 GitHub Advanced Security 许可证计费。
AI 扫描的工作原理
满足以下所有条件时,AI 扫描会自动运行:
- 已为该存储库启用 Code scanning。
- 已启用存储库的“拉取请求上的 AI 扫描”设置。
- 不是来自 fork 或由 Dependabot 创建的拉取请求,包含受支持的语言或框架中 CodeQL 未涵盖的更改。
扫描会在创建拉取请求时以及每次有新提交后运行,对 CodeQL 也是如此。
AI 扫描不需要 CodeQL 默认设置,也不依赖于分析状态 CodeQL 。 如果 CodeQL 分析失败或处于等待状态,AI 扫描仍将运行。
结果会在被发现后立即发布到拉取请求中。 如果 CodeQL 扫描需要更长时间才能完成,你可能会在 CodeQL 结果出现之前先看到 AI 扫描发现,反之亦然。
调查结果仅供参考。 它们不会失败 Code scanning 检查,并且无法通过规则集要求阻止拉取请求合并。 它们提供有关代码安全性在不中断工作流的情况下可以改进的位置的信号。
扫描引擎无需构建系统即可分析拉取请求代码,并可以使用代码搜索从存储库收集更多上下文,然后再标记问题。 它使用专用提示,而不是自定义指令文件,例如 /.github/copilot-instructions.md 或 /CLAUDE.md。
AI 扫描结果如何在拉取请求中显示
AI 扫描结果与 **** 警报一起显示在拉取请求的 “对话” 和 CodeQL 选项卡上。 每个发现都标有一个“AI”指示器,以便你可以将其与 CodeQL 警报区分开来。
每个发现都会描述安全问题并解释风险。 大多数发现项还包括建议的修复措施。 如果可用,Copilot Autofix建议更改代码,就像对CodeQL警报所做的那样。
可以使用点赞按钮或点踩按钮来提供反馈并帮助提高检测质量。
Limitations
- AI 扫描发现尚不能用于规则集来强制实施合并要求。
- AI 扫描不会在来自派生仓库的拉取请求或由 Dependabot 创建的拉取请求上运行。
- 随着功能的发展,检测类别和支持的语言可能会发生变化。
- 与任何基于 AI 的工具一样,AI 扫描结果也可能会出现误报。 使用反馈机制报告不准确的结果。
支持的语言
拉取请求上的 AI 扫描支持 CodeQL 当前未涵盖的所选语言和框架。 示例包括 PHP、Shell/Bash、Terraform 配置(HCL)、Dockerfiles、JSP for Java,以及适用于 C# 的 Blazor。
若要检查是否 CodeQL 支持某个语言,请参阅 使用 CodeQL 扫描代码。
检测类别
AI 扫描当前将发现分为以下类别。 随着功能的发展,覆盖范围可能会发生变化。
- 字符串注入 — 不安全的字符串拼接生成的 SQL、HTML、Shell、JSON 或 YAML,存在缺失或不正确的转义或清理。
- 弱加密 - 弱 算法、小密钥、不安全随机性、缺失加密或弱密码哈希。
- 中断的访问控制 - 路径遍历、CSRF 间隙或用户驱动的开放重定向。
- 敏感数据泄露 - 机密、令牌、密码或堆栈跟踪存储、记录或发送,且没有充分保护。
- 安全配置错误 - 有风险的默认值或设置,例如禁用安全控制或启用调试功能。
- 身份验证失败 - 缺少 TLS 或验证、不安全的身份验证流或缺少速率限制。
- 数据完整性失败 — 不安全的反序列化、对敏感操作使用 HTTP、原型污染,或执行不可信内容。
- 服务器端请求伪造 (SSRF) - 服务器提取攻击者控制的 URL、主机或协议。
- 供应链风险 — 未固定的第三方操作、包或映像,或者未进行完整性检查的下载内容。
启用 AI 扫描
针对拉取请求和 AI applications scanning 的 AI 扫描,是 AI 扫描下的两个独立功能。 AI applications scanning 拥有自己的 AI 应用程序扫描 控制项,并检测 AI 应用程序和代理中的间接提示注入等风险。 启用任一功能不会启用另一项功能。 有关 AI applications scanning 的详细信息,请参阅 扫描拉取请求的 AI 应用程序。
在对组织的拉取请求启用 AI 扫描之前,请确认存储库资格、查看计费帐户包含的 AI credits,以及配置按流量计费的预算。
启用组织设置后,会立即为所有已启用 code scanning 的符合条件的存储库启用 AI 扫描。 然后,存储库管理员可以选择退出,但符合条件的拉取请求可以在管理员退出之前使用 Code Security AI 信用额度。
无需选择模型来启用 AI 扫描。
- 企业:企业所有者可以允许或阻止组织启用 AI 扫描。 默认情况下,策略设置为“不允许”。 此策略控制对 PR 的 AI 扫描和对存储库积压项的 AI 扫描。 允许 AI 扫描并不会自动启用它。 请参阅“强制实施企业的代码安全性和分析策略”。
- 组织:组织所有者和安全经理可以为符合条件的存储库启用针对拉取请求的 AI 扫描。 存储库继承组织设置。 请参阅“配置组织的全局安全设置”。
- 组织拥有的存储库:当组织启用了 AI 扫描时,具有存储库管理员访问权限的人员可以选择退出。 当组织设置被禁用时,他们无法选择加入。
- 个人帐户拥有的公共存储库:对存储库具有管理员访问权限的人员可通过“****”下的 Code scanning 开关直接启用或禁用 AI 扫描。
组织所有者和安全经理可以在安全概述的“覆盖”视图中查看 AI 扫描针对拉取请求的有效启用状态。 请参阅“评估安全功能的采用”。
有权访问安全概述的人员还可以监视整个组织或企业中的 AI 扫描发现:
- 概述仪表板上的“预防”选项卡显示 AI 扫描发现的趋势、已解决的发现数以及开发人员接受 Copilot Autofix 建议的频率。
- “拉取请求的代码扫描”报告中的 “AI 扫描”选项卡显示一段时间内的发现结果、Copilot Autofix 建议的可用性,以及有无建议的发现结果及其处理结果。
有关详细信息,请参阅“拉取请求的代码扫描”。
可以使用 REST API 管理组织或存储库 ai-scan 设置。 请参阅“适用于代码扫描的 REST API 终结点”。