rahulsingh1397/aegis-at

GitHub: rahulsingh1397/aegis-at

一个用于评测多智能体 AI 系统在遭受同级冒充攻击时,委派链审计归因完整性的红队基准测试项目。

Stars: 1 | Forks: 0

# AEGIS-AT — 归因完整性基准测试 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.20693303.svg)](https://doi.org/10.5281/zenodo.20693303)  [![License: Apache-2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) **将工业标准的委派机制添加到一个正常运行的 多智能体 AI 系统中,反而会让审计归因变得更糟**,而 v2 测量了修正这一问题的标准化层。** AEGIS-AT 是一个红队基准测试,用于衡量在多智能体系统中,委派链 归因能否在真实的同级冒充攻击下幸存。它实现了一个最小化的安全运营中心 (SOC) 流水线,并 在作为配置标志应用于单个代码库的渐进式防御 基线中,测量 **归因完整性得分 (AIS)**。 ## 发现 ![五个基线、两种拓扑下的 AIS](https://static.pigsec.cn/wp-content/uploads/repos/cas/30/307d7eb0ae0fd52f00186475a2f311482b9bd2b40082416173b27096eb9ed644.png) | 基线 | 已实施的防御 | 读取的信号 | 追踪执行者? | AIS | | :------: | :----------------------- | :--------------------------- | :--------------: | :--: | | B1 | 共享服务账户 | 共享凭证 | 未定义 | 0.0 | | B2 | 每个智能体独立的身份 | 执行时的验证器 | 是 | 1.0 | | B3 | + RFC 8693 委派 | 委派的当前操作者 | 否 | 0.0 | | B4 | + 防篡改日志 | 委派的当前操作者 | 否 | 0.0 | | B5 | + DPoP 发送方约束 | 重新交换的当前操作者 | 是 | **1.0** | 该曲线是 **非单调的**:归因在每个智能体独立的身份 (B2) 下是完美的, 当添加 RFC 8693 委派 (B3) 时 **退化为零**,在 防篡改日志 (B4) 下 **保持为零** — 而一旦发送方约束的 token (DPoP) 强制要求执行者表明其身份 (B5),它就 **恢复到 1.0**。为智能体不可否认性最被强调的两个原语(签名委派、 防篡改日志)并没有弥合这一差距;而未被充分强调的 (DPoP) 却做到了。 **为什么会退化 — 结构性机制(不是 bug):** RFC 8693 的“当前操作者” (`act.sub`) 是*请求*委派权限的一方。 在多智能体交接中,*执行*操作的智能体可能与 token 中指名的智能体不同 — 而该标准没有提供任何记录执行者的字段。§4.1 的 `MUST` 仅限于 **访问控制决策**, 而不是审计日志;结合无限制的 bearer token 和先签发后执行的拓扑,现实中的实现记录的是 *请求者*。**v2 的基线 5 弥补了这一点**:DPoP (RFC 9449) 将 token 绑定到其持有者的密钥上,因此构成攻击的伪造行为会被拒绝,执行者必须重新交换一个以自己为名的 token。 ## v2 的新特性 五项更改,每一项都是**同一个**代码库上的一个标志或模块,因此新的数值仍然可与 v1 的数值进行比较: 1. **基线 5 — 发送方约束的 token (DPoP / RFC 9449)。** 执行者必须持有其 token 绑定到的密钥(`cnf: {jkt}`, RFC 7800; 每次请求的证明 JWT)。AIS 恢复到 **1.0** — 这是 v1 指出但未测量的修复方案。 2. **进程边界记录器。** `multiprocessing` + `os.getpid()` 取代了 v1 的 `threading.current_thread().name`。基于 PID 的归因由内核设置,并且对于进程内的线程/标题重命名是 **不可伪造的**。 3. **哈希链日志 + 日志完整性得分 (LIS)。** 真实的防篡改日志(SHA-256 链,签名头部)使基线 4 具体化。LIS 达到 **1.0**(检测到每一次篡改),而 AIS 保持为 **0.0** — 一份关于 *错误* 操作者的防篡改记录。 4. **第二种拓扑 (T2)。** 一个 3 智能体链 `Enrich → Investigator → Contain` 表明差距 **不会随着链深度的增加而弥合**:曲线与 2 智能体的 T1 相同,声称的操作者只是一个更深层的请求者。 5. **随机策略 + Wilson 置信区间。** Bernoulli(p) 升级,每个单元 N ≥ 100 并自适应升级到 N=500,淘汰了 v1 退化的区间。曲线形状对攻击频率是不变的。 ### AIS / LIS 的不对称性 (B4) 与频率不变性 | ![每个基线的 AIS 与 LIS](https://static.pigsec.cn/wp-content/uploads/repos/cas/a8/a8d067463881ea90bb1cd09ba47d9310352aa91a65494fe2530db5dc1b7c680b.png) | ![带有 Wilson 置信区间的随机 AIS](https://static.pigsec.cn/wp-content/uploads/repos/cas/cc/ccb024f3e94bafeb34707c7d5e64770a439f7e67a7f296f04215b5191280bc34.png) | | :--: | :--: | | B4 是防篡改的 (LIS = 1.0) 但归因错误 (AIS = 0.0)。 | 曲线形状在不同升级概率 p 下保持不变。 | *(图表由实时的测试工具生成 — 参见 [复现](#reproduce)。)* ## 为什么这很重要 想象一下医院的自动化安全响应。一个低权限的分流智能体读取警报并上报;一个高权限的遏制智能体隔离了一台机器。之后,审计日志必须回答一个问题:*哪个智能体采取了这一高后果的行动?* 在标准委派下,日志记录的是 **请求** 遏制的智能体,而不是 **执行** 它的智能体 — 因此,塑造触发警报的攻击者可以让高权限操作被归因于错误的、权限较低的智能体,从而掩盖真正执行者的踪迹,同时看起来完全符合规范。 标准领域正在积极寻求这样的测量(NIST NCCoE,2026 年 2 月;OpenID Foundation,2026 年 3 月),而混淆代理漏洞已经在生产环境中出现过(“Clinejection” 事件,2026 年 2 月)。AEGIS-AT 测量的是低一层的归因问题 — *当通过委派执行特权操作时,审计记录是否指名了执行该操作的智能体?* — 而 v2 测量了哪一层标准能够修复它。 ## AEGIS-AT 是什么 一个刻意做到最小化的系统,旨在确保因果链清晰、测量结果站得住脚: - **两个智能体,一个工具**(T1;T2 为三个智能体)。`Agent-Enrich` (低权限,只读)和 `Agent-Contain`(高权限,执行 `isolate_host`)共享一个单一的范围受限 SOAR 工具 `siem_action`。 - **一次攻击。** 一个值得采取遏制措施的警报 — 带有攻击者控制的 文本 — 流经 Enrich;Enrich 正确上报;编排器诚实地签发了一个指名请求者的委派 token;Contain(执行者) 使用了它。日志记录的是请求者,而不是 Contain。 - **作为一个代码库上的配置标志的基线** — 完全相同的工具 / 记录器 / 评分器代码,只有凭证不同。这就是让 AIS 数值具有 可比性,而不是风马牛不相及的原因 (INV-6)。 - **独立的真实情况记录器。** 在 v2 中,它观察的是 *真实的* 执行 **OS 进程** (`os.getpid()`),从不查看 token,因此得分是将系统 *声称* 的内容与 *实际发生* 的情况进行对比。为了观察执行智能体的 PID,工具调用由测试工具 调解(智能体通过 IPC 传输其凭证 + DPoP 证明;测试工具替它运行 该工具)— 这是相对于 v1 的底层更改,但不会影响结果, 这部分在 `threat-model-v2.1.md` §A1 和论文的有效性威胁中披露了。 - **两个严格的指标。** AIS — 对抗行动中声称的 `(actor, scope, principal_chain)` 与实际情况完全匹配的比例。LIS — 事后日志篡改被检测到的比例。分别进行评分和报告。 ## 状态 | 层 | 产出物 | 状态 | | :----------- | :------------------------------------------------------------------------------------------ | :---- | | 预注册 | `Documents/ThreatModel/ThreatModelv2/threat-model-v2.md` (+ `.1` 修正案) + `.sha256` 锁定 + CI 门禁 | 已锁定;修改会导致构建失败 | | v1 (冻结) | `v1/aegis-at/`, `v1/tests/core/`, `v1/scripts/check.sh` | **59 项测试;标签 `v1.0.0`** | | v2 鉴权 | `auth/tokens.py` (+`cnf`), `auth/dpop.py` | DPoP 发送方约束 | | v2 测试工具 | `harness/{agent_proc,agent_bodies,recorder,tamper_log,scorer,sweep,stochastic}.py` | 进程边界, LIS, 随机性 | | v2 拓扑| `topologies/{two_agent,three_agent}.py` | T1 + T2 | | **总计** | | **74 项 v2 测试 + 59 项 v1 测试通过;两个门禁均以状态码 0 退出** | 每一个预测值(两种拓扑上的 B1–B5 曲线、LIS 曲线、 随机点预测)都在编写测量代码*之前* **预注册**在了经过 SHA-256 锁定的威胁模型中;如果出现与预测相矛盾的情况,将作为一项发现报告,而不是强行弥合。所有图表均由实时的测试工具重新生成。 ### 范围(v2 是什么,以及不是什么) 预先声明的刻意边界: - **仅限 DPoP,不包括双向 TLS。** RFC 8705 证书绑定的 token(一种“基线 5b”,预计行为相同)推迟到 v3。 - **两种线性拓扑 (n = 2)。** 扇入和跨组织委派会增加干扰因素,推迟到 v3。 - **脚本化智能体,无 LLM。** 智能体在设计上是确定性的 — 这将委派层的失败与模型行为隔离开来。 - **合成策略。** Bernoulli(p) 升级是一种受控的合成策略;真实的攻击频率遥测数据有待行业合作伙伴提供。 ## 复现 ``` pip install -r requirements.txt # v2(active)— 74 个测试 cd v2 && python -m pytest -q # v1(frozen)— 59 个测试,原始 gate cd v1 && bash scripts/check.sh # 验证预注册锁(LF-normalized,与 CI gate 相同)。 # 规范的检查是上面的 pytest gate;这会手动复现它: python - <<'PY' import hashlib, pathlib d = pathlib.Path("Documents/ThreatModel/ThreatModelv2") for stem in ("threat-model-v2", "threat-model-v2.1"): got = hashlib.sha256((d/f"{stem}.md").read_bytes().replace(b"\r\n", b"\n")).hexdigest() want = (d/f"{stem}.sha256").read_text().split()[0] print(stem, "OK" if got == want else "DRIFT") PY # 从 live harness 重新生成论文图表 python Documents/Paper/v2/figures/make_figures.py # 构建 v2 论文(需要 LaTeX toolchain) cd Documents/Paper/v2 && pdflatex aegis-at-v2.tex # or: make ``` 完整的流水线可在几秒钟内完成复现(包含随机网格 — 每个单元格内的正确性是确定性的,因此扫描会对每个单元格评估一次,并得出升级事件)。 ## 仓库结构图 ``` Documents/ ThreatModel/ threat-model.md v1 — frozen 8-section argument. threat-model-v2.md v2 — §3 recorder, §5 DPoP, §6 LIS, §7 T2, §8 stochastic. threat-model-v2.sha256 pre-registration lock (CI-gated). Paper/ v1/aegis-at.tex / .pdf v1 paper (frozen, 17pp). v2/aegis-at-v2.tex / .pdf v2 paper (active, 14pp). v2/figures/make_figures.py regenerates all figures from the harness. ImportantQuestions/ Working notes — the *why* behind each module. InitialDocs/v2/ Consolidated v2 reference. v1/ FROZEN at tag v1.0.0 (aegis-at/, tests/, scripts/). v2/aegis_at_v2/ auth/tokens.py RFC 8693 token mint + chain (+ optional cnf). auth/dpop.py DPoP sender-constraint (Ed25519, proof, replay cache). policy/scope_map.py Shared command→scope contract. tools/siem_action.py Scope-gated SOAR tool (+ DPoP proof check). orchestrator/orchestrator.py RFC 8693 minter (+ cnf binding). harness/agent_proc.py Process-boundary kernel (os.getpid registry). harness/agent_bodies.py Code that runs inside agent subprocesses. harness/recorder.py Independent ground-truth recorder (PID-based). harness/tamper_log.py Hash-chained, signed tamper-evident log. harness/scorer.py AIS + LIS metrics; non-monotonicity predicate. harness/sweep.py Baseline + topology switch; emits the curves. harness/stochastic.py Bernoulli(p) sweep, Wilson CIs, adaptive N. topologies/ T1 (2-agent) and T2 (3-agent) as data. v2/tests/ 74 tests across phases 1–6. ``` 可以从 `Documents/ThreatModel/ThreatModelv2/threat-model-v2.md`(及其锁定的 `threat-model-v2.1.md` 修正案)开始了解 v2 的论证,或者通过查看 `v2/aegis_at_v2/harness/sweep.py` + `v2/tests/` 了解可执行的结果。 ## 背景与相关工作 AEGIS-AT 处于活跃的标准讨论和一系列真实事件之中。所有引用均已与其实时的主要来源核对。 **标准界的呼吁:** - **NIST NCCoE**, *加速软件和 AI 智能体身份与 授权的采用*(概念论文,2026 年 2 月 5 日)。将 AI 智能体操作的审计和不可否认性列为一个悬而未决的问题,并探讨现有的身份标准应如何应用于多智能体委派,包括多重跳转。 [csrc.nist.gov](https://csrc.nist.gov/pubs/other/2026/02/05/accelerating-the-adoption-of-software-and-ai-agent/ipd) - **OpenID Foundation**, 对 NIST 的回应(2026 年 3 月)。将紧急风险定义为 *信任* 的失败:“谁授权了这个智能体行动?代表谁?这能被 验证吗?” [openid.net](https://openid.net/oidf-responds-to-nist-on-ai-agent-security/) - **云安全联盟**, *针对自主 AI 智能体的混淆代理攻击* (2026 年 3 月 23 日)。确立了混淆代理作为一种高危模式,并指出当操作在受信任智能体的身份下运行时,**审计日志可能看起来合法,从而延误检测** — 这正是 AEGIS-AT 所测量的失败现象。 [labs.cloudsecurityalliance.org](https://labs.cloudsecurityalliance.org/research/csa-research-note-ai-agent-confused-deputy-prompt-injection/) **真实世界中的事件:** - **“Clinejection”**(2026 年 2 月)。精心设计的 GitHub issue 标题驱使 Cline AI 工具的分流机器人陷入供应链妥协 — 在 8 小时的窗口内,约 4,000 台开发者机器上被植入了未经授权的 npm 包[Snyk](https://snyk.io/blog/cline-supply-chain-attack-prompt-injection-github-actions/) - **Salesloft Drift / UNC6395**(2025 年 8 月)。从 AI 聊天 集成中窃取的 OAuth token 从 700 多个组织中窃取了 Salesforce 数据 — 这在生产环境中证明了 **无限制 bearer token** 的弱点,这正是基线 3 所依赖的,并由基线 5 (DPoP) 所弥补。 [Google Threat Intelligence](https://cloud.google.com/blog/topics/threat-intelligence/data-theft-salesforce-instances-via-salesloft-drift) **最接近的现有学术工作:** - *错误归因差距* (2026) 测量的是模型与内存之间的错误归因 — 相关,但是属于不同的层(内存中毒,而不是委派链 归因)。*SentinelAgent / DelegationBench* 测量的是 *检测*,而不是 *归因完整性*。有关完整的定位,请参阅 v2 论文 (`Documents/Paper/v2/aegis-at-v2.tex`)。 ## 许可证 本仓库采用双重许可: - **代码** — `v1/aegis-at/`、`v2/` 以及测试/脚本目录下的所有内容 — 均采用 **Apache License 2.0** 许可。参见 [`LICENSE`](LICENSE)。 - **文档** — `Documents/` 下的所有内容 — 均采用 **知识共享 署名 4.0 国际许可 (CC BY 4.0)**。参见 [`Documents/LICENSE-docs`](Documents/LICENSE-docs)。
标签:PyRIT, 人工智能安全, 合规性, 多智能体系统, 安全规则引擎, 红队评估, 身份与访问控制, 逆向工具