rahulsingh1397/aegis-at
GitHub: rahulsingh1397/aegis-at
一个用于评测多智能体 AI 系统在遭受同级冒充攻击时,委派链审计归因完整性的红队基准测试项目。
Stars: 1 | Forks: 0
# AEGIS-AT — 归因完整性基准测试
[](https://doi.org/10.5281/zenodo.20693303)
[](LICENSE)
**将工业标准的委派机制添加到一个正常运行的
多智能体 AI 系统中,反而会让审计归因变得更糟**,而 v2
测量了修正这一问题的标准化层。**
AEGIS-AT 是一个红队基准测试,用于衡量在多智能体系统中,委派链
归因能否在真实的同级冒充攻击下幸存。它实现了一个最小化的安全运营中心 (SOC) 流水线,并
在作为配置标志应用于单个代码库的渐进式防御
基线中,测量 **归因完整性得分 (AIS)**。
## 发现

| 基线 | 已实施的防御 | 读取的信号 | 追踪执行者? | 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) 与频率不变性
|  |  |
| :--: | :--: |
| 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, 人工智能安全, 合规性, 多智能体系统, 安全规则引擎, 红队评估, 身份与访问控制, 逆向工具