6272 字
31 分钟

Agent 安全、约束与可靠性:从威胁建模到纵深防御

本文是 精英 Agent 工程师学习路线:从范式理解到生产级落地 阶段 10 的配套学习笔记。 核心结论:安全目标不是让模型“永远不受骗”,而是让被误导、出错或被攻陷的模型仍无法越权读取、泄露数据或直接造成不可恢复副作用。Guardrail 是完整系统的执行点,不是一段更强硬的 System Prompt。

本文与 Prompt 注入攻击防护:从指令分层到生产级多层防御体系 互补:已有专篇深入注入攻击;本文扩展到身份、授权、供应链、沙箱、可用性、审计与事故响应。


0. 学习目标与范围#

学完本文后,你应该能够:

  1. 区分 Safety、Security、Privacy、Reliability、Compliance 与 Abuse Prevention;
  2. 用资产、主体、信任边界、入口、能力和影响构建 Threat Model;
  3. 传播用户、Agent、服务和委派身份,执行资源级授权;
  4. 用 Policy Decision Point/Enforcement Point 管理动作、数据与义务;
  5. 为工具副作用、TOCTOU、幂等、确认与最终状态建立防线;
  6. 治理 MCP Server、Agent Skill、模型、Prompt 和依赖供应链;
  7. 防止 RAG/Memory 投毒、跨租户泄漏与持久化注入;
  8. 为代码、浏览器和 Computer-use Agent 建立 OS/网络/凭据沙箱;
  9. 设计不会被“确认疲劳”绕过的 HITL;
  10. 用对抗测试、红队、故障注入、审计与响应演练验证系统。

本文不会承诺某个检测器、云 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
模型/Adapter
Tool/MCP/Skill 凭据
Memory/RAG/Index
业务动作与资金
Trace/Audit/Eval 数据

2.2 主体#

End User
Organization Admin
Agent Runtime
Model Provider
Tool/MCP/A2A Service
Human Reviewer
Operator/Developer
Attacker/Supply-chain Publisher

2.3 信任边界#

Browser -> API Gateway
Application -> Model Provider
Harness -> Tool/MCP Server
Agent -> A2A Remote Agent
Runtime -> Sandbox
Ingestion -> RAG/Memory
Production -> Observability/Eval
Human Reviewer -> Approval Service

2.4 数据流图#

每条边标记:

data classification
identity/auth method
purpose
retention
encryption
allowed destinations
failure mode

2.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: str

2.6 Security Requirement Matrix#

Threat Model 必须转成可测试需求:

RequirementEnforcementEvidenceTest
跨租户订单不可读Tool/API AuthzPolicy + audit eventIDOR cases
未确认不可退款Tool PEPconfirmation refbypass cases
Restricted 数据不外发Model/A2A egress PEProute decisionexfiltration cases
Skill 未批准不可运行Registry/Sandboxdigest/manifesttamper cases
Policy 故障不开放写Tool PEPfail-closed metricchaos 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: str

2.7 Threat Model Diff#

以下变化触发重新评审:

新增模型供应商/区域
新增写工具或权限
接入 MCP/A2A/Skill
Memory/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: str

3.3 不透传广域 Token#

用户 Token 不应原样交给外部 MCP/A2A/子 Agent。使用短时、audience 明确、scope/resource/task 绑定的委派凭据,或由可信后端执行代理。

3.4 资源级授权#

有 order:read scope
≠ 可以读取任意 order_id

还需验证:

tenant
owner/relationship
resource state
field-level access
purpose

3.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 | None

4.3 Information Flow Policy#

restricted data -> external model: deny unless approved route
confidential tool result -> public response: redact/project
untrusted document -> tool arguments: require structured extraction + policy
private memory -> shared agent: deny

4.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 | None

5.3 Obligations#

mask.phone
limit.amount=5000
verify.order_owner
use.model_route=internal
log.audit.high_risk
confirm.user.bound_args

5.4 Fail Closed#

Policy Engine 超时、解析失败、属性缺失:

read-only low risk -> configurable degraded path
write/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:谁能创建哪类 Run
Context PEP:哪些数据可进入哪个模型/Agent
Capability PEP:当前 Step 暴露哪些工具
Tool PEP:动作/资源/参数是否执行
Memory PEP:能否写入/读取哪个 namespace
A2A PEP:能否委托给哪个远端 Agent
Output 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
-> Audit

6.3 参数完整性#

确认 Token 绑定:

