TonyKong0/Prompt_Injection_Detection
GitHub: TonyKong0/Prompt_Injection_Detection
针对 LLM 应用的直接和间接提示注入攻击检测研究系统,核心贡献是基于多信号融合的 IPI 检测框架。
Stars: 0 | Forks: 0
# 提示注入检测
一个针对基于 LLM 的应用程序,用于检测**直接提示注入 (DPI)** 和**间接提示注入 (IPI)** 攻击的研究系统。
## 概述
随着大型语言模型在 Agentic 和基于 RAG 的流水线中日益广泛部署,提示注入攻击构成了重大的安全风险。本项目旨在研究针对两种不同攻击类型的检测算法:
- **直接提示注入 (DPI)**:直接嵌入在用户输入中的恶意指令
- **间接提示注入 (IPI)**:隐藏在推理时检索的外部内容(文档、对话历史、网页)中的恶意指令
核心贡献是用于 IPI 检测的**多信号融合框架**,该框架结合了三种互补的语言信号,且无需在推理时运行完整的 LLM。
## 算法设计
### DPI 检测
基于 DistilBERT 的二元分类器,在标记好的提示注入数据集上进行了微调。
| 模型 | 准确率 | F1 | 推理速度 |
|---|---|---|---|
| fastText 风格 | 96.16% | 0.965 | 0.095 ms/样本 |
| TextCNN | 97.53% | 0.977 | 0.439 ms/样本 |
| **DistilBERT (ours)** | **99.21%** | **0.993** | 5.18 ms/样本 |
### IPI 检测 — 核心贡献
双层检测架构:
```
External Content (retrieved docs / conversation history)
│
▼
[Layer 1] Multi-Signal Warning (rule-based)
├── Instructionality Analysis (weight ~30%)
├── Authority Conflict Analysis (weight ~45%)
└── Execution Affinity Detection (weight ~25%)
│
▼
[Layer 2] DistilBERT Final Decision (fine-tuned)
└── Context: [USER] + [HISTORY] + [DOC]
```
**三种检测信号:**
| 信号 | 目的 | 关键模式 |
|---|---|---|
| 指令性 | 检测祈使/命令语言 | "ignore previous instructions", "output system prompt" |
| 权限冲突 | 检测角色冒充和权限覆盖 | "you are the system", "override constraints" |
| 执行亲和性 | 检测机器可执行的控制结构 | `[system]:`, "for automated assistants only" |
**IPI 检测结果(4,000 个样本测试集):**
| 方法 | 精确率 | 召回率 | F1 | 准确率 |
|---|---|---|---|---|
| 多信号警告(规则) | 47.55% | 78.88% | 0.593 | 57.5% |
| **BERT 最终决策(ours)** | **85.93%** | **90.14%** | **0.880** | 90.32% |
| 组合流水线 | 45.28% | 97.14% | 0.618 | 52.75% |
**消融实验 — 信号贡献排名:**
| 信号 | 分离能力 |
|---|---|
| 指令性 | 0.0473 (最强) |
| 权限冲突 | 0.0236 |
| 执行亲和性 | 0.0056 |
**跨场景泛化能力(BERT 模型):**
| 场景 | F1 | 准确率 |
|---|---|---|
| 对话历史注入 | 0.884 | 90.60% |
| RAG 基本注入 | 0.875 | 89.80% |
| HTML 包装注入 | 0.905 | 91.95% |
| JSON 包装注入 | 0.878 | 90.38% |
| Markdown 包装注入 | 0.849 | 89.63% |
## 仓库结构
```
PromptInjectionDetection/
├── config/
│ └── dpi_config.yaml # DPI model configuration
├── src/
│ ├── dpi/
│ │ ├── dpi_detector.py # DPI detector with threshold logic
│ │ ├── train_dpi_model.py # DistilBERT fine-tuning
│ │ ├── run_dpi_baselines.py # Baseline model implementations
│ │ └── dataset_loader.py
│ ├── ipi/
│ │ ├── ipi_detector.py # Multi-signal fusion detector (core)
│ │ ├── ipi_bert_detector.py # IPI DistilBERT classifier
│ │ ├── instructionality.py # Signal 1: instructionality
│ │ ├── authority_conflict.py # Signal 2: authority conflict
│ │ ├── execution_affinity.py # Signal 3: execution affinity
│ │ ├── train_ipi_detector.py
│ │ └── dataset_loader.py
│ ├── data/
│ │ ├── build_ipi_dataset_v1.py # Random split dataset builder
│ │ ├── build_ipi_dataset_v2.py # Source-grouped split (no leakage)
│ │ └── build_synthetic_ipi_v1.py # Synthetic IPI data generator
│ ├── training/
│ │ └── train_detector.py # Shared training framework
│ └── utils/
│ ├── paths.py
│ ├── metrics.py
│ └── plot_styles.py
├── experiments/
│ ├── run_dpi_experiment.py # DPI evaluation
│ ├── run_ipi_experiment.py # IPI Bayesian optimization
│ ├── run_ipi_ablation.py # Ablation study
│ ├── run_ipi_experiment_bert.py # BERT IPI evaluation
│ └── run_unified_experiment.py # Full pipeline benchmark
└── data/
└── examples/ # Sample data (see Data section)
```
## 快速入门
### 安装说明
```
pip install -r requirements.txt
```
### 数据
由于体积较大,完整的训练数据集未包含在本仓库中。IPI 数据集基于公开可用的越狱基准构建。要构建数据集:
```
# 构建带有源级划分的 IPI 数据集(推荐)
python src/data/build_ipi_dataset_v2.py
# 生成合成 IPI 样本
python src/data/build_synthetic_ipi_v1.py
```
将 DPI 数据集(Parquet 格式)放置在 `data/dpi/` 中。
### 训练
```
# 训练 DPI 检测器
python src/dpi/train_dpi_model.py
# 训练 IPI BERT 检测器
python src/ipi/train_ipi_detector.py
```
模型将保存到 `outputs/model/`。
### 评估
```
# 评估 DPI 检测器并比较基线
python experiments/run_dpi_experiment.py
# 运行 IPI 贝叶斯超参数优化
python experiments/run_ipi_experiment.py
# IPI 消融研究(信号贡献分析)
python experiments/run_ipi_ablation.py
# Full pipeline 基准测试
python experiments/run_unified_experiment.py
```
结果将以 JSON 格式保存到 `outputs/results/`。
## 关键设计决策
**源级别数据拆分**:IPI 数据集使用 `GroupShuffleSplit` 按 `source_id` 进行拆分,以防止训练/测试拆分之间的数据泄露——当多个样本源自同一文档时,这是一种常见的问题。
**上下文感知降噪**:每个信号模块都包含特定于领域的降权规则,以减少对良性技术内容的误报(例如,讨论提示注入的学术论文、部署文档)。
**贝叶斯超参数优化**:使用 Optuna 联合优化 12 个权重和阈值参数,以在满足最低精确率约束的前提下最大化召回率。
## 前置条件
- Python 3.9+
- 建议使用支持 CUDA 的 GPU 进行训练(推理可在 CPU 上运行)
标签:AI红蓝对抗, Apex, CISA项目, DistilBERT, DLL 劫持, DPI检测, fastText, IPI检测, NLP, RAG安全, Red Canary, TCP/UDP协议, TextCNN, 二分类模型, 云计算, 人工智能安全, 凭据扫描, 合规性, 多信号融合, 大语言模型, 安全防御系统, 实时处理, 密码管理, 指令性分析, 提示注入, 文本分类, 机器学习, 权限冲突分析, 检索增强生成, 深度学习, 直接提示注入, 算法研究, 系统调用监控, 网络安全, 规则引擎, 逆向工具, 间接提示注入, 隐私保护, 集群管理