零信任架构 · 权限最小化 · 沙箱隔离 · 供应链安全 · 10个攻防案例
"世界上有一种错觉叫做'我只是个小Agent,没人会攻击我'。就像周星驰电影《功夫》里的包租婆,以为自己只是个开旅馆的,结果半栋楼都被打没了。"
2026年,Agent攻击事件同比增长了340%!你的Agent可能已经被盯上了——从MCP供应链攻击到TOCTOU竞态条件,从提示注入到会话劫持。
零信任的核心:不信任何人,验证每一次请求。
每个Agent只拥有完成任务所需的最小权限集。不多也不少。
每一次Tool调用、每次Skill访问都要重新验证,不信任缓存。
每个Skill在独立的沙箱中运行,互不干扰。
所有操作都被记录,任何异常都能追溯到源头。
// zero-trust-config.yaml - 零信任配置
security:
zero_trust:
enabled: true
# 最小权限
permissions:
tool_scope: "per-request" # 每次请求独立授权
skill_isolation: true # Skill沙箱隔离
network_access: "explicit" # 明确的网络访问白名单
# 持续验证
authentication:
mode: "per_request" # 每次请求都验证
token_rotation: "15m" # 令牌每15分钟轮换
max_session_age: "1h" # 会话最大时长
# 沙箱
sandbox:
type: "container" # 容器级别隔离
readonly_root: true # 根文件系统只读
temp_dir: "/tmp/sandbox" # 独立的临时目录
memory_limit: "256MB" # 内存限制
cpu_limit: 0.5 # CPU限制
# 审计
audit:
log_all: true # 记录所有操作
alert_on: ["unauthorized", "suspicious_pattern"]
retention_days: 90
攻击方式:攻击者在用户输入中嵌入恶意指令,让Agent执行未授权操作。
// ❌ 脆弱代码
async function handleUserRequest(userInput) {
// 直接使用用户输入作为System Prompt
const response = await callLLM(userInput); // 危险!
return response;
}
// ✅ 安全代码
async function handleUserRequest(userInput) {
// 严格的输入验证和隔离
const sanitizedInput = sanitizeAndValidate(userInput, {
maxLength: 1000,
allowedPattern: /^[\w\s.,!?;,。!?]+$/,
blockPromptInjection: true
});
const response = await callLLM(`
System: 你是一个安全Agent,只回答工具相关问题。
User: ${sanitizedInput}
`, {
// 限制Agent的能力范围
allowedTools: ['tool_search', 'skill_info'],
maxTokens: 200
});
return {
input: sanitizedInput,
output: response,
auditLog: { timestamp, input, action: 'handle_request' }
};
}
攻击方式:在权限检查之后、实际使用之前的间隙,修改目标文件或状态。
// ❌ 脆弱代码(TOCTOU)
async function deleteFile(filePath) {
const permissions = await checkPermissions(filePath);
if (!permissions.canDelete) {
throw new Error('No permission');
}
// ❌ 这里有时间窗口!文件路径可能在check之后被替换!
await fs.unlink(filePath);
}
// ✅ 安全代码(原子操作)
async function deleteFile(filePath) {
// 使用原子操作,检查和执行在同一事务中
await atomicDelete({
path: filePath,
// 打开时验证权限,然后保持文件句柄
openFlags: O_RDONLY,
validateOnOpen: true,
// 验证通过后才执行删除
action: 'unlink'
});
}
| # | 攻击类型 | 防御策略 |
|---|---|---|
| 3 | MCP服务器凭证窃取 | 使用ClawHub安全扫描,验证服务器签名 |
| 4 | Skill链权限溢出 | 每个Skill独立沙箱,限制链深度 ≤ 5 |
| 5 | 文件系统穿越 | 路径规范化,禁止 .. 跳转 |
| 6 | 会话令牌窃取 | 令牌15分钟轮换,双向绑定 |
| 7 | 拒绝服务(DoS) | 速率限制 + 请求配额 |
| 8 | 供应链包替换 | 安装包哈希校验,锁定版本 |
| 9 | 数据投毒 | 输入验证 + 异常检测 |
| 10 | Agent间通信拦截 | A2A加密传输,证书验证 |
ClawHub的30+ Skills中,有多少是安全的?
// supply-chain-security.yaml - 供应链安全配置
supply_chain:
# ClawHub安装验证
clawhub:
require_security_scan: true
min_rating: 4.0
verify_publisher: true
# 依赖锁定
dependencies:
lock_file: true
hash_verify: true
auto_update: false # 手动更新,避免恶意版本
# 安全扫描
scanning:
enabled: true
tools: ["clawhub-scan", "npm-audit", "snyk"]
schedule: "daily"
on_failure: "block" # 发现漏洞立即阻止安装
"凌晨4点37分,我看着安全日志里第103次被拦截的攻击。每一行日志都在诉说着同一个故事——安全不是一次性的工程,而是持久的战争。
就像王家卫电影里的武林高手,功力再高也不能掉以轻心。就像周星驰的《少林足球》——功夫再高,也怕菜刀;Agent再强,也要防脏。"