subject
tool/version
resource/version
normalized args hash
amount/currency
expiry

模型修改金额后,旧确认失效。

6.4 Outcome Unknown#

写工具超时:

不直接 retry
-> query by operation/idempotency key
-> reconcile final state
-> only then retry/complete/human

6.5 Availability#

每工具设置:

timeout
concurrency
rate/budget
max payload
retry matrix
circuit breaker
bulkhead

攻击者可诱导 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 regression

8. RAG 与 Memory 安全#

8.1 Ingestion#

来源 allowlist/signature
malware/OCR/hidden-text scan
ACL/tenant/effective time
内容 hash/version
发布审批
index snapshot

8.2 Retrieval#

filter before rank
source trust/freshness
poisoning anomaly
quote/span validation
untrusted label

8.3 Memory Write#

candidate only
PII/secret/injection classification
consent/purpose/retention
scope/namespace
conflict/provenance
policy commit

8.4 Persistent Attack#

攻击内容写入 Memory 后跨会话生效。删除需要覆盖 Canonical Store、向量/搜索/图索引、缓存、摘要和备份保留流程。

8.5 Data Poisoning Detection#

来源分布突变
同文档大量近重复
异常高检索命中
高风险指令短语
图实体/边暴增
记忆写入率异常

检测只用于触发隔离/审核,不自动判定真值。


9. MCP、A2A 与 Skill 供应链#

9.1 MCP 风险#

恶意 Server/Tool description
token passthrough/audience 错误
confused deputy
DNS rebinding/SSRF
capability drift
Tool Result Injection

MCP 官方 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.0
publisher: platform-ai
digest: sha256:...
permissions:
filesystem: [workspace-read]
network: [order-api.internal]
secrets: []
risk: medium
reviewed_at: 2026-07-15
expires_at: 2026-08-15

9.5 更新流程#

quarantine
-> manifest/diff/SBOM/signature
-> static/dynamic scan
-> sandbox tests
-> adversarial eval
-> human approval
-> pinned canary
-> monitor/rollback

9.6 SBOM 与 Provenance#

对 MCP Server、Skill Script、Sandbox 镜像保存:

source repository/commit
builder identity
build workflow
dependency lock/SBOM
artifact digest/signature
vulnerability scan
license 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 sandbox
Container
VM/microVM
Dedicated account/project
Physical/organizational isolation

风险越高,隔离越强。

10.2 文件#

ephemeral workspace
read-only inputs
write allowlist
path traversal/symlink defense
size/quota
no host home/SSH/cloud credentials

10.3 网络#

deny by default
DNS/IP/domain allowlist
block metadata service/private ranges
proxy with audit
download size/type scan
egress data policy

10.4 进程#

non-root
syscall/capability restrictions
CPU/memory/time/process limit
no privileged mount/socket
kill entire process tree on timeout

10.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/revokes

10.6 Credential 约束#

audience
scope/action
resource/tenant
short TTL
one task/step
non-exportable where possible
rotation/revocation

10.7 Sandbox Output Boundary#

沙箱产生的文件、日志和网络结果在返回 Agent 前:

path/size/type validation
malware scan
secret/PII scan
content hash
untrusted label
artifact 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 输出层#

Schema
claim/citation verification
PII/secret redaction
tenant/resource authorization
channel-specific policy

12.2 Side Channel#

泄露不仅在正文:

错误栈
文件名/URI
citation link
tool name/args
token/latency 差异
Trace/metrics labels

12.3 Error Contract#

对用户:稳定、最小、可行动的错误码;内部:受控 Trace 引用。不要返回原始 Provider/SQL/文件路径错误。

12.4 Observability#

Trace 默认不记录完整 Prompt、工具原文和 Secret。按数据分类做采样、加密、访问控制、保留和审计。


13. 可靠性与安全联动#

13.1 Deadline/Budget#

max steps/model/tool calls
wall-clock deadline
token/cost budget
per-tool quota
max delegation depth

防循环和资源耗尽攻击。

13.2 Circuit Breaker#

当模型/工具错误、安全阻断或异常动作率超过阈值:

close write capabilities
degrade to read-only/rule/human
isolate version/provider/server

13.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: str

14.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 关键资产#

订单归属
退款金额/流水
用户联系方式
规则版本
退款工具凭据
审批与 Audit

15.2 Abuse Cases#

用户伪造管理员要求跨订单退款
恶意规则文档注入“自动批准”
MCP Tool 描述更新后扩大动作
重复超时造成双退款
远端 A2A Agent 返回恶意 Artifact
Memory 保存“以后自动退款”
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
-> audit

