切换深色模式
附录 A:实验手册
A.1 实验环境原则
所有攻击实验只在本地靶场、个人云沙箱或明确授权环境进行。使用虚构身份和合成数据;不得把公司 token、客户数据、生产域名或真实密钥放入代码仓库和公共 AI 服务。
建议环境:Docker/Compose、任一主语言、PostgreSQL、Redis、OpenTelemetry/Prometheus;进阶加入本地 Kubernetes、Keycloak 或同类开源 IdP、OPA/Cedar/OpenFGA 类策略组件、SPIRE。
每个实验按模板记录:目标、架构、威胁、步骤、观察、失败、修复、指标、结论。不要只留最终代码。
A.2 L1:安全 Session 登录
目标
理解密码、Cookie、CSRF、会话固定、限速和审计。
最小功能
- 注册;Argon2id 密码哈希;登录/退出;服务端 session;
Secure/HttpOnly/SameSiteCookie;CSRF token;- 账号与来源组合限速;统一登录错误;
- 会话列表与单个/全部撤销;结构化审计。
故障/攻击
篡改 Cookie、预设 session ID、跨站表单、100 次错误密码、数据库超时、Redis 丢失、时钟漂移。
验收
自动化测试覆盖所有负向路径;日志无密码/session secret;退出后旧会话无法使用;仪表盘显示成功率、失败原因和 P99。
A.3 L2:OIDC Code + PKCE
目标
理解浏览器重定向、code、state、nonce、PKCE、JWKS 和 token claims。
任务
客户端生成随机 state/nonce/verifier;使用 Discovery;精确回调;服务端兑换 code;验证 ID Token;API 验 access token audience/scope。
负向矩阵
| 用例 | 预期 |
|---|---|
| state 丢失/不匹配 | 回调失败,不建立会话 |
| nonce 不匹配 | 拒绝 ID Token |
| code 重放 | AS 拒绝 |
| verifier 错误 | token endpoint 拒绝 |
| audience 为其他 API | 资源服务器 401/拒绝 |
| issuer 相似域名 | 拒绝 |
| JWKS 轮换 | overlap 内不中断 |
| redirect 子域/路径变化 | 未注册则拒绝 |
A.4 L3:Passkey 与恢复
功能:注册多个 Passkey、命名、最后使用、撤销;恢复码哈希保存;新认证器绑定要求近期强认证;旧渠道通知。
场景:新设备、同步 Passkey、设备丢失、唯一认证器被撤销、恢复码重用、客服请求、攻击者已控制邮箱。
指标:注册转化、认证成功、fallback、恢复成功/滥用、工单和旧认证器覆盖。
A.5 L4:策略授权服务
实现 /check、/batch-check 和 /explain;支持角色、资源关系和设备合规;策略 Git 版本;单测和影子决策。
安全不变量:tenant A 永不能访问 tenant B;disabled subject 永不允许;高敏写操作必须近期 MFA;break-glass 最多 30 分钟并告警。
性能:10 万关系、1000 RPS、冷热缓存、策略发布、撤权事件、PIP 不可用。记录 P50/P95/P99 和最坏撤权时间。
A.6 L5:SCIM 与 JML
模拟 HR/IGA/目标 SaaS。处理创建、属性变更、组成员、禁用、重雇。事件可能重复、乱序、延迟或下游 500。
实现事务 outbox、幂等、指数退避、死信、人工重放、每日对账。证明“HR 离职”到全部目标禁用在 SLA 内,失败有明确工单。
A.7 L6:PAM/JIT
用户申请数据库只读权限 20 分钟;manager + resource owner 审批;发短期凭证或代理会话;到期撤销;命令审计。
测试:审批者也是申请人、过期后复用、目标不可达、会话超时、break-glass、审计服务失败。高风险时选择 fail-closed 并设计应急路径。
A.8 L7:SPIFFE 工作负载身份
部署 SPIRE Server/Agent;注册 frontend/orders;获取 X.509-SVID;mTLS;按 SPIFFE ID 授权。观察自动轮换。
测试:复制证书到其他进程、错误 trust domain、SVID 过期、Agent 重启、删除注册、bundle 轮换。对比 JWT-SVID 重放风险。
A.9 L8:身份风险引擎
生成合成事件:正常用户、旅行、撞库、喷洒、MFA fatigue、服务账号异常区域。先规则,再 Logistic/GBDT。
按时间切分;比较 precision、recall、PR-AUC、校准和每千用户误报;影子模式输出 reason code;只让中风险触发 step-up。
A.10 L9:ACL-aware RAG
创建两个租户知识库,文档有 owner/ACL/敏感级别。检索在生成前强制 ACL;答案必须引用;无证据时拒答。
红队:跨租户问题、文档内隐藏“忽略权限”、索引删除延迟、权限变更、冲突文档、诱导输出系统提示。断言未授权文档 ID 永不进入模型上下文。
A.11 L10:Agent 委托网关
组件:用户登录、Agent 实例、委托服务、工具网关、两个 MCP Server、下游 API、审批 UI、审计。
不变量:
- 下游 token 的 audience 只能是目标 API;
- 委托权限不超过用户、Agent 和任务交集;
- MCP token 不透传;
- 高风险动作与审批参数绑定;
- 取消/到期后任何调用拒绝;
- 沙箱无长期凭证;
- 每个动作可追溯到用户、Agent 实例、任务和策略版本。
红队:恶意网页、工具描述投毒、递归委托、跨租户记忆、重复支付、审批后改参数、超预算、kill switch。
A.12 实验报告评分
| 维度 | 权重 | 满分表现 |
|---|---|---|
| 正确性 | 20% | 正向/负向路径可复现 |
| 安全 | 20% | 威胁与不变量有自动测试 |
| 可靠性 | 15% | 超时、重试、幂等、降级明确 |
| 可观测性 | 15% | 指标、日志、trace、告警可用 |
| 业务 | 10% | 有用户/风险/成本指标 |
| 文档 | 10% | 他人可部署、排障、回滚 |
| 反思 | 10% | 说明失败与下一步 |