【AI】Agent 安全:Skill、Tool、MCP 与运行时权限

  • 背景:当前AI Agent已经很普及了,那么有一个关键地方在于如果使用外部第三方/非官方 Skill和工具,如何保证安全性------AI Agent 真正的安全边界是什么?

别再只防 Prompt Injection:AI Agent 真正危险的是"执行权"

过去讨论 AI Agent 安全,很多人的第一反应仍然是:

Prompt Injection(提示词注入)。

攻击者在网页、邮件、README、MCP Tool Description 里塞一段恶意指令,让模型忽略原来的任务,执行攻击者希望它执行的操作。

这当然是问题。

但当今天的 Agent 已经可以:读取与修改文件、执行 Shell终端命令

访问数据库、调用 SaaS API、连接 MCP Server、下载与加载第三方 Skill和工具、读取 Secret、访问互联网

只盯着 Prompt Injection显然不够。

安全边界都在哪

真正决定一次攻击最终能造成多大损失的,不只是模型会不会被骗? ,还有模型被骗以后,到底有权限做什么?

这才是 Agent 安全真正应该解决的问题。

Anthropic 在 2026 年讨论 Claude containment 时也把问题明确描述为控制 Agent 的 blast radius(爆炸半径 / 最大损害范围):模型层的防御是概率性的,而进程 Sandbox(沙箱)、文件系统边界、网络出口控制等环境级机制负责提供更硬的边界。

因此,一个更完整的 Agent 安全模型应该是:多重筛选、硬性兜底(即保证即使执行也没有大影响)

text 复制代码
                     ┌─ Static Scanner
Skill / MCP / Plugin ┤
                     └─ Semantic Scanner
                              ↓
                    Capability Extraction
                              ↓
                     Capability Manifest
                              ↓
                       Policy Engine
                              ↓
              ┌───────────────┼───────────────┐
              ↓               ↓               ↓
             FS            Network         Secrets
              ↓               ↓               ↓
                  Runtime Capability Gateway
                              ↓
                       Sandbox Runtime
                              ↓
                    Behavioral Monitor
                              ↓
                         OTel Trace
                              ↓
                    Signed Attestation

Agent 为什么比普通 Chatbot 危险?

  • 传统 Chatbot 模型即使被 Prompt Injection 攻击,很多时候最坏的结果仍然只是:输出错误内容、泄露上下文、违反用户意图
  • 但 Agent 不一样。LLM可以自主调用,尤其是给它mode模式权限很大。所以⚠️注意限制它的权限,权限决定即便两个模型被攻击成功的概率完全一样,它们的风险也完全不同。
  • Agent 风险估算
    compromise 在安全语境里不是"妥协",而是被攻破、被控制、失陷。P(Compromise)即系统被成功攻击 / Agent 被攻击者操控的概率

Risk≈P(Compromise)×BlastRadius \text{Risk} \approx P(\text{Compromise}) \times \text{BlastRadius} Risk≈P(Compromise)×BlastRadius

传统 Prompt 防御主要在降低第一项P(Compromise)P(\text{Compromise})P(Compromise),而 Runtime Security(运行时安全)主要是在压低 BlastRadius\text{BlastRadius}BlastRadius

  • Agent 越强,Sandbox 和权限模型反而越重要。

Anthropic 也明确指出,模型防御不可能单独承担全部安全责任;外部 Tool、文件、网络和 MCP(Model Context Protocol,模型上下文协议)内容既可能带来传统软件供应链风险,也可能成为 Prompt Injection 的输入渠道。


第一道防线:Static Scanner

  • 一个第三方 Skill 进入系统以后,第一件事情不是运行,而是进行开销小的静态扫描,检查:Shell 命令、文件系统访问、网络请求、代码执行、硬编码 Secret、可疑下载地址、依赖包、混淆代码、恶意 Payload、权限提升、系统配置修改
  • 现在已经有真实项目在做这件事。如 Cisco 的 skill-scanner 组合:
text 复制代码
YARA / Pattern
+
AST
+
Dataflow Analysis
+
LLM Semantic Analysis
+
Policy

其中 AST 是 Abstract Syntax Tree(抽象语法树) ,Dataflow Analysis 是数据流分析

不只是搜索固定危险字符串 如rm -rf/curl/eval,还试图理解数据流从哪来、怎么处理、到哪去,比如把secret发送到外部网络

  • Cisco 自己也明确强调,Scanner 只能提供 best-effort detection(尽力检测),没有发现问题并不等于 Skill 安全
    不是100%安全,还要进入下一层筛选。