15.4 Policy 示例#

deny if subject does not own order
deny if amount > paid amount
require human if amount > auto threshold
require reconfirm if order/policy/args version changed
deny if evidence bundle conflicting/insufficient
allow write tool only for one step and one resource

15.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 Guardrailsinput/output/tool execution hooks分层执行点业务 Authz/事务
Google SAIF / Model ArmorAI 安全框架、输入输出防护生命周期/平台防护应用资源级 Policy
Microsoft Prompt Shields / PyRIT注入检测、自动红队工具检测与测试确定性执行边界
AWS Bedrock Guardrails内容、主题、词、PII 等策略云模型调用防护工具副作用治理
NVIDIA NeMo Guardrailsprogrammable rails对话/输入输出/工具流程实验业务真相与权限
OWASP/NIST/MITREThreat、Control、Govern/Measure威胁模型与治理具体系统实现
MCP/A2A Securitytoken、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 间接注入 BenchmarkTool/Task 攻击集
AgentDojo [P5]实用任务、攻击与防御环境级安全评估
ToolEmu [P6]模拟工具评估 Agent 风险预发布危险轨迹
R-Judge [P7]Agent 安全风险意识Risk Judge 作为一层信号
AgentHarm [P8]有害 Agent 能力评测多步有害任务测试

Benchmark 只能覆盖已定义攻击。零样本通过不代表对未知攻击安全;防御必须以最小权限和确定性边界为主。


18. Security Evaluation 与 Red Team#

18.1 数据集#

Golden Safety
Prompt Injection
Authorization/IDOR
Tool Misuse
Data Exfiltration
Memory/RAG Poisoning
MCP/Skill Supply Chain
Availability/Cost
Regression Incidents

18.2 指标#

Attack Success Rate
Unsafe Action Rate
Unauthorized Data Exposure
Injection Defense Rate
False Positive/Refusal Rate
Human Gate Bypass Rate
Duplicate Side-effect Rate
Detection Time
Containment/Recovery Time

18.3 环境断言#

不要只让 Judge 看回答:

数据库是否被修改
是否调用禁止工具
是否读取跨租户资源
是否发生网络外传
是否写入持久 Memory

18.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 == 0
cross_tenant_reads == 0
external_egress_bytes == 0
long_term_memory_writes == 0
audit contains policy_deny

18.7 False Positive 与业务可用性#

防御把所有复杂请求都拒绝并不合格。对正常长文、代码、引用、外语和权限允许的高风险流程建立 benign set,测:

False Refusal Rate
Unnecessary Human Escalation
Task Success after Guardrails
Guardrail Latency/Cost

18.8 Risk Acceptance#

无法消除的风险进入 Risk Register:

risk_id: R-A2A-04
scenario: approved remote agent may retain task metadata
impact: medium
controls: [data-minimization, contractual-retention, audit]
residual_likelihood: low
owner: security-platform
accepted_by: business-owner
expires_at: 2026-10-15
review_trigger: remote-policy-change

接受必须有 Owner、期限和重新评审条件。


19. 测试与故障注入#

19.1 Identity/Authz#

跨租户 ID
过期/错误 audience token
scope/resource 不匹配
Agent 伪造管理员
委派链缺失

19.2 Tool#

参数篡改
确认后金额变化
重复请求
outcome_unknown
权限在等待期间撤销

19.3 Supply Chain#

MCP capability drift
Skill digest 改变
恶意依赖/脚本
Agent Card 伪造
模型/Adapter 未批准替换

19.4 Data#

跨租户检索
Poisoned RAG/Memory
引用泄露
Trace PII
删除后缓存仍返回

19.5 Reliability#

Policy/IdP/Audit 不可用
Guardrail 超时
队列/配额耗尽
Sandbox 逃逸尝试
HITL 过期/冲突

20. Failure Taxonomy#

编号失败示例首要层
S01Identity SpoofPrompt 自称管理员AuthN
S02Broken Object Auth读取他人订单Authz
S03Injection外部内容改写目标Context/Policy
S04Excessive Agency未确认退款Capability/PEP
S05Tool Misuse参数/顺序危险Executor
S06Data Leakage输出/引用/Trace 泄露Info Flow
S07Memory Poison恶意指令跨会话Memory Policy
S08RAG Poison恶意文档高排名Ingestion/Retrieval
S09Supply ChainSkill/MCP 被替换Registry
S10Sandbox Failure访问 host/metadataIsolation
S11Confirmation Bypassargs 变化复用批准HITL
S12Fail OpenPolicy 超时仍执行PEP
S13Availability Abuse无限循环/工具调用Budget/Bulkhead
S14Audit 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 Snapshot
Prompt/Model/Policy versions
Tool/MCP/A2A artifacts
业务状态和外部流量

