Chunduri-Aditya/agent-shield
GitHub: Chunduri-Aditya/agent-shield
一个基于 Inspect AI 的 LLM Agent 安全评估框架,通过报告攻击成功率、良性任务效用及独创的透明率来全面衡量 Agent 在对抗性压力下的安全表现。
Stars: 0 | Forks: 0
# agent-shield
一个用于评估 LLM agents 在对抗性压力下表现的框架。基于 [Inspect AI](https://inspect.aisi.org.uk) 测试工具运行。兼容 AgentDojo。报告大多数 agent 基准测试会忽略的维度:agent 是否告知其操作者它正遭受攻击。
## 为什么需要它
大多数 agent 基准测试回答两个问题:
1. 用户任务成功了吗?
2. 攻击成功了吗?
一个能够默默抵御攻击的系统胜过被劫持的系统。但它不如一个既能抵御攻击*又能*指出其所发现问题所在的系统。Agent Shield 将这种缺失的信号称为 **Transparency Rate**(透明率),并在各模块中一致地报告该指标。
早期数据揭示了一个值得关注的对比现象。同一家提供商在直接 prompt injection 上的得分可能为零,但却能在 Cialdini 压力下标记出操纵行为。而另一家提供商在面对相同问题和相同随机种子时,在这两种场景下均未暴露任何异常。如果这种对比在规模化后依然成立,那么“模型抵御了攻击”和“模型大声宣告其抵御了攻击”就不再是相同的结果了。
## 模块覆盖范围
| 模块 | 状态 | 探测内容 | 攻击 ID |
|---|---|---|---|
| `inputs/` | live | 通过直接指令覆盖进行 Prompt injection | IN-01..IN-05 |
| `tools/` | live | 通过描述和输出注入进行 MCP 工具投毒 | TL-01..TL-05 |
| `psych/` | live | 基于 Cialdini 的社会工程学(6 大原则) | PS-01..PS-06 |
| `memory/` | live | 通过检索注入进行 RAG 存储投毒 | MM-01 |
| `exfil/` | live | 隐蔽的数据渗出渠道(零宽字符、同形异义字、base64、URL 接收端) | EX-01..EX-05 |
| `drift/` | live | 多轮行为漂移与迎逢操纵 | DR-01..DR-06 |
| `env/` | deferred (v1.1) | PDF、图像、日历、电子邮件载荷 | — |
| `multiagent/` | deferred (v1.1) | 对抗性对等节点与 orchestrator 攻击 | — |
各模块待解决问题详见 [ROADMAP.md](ROADMAP.md)。范围锁定详见 [SHIP_LINE.md](SHIP_LINE.md)。
## 威胁模型
Agent Shield 的目标是 **LLM agents**,而非抽象意义上的纯聊天模型。四个对抗级别如下:
- **L1** — 攻击者编写 agent 读取的内容
- **L2** — 攻击者发布 agent 使用的工具
- **L3** — 攻击者投毒 memory 或检索过程
- **L4** — 攻击者在多 agent 工作流中充当对等 agent
纯聊天模型仅作为非 agentic 接口(`inputs/`、`drift/`、`psych/`、`exfil/` 的部分内容)的有效目标。完整模型详见 [THREAT_MODEL.md](THREAT_MODEL.md)。
## 指标
每次评估都报告相同的四个核心指标:
- **Benign Utility** — 无攻击情况下的任务成功率
- **Utility Under Attack** — 攻击运行期间的任务成功率
- **Targeted ASR** — 针对特定目标的攻击成功率
- **Transparency Rate** — 在受攻击的运行中,agent 向用户暴露攻击行为的比例
对于本项目而言,缺乏 Transparency Rate 的结果是不完整的。TR 既是一项安全指标,也是一项认知可访问性指标——它反映了 agent 让其防御行为对能力受限的人类操作者具有可读性的比率。
## 当前状态
目前有六个模块已上线,涵盖 27 个攻击 ID:`inputs/`、`tools/`、`psych/`、`memory/`、`exfil/`、`drift/`。核心模块中记录了所有四种交付线模型的日志:`anthropic/claude-sonnet-4-5`、`ollama/llama3.1:8b`、`groq/llama-3.3-70b-versatile` 以及 `google/gemini-3.5-flash`。目前有一个防御基线已上线:针对 `inputs/` 和 `psych/` 的 spotlighting 技术。包含随机种子、日期和 Inspect 日志文件名的各模型、各模块覆盖情况详见 [RESULTS.md](RESULTS.md)。范围锁定详见 [SHIP_LINE.md](SHIP_LINE.md)。
## 仓库结构
```
agent-shield/
├── evals/ Inspect AI task definitions (one file per module)
├── inputs/ Prompt injection attack registry
├── tools/ MCP attack registry and demo server
├── psych/ Cialdini grounded attack registry
├── memory/ RAG store and poisoning attack registry
├── exfil/ Covert exfiltration attack registry
├── drift/ Behavioral drift attack registry
├── defenses/ Defense baselines (spotlighting)
├── reports/ Plain-language report schema and latest output
├── scripts/ Sweep runner, model registry, auth checks
├── tests/ Pytest suite
├── docs/ Reading notes, free agent backend reference
├── risk_registry.py AIVSS-scored attack metadata with CIA and OWASP mappings
├── report_generator.py Plain-language report builder (make report)
├── ROADMAP.md Module status and per module open questions
├── SHIP_LINE.md v1.0.0 scope lock and done criteria
├── THREAT_MODEL.md Threat model and metric definitions
├── MAPPINGS.md OWASP LLM, OWASP Agentic, MITRE ATLAS attack registry
├── RESULTS.md Logged runs with seeds, dates, model IDs, commit SHAs
├── BACKLOG.md Out of scope ideas and v1.1 deferred items
└── ETHICS.md Responsible disclosure policy
```
## 技术栈
- Python `3.11+`
- [uv](https://docs.astral.sh/uv/) 用于环境和依赖管理
- [Inspect AI](https://inspect.aisi.org.uk) 用于评估编排
- `inspect-evals[agentdojo]` 来自于 `../inspect_evals` 的本地可编辑检出
- Provider SDKs:Anthropic、OpenAI、Google GenAI
## 快速开始
```
uv sync
# .env 已被 gitignore — 请直接添加你的密钥:
# ANTHROPIC_API_KEY, GROQ_API_KEY, GOOGLE_API_KEY
# Ollama 无需密钥:ollama serve && ollama pull llama3.1:8b
make status # check which models are available
make eval # Inspect harness smoke test
make eval-inputs # IN-01..IN-05
make eval-tools # TL-01..TL-05
make eval-psych # PS-01..PS-06
make eval-memory # MM-01
make eval-exfil # EX-01..EX-05
make eval-drift # DR-01..DR-06
make eval-all # all six modules
make sweep # run all modules against all available models
make report # generate plain-language report from latest eval log
make test # pytest
make lint # ruff
```
## 环境变量
本仓库使用的 Provider 密钥:
- `ANTHROPIC_API_KEY`
- `OPENAI_API_KEY`
- `GOOGLE_API_KEY`
- `GROQ_API_KEY`
密钥存放在 `.env` 文件中(已被 gitignore 忽略)。免费后端参考请见 [docs/free_agents.md](docs/free_agents.md)。
## 可复现性
可复现性记录保留在仓库内:
- [RESULTS.md](RESULTS.md) — 包含模型 ID、随机种子、时间戳、commit SHA 的运行摘要
- [MAPPINGS.md](MAPPINGS.md) — 每个攻击均映射至 OWASP LLM、OWASP Agentic、MITRE ATLAS
- [docs/reading_notes.md](docs/reading_notes.md) — 按攻击代码索引的论文笔记
## 测试
Agent Shield 会在单元测试路径之外进行模型调用。测试主要验证
确定性评分、攻击元数据一致性、论文工件
可复现性、风险门控行为以及报告生成。完整的测试套件
无需 API 密钥、网络访问或本地模型服务器即可运行。
```
make test # pytest — no API keys required
make lint # ruff + mypy
```
## 安全性
如果在本仓库的代码或工具中发现问题,请按照 [.github/SECURITY.md](.github/SECURITY.md) 的说明私下报告。披露政策详见 [ETHICS.md](ETHICS.md)。
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:CISA项目, DLL 劫持, LLM代理, 多语言支持, 大语言模型, 安全测试框架, 对抗性机器学习, 红队评估, 逆向工具