Skip to main content

GitHub Copilot 编码代理的风险和缓解措施

Copilot编程助理的内置安全防护如何缓解已知风险?

Copilot编程助理 是一个自主智能体,有权访问代码并可将更改推送到存储库。 这会带来一些风险。

如果可能,GitHub 已应用适当的缓解措施。 这为 数据变量.copilot.copilot_coding_agent %} 提供了一个强大的内置安全保护基础,你可以遵循最佳实践指南进行补充。

未经验证的代码可能会引入漏洞

默认情况下,Copilot编程助理 会检查其生成的代码是否存在安全问题,并使用 Copilot代码审查 来获取其代码的第二意见。 它尝试解决在完成拉取请求之前识别的问题。 这提高了代码质量,并降低了 Copilot编程助理 生成的代码引入硬编码机密、不安全依赖项和其他漏洞等问题的可能性。 Copilot编程助理 的安全验证不需要 GitHub Secret Protection, GitHub Code Security, or GitHub Advanced Security 许可证。

  •         **CodeQL** 用于标识代码安全问题。
    
  • 新引入的依赖项会根据 GitHub Advisory Database 检查是否存在恶意软件公告以及任何 CVSS 评级为高或严重的漏洞。
  •           **Secret scanning** 用于检测敏感信息,例如 API 密钥、令牌和其他机密。
    
  • 会话日志中可查看 Copilot编程助理 执行的分析和采取的操作的详细信息。 请参阅“跟踪GitHub Copilot 的会话”。

(可选)你可以禁用 Copilot编程助理 使用的一个或多个代码质量和安全验证工具。 请参阅“配置 GitHub Copilot 编码代理的设置”。

Copilot编程助理 可以将代码更改推送到存储库

若要缓解此风险,GitHub:

  •         **限制可以触发代理的人员。** 只有对存储库具有写入权限的用户才能触发 Copilot编程助理 工作。 从不向代理显示没有写入权限的用户注释。
    
  •         **限制代理可以推送到的分支。** Copilot编程助理 仅具备推送到单个分支的能力。 当智能体通过在现有拉取请求上提及 `@copilot` 触发时,Copilot 对拉取请求的分支具有写入权限。 在其他情况下,会为 Copilot 创建新的 `copilot/` 分支,智能体只能推送到该分支。 智能体还受到任何分支保护和工作存储库所需检查的约束。
    
  •         **限制代理的凭据。** Copilot编程助理 只能执行简单的推送操作。 它无法直接运行 `git push` 或其他 Git 命令。
    
  •         **在合并之前需要人工审查。** 由 Copilot编程助理 创建的拉取请求草稿必须由人审核和合并。 Copilot编程助理 无法将其拉取请求标记为“准备审核”,也无法批准或合并拉取请求。
    
  •         **限制 GitHub Actions 工作流运行。** 默认情况下,只有在 Copilot编程助理 的代码经过审核,并且具有存储库写入权限的用户单击**批准并运行工作流**按钮后,才会触发工作流。 (可选)你可以将 Copilot 配置为允许工作流自动运行。 请参阅“[AUTOTITLE](/copilot/how-tos/use-copilot-agents/coding-agent/review-copilot-prs#managing-github-actions-workflow-runs)”。
    
  •           **防止要求 Copilot编程助理 创建拉取请求的用户批准该请求。** 这维持了“必需审批”规则和分支保护中的预期控制。 请参阅“[AUTOTITLE](/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/available-rules-for-rulesets)”。
    

Copilot编程助理 有权访问敏感信息

Copilot编程助理 可以访问代码和其他敏感信息,可能会因意外或恶意用户输入而泄露这些信息。

为了缓解此风险,GitHub 限制 Copilot编程助理 对互联网的访问。 请参阅“为 GitHub Copilot 编码代理自定义或禁用防火墙”。

AI 提示可能容易受到注入攻击

用户可以在分配给 Copilot编程助理 的问题或留给 Copilot编程助理 的评论中包含隐藏消息,作为提示注入的一种形式。

为了减轻此风险,GitHub 会在将用户输入传递到 Copilot编程助理 之前过滤掉隐藏字符,例如,作为 HTML 注释输入的问题或拉取请求的评论不会传递到 Copilot编程助理。

管理员可以忘记代理的工作

为了缓解这一风险,数据变量.copilot.copilot_coding_agent %} 被设计成可审核和可跟踪。

  • Copilot编程助理 的提交由 Copilot 创作,分配问题或请求更改拉取请求的开发人员标记为共同作者。 这使得更容易识别由 Copilot编程助理 生成的代码以及启动任务的人员。
  • 会话日志和审核日志事件可供管理员使用。
  • 每个由代理程序创建的提交消息都包含一个指向代理程序会话日志的链接,用于代码审查和审核。 请参阅“跟踪GitHub Copilot 的会话”。