第二道防线:Semantic Scanner

  • Agent Skill 说明**代码不是唯一的可执行逻辑。**因为 LLM 会解释自然语言,并可能执行它。即安全防范还需要理解自然语言意图

  • Snyk Agent Scan 目前已经直接扫描 MCP Server、Tool Description 和 Agent Skill,并检测包括 Prompt Injection、Tool Poisoning、恶意自然语言 Payload、Credential Handling 等风险。


  • 但是 Scanner 也不能保证拦截所有危险,因为存在:没发现问题 False Negative、被入侵的 Dependency、Remote MCP 更新、实时生成的指令、动态下载(执行中再下载恶意内容)、Zero-day(都还未定义的新漏洞)
  • 所以需要进入下一步安全拦截步骤

第三道防线:Capability Extraction+Capability Manifest

  • Capability 可以翻译为能力 / 权限能力。
  • Capability Extraction(能力提取):运行前提取该文件所需的最小权限并配置
  • Capability Manifest:让 Skill 主动声明自己需要什么,提取出来以后,最好形成一个标准 Manifest(清单)。例如:
yaml 复制代码
name: github-reviewer

filesystem:
  read:
    - "./src/**"
  write:
    - "./reports/**"

network:
  allow:
    - "api.github.com"

secrets:
  allow:
    - "GITHUB_TOKEN"

process:
  allow:
    - "git"

shell:
  enabled: false
  • 安全系统比较两个集合:Declared Capability和Actual Capability

理想状态必须满足Cactual⊆CallowedC_{\text{actual}} \subseteq C_{\text{allowed}}Cactual⊆Callowed

一旦运行请求权限>声明,Runtime 应该直接DENY拒绝。


第四道防线:Policy Engine

  • Manifest 不是权限,只是表示Skill 希望获得这个 Capability。
  • 真正决定是否批准的是:Policy Engine,给出的结果可以是DENY、ALLOW、REQUIRE HUMAN APPROVAL(ASK)
  • 如果进一步做企业级系统,还可能根据:用户身份、Skill 来源、环境、数据敏感级别、操作风险、时间、资源等,动态决定权限。

权限必须拆开颗粒度

  • Capability 的组合可能很危险,每个权限看起来都不起眼。
  • 所以安全系统应该至少把权限拆成不同 Domain:
text 复制代码
Filesystem
Network
Secrets
Process
Shell
Database
Cloud API
Browser
User Interaction
  • Snyk 现在也已经把类似风险作为组合问题处理:例如同时接触 private data、untrusted content 和 destructive capabilities 会显著放大攻击后果。

第五道防线:Runtime Capability Gateway:真正关键的一层

  • 执行阶段中实时拦截------Runtime Capability Gateway,所有敏感操作必须经过它。分别进入对应的Gateway,比如Filesystem/Network Gateway,再进行Policy Check/Egress Policy

第六道防线:Sandbox Runtime

  • 不要让不可信代码和宿主机站在同一个权限域:沙箱隔离。Sandbox 可以限制几乎所有细分权限
  • Prompt 层的"不要做坏事"和 OS(Operating System,操作系统)层的"你根本没有权限做"不是一个级别的安全保证。

Anthropic 对 Agent containment 的描述也是这个方向:Process Sandbox、VM(Virtual Machine,虚拟机)、Filesystem Boundary 和 Egress Control 用于给 Agent 建立硬边界。

  • Runtime Enforcement:Sandbox 还不等于全部,虽然Sandbox 给出了边界,但仍然需要 Runtime Enforcement。
  • 进一步细粒度拆分,如允许A还要细拆分为可读/可写/可发送数据到A/可接受来自A的数据,权限继续从资源层面拆分到操作层面

例如:

text 复制代码
GitHub:
  read_repository: allow
  create_issue: allow
  delete_repository: deny

Git:
  status: allow
  diff: allow
  push: ask
  • 结论:Capability Security比工具白名单更安全。

监控:Behavioral Monitor

  • 为什么需要:每一个单独操作可能都没有直接违反 Policy,但是整体行为明显异常。例如某 Skill 在一分钟内