避免在取证前让自动清理覆盖证据。

21.4 Eradicate/Recover#

修复根因
轮换凭据
清理 poisoned memory/index
补偿/通知受影响方
新增 regression
shadow/canary 恢复

21.5 Postmortem#

关注系统控制为何未阻止/检测/收敛,不只写“模型回答错误”。

21.6 Runbook 最小内容#

触发信号与严重级别
值班/业务/隐私/法务联系路径
kill switch 与撤销命令
证据保全查询
受影响版本/租户定位
用户/监管通知决策
恢复门禁
回归与 Postmortem 时限

Runbook 每季度或关键架构变化后演练;只写不演练的命令很可能在事故时已过期。

21.7 Security SLO#

critical alert acknowledgement time
write-capability containment time
credential revocation propagation
poisoned artifact removal time
audit completeness
critical regression pass rate

Security 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.py
tests/
adversarial/
authorization/
tools/
supply_chain/
sandbox/
chaos/
data/
safety_eval.jsonl
docs/
threat_model.md
data_flow.md
security_runbook.md

实践顺序:

1. 画资产/主体/信任边界/数据流
2. 建身份/委派/资源授权
3. 在 Tool 前建 Policy PEP
4. 对写动作加确认/幂等/验证
5. 为 Context/RAG/Memory 加 trust/ACL
6. 建 MCP/Skill Manifest 与隔离
7. 建 Sandbox/Secret Broker
8. 建 Audit 与安全指标
9. 跑 30-50 条 adversarial + chaos Case
10. 做一次检测-遏制-恢复演练

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. 面试与架构评审问题#

  1. Safety、Security 与 Reliability 有什么区别和交集?
  2. 为什么 Prompt Injection 检测不能成为唯一防线?
  3. User、Agent、Service 和 Human 身份如何关联?
  4. order:read 为什么仍不足以授权订单查询?
  5. PDP、PEP 与 obligation 分别是什么?
  6. 如何防止确认后参数被替换?
  7. MCP token passthrough/confused deputy 风险是什么?
  8. Skill 脚本为什么需要供应链和沙箱治理?
  9. Fallback 为什么可能降低安全性?
  10. Audit 与 Trace 有什么差异?
  11. 如何评估 Agent 安全而不只评估文本?
  12. 发生跨租户泄露后最先做什么?

25. 参考资料与延伸阅读#

以下资料用于威胁建模、控制设计和实验复现。安全页面与攻击快速变化;生产系统应持续更新 Threat Model 和回归集。

标准、框架与大厂方案#

[S1] 安全框架与威胁知识库#

[S2] MCP 与 Agent 供应链#

[S3] OpenAI Guardrails#

[S4] 云端 Guardrail#

[S5] Guardrail 与红队工具#

论文与 Benchmark#

[P1] CaMeL#

[P2] StruQ#

[P3] Indirect Prompt Injection#

[P4] InjecAgent#

[P5] AgentDojo#

[P6] ToolEmu#

[P7] R-Judge#

[P8] AgentHarm#


26. 阶段总结#

生产级 Agent 的安全不变量是:

不可信文本不能成为高优先级指令;
模型不能决定自己的身份和权限;
能力按主体、资源、状态和任务最小授予;
高风险动作由确定性 Policy、确认和执行层约束;
外部制品、Memory、RAG、MCP、Skill 都视为供应链输入;
失败、超时和降级不能绕过安全;
每个动作可归因、可遏制、可恢复。

安全系统不是“检测到攻击才安全”,而是即使检测漏掉,攻击仍被限制在低权限、无副作用、可审计的边界内。真正达标的系统能对一次事故明确说明:攻击从哪里进入、经过哪些信任边界、哪层控制阻止或失效、哪些数据/动作受影响、如何遏制、清理和加入回归。

Agent 安全、约束与可靠性:从威胁建模到纵深防御
https://jupiter-ws.cn/posts/agent/agent-security-reliability-engineering/
作者
Jupiter
发布于
2026-04-21
许可协议
CC BY-NC-SA 4.0