个人安全护栏手册(AGI 项目 Round 3)¶
【统一 header】截至 2026-09-21|海外生态数字;国内分支见各附录相应声明。 本文件为最终交付物四附录之一(统一编号交叉引用):附录 A=生活场景玩法与红线(APPENDIX_scenarios.md)|附录 B=预算选型决策树与成本精算(APPENDIX_cost.md)|附录 C=安全护栏与事故响应(APPENDIX_security.md)|附录 D=三平台(Linux/macOS/Windows)命令等价速查(APPENDIX_platform.md)。主文档与配套:final/MASTER.md、final/ROUTE.md、final/CHECKLIST.md、final/APPENDIX_facts.md(事实核查账本)。 置信度标签沿用项目惯例:
一手/双源/单源/低置信;所有带数字结论的验证日期、半衰期与重查时点见各附录"保鲜日历/时效性"节。本附录定位(附录 C):怎么不出事——六类攻击面、最小权限五件套、渐进三级安全路径(L0→L2)、事故响应手册、红线清单。月预算硬上限的数字口径见附录 B,命令的三平台等价见附录 D。
时间基准:2026-09-21。融合输入:
round2/security_redteam.md(全)+round1/risk_cost.md§8 +round2/redteam_optimism.mdfix#3、fix#5。 读者:普通中国大陆个人用户。本文件即最终交付物final/APPENDIX_security.md(附录 C):原则尽量少,动作尽量具体,命令可直接复制;命令的三平台等价见附录 D,月预算数字口径见附录 B §2。 证据纪律:标【实测 2026-09-21】= 本文作者在本机(Kali Linux,root)跑过的命令;标【转述】= 来自 round1/round2 报告的文献综合(原文含来源与置信度);未实测且无法实测的明确标注。
0. 三句话总纲(先背下来)¶
- 假设注入必然发生。 Prompt injection 在模型层无解(OpenAI 官方承认"可能永远无法完全解决";自适应攻击绕过全部 12 种已发表防御 >90%),一切依赖"模型自己拒绝"的防御都不可靠。防御必须放在模型外:权限、沙箱、网络、审计。【转述,round2 §1】
- 防御目标不是"不被打中",而是"打中了损失封顶"。 爆炸半径压到:单次任务、单把临时 key、单个任务目录、白名单内单域名。任何一层被穿透,损失都是"这一格"的量级。【转述,round2 §7.1 ⑤】
- 致命三要素(lethal trifecta)永不同时给一个 agent: ①可读私密数据(文件/key/记忆) ②暴露于不可信内容(网页/邮件/文档) ③能对外通信。三者任一单独存在都可防;三者同时成立,攻击只是时间问题。配权限时先问:这个 agent 需要三要素里的哪几个?能砍掉哪个?【转述,Simon Willison,round2 双引擎交叉】
1. 你在防什么:六类攻击面速览¶
详细攻击方式、真实案例、量化数据见
round2/security_redteam.md§2,此处只保留"一句话 + 你的第一道防御"。
| # | 攻击 | 一句话 | 真实案例(金额/CVE) | 你的第一道防御 |
|---|---|---|---|---|
| A1 | 间接注入 | agent 读到的任何外部内容(网页/邮件/PDF/PR 标题)都可能携带指令 | EchoLeak CVE-2025-32711(CVSS 9.3,一封邮件零点击外泄);GitHub PR 标题同时劫持三家 coding agent | 砍三要素:读不可信内容的 agent 只给只读、不给外网 |
| A2 | MCP 工具投毒 | 工具的"描述文字"被原样注入模型,你批准时看到的和模型读到的是两回事;已装 server 还会被静默改定义(rug pull) | MCPoison CVE-2025-54136;MCPTox 基准平均成功率 36.5% | 装得少 + 只装官方 vendor 第一方 + 装前读完整描述 + 描述 hash 存档 |
| A3 | 凭证泄露 | agent 日志/context 里的 key 会被注入提取 | METR 事件:注入后 agent 主动交出 API key,烧掉 $600K 赠金 | 主 key 永不进 agent;per-task 临时 key + gitleaks 扫日志 |
| A4 | 自动化误操作 | 不是攻击,是 agent 自己搞砸:重试重复扣款、失控烧钱、"说做完了其实没做" | $4,200/63h runaway agent;547 起真实失败里 59.6% 高危 | 幂等键 + 预算四维硬停 + 交付必须附机器可验证据 |
| A5 | 记忆/RAG 投毒 | 记忆库被写入一次,攻击指令每次会话自动复活;长期记忆 = 投毒的持久化通道 | MINJA(NeurIPS 2025):仅靠提问就能写入记忆且重启存活 | 记忆库当"攻击者可写":git 版本化 + 来源标签 + 每周 diff 抽读 |
| A6 | 供应链投毒 | 你升级的动作本身就是攻击入口(升级后的版本开始偷数据) | Postmark-mcp:恶意版本 BCC 密送全部邮件,43.7 万环境受影响 | 锁版本 + 升级前看 diff + 最小安装面(能不装就不装) |
一条判断规则:round1 推荐的最终方案(多级 agent + MCP + 24/7 gateway)恰好是攻击面最重的组合。所以下面两章不是"可选项",是这个方案的出厂前提。
2. 最小权限五件套¶
总纲:Docker 默认配置不是沙箱——普通容器离宿主沦陷只隔一个系统调用(gVisor 官方安全模型原话)。五件套按"个人可承担成本"排序,每件都是免费开源件。
2.1 第一件:Docker 沙箱隔离(Docker/Qdrant 三平台安装见附录 D §1.6)¶
每任务一次性容器模板(默认断网 + 只读根 + 资源顶格):
docker run --rm \
--network none \ # 完全断网【实测 2026-09-21:容器内 wget 报 bad address,真无出站】
--memory 512m --cpus 0.5 --pids-limit 64 \
--security-opt no-new-privileges \
--read-only \
--cap-drop ALL \
-v "$PWD/workspace:/workspace" \ # 只挂任务目录,绝不挂 ~ 本身
python:3.11-slim python /workspace/task.py
需要联网取数时:单独起一个容器走 egress 白名单代理(tinyproxy/squid,allowlist 只放模型 API 端点 + 你点名的域名),而不是给主容器开网。代码层"自觉不发请求"不算防御。
隔离强度阶梯(按信任度选档):
- 你亲自审过的可信脚本 → 普通容器(上面模板去掉 --runtime=runsc)
- agent 生成的代码 / 混合信任 → gVisor(runsc):用户态内核拦截 syscall,个人日常推荐档。注意:runsc 不在 Debian/Kali 默认仓库,需按 gVisor 官方文档(gvisor.dev/docs)加源安装,安装会改 docker 配置——生产机上装之前先在备用机演练。round2 原文写的 apt-get install -y runsc 一行在默认源上跑不通,此处修正。【转述 + 修正,未实测】
- 完全不受信代码/第三方 agent → Firecracker/Kata microVM 或云沙箱(E2B/Modal/Daytona)
五条铁律(每条背后都是真实事故):
1. 永不把 docker socket 挂进 agent 容器(-v /var/run/docker.sock:...)= 完整沙箱逃逸。Codex/Cursor/Gemini CLI 三家官方沙箱被同一手法击穿(Pillar Security 2026-07)。
2. 云凭证文件永不进沙箱:~/.aws、~/.kube、~/.docker/config.json、.env 不出现在容器内。
3. --network none 是唯一可靠起点;联网容器单独起、走白名单代理(按"目标域名+动作"白名单,不只按端口——Postmark 案例的恶意流量走的就是正常 443 端口)。
4. MCP server 容器 = agent 同级隔离:每个 stdio MCP server 都是"以你用户权限跑的不信任代码",沙箱待遇相同。
5. 沙箱/权限配置 agent 自己改不了:CLAUDE.md、AGENTS.md、permissions 文件 root 属主 + 只读挂载,agent 会话内可读不可写。
本机验证状态:--network none 断网已实测;runsc 未实测(生产机禁装),照抄前须在备用机验证。
2.2 第二件:权限白名单(deny-by-default)¶
| 层 | 白名单内容 | 个人实现 |
|---|---|---|
| 工具层 | 每工具允许的命令/域名/路径/操作 | Claude Code permissions.allow/deny;Hermes permissions |
| MCP 层 | server 白名单 + 每工具单独 scope | 只装官方 vendor server;每 server 独立配置文件(便于 diff 审计) |
| 系统层 | 文件路径/网络域名/systemd 资源限制 | AppArmor profile + systemd-run --scope -p MemoryMax=2G【实测 2026-09-21 可用】 |
关键设计(红队强调的三条):
- 写操作工具必须参数受限,不是开关受限。 允许"用 SQL 工具"不够,注入后 agent 仍能跑任意 SQL;正确粒度是"只允许调用 weekly_report_query 这一个预定义查询"——把动作模板化,注入就没有动作可改。
- 委托链降权:子 agent 权限 ≤ 父 agent;每个 subagent 单独配 permissions,默认继承"只读"。
- 每任务临时 key:最小 scope、最短有效期、独立额度、跑完即吊销。主 key 被提取的灾难变成"一次性 key 被提取,损失封顶"。
2.3 第三件:审计日志(JSONL,append-only)¶
原则:日志必须 agent 改不了,否则不算审计——被注入的 agent 第一件事就是抹自己的日志。
# 1) 结构化 JSONL 追加日志:时间 / 工具 / 参数摘要 / 结果摘要 / 审批人 / token 数
# (字段对齐 OTel GenAI 语义约定,将来可无缝接 Langfuse/Phoenix)
# 2) append-only:进程只能追加,不能改不能删【实测 2026-09-21:追加 OK,覆盖/删除报 Operation not permitted】
sudo chattr +a /var/log/agent-audit.jsonl
# 注意:chattr 只在 ext4 等文件系统有效,btrfs/tmpfs 上会报错;解开用 chattr -a
# 3) 异机副本:每周 rsync 到另一台机器/对象存储(防"本机被完全控制")【实测 2026-09-21:rsync 在本机可用】
rsync -a /var/log/agent-audit.jsonl backup-host:/backups/agent/
# 4) journalctl 作为系统层兜底(systemd 单元跑的 agent 天然有)
journalctl -u agent-gateway --since "1 hour ago" | grep -i "tool_call"
审计里必须看的三个确定性告警(不是"记了就完")——三个都是正则/hash,不是模型,零误报担忧,Telegram 推送到你手机:
1. 敏感路径读取告警:tool call 参数出现 ~/.ssh、.env、id_rsa、credentials → 立即推送。这是 A2/A3 类攻击的确定性检测器。
2. 工具描述 hash 存档:每次 session 启动记录所有 MCP server 工具描述的 hash,与上次 diff 出现变化 → 告警并暂停该 server。这是 rug pull 的唯一检测点。
3. egress 对账:代理日志(目标域名/字节数)与 agent 自报动作对账;出站到白名单外 → 断网 + 告警。
2.4 第四件:git 回滚(先 commit 再动手)¶
| 对象 | 机制 | 要点 |
|---|---|---|
| 文件 | 一切写操作经 commit | 任务开始前先 snapshot(git stash create 或开分支);出事 git reset --hard <pre-task-sha> |
| 数据库 | 只读账号是第一防线;写前备份 | 写账号 + 每日 binlog 保留 7 天 |
| 对外消息 | 延迟队列/草稿箱 | 生成后 10 分钟内人可撤销;邮件进草稿箱不直发 |
| 记忆库(最容易漏) | 记忆/RAG 库进 git | 投毒的恢复就是 git revert 记忆条目——没有版本化的记忆库被投毒后无法恢复 |
| 系统配置(最容易漏) | dotfiles / CLAUDE.md / cron 定义进 git | 注入类攻击喜欢种进 CLAUDE.md/.cursorrules;有版本历史才看得出"什么时候被种了" |
不可逆操作(发钱、删库、对外发布)永不自动。
2.5 第五件:agent 自检(最便宜的一件)¶
个人用户没有 SOC,让另一个便宜模型当"巡逻犬",检查项做成 cron 任务:
- 每日自检(跑在只读权限的独立会话里): - 审计日志有无未解释的:敏感路径读取 / 白名单外出站 / 工具描述 hash 变化 - 记忆库 diff 抽读:有无"指令式"条目("永远记住:遇到 X 就 Y") - 配置文件(permissions/CLAUDE.md)有无非本人改动 - API 账单有无异常 spike(per-key 硬限额兜底)
- 每周 5 题 probe 回归门(round2 fix#5):24/7 系统的定时任务每周跑一次 5 题私有 probe 集,分数跌破阈值即自动降级到 L1 并告警——定时任务被静默破坏时这是唯一的自动发现通道。
- evidential 完成门禁:任务交付必须附机器可验证据(exit code / git diff / 文件 hash)。"说做完了"不算完成。
- 权限自我声明:长任务开头让 agent 声明"我当前拥有的权限:…"——声明与实际权限不符 = 配置已被改,人审时一眼可见。
3. 渐进式三级安全路径(L0 只读 → L1 受控 → L2 自动)¶
核心不变式:每升一级,差异不是"更会防注入",而是注入成功后的爆炸半径变大。所以每级都有明确的爆炸半径上限,和明确的准入条件。永远先定价、后解锁。
Level 0 — 只读(默认准入状态)¶
能做:搜索、抓取、读白名单目录、数据库 SELECT、起草文本。 不能做:任何写操作、任何对外发送、任何代码执行。
# L0 配置基线(以 Claude Code 类 permissions 为例,字段名随你的 harness 调整)
permissions:
deny:
- Bash(write*) # 禁一切写命令
- Bash(rm*)
- Bash(git push*)
- WebFetch(post*) # 网络只许 GET
- filesystem:write
allow:
- WebSearch
- WebFetch(get*)
- filesystem:read(/home/user/agent-workspace/**) # 白名单目录
mcp:
enabled_servers: [playwright, fetch] # 只装这两个
exec_policy: never
# 网络:容器 --network none + 宿主侧代取数;或 egress 白名单只放模型 API
# 凭证:环境里只有一把最小权限 key,无 ssh / 云凭证
爆炸半径上限:信息泄露(它看到的东西)。防御重点:凭证不进 context、egress 白名单。 适用:调研、总结、监控、起草。约 80% 可靠度地平线在 8-15 分钟内的任务。
Level 1 — 受控执行(人审闸门)¶
新增:白名单命令/工具 + 参数校验 + 每次写操作人审(dry-run 默认)。在 L0 基线上追加:
permissions:
allow:
- Bash(python /workspace/scripts/*) # 命令模板化,不是裸 Bash
- filesystem:write(/workspace/output/**)
- email:send_draft # 只能进草稿箱,不能直发
approval:
required_for: [write, email, payment, delete, publish] # 不可逆操作枚举
mode: per_action # 每步人审;高频低危动作走 batch 审批防疲劳
mcp:
enabled_servers: [playwright, fetch, filesystem, github]
tool_scope: per_tool # 每工具单独 scope
关键动作: - 写操作一律先出 diff 再问人;高危审批聚批处理(防审批疲劳——审批量必须低到人真的会看,否则人审名存实亡)。 - N8N/定时流程走"仅草稿"旁路先跑两周,验收后再切真发。 - 断路器上线:per-trace 成本上限(正常运行 p95 的 5-10 倍)+ 步数上限 + 幂等键。
爆炸半径上限:单次被批准的错误操作。此级主要剩余风险是 A4 误操作,不是注入(骗过每步人审闸门难一个量级)。
Level 2 — 自动执行(围栏内自治)¶
新增:容器/VM 隔离内自动执行、定时任务、抽样人审。
准入条件: - L0→L1:近 30 天只读任务零事故 + 审计日志能完整重放任一任务。 - L1→L2:近 60 天受控任务审批通过率 >95% 且零高危误批 + 有已验证的回滚演练记录 + 断路器实测触发过至少一次(故意测的)。
runtime:
isolation: gvisor # 所有执行进 2.1 容器模板
egress: proxy-allowlist # 白名单代理 + 出站对账
memory_isolation: true # 记忆库 git 化 + 来源标签
automation:
scheduler: systemd timer / hermes cron(模型 pin 固定,防静默换模型)
budget: {max_steps: 50, max_minutes: 30, max_cost_usd: 2.0} # 预算四维
circuit_breaker: {same_action_max: 3, on_trip: kill+alert}
approval:
mode: sampled # 抽样人审 10%
irreversible: [payment, delete, publish] # 这三类永远 100% 人审,不上抽样
delegation:
subagent_max_permission: parent # 委托链降权
爆炸半径上限:围栏内的累积损失——预算四维 + egress 白名单 + 幂等写入 + 时间/金额上限封顶。此级头号新风险是 A5 记忆投毒(自动化 = 注入指令的复读机,被污染的 cron 指令每 30 分钟重读一次),记忆库版本化 + 每周 diff 是硬门槛。
升级 / 降级操作¶
- 升级:满足准入条件 → 改配置 → 跑一次真实事故演练(故意喂一个坏页面 / 故意触发断路器)→ 演练通过才生效。
- 降级(任何时候无门槛,且必须一键完成):
bash cp permissions.L1.yaml permissions.yaml && systemctl restart agent-gateway降级流程复杂 = 事故时会舍不得降。 - 自动降级触发器(写进 cron 自检):probe 回归分跌破阈值、审计告警连续 2 天、账单 spike——任一命中即自动降一级并推送告警,人来决定何时升回。
4. 事故响应手册(检测 → 阻断 → 取证 → 恢复 → 复盘)¶
口诀:"the prompt is the cause but the tool call is the crime scene"——你围堵的是 agent 的 reach(工具/凭证/网络),不是它说的话。
4.0 事前准备(出事前必须就位,半天搞完)¶
- kill switch 一键脚本(提前写好 + 演练过,放
~/bin/agent-killswitch.sh,chmod 700):bash #!/bin/bash # 0-2 分钟内完成 systemctl stop agent-gateway agent-cron.timer # 1. 停 agent 与定时器 hermes cron pause-all 2>/dev/null # 2. 停 cron(平台命令各异) ~/.agent/bin/revoke-all-keys.sh # 3. 吊销全部 agent key(预设脚本) docker ps -q --filter label=agent-sandbox | xargs -r docker kill # 4. 杀沙箱容器 iptables -A OUTPUT -m owner --uid-owner agent -j DROP # 5. UID 级断网兜底 cp /var/log/agent-audit.jsonl ~/incident-$(date +%s)/ # 6. 留证,再动任何配置⚠️ 注意:--uid-owner需要 iptables owner match 模块,部分内核默认不可用(round2 自认盲点);且给 agent 单独 UID 需要在部署时规划。此脚本写好后必须本机演练一次——没演练过的 kill switch = 没有 kill switch。 - 凭证台账:每把 key 的 scope / 限额 / 最后轮换日期记半页纸。出事 30 秒内知道吊销什么。
- 日志保留 ≥30 天(取证最低要求)。
- 恢复介质:备份恢复流程完整演练过一次(没演练过的备份 = 没有备份)。
- 分级响应表:低危=记日志观察 → 中=收权 → 中高=暂停 → 高=kill switch + 吊销凭证。不是每次都拔总闸,但三种症状无条件立即 kill switch:正在外泄数据 / 目标被劫持(goal hijacking)/ 批量影响(资金、大规模对外消息)。
- 记账机制:每个 tool call 有结构化日志(§2.3),事故时间线才可能重建。
4.1 检测(症状 → 判定)¶
| 信号族 | 具体症状 | 对应攻击面 |
|---|---|---|
| 工具调用异常 | 从不用的工具突然被调;调用序列漂移;高危工具(delete/admin/send/execute)首次出现 | A2 / A1 |
| 数据访问异常 | 敏感路径读取(~/.ssh / .env);大批量分页读取 | A3 / A5 |
| 出站异常 | 白名单外域名/IP;Base64 大 payload 外发;DNS 查询量异常(四层隔离后残余 ~2% 风险:DNS tunneling) | A1 / A6 |
| 身份/账单异常 | API 账单 spike;token 用量突变;同一 key 多地并发 | A3 已泄 |
| 输出异常 | "任务完成"但无机器可验证据;输出风格突变(persona 被劫持) | A4 / A1 |
个人检测实现 = §2.3 三个确定性告警 + healthchecks.io/Uptime-Kuma 心跳兜底。
4.2 阻断(前 15 分钟,按优先级)¶
- 吊销 agent 全部工具凭证(token/OAuth/key)——单杠杆最高的动作。无有效 token 的 agent 无法调工具、读数据、外发。在 issuer 侧(厂商控制台)吊销,不是改本地配置——本机被控时本地配置不可信。
- 停 cron/heartbeat + 杀容器:定时器是被注入指令的复读机,先停;容器 kill 前先
docker commit留证(见 4.3)。 - 断网:iptables UID 级 DROP,或防火墙 deny 攻击者 IP。
- 降级到 L1/L0:一键降级(§3 末尾)。graded containment:别因响应动作本身毁掉数据——中途杀数据库事务可能造成损坏,先让 in-flight 事务收尾。
- 阻断升级路径:多 agent 场景立即隔离受染 agent 的下游(被染 agent 会把污染状态传给同伴——只停一个进程不算遏制)。
4.3 取证(阻断后 1-4 小时内,别删任何东西)¶
- 保留现场:
docker commit <container> forensic-snapshot;cp -a审计日志/会话日志/工具调用记录到 incident 目录(日志轮转前抢拷)。 - 时间线重建:从最早异常事件回溯,每个 tool call 的参数与结果;定位注入载体(用户消息 / 工具返回 / 检索文档 / 记忆条目 / 工具描述,五选一)。
- 回答三个判定问题:①注入是直接还是间接?载体是什么?②哪些工具被调、哪些数据被读、是否已有数据出网(egress 对账日志)?③污染是否持久化(记忆/RAG/配置文件)——持久化了就必须走 4.4 的重建而非清理。
4.4 清除与恢复¶
- 吊销 ≠ 清除:轮换所有被波及凭证——不止 agent 自己的,是它读到过的一切(vault、云、邮箱 OAuth)。vault 批量 rotate。
- 清除持久化:投毒记忆条目
git revert;被种配置(CLAUDE.md/.cursorrules/cron)对照 git 历史还原;被深度污染的记忆库直接从干净备份重建,比逐条洗更可靠。 - 恢复上线:修好的配置先在 L1 人审模式跑 24-48h 监控,再回 L2。
- 外部系统对账:agent 有过写权限的所有外部系统(邮箱/仓库/云)逐个人工核对——AI 已发送的内容不可撤回,重复扣款要主动补偿。
4.5 复盘与降级¶
- 四问:哪条控制失效了?为什么没在检测层先发现?哪条白名单过宽?这次事故改写哪条规则?
- 任何事故 → 降一级 → 补控制 → 重新计时(升级准入条件重走)。
- 每次事故至少新增一条确定性检测器,写进 §2.5 自检清单——这是个人版"组织学习"。
- 每季度一次演练:故意注入一个坏页面走完全流程 + 吊销一把 key 计时恢复。
4.6 速查卡(打印贴墙版)¶
【发现 agent 行为异常 / 账单飙升 / 收到敏感路径告警】
1. systemctl stop agent-gateway && systemctl stop agent-cron.timer (停)
2. 厂商控制台吊销 agent 全部 API key (断腕)
3. iptables 出站断网 + kill 沙箱容器(先 docker commit 留证) (围困)
4. cp 审计日志到 incident 目录,不删任何东西 (留证)
5. git diff 配置文件 + 记忆库,找注入载体与污染范围 (定位)
6. 轮换被波及凭证 → 从干净备份恢复 → L1 人审模式跑 48h (恢复)
7. 写事故记录,新增一条检测规则,升级条件重新计时 (复盘)
5. 红线清单(打印贴墙,任何一条都不许破)¶
权限红线: 1. 支付/转账/下单永不自动——无论流程多成熟。 2. 对外发布(发邮件/发帖/群发)永不自动,邮件只进草稿箱。 3. 删除/覆盖不可再生数据永不自动。 4. docker socket 永不进 agent 容器;云凭证文件永不进沙箱。 5. 主 key 永不进 agent context;每任务一把临时 key,跑完即吊销。 6. agent 永不修改自己的权限/沙箱/审批配置。 7. 致命三要素永不在同一 agent 进程内重合(配权限时先砍一个)。
运维红线: 8. 沙箱内默认断网;联网容器单独起、走白名单代理。 9. 记忆库/RAG 库必须 git 版本化 + 来源标签;未版本化的记忆库不许上线 L2。 10. 审计日志 append-only(chattr +a)+ 每周异机副本;agent 改不了的日志才算审计。 11. 新 MCP server 装前人工读完整工具描述;装后描述 hash 存档,变更即停用。 12. 版本锁定 + 升级前看 diff;一次性大版本升级隔离环境先跑。
行为红线: 13. 资金/对外/删除三类操作在 L2 也不上抽样人审,永远 100% 人审。 14. 交付必须附机器可验证据(exit code/diff/hash);"说做完了"不算完成。 15. 出事故必降级、必复盘、必新增一条检测规则,升级条件重新计时。
成本红线(融合 round1/risk_cost §8"不烧钱";四档预算与月账单精算见附录 B): 16. 月预算硬上限 $60(主力订阅 $20 + 按量 API $15 + 实验 $10 + 本地电费 $10-30,仅当已有 GPU/Mac);超支先查长上下文与循环调用。 17. 每把 API key 设月度硬限额;per-trace 成本上限 = 正常 p95 的 5-10 倍。 18. 429 重试必须带 backoff 上限——失控重试烧过 $4,200/63h。
合规红线: 19. 生产服务器上不动 systemd 服务/端口/防火墙/系统配置(本 BRIEF 红线,同样适用于 agent 的每一级)。 20. API 数据默认进厂商训练管道(OpenAI 一直如此;Anthropic 2026-06 起):评测集与私密任务走 API 前先开 opt-out;关键产物先落本地文件再进对话。
6. 与 round1 §8 应急手册的衔接(修正后)¶
round1/risk_cost §8"不出事"五条按 redteam_optimism fix#3 修正如下(原 J1/J2/J3/J5 判定 absorbed):
| 事故 | 修正后动作(5 分钟内) |
|---|---|
| API key 泄漏 | 厂商控制台吊销 → 检查账单 → 换新 key。工单只用于数据导出,不作为申诉主路径。 |
| 账号被封 | 有本地底牌(GPU/Mac + 已验证本地栈):切本地模型 → 用评测集验证能力损失范围 → 继续运转。无本地底牌:切备份厂商(备份 key 需每月活体验证一次——连坐封号是真实风险,平时不用等于没有)→ 重建 prompt → 明确接受"能力暂时降级",无兜底。 |
| 账单暴增 | 先查 reasoning 失控 / 长上下文复利 / 循环调用 → per-key 月限额兜底 → 超限即吊销。 |
| 疑似注入 | §4.2 阻断流程:断网/吊销工具权限 → 查 agent 最近写操作 → git 回滚文件 → 按速查卡走。 |
| 模型突然弃用 | 查厂商 deprecation 页(OpenAI GA 模型 6 个月通知、preview 约 2 周;Anthropic 60 天)→ 切同级替代 → 用评测集验证输出质量。 |
| 数据备份 | 关键产物即时本地化:所有重要产出先写本地文件再进对话(这是工作流设计,不是备份);对话历史每周手动导出 zip + 月度抽查可读性(无导出 API,"cron + 一行命令"不成立,fix#5 修正)。 |
预算表的一个诚实缺口(round2 J3):$60 月预算的"本地电费"一行假设你已有 GPU/Mac。无硬件用户接受"封号 = 能力暂时降级",或一次性投入 ¥5,000+(round1 D 域方案 B)补上底牌——应急手册的适用人群必须与预算表一致。
7. 时效性与维护¶
- 稳定(≥3 年):三要素模型、最小权限/审计/回滚原则、事故响应骨架、Linux 沙箱原语。这些不用担心。
- 半衰期 6-12 个月:MCP CVE 数字、OWASP Top 10 条目号、mcp-scan 类工具、沙箱产品价目。本文安全附录每季重跑检索(round2 开放问题 #8)。
- 半衰期 ~3 个月:具体 CVE、benchmark 数字、各厂商 agent 安全功能细节。
- 新手验收三动作(round2 开放问题 #10):走完全流程时必须能独立完成"装前人工审查工具描述"、"每月审计回看"、"季度演练"——做不到就再降维。
- 本文零实测声明(继承 round2 自我锐评 #1):除标注【实测 2026-09-21】的 4 组命令外,docker runsc 模板、iptables 规则、egress 代理架构均为文献综合;照抄前必须本机/备用机验证,尤其 iptables owner match 与 runsc 安装两项。
手册完 | 融合:round2/security_redteam(全)+ round1/risk_cost §8 + round2/redteam_optimism fix#3、fix#5 | 2026-09-21 命令核实:--network none / chattr +a / rsync / systemd unit 均本机实测通过(详见 §2.1、§2.3 标注)