RedTeamingTest/p2a-injection
GitHub: RedTeamingTest/p2a-injection
面向 LLM Agent 的 Prompt-to-API-Call 注入攻击研究工件,提供 52 个攻击向量、260 个端到端测试场景及五种防御策略的完整评估框架。
Stars: 0 | Forks: 0
# P2A:Prompt-to-API-Call 注入攻击与 D5 语义意图验证器
本文是 JSS 2026 提交的论文《Prompt-to-API-Call
注入攻击》的研究工件。它包含了攻击向量生成框架、端到端
攻击/防御测试框架、五种防御策略(D1–D5),以及论文中使用的所有结果
数据。
## 1. 什么是 P2A
一个持有用户会话凭证的 LLM agent 会将自然语言请求转换为 REST API 调用。**Prompt-to-API-Call (P2A)** 注入会使该 agent 在用户的合法身份下发出*未经授权的* API 调用——这是 LLM-agent 层面的“混淆代理人”。本研究在 5 个类别中(无限制、受限-直接、受限-间接、注入位置、混淆绕过)构建了 **52 个攻击向量**,将其适配到 **5 个异构后端**(Strapi portal、E-Commerce、Gitea、Home Assistant、Directus),从而产生 **260 个端到端场景**,并在 4 个开源 LLM(LLaMA-3 8B、Qwen2.5 7B、Ministral 3B、Qwen2.5-Coder 14B)以及两个商业模型上对它们进行了评估。
## 2. 仓库结构
```
p2a_demo.py Flask harness: attack generation → call → defense → execute → reflect
(POST /api/run is the single entry point the runners call)
attacks.py 52 base attack vectors + per-category operators
{ecommerce,directus,gitea,ha}_attacks.py per-testbed attack adaptations
defenses.py D1–D5 implementations (D5 = Phase-1 whitelist + Phase-2 guard LLM)
api_server.py, ecommerce_api_server.py mock/local backend servers
# Runners
run_rq1_real.py RQ1/RQ2 baseline: 52 × 5 systems × 4 models = 1,040 runs → results/RQ2/
run_defense_experiments.py RQ3: 52 × 5 systems × 6 defenses (LLaMA-3) = 1,560 runs → results/defense/
r12_strategy_ablation.py R1.2 operator selection vs. combination ablation
r21_adaptive_guard.py R2.1 adaptive-attack robustness of the D5 guard ("who guards the guardian")
r22_false_positive.py R2.2 false-positive rate / security–usability trade-off of D5
guard_cloud_eval.py strong-end guard data point (cloud reasoning model)
commercial_crossmodel.py commercial closed-source models (GPT-4o-mini, Claude-Haiku)
# 分析
build_commercial_table.py, analyze_guard_capacity.py assemble manuscript tables
results/ all output data (see §5)
```
`.gitignore` 排除了 `.env` 和本地测试平台部署;测试平台需单独搭建(见 §3)。
## 3. 设置
```
python3 -m venv venv && source venv/bin/activate
pip install flask flask-cors requests # Python 3.11
# 通过 Ollama (https://ollama.com) 使用本地 LLMs
ollama pull llama3:latest # 8B, primary defense model
ollama pull qwen2.5:latest # 7B
ollama pull ministral-3:latest # 3B
ollama pull qwen2.5-coder:14b # 14B
```
在本地部署五个后端(Strapi、Flask E-Commerce 服务器、Gitea、Home Assistant、Directus),并将测试框架指向它们。**所有凭证和 endpoint 均从环境变量中读取——切勿硬编码。**
| 变量 | 用途 |
|---|---|
| `OLLAMA_URL`, `OLLAMA_MODEL`, `LLM_TIMEOUT` | 本地 LLM endpoint / 默认模型 |
| `USE_REAL_BACKEND=1` | 对真实后端执行(对比 mock) |
| `STRAPI_URL`, `ECOMMERCE_URL`, `GITEA_URL`, `HA_URL`, `DIRECTUS_URL` | 测试平台 base URL |
| `GITEA_TOKEN`, `HA_REFRESH_TOKEN` | 测试平台管理员凭证(请自行设置) |
| `COMMERCIAL_API_KEY`, `COMMERCIAL_BASE` | 商业模型 endpoint(OpenAI 兼容) |
| `DEEPSEEK_API_KEY`, `GUARD_CLOUD_MODEL`, `CLOUD_BASE` | 云端推理防护 |
| `GUARD_MODEL` | 用于 D5 的 Phase-2 防护模型(默认为 `llama3:latest`) |
| `DEMO_URL`, `PORT` | 运行器调用的测试框架地址 |
## 4. 复现结果
启动测试框架,然后运行各个阶段:
```
# 0. harness
USE_REAL_BACKEND=1 python p2a_demo.py # serves POST /api/run
# 1. RQ1 (JSON compliance) + RQ2 (cross-model ASR) → results/RQ2/
python run_rq1_real.py --system all --model all --n 1
# 2. RQ3 (五种 defenses, LLaMA-3) → results/defense/
python run_defense_experiments.py --defense all --system all --model llama3:latest
# 3. Revision 实验
python r12_strategy_ablation.py # → results/R12_strategy_ablation.json
OLLAMA_MODEL=llama3:latest python r21_adaptive_guard.py # → results/R21_adaptive_guard_*.json
OLLAMA_MODEL=llama3:latest python r22_false_positive.py # → results/R22_false_positive_*.json
DEEPSEEK_API_KEY=... GUARD_CLOUD_MODEL=deepseek-v4-flash python guard_cloud_eval.py
COMMERCIAL_API_KEY=... python commercial_crossmodel.py # → results/commercial_*.json
```
解码采用贪婪算法(`temperature=0.0`);每个 `⟨model, system, attack⟩` 单元都是一次确定性的单次生成,因此 52 个攻击向量即为复制的单位(Wilson 95% 置信区间基于该总体计算,而非重复采样)。
## 5. 结果 → 论文映射
| 数据 | 论文 |
|---|---|
| `results/RQ2/*/rq1_*_*.json` | RQ1 JSON 合规性(表 2);RQ2 跨模型 ASR(表 6、7) |
| `results/defense/{none,D1..D5}/*_llama3_latest.json` | RQ3 残余 ASR / 拦截率(表 9、10、11) |
| `results/R12_strategy_ablation.json` | 策略选择与组合对比(表 4) |
| `results/commercial_*.json` | 商业闭源模型(表 8) |
| `results/R21_adaptive_guard_*.json`, `results/R22_false_positive_*.json` | D5 防护鲁棒性 / 可用性(表 12) |
每次运行的 JSON 都会记录每次攻击的生成调用、防御决策(`defense_action`、`defense_stage`、`defense_latency_ms`)、后端 `status_code`/响应、反思步骤以及成功判定,因此论文中的每一个聚合结果都可以从原始数据中重新计算得出。
## 6. D5 防御(两个阶段)
1. **Phase 1 — 确定性白名单**(`d3_gate_output`):对生成的 `⟨method, endpoint⟩` 进行 O(1) 复杂度的检查,以核对角色的最小权限白名单。非白名单调用将被拦截,且无需调用模型。
2. **Phase 2 — 语义防护 LLM**(`d5_validate_intent`):通过防护模型检查每个被白名单准入的调用,验证用户查询与生成操作之间的语义一致性;不一致的调用将被拦截。这能够捕获白名单无法防范的“意图漂移”攻击(合法 endpoint,未经授权的意图)。
## 7. 引用
如果您使用了此工件,请引用 JSS 2026 论文(当前参考文献请参见论文原稿)。请通过仓库的 issue 追踪器报告问题。
标签:AI风险缓解, 逆向工具