当AI代理需要在机器上操作时,干净的路径是Model Context Protocol(MCP)。MCP服务器暴露一组定义好的工具,代理调用它们,你可以推断它被允许做什么,因为列表简短且有记录。然后代理需要一些没有连接器的东西,比如内部工单系统或自2012年以来无人触碰的业务应用,情况就变了。决心完成任务的代理会寻找另一扇门,而那扇门几乎总是命令行。
大多数关于MCP与CLI的在线讨论集中在令牌成本、OAuth和凭据处理上,这些都是合理的讨论点。很少有人问代理脱离MCP路径后,终端实际会运行什么,而这正是IT管理员最终需要负责的部分。
MCP vs CLI
这两种方法赋予代理非常不同的权限。使用 MCP 时,代理获得一份定义好的工具列表,除此之外没有其他权限。使用 CLI 时,代理控制一个 shell,而 shell 拥有登录用户的所有权限。下面介绍的新模式代码模式,在托管桌面上运行时表现得像该线路的 CLI 端,因为代理编写自己的程序,机器执行它。
MCP | CLI | Code mode |
|
|---|---|---|---|
|
What the agent gets |
A defined list of tools |
A shell |
A program it writes itself |
|
Whose rights apply |
The scope of the tool and its credentials |
The logged-in user |
The logged-in user |
|
Where to control it |
The MCP server or gateway |
The endpoint |
The endpoint, plus the sandbox if there is one |
这种差异解释了为什么开发人员喜欢CLI(它消耗的令牌少,代理熟悉git和docker等工具),以及为什么安全团队喜欢MCP(短列表更易审计,OAuth提供集中认证)。双方都有道理。双方都未解决的问题是,一旦agent运行了未经批准的操作,是什么阻止了它离开工具列表。
代理回退到CLI
假设开发人员要求代理从那个工单系统中提取数据。没有连接器,代理编写脚本,下载辅助二进制文件,并串联几个命令,但没有人批准,因为您的MCP治理从未看到过。代理完全离开了MCP世界。这就像一部抢劫电影,安全团队花了几个月守卫正门金库,而团队却从装卸区进入;这里的团队是善意的软件,装卸区同样敞开。
回退机制也很安静,因为MCP日志没有记录代理自行运行的PowerShell command。
使用MCP执行代码,将代理编写的代码放置在您的端点上
MCP 本身正在发生变化。代理不再一次调用一个工具并将每个结果传回模型,而是转向代码模式:代理编写一个小程序,调用 MCP 工具,过滤并组合返回的结果,然后运行整个程序。Anthropic 在其工程博客中描述了这一模式,其吸引力显而易见,因为一个脚本可以在不通过模型处理每个结果的情况下调用二十个工具。它节省了令牌并增强了代理能力,因此正在获得更多应用。
它还会将真实的、由代理编写的代码放置在您的端点上。使用 MCP 执行代码将控制问题从代理可以调用哪些工具转移到端点将运行哪些程序,而程序的可信度取决于编写它的人。一些设置会在沙箱中运行该代码,沙箱非常有帮助。然而,受管理的 Windows 或 Mac 桌面通常不是沙箱,如果机器执行它接收到的任何内容,您的批准工具列表只是一个建议,因为代理的代码可以像穿过 MCP 服务器一样轻松绕过它。
恶意 shell 或代理脚本在本地管理员权限下能做什么
损害取决于代理借用的是谁的权限。在本地管理员权限下,CLI回退拥有对机器的完全控制权,因此可以在不征求任何人同意的情况下安装软件或关闭保护。标准用户的代理仍然可以运行未经审核的可执行文件,这可能是由于自身错误,或者因为它读取的文档中隐藏了提示注入指示它执行。
在代码运行的位置强制执行限制
许多团队尝试通过系统提示、护栏和通俗易懂的政策来控制代理本身。这些有帮助,但它们存在于AI端,代理可能会被混淆或操纵。可靠的做法是在代码运行的地方强制执行限制,以确保无论代理尝试什么,结果都保持安全。终端是IT已经拥有的堆栈部分,也是 PolicyPak 发挥作用的地方。
PolicyPak如何处理MCP与CLI:最小权限和允许列表
PolicyPak从两个方向解决问题,第一个是最小权限。PolicyPak Least Privilege Manager 移除用户的本地管理员权限,仅授予 Windows 和 Mac 上特定应用和任务所需的管理员权限。以标准用户身份回退到 CLI 的代理无法安装驱动或篡改安全工具,您授予的例外仅限于您指定的应用。
第二个是允许列表。PolicyPak SecureRun基于文件所有权工作:标准用户或作为其代理引入的可执行文件,除非由受信任账户拥有(如您的软件部署工具或管理员),否则不会运行。这对代码模式很重要。当代理编写脚本或放置辅助二进制文件时,SecureRun不会信任该文件并将其阻止,这也是其作为一键勒索软件防护的原因。您获得了一个无需逐个哈希维护且无需移除现有工具的全面允许列表。
代理可以在存在连接器的任何地方继续使用MCP。如果没有连接器,CLI回退会在用户没有管理员权限的机器上运行,且代理刚写入的文件没有受信任的所有者,当MCP代码执行成为常态时,这种情况依然成立。
使用 Netwrix PolicyPak 删除本地管理员权限
免费试用MCP 与 CLI 常见问题
分享到
了解更多
关于作者
Jarosław Bogalecki
产品经理
Jarosław Bogalecki 是 Netwrix 的产品经理,负责 PolicyPak 和 Password Policy Enforcer。他自2019年以来一直从事技术岗位,热衷于产品策略、人工智能及围绕真实客户问题构建解决方案。在担任产品经理之前,他曾从事应用工程和技术咨询工作。