Agent 安全、约束与可靠性:从威胁建模到纵深防御
本文是 精英 Agent 工程师学习路线:从范式理解到生产级落地 阶段 10 的配套学习笔记。 核心结论:安全目标不是让模型“永远不受骗”,而是让被误导、出错或被攻陷的模型仍无法越权读取、泄露数据或直接造成不可恢复副作用。Guardrail 是完整系统的执行点,不是一段更强硬的 System Prompt。
本文与 Prompt 注入攻击防护:从指令分层到生产级多层防御体系 互补:已有专篇深入注入攻击;本文扩展到身份、授权、供应链、沙箱、可用性、审计与事故响应。
0. 学习目标与范围
学完本文后,你应该能够:
- 区分 Safety、Security、Privacy、Reliability、Compliance 与 Abuse Prevention;
- 用资产、主体、信任边界、入口、能力和影响构建 Threat Model;
- 传播用户、Agent、服务和委派身份,执行资源级授权;
- 用 Policy Decision Point/Enforcement Point 管理动作、数据与义务;
- 为工具副作用、TOCTOU、幂等、确认与最终状态建立防线;
- 治理 MCP Server、Agent Skill、模型、Prompt 和依赖供应链;
- 防止 RAG/Memory 投毒、跨租户泄漏与持久化注入;
- 为代码、浏览器和 Computer-use Agent 建立 OS/网络/凭据沙箱;
- 设计不会被“确认疲劳”绕过的 HITL;
- 用对抗测试、红队、故障注入、审计与响应演练验证系统。
本文不会承诺某个检测器、云 Guardrail 或论文方案能“彻底解决 Prompt Injection”。高风险动作必须依靠结构化权限和确定性执行边界。
1. 六个目标不要混写
| 目标 | 关注 | 示例 |
|---|---|---|
| Safety | 不产生有害结果 | 不执行危险操作 |
| Security | 抵抗恶意攻击 | 注入、越权、供应链 |
| Privacy | 合法最小使用个人数据 | 不跨用户泄露订单 |
| Reliability | 正确、可恢复、可用 | 超时、重试、故障隔离 |
| Compliance | 满足法律/合同/政策 | 保留、地域、审计 |
| Abuse Prevention | 防滥用系统能力 | 批量诈骗、资源消耗 |
一个输出可能内容安全,但仍泄露隐私;一个工具调用可能授权正确,但因重复重试造成财务损失。
1.1 安全属性
Authenticity:主体/来源真实Authorization:只有允许的主体执行允许动作Confidentiality:数据不向未授权方泄露Integrity:指令、事实、状态和制品未被篡改Availability:不会被循环/资源耗尽拖垮Accountability:动作可归因、可审计Controllability:能暂停、撤销、人工接管1.2 风险公式
Risk ≈ Likelihood × Impact × Exposure模型概率错误只影响 likelihood;真实权限、数据和副作用决定 impact/exposure。
OWASP LLM Top 10、Agentic AI Threats 与 AI Agent Security Cheat Sheet,NIST GenAI Profile、MITRE ATLAS、Google SAIF 分别从应用威胁、风险治理、攻击知识库和安全框架提供公开参考。[S1]
2. Threat Model:从资产与信任边界开始
2.1 资产
用户身份与会话订单/支付/健康/代码等敏感数据System/Developer Prompt 与 Policy模型/AdapterTool/MCP/Skill 凭据Memory/RAG/Index业务动作与资金Trace/Audit/Eval 数据2.2 主体
End UserOrganization AdminAgent RuntimeModel ProviderTool/MCP/A2A ServiceHuman ReviewerOperator/DeveloperAttacker/Supply-chain Publisher2.3 信任边界
Browser -> API GatewayApplication -> Model ProviderHarness -> Tool/MCP ServerAgent -> A2A Remote AgentRuntime -> SandboxIngestion -> RAG/MemoryProduction -> Observability/EvalHuman Reviewer -> Approval Service2.4 数据流图
每条边标记:
data classificationidentity/auth methodpurposeretentionencryptionallowed destinationsfailure mode2.5 Abuse Case
class AbuseCase(BaseModel): case_id: str attacker: str entry_point: str preconditions: list[str] attack_steps: list[str] target_assets: list[str] potential_impact: list[str] controls: list[str] detection: list[str] recovery: list[str] residual_risk: str2.6 Security Requirement Matrix
Threat Model 必须转成可测试需求:
| Requirement | Enforcement | Evidence | Test |
|---|---|---|---|
| 跨租户订单不可读 | Tool/API Authz | Policy + audit event | IDOR cases |
| 未确认不可退款 | Tool PEP | confirmation ref | bypass cases |
| Restricted 数据不外发 | Model/A2A egress PEP | route decision | exfiltration cases |
| Skill 未批准不可运行 | Registry/Sandbox | digest/manifest | tamper cases |
| Policy 故障不开放写 | Tool PEP | fail-closed metric | chaos case |
每个 Requirement 要有 Owner、严重级别、覆盖版本和残余风险。
class SecurityRequirement(BaseModel): requirement_id: str statement: str severity: Literal["critical", "high", "medium", "low"] control_ids: list[str] test_case_ids: list[str] evidence_queries: list[str] owner: str residual_risk: str2.7 Threat Model Diff
以下变化触发重新评审:
新增模型供应商/区域新增写工具或权限接入 MCP/A2A/SkillMemory/RAG 新数据源允许代码/浏览器执行Prompt/Policy 信任层级变化日志/数据保留变化PR/发布单应附 new assets / new trust boundaries / changed controls / new tests,而不是一年更新一次静态文档。
3. 身份与委派链
3.1 四种身份
User Principal 谁提出请求
Agent Principal 哪个 Agent/版本代表用户工作
Service Principal 哪个工具服务实际访问资源
Human Approver 谁批准高风险动作3.2 Delegation Context
class DelegationContext(BaseModel): tenant_id: str user_subject: str calling_agent_id: str calling_agent_version: str delegated_scopes: list[str] resource_constraints: list[str] audience: str task_id: str expires_at: str authentication_strength: str3.3 不透传广域 Token
用户 Token 不应原样交给外部 MCP/A2A/子 Agent。使用短时、audience 明确、scope/resource/task 绑定的委派凭据,或由可信后端执行代理。
3.4 资源级授权
有 order:read scope≠ 可以读取任意 order_id还需验证:
tenantowner/relationshipresource statefield-level accesspurpose3.5 Agent 身份不能来自 Prompt
“你现在是管理员” 只是文本。身份来自认证中间件、签名 Token、mTLS/服务目录或本地可信 Runtime。
4. Trust Labels 与信息流
4.1 三类输入
Instruction System/Developer/Policy,受控发布
Verified Data 经授权工具/数据库读取并带版本
Untrusted Content 用户、网页、邮件、文档、Memory、远端 Agent 文本4.2 Context Item
class SecurityLabeledContext(BaseModel): item_id: str content_ref: str trust: Literal["instruction", "verified_data", "untrusted_data"] data_classification: Literal["public", "internal", "confidential", "restricted"] source_identity: str allowed_purposes: list[str] allowed_destinations: list[str] expires_at: str | None4.3 Information Flow Policy
restricted data -> external model: deny unless approved routeconfidential tool result -> public response: redact/projectuntrusted document -> tool arguments: require structured extraction + policyprivate memory -> shared agent: deny4.4 Taint 不会自动消失
不可信网页被摘要后仍是派生不可信内容;只有具体字段经权威工具验证,才能提升该字段 trust,而不是提升整段文本。
CaMeL 研究强调把控制流与数据流分离,并用能力约束处理 Prompt Injection。[P1] 其思想支持 trust/taint/capability 设计,但实际系统仍需身份、工具与业务策略集成。
5. Policy Architecture:模型之外的安全裁决
5.1 PDP/PEP
Policy Decision Point (PDP) 输入主体、动作、资源、环境,返回决策
Policy Enforcement Point (PEP) 在 API、Context、Tool、Output 等边界强制决策
Policy Information Point (PIP) 提供身份、资源、风险、时间等属性5.2 Decision
class PolicyDecision(BaseModel): decision: Literal["allow", "deny", "require_confirmation", "require_human"] reason_codes: list[str] obligations: list[str] policy_version: str evaluated_at: str expires_at: str | None5.3 Obligations
mask.phonelimit.amount=5000verify.order_owneruse.model_route=internallog.audit.high_riskconfirm.user.bound_args5.4 Fail Closed
Policy Engine 超时、解析失败、属性缺失:
read-only low risk -> configurable degraded pathwrite/high risk -> deny or human绝不能将“Policy 不可用”映射为默认允许。
5.5 TOCTOU
授权后、执行前资源状态可能变化:
check owner/state/version-> user waits for confirmation-> resource changes-> execute执行前重新读取版本并用条件写/事务保证。
5.6 PEP 布点
API PEP:谁能创建哪类 RunContext PEP:哪些数据可进入哪个模型/AgentCapability PEP:当前 Step 暴露哪些工具Tool PEP:动作/资源/参数是否执行Memory PEP:能否写入/读取哪个 namespaceA2A PEP:能否委托给哪个远端 AgentOutput PEP:哪些字段可发往当前渠道只在入口检查一次不够,因为 Agent 在后续步骤才确定资源和动作。
5.7 Policy Input 必须可信
class PolicyInput(BaseModel): subject_ref: str # auth middleware agent_ref: str # registry/runtime action: str # resolved tool contract resource_ref: str # trusted adapter lookup resource_version: str environment: dict # server clock/risk signals proposed_args_hash: str如果这些字段由模型自由填写,再强的 Policy Language 也只是验证攻击者提供的事实。
5.8 Policy 版本与回放
Audit 保存 decision input hash、Policy bundle version、decision 与 obligations。策略变更后可对历史高风险请求 dry-run,评估新规则会允许/拒绝什么,再灰度发布。
6. 工具与副作用安全
6.1 风险分类
| 级别 | 示例 | 控制 |
|---|---|---|
| R0 Pure | 计算/格式转换 | Schema/资源预算 |
| R1 Read | 查订单 | 资源授权/脱敏 |
| R2 Reversible Write | 建工单 | Policy/幂等/审计 |
| R3 Financial/External | 退款/发信 | 确认/HITL/验证 |
| R4 Irreversible/Privileged | 删除/权限变更 | 强人工/隔离流程 |
6.2 执行管线
Tool Proposal-> Schema-> Trusted Identity Binding-> Resource Authz-> Policy-> Confirmation/HITL-> Idempotency-> Deadline/Rate Limit-> Execute-> Verify Final State-> Audit6.3 参数完整性
确认 Token 绑定:
subjecttool/versionresource/versionnormalized args hashamount/currencyexpiry模型修改金额后,旧确认失效。
6.4 Outcome Unknown
写工具超时:
不直接 retry-> query by operation/idempotency key-> reconcile final state-> only then retry/complete/human6.5 Availability
每工具设置:
timeoutconcurrencyrate/budgetmax payloadretry matrixcircuit breakerbulkhead攻击者可诱导 Agent 循环调用昂贵工具,安全和可靠性在此交汇。
7. Prompt Injection 的系统边界
已有 Prompt 注入防护专篇 详细覆盖直接/间接注入、RAG、Memory、MCP 与多 Agent。这里强调三条系统结论。
7.1 检测不是唯一防线
检测器会漏报/误报,语言攻击可变。即使检测失败:
外部文本不能变成高优先级指令模型不能自授工具权限高风险动作需要确定性 Policy/确认结果必须验证7.2 Structured Query
StruQ 等研究探索把指令和不可信数据结构化隔离;间接注入研究展示真实 LLM 应用从外部内容被操控的风险。[P2] [P3]
7.3 Injection Response
标记 source/content停止将该内容用于指令继续安全的只读目标或请求人工不泄露检测规则保存最小攻击证据加入 adversarial regression8. RAG 与 Memory 安全
8.1 Ingestion
来源 allowlist/signaturemalware/OCR/hidden-text scanACL/tenant/effective time内容 hash/version发布审批index snapshot8.2 Retrieval
filter before ranksource trust/freshnesspoisoning anomalyquote/span validationuntrusted label8.3 Memory Write
candidate onlyPII/secret/injection classificationconsent/purpose/retentionscope/namespaceconflict/provenancepolicy commit8.4 Persistent Attack
攻击内容写入 Memory 后跨会话生效。删除需要覆盖 Canonical Store、向量/搜索/图索引、缓存、摘要和备份保留流程。
8.5 Data Poisoning Detection
来源分布突变同文档大量近重复异常高检索命中高风险指令短语图实体/边暴增记忆写入率异常检测只用于触发隔离/审核,不自动判定真值。
9. MCP、A2A 与 Skill 供应链
9.1 MCP 风险
恶意 Server/Tool descriptiontoken passthrough/audience 错误confused deputyDNS rebinding/SSRFcapability driftTool Result InjectionMCP 官方 Security Best Practices 明确讨论 confused deputy、token passthrough、SSRF、session hijacking 与本地服务风险。[S2]
9.2 A2A 风险
伪造 Agent Card过宽 delegation远端 Artifact 注入push callback SSRF/replay跨组织数据保留不明9.3 Skill 风险
SKILL.md 恶意指令scripts 执行命令/发网依赖投毒assets 模板泄露数据自动更新扩大权限9.4 Manifest/Allowlist
artifact_id: order-fulfillment-skill@3.2.0publisher: platform-aidigest: sha256:...permissions: filesystem: [workspace-read] network: [order-api.internal] secrets: []risk: mediumreviewed_at: 2026-07-15expires_at: 2026-08-159.5 更新流程
quarantine-> manifest/diff/SBOM/signature-> static/dynamic scan-> sandbox tests-> adversarial eval-> human approval-> pinned canary-> monitor/rollback9.6 SBOM 与 Provenance
对 MCP Server、Skill Script、Sandbox 镜像保存:
source repository/commitbuilder identitybuild workflowdependency lock/SBOMartifact digest/signaturevulnerability scanlicense policy生产只运行已批准 digest,不使用可变 latest tag。
9.7 Dependency Confusion / Typosquatting
私有包名被公共仓库抢注相似 Skill/Server 名称安装脚本执行任意命令transitive dependency 被接管防御:私有 registry 优先级、lockfile/hash、allowlist、禁用安装期脚本(可行时)、隔离构建和制品签名。
9.8 Runtime Capability Drift
运行中的 Server/Skill 若能力与批准 Manifest 不一致:
阻断新增/变更的高风险能力隔离连接/进程保留旧 Snapshot 完成安全只读任务告警并要求重新审核不能因“自动发现”而自动扩大权限。
10. Sandbox:限制真实能力
10.1 层级
Process sandboxContainerVM/microVMDedicated account/projectPhysical/organizational isolation风险越高,隔离越强。
10.2 文件
ephemeral workspaceread-only inputswrite allowlistpath traversal/symlink defensesize/quotano host home/SSH/cloud credentials10.3 网络
deny by defaultDNS/IP/domain allowlistblock metadata service/private rangesproxy with auditdownload size/type scanegress data policy10.4 进程
non-rootsyscall/capability restrictionsCPU/memory/time/process limitno privileged mount/socketkill entire process tree on timeout10.5 Secret Broker
Agent 不读取长期 Secret;执行时由 Broker 向受控 Adapter 提供短期、scope 限制凭据。Secret 不进入 Prompt、stdout 或 Artifact。
Agent requests capability token-> Broker validates run/step/policy/resource-> issues short-lived credential to Adapter-> Adapter calls target-> credential expires/revokes10.6 Credential 约束
audiencescope/actionresource/tenantshort TTLone task/stepnon-exportable where possiblerotation/revocation10.7 Sandbox Output Boundary
沙箱产生的文件、日志和网络结果在返回 Agent 前:
path/size/type validationmalware scansecret/PII scancontent hashuntrusted labelartifact allowlist“在沙箱中生成”不意味着输出可信。
10.8 Computer-use
隔离浏览器 profile无个人 cookie域名/下载/上传策略危险点击/提交确认视觉与 DOM 观察视为不可信动作截图/日志(按隐私策略)11. HITL:人类批准也要工程化
11.1 Confirmation Fatigue
每一步都弹“是否允许”会让用户机械点击。只在:
风险或权限提升不可逆/财务动作数据外发目标/参数变化证据冲突触发清晰确认。
11.2 Review Package
谁请求代表谁执行什么对哪个资源关键参数/金额依据与风险可逆性有效期允许的决定11.3 防诱导 UI
不隐藏金额/收件人/域名不使用模糊“继续”替代动作名显示参数变化 diff高风险拒绝与批准同等可见11.4 Four-eyes
高风险权限变更/大额动作可以要求申请人与审批人分离,甚至双人批准。Agent 不能同时充当申请、审批和验证主体。
11.5 Resume
批准后重新验证身份、资源版本、Policy 与参数 hash。过期或状态变化必须重新批准。
12. Output 与数据泄露
12.1 输出层
Schemaclaim/citation verificationPII/secret redactiontenant/resource authorizationchannel-specific policy12.2 Side Channel
泄露不仅在正文:
错误栈文件名/URIcitation linktool name/argstoken/latency 差异Trace/metrics labels12.3 Error Contract
对用户:稳定、最小、可行动的错误码;内部:受控 Trace 引用。不要返回原始 Provider/SQL/文件路径错误。
12.4 Observability
Trace 默认不记录完整 Prompt、工具原文和 Secret。按数据分类做采样、加密、访问控制、保留和审计。
13. 可靠性与安全联动
13.1 Deadline/Budget
max steps/model/tool callswall-clock deadlinetoken/cost budgetper-tool quotamax delegation depth防循环和资源耗尽攻击。
13.2 Circuit Breaker
当模型/工具错误、安全阻断或异常动作率超过阈值:
close write capabilitiesdegrade to read-only/rule/humanisolate version/provider/server13.3 Bulkhead
不同租户、工具和风险级别隔离队列/连接池/并发,避免一个攻击流量拖垮全部系统。
13.4 Fallback
强模型失败 -> 弱模型不是总安全。Fallback 需要重新评估能力;弱模型可能不支持可靠 Schema/安全判断,因此降级时应同时降权为只读或人工。
13.5 Cache
安全缓存键必须包含 tenant、identity/ACL fingerprint、Policy/Tool/Index version。权限变化时失效。
13.6 Chaos Security
故障注入:
Policy 不可用Auth provider 延迟Audit sink 满MCP Server 被撤销Sandbox egress 拒绝Human approval 超时验证系统不会 fail-open。
14. Audit 与可取证性
14.1 Audit Event
class AuditEvent(BaseModel): event_id: str trace_id: str run_id: str actor_type: str actor_id: str on_behalf_of: str | None action: str resource_refs: list[str] normalized_args_hash: str | None policy_decision_ref: str | None confirmation_ref: str | None outcome: str artifact_versions: dict occurred_at: str14.2 Audit vs Trace
Trace:诊断性能与执行路径,可采样Audit:高风险行为责任证据,完整性与保留更严格14.3 Tamper Evidence
append-only/WORM(按要求)hash chain/signature严格写入身份独立保留访问审计时间同步14.4 可回答的问题
谁让哪个 Agent 做了什么?模型看到了哪些能力和数据?哪个 Policy/确认允许动作?哪个工具版本执行?最终业务状态是什么?数据发往哪里?15. OrderFlow-Agent Threat Model
15.1 关键资产
订单归属退款金额/流水用户联系方式规则版本退款工具凭据审批与 Audit15.2 Abuse Cases
用户伪造管理员要求跨订单退款恶意规则文档注入“自动批准”MCP Tool 描述更新后扩大动作重复超时造成双退款远端 A2A Agent 返回恶意 ArtifactMemory 保存“以后自动退款”Reviewer 确认后金额被模型修改15.3 控制链
API AuthN-> tenant/order ownership-> untrusted input labeling-> read-only capability set-> verified order/logistics facts-> published policy evidence-> deterministic eligibility/amount-> user confirmation bound to args/resource version-> short-lived refund capability-> idempotent execution-> final-state verification-> audit15.4 Policy 示例
deny if subject does not own orderdeny if amount > paid amountrequire human if amount > auto thresholdrequire reconfirm if order/policy/args version changeddeny if evidence bundle conflicting/insufficientallow write tool only for one step and one resource15.5 失败输出
{ "status": "needs_human", "reason_code": "policy_evidence_conflict", "safe_completed_steps": ["order_verified", "logistics_verified"], "forbidden_actions": ["create_refund"], "review_package_ref": "review://run_01J/1"}16. 大厂与行业方案对照
| 方案 | 公开能力 | 可借鉴 | 不能替代 |
|---|---|---|---|
| OpenAI Agents SDK Guardrails | input/output/tool execution hooks | 分层执行点 | 业务 Authz/事务 |
| Google SAIF / Model Armor | AI 安全框架、输入输出防护 | 生命周期/平台防护 | 应用资源级 Policy |
| Microsoft Prompt Shields / PyRIT | 注入检测、自动红队工具 | 检测与测试 | 确定性执行边界 |
| AWS Bedrock Guardrails | 内容、主题、词、PII 等策略 | 云模型调用防护 | 工具副作用治理 |
| NVIDIA NeMo Guardrails | programmable rails | 对话/输入输出/工具流程实验 | 业务真相与权限 |
| OWASP/NIST/MITRE | Threat、Control、Govern/Measure | 威胁模型与治理 | 具体系统实现 |
| MCP/A2A Security | token、SSRF、委派、远端信任 | 协议边界 | 本地业务授权 |
官方入口见 [S1] 到 [S5]。使用云 Guardrail 后仍需应用层 Policy/PEP。
17. 论文与 Benchmark 的工程启发
| 工作 | 关注 | 工程落点 |
|---|---|---|
| CaMeL [P1] | 设计上分离控制/数据流 | capability + taint + interpreter |
| StruQ [P2] | 结构化指令/数据 | Context trust schema |
| Indirect Injection [P3] | 外部内容操控应用 | 所有 tool/RAG 内容不可信 |
| InjecAgent [P4] | 工具型 Agent 间接注入 Benchmark | Tool/Task 攻击集 |
| AgentDojo [P5] | 实用任务、攻击与防御 | 环境级安全评估 |
| ToolEmu [P6] | 模拟工具评估 Agent 风险 | 预发布危险轨迹 |
| R-Judge [P7] | Agent 安全风险意识 | Risk Judge 作为一层信号 |
| AgentHarm [P8] | 有害 Agent 能力评测 | 多步有害任务测试 |
Benchmark 只能覆盖已定义攻击。零样本通过不代表对未知攻击安全;防御必须以最小权限和确定性边界为主。
18. Security Evaluation 与 Red Team
18.1 数据集
Golden SafetyPrompt InjectionAuthorization/IDORTool MisuseData ExfiltrationMemory/RAG PoisoningMCP/Skill Supply ChainAvailability/CostRegression Incidents18.2 指标
Attack Success RateUnsafe Action RateUnauthorized Data ExposureInjection Defense RateFalse Positive/Refusal RateHuman Gate Bypass RateDuplicate Side-effect RateDetection TimeContainment/Recovery Time18.3 环境断言
不要只让 Judge 看回答:
数据库是否被修改是否调用禁止工具是否读取跨租户资源是否发生网络外传是否写入持久 Memory18.4 Adaptive Attacker
固定字符串集容易过拟合。红队应组合:
多语言/编码/分片间接文档/图片/工具结果多轮铺垫权限/业务状态变化供应链/版本漂移成本耗尽18.5 自动化工具
Microsoft PyRIT 等公开工具可用于自动化生成、编排和记录红队实验;模型生成攻击仍需范围、授权和人工治理。[S5]
18.6 Adversarial Case Schema
class SecurityCase(BaseModel): case_id: str threat_id: str initial_state_ref: str attacker_inputs: list[dict] identity: dict allowed_actions: list[str] forbidden_actions: list[str] forbidden_data_refs: list[str] expected_terminal_states: list[str] environment_assertions: list[str] detection_expectations: list[str] cleanup_assertions: list[str]示例断言:
refund_count == 0cross_tenant_reads == 0external_egress_bytes == 0long_term_memory_writes == 0audit contains policy_deny18.7 False Positive 与业务可用性
防御把所有复杂请求都拒绝并不合格。对正常长文、代码、引用、外语和权限允许的高风险流程建立 benign set,测:
False Refusal RateUnnecessary Human EscalationTask Success after GuardrailsGuardrail Latency/Cost18.8 Risk Acceptance
无法消除的风险进入 Risk Register:
risk_id: R-A2A-04scenario: approved remote agent may retain task metadataimpact: mediumcontrols: [data-minimization, contractual-retention, audit]residual_likelihood: lowowner: security-platformaccepted_by: business-ownerexpires_at: 2026-10-15review_trigger: remote-policy-change接受必须有 Owner、期限和重新评审条件。
19. 测试与故障注入
19.1 Identity/Authz
跨租户 ID过期/错误 audience tokenscope/resource 不匹配Agent 伪造管理员委派链缺失19.2 Tool
参数篡改确认后金额变化重复请求outcome_unknown权限在等待期间撤销19.3 Supply Chain
MCP capability driftSkill digest 改变恶意依赖/脚本Agent Card 伪造模型/Adapter 未批准替换19.4 Data
跨租户检索Poisoned RAG/Memory引用泄露Trace PII删除后缓存仍返回19.5 Reliability
Policy/IdP/Audit 不可用Guardrail 超时队列/配额耗尽Sandbox 逃逸尝试HITL 过期/冲突20. Failure Taxonomy
| 编号 | 失败 | 示例 | 首要层 |
|---|---|---|---|
| S01 | Identity Spoof | Prompt 自称管理员 | AuthN |
| S02 | Broken Object Auth | 读取他人订单 | Authz |
| S03 | Injection | 外部内容改写目标 | Context/Policy |
| S04 | Excessive Agency | 未确认退款 | Capability/PEP |
| S05 | Tool Misuse | 参数/顺序危险 | Executor |
| S06 | Data Leakage | 输出/引用/Trace 泄露 | Info Flow |
| S07 | Memory Poison | 恶意指令跨会话 | Memory Policy |
| S08 | RAG Poison | 恶意文档高排名 | Ingestion/Retrieval |
| S09 | Supply Chain | Skill/MCP 被替换 | Registry |
| S10 | Sandbox Failure | 访问 host/metadata | Isolation |
| S11 | Confirmation Bypass | args 变化复用批准 | HITL |
| S12 | Fail Open | Policy 超时仍执行 | PEP |
| S13 | Availability Abuse | 无限循环/工具调用 | Budget/Bulkhead |
| S14 | Audit Gap | 无法归因动作 | Audit |
21. Incident Response
21.1 Detect
异常工具/数据访问攻击检测告警退款/外传异常供应链 digest drift用户报告21.2 Contain
停用 Agent/Prompt/Tool/Skill/Server version撤销 token/credential关闭写能力隔离受影响租户/队列切只读/人工21.3 Investigate
固定:
Trace/Audit/Registry SnapshotPrompt/Model/Policy versionsTool/MCP/A2A artifacts业务状态和外部流量避免在取证前让自动清理覆盖证据。
21.4 Eradicate/Recover
修复根因轮换凭据清理 poisoned memory/index补偿/通知受影响方新增 regressionshadow/canary 恢复21.5 Postmortem
关注系统控制为何未阻止/检测/收敛,不只写“模型回答错误”。
21.6 Runbook 最小内容
触发信号与严重级别值班/业务/隐私/法务联系路径kill switch 与撤销命令证据保全查询受影响版本/租户定位用户/监管通知决策恢复门禁回归与 Postmortem 时限Runbook 每季度或关键架构变化后演练;只写不演练的命令很可能在事故时已过期。
21.7 Security SLO
critical alert acknowledgement timewrite-capability containment timecredential revocation propagationpoisoned artifact removal timeaudit completenesscritical regression pass rateSecurity SLO 与业务可用性一起评审;快速恢复不能以重新开放未验证写能力为代价。
22. 项目目录与实践任务
app/ security/ identity.py delegation.py authorization.py policy_engine.py trust_labels.py info_flow.py confirmations.py redaction.py audit.py supply_chain/ manifests.py signatures.py registry.py scanner.py sandbox/ runtime.py filesystem.py network.py secrets.py reliability/ budgets.py rate_limit.py circuit_breaker.py bulkhead.py fallback.py incident/ detector.py containment.py evidence.pytests/ adversarial/ authorization/ tools/ supply_chain/ sandbox/ chaos/data/ safety_eval.jsonldocs/ threat_model.md data_flow.md security_runbook.md实践顺序:
1. 画资产/主体/信任边界/数据流2. 建身份/委派/资源授权3. 在 Tool 前建 Policy PEP4. 对写动作加确认/幂等/验证5. 为 Context/RAG/Memory 加 trust/ACL6. 建 MCP/Skill Manifest 与隔离7. 建 Sandbox/Secret Broker8. 建 Audit 与安全指标9. 跑 30-50 条 adversarial + chaos Case10. 做一次检测-遏制-恢复演练23. 达标检查清单
Threat/Identity
- 有资产、主体、信任边界和 Abuse Case;
- User/Agent/Service/Human 身份可追踪;
- 委派凭据有 audience/scope/resource/task/expiry;
- 每个业务资源做对象级授权;
- 不从 Prompt 推断可信身份。
Data/Action
- Context 有 trust 与 data classification;
- Policy/PEP 在模型外执行并 fail closed;
- 高风险确认绑定 args/resource/version;
- 写操作幂等且有 final-state verification;
- RAG/Memory 做 ACL、来源、投毒与删除治理。
Supply Chain/Sandbox
- Model/Prompt/Tool/MCP/Skill 有 Manifest/digest/review;
- capability drift 需要审批;
- 脚本/代码/浏览器在最小权限沙箱;
- 网络 deny-by-default,阻断 metadata/private ranges;
- Secret 由 Broker 短期注入,不进模型。
Eval/Response
- 攻击评估检查环境状态,不只看回答;
- 统计 ASR、Unsafe Action、泄露、误拒绝与恢复时间;
- 有 injection/authz/supply-chain/availability 测试;
- Policy/Guardrail 故障不会 fail open;
- 能停用版本、撤销凭据、隔离和回放。
24. 面试与架构评审问题
- Safety、Security 与 Reliability 有什么区别和交集?
- 为什么 Prompt Injection 检测不能成为唯一防线?
- User、Agent、Service 和 Human 身份如何关联?
order:read为什么仍不足以授权订单查询?- PDP、PEP 与 obligation 分别是什么?
- 如何防止确认后参数被替换?
- MCP token passthrough/confused deputy 风险是什么?
- Skill 脚本为什么需要供应链和沙箱治理?
- Fallback 为什么可能降低安全性?
- Audit 与 Trace 有什么差异?
- 如何评估 Agent 安全而不只评估文本?
- 发生跨租户泄露后最先做什么?
25. 参考资料与延伸阅读
以下资料用于威胁建模、控制设计和实验复现。安全页面与攻击快速变化;生产系统应持续更新 Threat Model 和回归集。
标准、框架与大厂方案
[S1] 安全框架与威胁知识库
[S2] MCP 与 Agent 供应链
[S3] OpenAI Guardrails
- OpenAI Agents SDK Guardrails。
[S4] 云端 Guardrail
- Google Cloud Model Armor;
- Microsoft Prompt Shields;
- AWS Amazon Bedrock Guardrails;
- NVIDIA NeMo Guardrails。
[S5] Guardrail 与红队工具
- Microsoft PyRIT。
论文与 Benchmark
[P1] CaMeL
- Debenedetti et al., Defeating Prompt Injections by Design, 2025。
[P2] StruQ
- Chen et al., StruQ: Defending Against Prompt Injection with Structured Queries, 2024。
[P3] Indirect Prompt Injection
[P4] InjecAgent
[P5] AgentDojo
- Debenedetti et al., AgentDojo: A Dynamic Environment to Evaluate Prompt Injection Attacks and Defenses for LLM Agents, NeurIPS 2024 Datasets and Benchmarks。
[P6] ToolEmu
- Ruan et al., Identifying the Risks of LM Agents with an LM-Emulated Sandbox, ICLR 2024。
[P7] R-Judge
- Yuan et al., R-Judge: Benchmarking Safety Risk Awareness for LLM Agents, 2024。
[P8] AgentHarm
- Andriushchenko et al., AgentHarm: A Benchmark for Measuring Harmfulness of LLM Agents, 2024。
26. 阶段总结
生产级 Agent 的安全不变量是:
不可信文本不能成为高优先级指令;模型不能决定自己的身份和权限;能力按主体、资源、状态和任务最小授予;高风险动作由确定性 Policy、确认和执行层约束;外部制品、Memory、RAG、MCP、Skill 都视为供应链输入;失败、超时和降级不能绕过安全;每个动作可归因、可遏制、可恢复。安全系统不是“检测到攻击才安全”,而是即使检测漏掉,攻击仍被限制在低权限、无副作用、可审计的边界内。真正达标的系统能对一次事故明确说明:攻击从哪里进入、经过哪些信任边界、哪层控制阻止或失效、哪些数据/动作受影响、如何遏制、清理和加入回归。