GitHub智能体安全原则:构建最安全的AI代理

本文详细介绍了GitHub如何通过可解释性最大化、自主性最小化和异常行为减少等原则,构建安全的AI代理系统,包括数据防泄露、权限控制和防提示注入等关键技术措施。

安全顾虑

在开发智能体功能时,我们主要关注三类风险:

数据泄露

当智能体具有互联网访问权限时,可能会将上下文中的数据泄露到非预期目的地。智能体可能被欺骗将当前仓库中的数据发送到非预期网站,无论是无意还是恶意行为。根据数据敏感度,这可能导致严重安全事件,例如智能体将GitHub写入权限令牌泄露给恶意端点。

冒充和正确行动归属

提示注入

智能体产品规则

为帮助预防上述风险,我们为所有托管的智能体产品创建了一套规则,使其对用户更加一致和安全。

确保所有上下文可见

为防止这种情况,我们显示生成上下文的文件,并在传递给智能体前尝试通过Unicode或HTML标签移除任何不可见或隐藏信息。这确保只有维护者清楚可见的信息传递给智能体。

为智能体设置防火墙

如前所述,无限制访问外部资源可能让智能体泄露敏感信息,或被外部资源提示注入而失去对齐。

我们对Copilot编码智能体应用防火墙,限制其访问可能有害的外部资源。这允许用户配置智能体的网络访问并阻止任何不需要的连接。为平衡安全性和可用性,我们自动允许MCP交互绕过防火墙。

在我们其他智能体体验(如Copilot Chat)中,我们不自动执行代码。例如生成HTML时,输出最初以代码形式呈现供预览。用户必须手动启用富预览界面,该界面才会执行HTML。

限制敏感信息访问

防止智能体泄露敏感数据的最简单方法是…首先不给它访问权限!

我们只给Copilot提供其功能绝对必要的信息。这意味着CI密钥和当前仓库外的文件不会自动传递给智能体。特定敏感内容(如Copilot编码智能体的GitHub令牌)在智能体完成会话后会被撤销。

防止不可逆状态更改

AI可能且将会犯错。为防止这些错误产生无法修复的下游影响,我们确保没有人在回路中时,智能体无法启动任何不可逆状态更改。

例如,Copilot编码智能体只能创建拉取请求;不能直接提交到默认分支。Copilot创建的拉取请求不会自动运行CI;人类用户必须验证代码并手动运行GitHub Actions。在我们的Copilot Chat功能中,MCP交互在进行任何工具调用前会请求批准。

一致地将行动归属于发起者和智能体

用户发起的任何智能体交互都明确归属于该用户,智能体采取的任何行动都明确归属于智能体。这确保任何行动都有明确的责任链。

例如,Copilot编码智能体创建的拉取请求由发起行动的用户共同提交。拉取请求使用Copilot身份生成,以明确表明它们是AI生成的。

仅从授权用户收集上下文

我们确保智能体仅从授权用户收集上下文。这意味着智能体必须始终在发起交互的用户授予的权限和上下文下操作。

立即试用

我们构建的智能体安全原则适用于任何新的AI产品;它们设计用于从代码生成智能体到聊天功能的所有场景。虽然这些设计决策对最终用户应该是无形且直观的,但我们希望这能使我们的产品决策更加清晰,以便您可以继续自信地使用GitHub Copilot。有关这些安全功能的更多信息,请查看Copilot编码智能体的公开文档。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计