12.3 工具调用护栏

本节介绍在工具执行前对调用参数的多层检查机制,包括危险命令黑名单、约束护栏以及护栏框架的集成设计。

12.3.1 危险操作检测概览

工具调用护栏(Tool Calling Guardrails)是在执行工具前对调用参数进行检查,阻止明显危险的操作。护栏分为两类:

  1. 黑名单护栏:禁止已知危险的命令或参数

  2. 约束护栏:强制参数满足特定条件(如只读访问、路径限制等)

12.3.2 危险命令黑名单

Claude Code 的 dangerousPatterns.ts

Claude Code 包含多种危险命令的黑名单。这些命令单独使用或组合使用都可能造成严重后果(以下列举部分典型模式):

# 危险命令黑名单
DANGEROUS_PATTERNS = [
    "rm",           # 删除文件
    "dd",           # 低级磁盘操作
    "mkfs",         # 创建文件系统(格式化)
    "shred",        # 安全删除
    "sysctl",       # 修改内核参数
    "iptables",     # 防火墙规则修改
    "insmod",       # 加载内核模块
    "rmmod",        # 卸载内核模块
    "kill -9",      # 强制杀进程
    "reboot",       # 重启系统
    "shutdown",     # 关闭系统
    "chown",        # 修改文件所有者(权限提升)
    "chmod",        # 修改文件权限(权限提升)
    "sudo",         # 提升权限(if not in allowed_list)
    "passwd",       # 修改密码
    "useradd",      # 添加用户
    "userdel",      # 删除用户
    "groupadd",     # 添加组
    "crontab",      # 计划任务编辑(权限提升风险)
    "visudo",       # 编辑sudoers(权限提升风险)
    "at",           # 延迟任务执行(权限提升风险)
    "cryptsetup",   # 磁盘加密
    "gdisk",        # 分区表修改
    "mdadm",        # RAID配置
    "lvcreate",     # 逻辑卷创建
    "lvremove",     # 逻辑卷删除
    "zypper",       # 包管理器(权限提升风险)
    "apt",          # Debian包管理器
    "yum",          # RHEL包管理器
]

实现方式:命令AST分析

简单的前缀匹配(startswith)容易产生误报。更好的方式是解析命令为AST(抽象语法树),判断 执行的实际命令 而非参数中的字符串:

12.3.3 约束护栏

1. 只读约束

某些工具应限制为 只读操作,不允许修改系统状态:

2. 参数范围约束

某些参数应限制在特定范围内:

3. 超时强制

防止工具调用导致的资源耗尽:

12.3.4 护栏框架集成

将所有护栏整合为一个统一的框架:

12.3.5 护栏配置示例

护栏配置文件的完整示例:

12.3.6 新一代护栏模式

传统的输入/输出检查已不足以应对复杂攻击。2026 年出现了更全面的护栏架构:

Guardrail Sandwich 模式:将防护分为三层——输入清洗(剥离已知注入模式)→ 有界推理(工具白名单 + 步数限制 + 令牌预算)→ 输出验证(检查敏感信息泄露和格式合规)。这种“三明治”结构确保即使某一层被绕过,其他层仍能拦截。

执行流 Webhook 钩子:Arcade 提出的 Contextual Access 模式在工具执行流中插入三个 webhook 钩子——access(调用前权限检查)、pre-execution(参数验证和风险评估)、post-execution(结果审计和敏感信息过滤)。这种细粒度的控制使得安全策略可以根据工具类型和上下文动态调整。


本节总结:护栏通过多维度的检查(危险命令、约束、超时)在执行前阻止危险操作。框架设计应易于扩展和配置。下一节介绍最复杂的防护机制:路径校验。

最后更新于