pilovew/prompt-injection-n8n
GitHub: pilovew/prompt-injection-n8n
一个评估n8n低代码自动化流程中Prompt Injection漏洞的论文复现仓库,包含攻击测试套件、多层防御方案及完整的统计分析工具链。
Stars: 0 | Forks: 0
# LCNC (n8n) 流程中的 Prompt Injection 评估 — 论文代码与数据
本仓库用于复现毕业论文《n8n Low-Code 自动化流程中的 Prompt Injection 漏洞评估与安全控制设计》(UISEK, 2026) 的工作。
包含复现第 4 章中所有数据、表格和图表所需的全部内容:
- **基础设施** (`docker-compose`):用于启动带有取证遥测的 **n8n + PostgreSQL**(持久化所有执行记录)。
- **攻击型 CLI** (Python/Typer):针对 n8n 的 webhook 执行 payload 测试套件,并使用 LLM 裁判评估每个响应。
- **分析** (Pandas/Matplotlib/SciPy/statsmodels):计算 ASR、PDR、延迟,进行 2³ 因子消融实验以及裁判验证。
## 1. 规范数据(唯一事实来源)
论文结果可以基于仓库中已包含的这些文件**完全精确**地复现。重新生成表格和图表无需重新运行测试任务(也不需要 API 密钥):
| 文件 | 内容 | 任务批次 |
|---|---|---|
| `results/registro_plano.csv` | 800 次执行 (40 个 payload × 10 次重复 × 2 种配置) | 基线, 2026-06-29 |
| `results/ablacion.csv` | 1,600 次执行 (40 个 payload × 5 次重复 × 8 种配置) | 2³ 消融实验, 2026-06-30 |
| `results/etiquetado_consolidado.csv` | 由两名人类标注者 (h1, h2) 标注的 60 个判定结果 | 裁判验证 |
## 2. 环境要求
- Docker + Docker Compose
- Python 3.10+
- (仅限重新运行测试任务)在 `.env` 文件中配置 OpenAI 的 API 密钥
```
python -m venv .venv
source .venv/bin/activate # Windows: .\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
```
## 3. 复现表格与图表(无需 API,基于内置 CSV)
四个命令即可重新生成第 4 章的全部内容。
```
# (a) Tablas 2-6 统计数据 -> results/estadisticas/
python -m analysis.estadistica \
--input results/registro_plano.csv \
--output results/estadisticas/
# (b) 评估员验证 (Tabla 6) -> results/estadisticas/tabla6_kappa.json
python -m analysis.validar_juez \
--etiquetado results/etiquetado_consolidado.csv \
--registro results/registro_plano.csv \
--salida results/estadisticas/tabla6_kappa.json
# (c) Figuras 1-4 -> results/figuras/
python generar_figuras.py
# (d) 各层 bootstrap IC 边际效应 (Tabla 4) -> results/estadisticas/
python -m analysis.ablacion_efecto_marginal \
--input results/ablacion.csv \
--salida results/estadisticas/tabla4_efecto_marginal.json
```
### 映射表:论文对象 -> 命令 -> 文件
| 论文中的对象 | 生成方式 | 输出文件 |
|---|---|---|
| 表 2(按类别的 ASR) | `analysis.estadistica` | `results/estadisticas/tabla2_asr_por_categoria.csv` |
| 表 3(McNemar 2×2) | `analysis.estadistica` | `results/estadisticas/tabla3_mcnemar.json` |
| 表 4(拦截归因) | `analysis.estadistica` | `results/estadisticas/tabla4_contribucion_capas.csv` |
| 表 4(边际效应与置信区间) | `analysis.ablacion_efecto_marginal` | `results/estadisticas/tabla4_efecto_marginal.json` |
| 表 5(按路径的 PDR 与延迟) | `analysis.estadistica` | `results/estadisticas/tabla5_pdr_latencia.json` |
| 表 6(混淆矩阵,kappa) | `analysis.validar_juez` | `results/estadisticas/tabla6_kappa.json` |
| §4.4 双语差异(基线与secured) | `analysis.estadistica` | `results/estadisticas/seccion44_bilingue.json` |
| 图 1(按类别的 ASR) | `generar_figuras.py` | `results/figuras/figura1_asr_categoria.png` |
| 图 2(消融实验热力图) | `generar_figuras.py` | `results/figuras/figura2_heatmap_ablacion.png` |
| 图 3(按语言的 ASR) | `generar_figuras.py` | `results/figuras/figura3_asr_idioma.png` |
| 图 4(延迟) | `generar_figuras.py` | `results/figuras/figura4_latencia.png` |
预期值(快速校验):基线 ASR 21.0% -> secured 0.0%;McNemar p = 0.031;第 2 层边际效应 = +17.7 个百分点 [+6.7, +30.3](基于 bootstrap,每次运行会略有波动);secured PDR 为 30%;裁判一致性 kappa 为 0.81 (n = 45)。
## 4. 从头重新运行测试任务(需 n8n + OpenAI)
仅适用于需要重新生成原始 CSV 的情况,不用于复现已有数据。
```
# 1) 环境
cp .env.example .env # coloca OPENAI_API_KEY y N8N_ENCRYPTION_KEY
docker compose -f infrastructure/docker-compose.yml up -d # n8n en http://localhost:5678
```
导入位于 `n8n_workflows/baseline/` 和 `n8n_workflows/secured/` 的流程,以及测试套件 `n8n_workflows/pruebas/TIT_casos_prueba_injection_v2.json`(40 个 payload)。
```
# 2) 基础活动 (800 次执行)
python -m cli_tool.run_suite_v2_cli \
--cases n8n_workflows/pruebas/TIT_casos_prueba_injection_v2.json \
--baseline-url http://localhost:5678/webhook/prompt-test \
--secured-url http://localhost:5678/webhook/prompt-test-secured \
--repeticiones 10 \
--judge-model gpt-4o \
--output-csv results/registro_plano.csv \
--output-jsonl results/registro_crudo.jsonl
# 3) 2³ 消融活动 (关于 8 种配置的详情,请参阅 docs)
python scripts/import_n8n_ablacion.py # importa/activa los 8 flujos de ablación
```
详细分步说明见 `docs/GUIA_EJECUCION_CAP4.md` 和 `docs/ABLACION_setup_n8n.md`。
模型(为保证可复现性已固定):受害模型 **GPT-4o-mini**(温度 0.3);第 2 层 guardrail 与裁判模型 **GPT-4o**(温度 0.0)。
## 5. 范围与伦理
- 本研究**仅涵盖直接注入**;不包含间接注入。
- 环境运行于隔离的 Docker 中;唯一的互联网出口是模型提供商的 API。不处理任何个人数据(payload 和良性任务均为合成数据)。
- 测试套件仅用于防御目的(红蓝对抗/red teaming);对 payload 的记录仅以满足实验复现的必要程度为限。
## 6. 仓库结构
```
infrastructure/ docker-compose de n8n + PostgreSQL (telemetría forense)
n8n_workflows/ flujos baseline / secured / ablación y batería de payloads
cli_tool/ CLI ofensiva (runner v2, juez LLM-as-a-Judge, re-judge)
analysis/ estadistica.py, validar_juez.py, ablacion_efecto_marginal.py,
visualizer.py, metrics
generar_figuras.py genera las 4 figuras del Capítulo 4
results/ CSV canónicos, estadisticas/ y figuras/
docs/ guías de ejecución del Capítulo 4 y de la ablación
```
### 已知局限性(已在论文 §4.7 中声明)
包含 30 个攻击型 payload 的测试套件(统计功效有限);仅基于单一平台和单一受害模型(外部有效性);未包含自适应攻击者;第 2 层阈值固定为 0.7,未进行系统性阈值扫描。`barrido_umbral.csv` 仅为占位文件:阈值扫描需要记录每个请求的 guardrail 置信度,这被列为未来的工作。
标签:AI安全, Chat Copilot, LLM评估, n8n, Ollama, 代码示例, 数据分析, 毕业论文, 测试用例, 版权保护, 请求拦截, 逆向工具