text 复制代码
读取 8,000 个文件
访问 200 个域名
连续查询 Secret
启动 50 个进程
  • 观察:访问模式、调用频率、权限使用、网络目的地、数据流向、进程树、异常失败、策略拒绝,区分为正常/可以/截流/终止/人工确认

  • OpenTelemetry Trace:Trace(链路追踪),记录 Trace、Metric 和 Log;其中一个 Trace 由多个 Span 构成,每个 Span 表示一次具体操作。记录对应用户、对应Agent、对应Skill、执行明细、工具调用和相关数据、每个安全层给出的决定、文件系统使用明细、网络明细、异常日志。如
text 复制代码
Trace ID: xxx

14:03:21 skill loaded
14:03:22 requested GITHUB_TOKEN
14:03:22 policy allowed
14:03:24 POST api.github.com
14:03:26 repository deleted

可审计性完全不同。


区分 Trace 和 Attestation

  • 这是最后一个容易混淆的概念。

Trace 回答:

运行过程中发生了什么?

Attestation 回答:

你凭什么相信这个 Artifact / Skill / Scan Result 的来源和状态?

  • 因为安全层的决策也可以伪造
  • Attestation 需要读懂并记录skill、资源、版本、结果、Capability Manifest、来源,给出为什么是这个决定,生成Signed Attestation经过密码学签名的证明。Skill Registry 完全显示为:
text 复制代码
Skill: github-reviewer
Version: 1.4.2
Digest: sha256:xxxx

Source:
github.com/xxx

Scan:
Cisco Scanner 2.x
PASS

Capabilities:
FS: ./repo/**
Network: api.github.com
Secrets: GITHUB_TOKEN

Attestation:
✓ Signature valid
✓ Provenance valid
✓ Manifest verified

最终完整安全模型

每一层解决的问题完全不同:

回答的问题
Scanner 它看起来有没有危险?
Capability Extraction 它实际上想使用什么能力?
Manifest 它声明自己需要什么?
Policy Engine 我愿意给它什么?
Capability Gateway 所有敏感操作是否经过控制?
Sandbox 即使被攻陷,它最多能碰到什么?
Runtime Enforcement 它现在这个操作允许吗?
Behavioral Monitor 它整体行为是否异常?
Trace 它到底做过什么?
Attestation 我如何证明它是谁、从哪来、经过什么检查?

没有哪一层能够单独解决 Agent 安全。


真正应该改变的安全思维

真正成熟的安全模型应该假设:

text 复制代码
LLM 可能判断错误
Prompt Injection 可能成功
Skill 可能恶意
Dependency 可能失陷
Remote MCP 可能改变
Scanner 可能漏报

然后继续问:

即使这些全部发生,系统最多允许攻击者做到什么?

这才是 Runtime Security 真正解决的问题。

Agent Security=Least Privilege+Isolation+Enforcement+Observability+Verifiability\text{Agent Security}= \text{Least Privilege} + \text{Isolation} + \text{Enforcement} + \text{Observability} + \text{Verifiability} Agent Security=Least Privilege+Isolation+Enforcement+Observability+Verifiability

最小权限+隔离+强制执行+可观测性+可验证性

构建一个即使模型犯错、Skill 恶意、Prompt Injection 成功,也能够限制损害范围的系统。

相关推荐
Mr数据杨1 小时前
电信客户流失预测实战 从 Kaggle 二分类赛题到留存预警建模
人工智能·数据分析·kaggle竞赛
j7~1 小时前
【AI应用---白话大模型(篇九)】《一文看懂Agent:CLI 智能体、上下文窗口与大模型幻觉》---详解
人工智能·大模型幻觉·上下文窗口·cli智能体
爱学堂IT课程大全1 小时前
零基础,Hermes Agent 多场景自动化实战
运维·人工智能·自动化
维基框架1 小时前
PyTorch正在重构开源AI基础设施
人工智能·pytorch·重构
hfywmsj1 小时前
广州餐饮铺位招租决策模型:从流量评估到合同风控的技术拆解
大数据·人工智能·广州餐饮铺位招租
尘埃落定wf1 小时前
AGENTS.md 与 CLAUDE.md:如何为 AI 编程助手建立项目协作规范
人工智能·ai编程
阡陌数智1 小时前
LiteLLM 开源网关实践:能力边界与生产环境改造要点
大数据·人工智能·开源·prompt·软件工程
牧羊人.3331 小时前
动手学深度学习 04 | Dataset 和 DataLoader、数据增强
人工智能·pytorch·深度学习·算法
东方佑1 小时前
可微概率后缀超图:检索硬、聚合软 —— 与 ROSA 的对比及真实链路验证
人工智能