swell-d0t/prompt-injection-detector-app

GitHub: swell-d0t/prompt-injection-detector-app

一个评估和比较多种机器学习模型在检测 LLM prompt injection 攻击及其对抗鲁棒性方面表现的研究型应用。

Stars: 0 | Forks: 0

# Prompt Injection Detector: Group 5C (AI4ALL Ignite) **在线应用:** https://prompt-injection-detector-app.streamlit.app/ ## 概述 本项目评估并比较了用于检测 prompt injection 攻击的机器学习方法;此类恶意输入旨在劫持或操纵大型语言模型。我们微调了一个 DistilBERT transformer 模型,并将其与三个经典 ML 基线(Logistic Regression、SVM 和 Random Forest)进行了基准测试,特别关注于**对抗鲁棒性**:即每个模型在抵御旨在逃避检测的攻击时的表现,而不仅仅是在干净的、未受干扰的数据上的表现。 ## 仓库内容 - `app.py` — 具有两个视图的 Streamlit 应用: - **体验检测器:** 针对任何 prompt 测试 DistilBERT 或任何经典基线模型 - **鲁棒性仪表板:** 可视化展示 20 种不同对抗规避技术的检测率 - `requirements.txt` — 依赖项 - `models/` — 训练好的经典 ML 模型(Logistic Regression、Random Forest、SVM)及其对应的 vectorizers/embedders - `mindgard_results.csv` — 仪表板中使用的对抗鲁棒性结果 DistilBERT 模型本身单独托管在 Hugging Face 上:[swell-d0t/prompt-injection-distilbert-v2](https://huggingface.co/swell-d0t/prompt-injection-distilbert-v2) ## 模型 | 模型 | 类型 | 备注 | |---|---|---| | DistilBERT (v2) | Transformer | 在 xTRam1/safe-guard-prompt-injection + Tensor Trust(合成与人类真实攻击)上微调 | | Logistic Regression (TF-IDF) | 经典 ML | TF-IDF 特征 | | Logistic Regression (Embeddings) | 经典 ML | 通过 all-MiniLM-L6-v2 提取句子 embeddings | | SVM | 经典 ML | 线性核,TF-IDF 特征 | | Random Forest | 经典 ML | TF-IDF 特征,通过 GridSearchCV 调优 | ## 关键发现 初步测试表明,DistilBERT 在其训练分布上的准确率接近完美,但存在一个主要盲点:它无法检测到使用 Unicode 操作(同形异义词、不可见字符、异常间距)的 prompt injection 攻击,几乎完全被规避。在更加多样化的数据集(Tensor Trust,由真实人类提交的对抗攻击组成,而非合成数据)上重新训练后,无需任何额外预处理就弥补了大部分差距。这表明最初的漏洞很大程度上是训练数据多样性问题,而不是固定的架构限制。 ## 团队 ## 引用 Liu, Y., et al. (2023, updated 2025). Prompt Injection Attack Against LLM-Integrated Applications. arXiv:2306.05499. https://arxiv.org/abs/2306.05499 OWASP. (2025). OWASP Top 10 for LLM Applications 2025. https://genai.owasp.org/resource/owasp-top-10-for-llm-applications-2025/ Morris, J., et al. (2020). TextAttack: A Framework for Adversarial Attacks, Data Augmentation, and Adversarial Training in NLP. arXiv:2005.05909. https://arxiv.org/abs/2005.05909 Ribeiro, M. T., Singh, S., & Guestrin, C. (2016). "Why Should I Trust You?": Explaining the Predictions of Any Classifier. arXiv:1602.04938. https://arxiv.org/abs/1602.04938 Pérez, F., & Ribeiro, I. (2022). Ignore Previous Prompt: Attack Techniques for Language Models. arXiv:2211.09527. https://arxiv.org/abs/2211.09527 HackAPrompt: Exposing Systemic Vulnerabilities of LLMs through a Global Scale Prompt Hacking Competition. Schulhoff, S., et al. (2023). Published at EMNLP 2023.https://arxiv.org/abs/2311.16119 Toyer, S., Watkins, O., Mendes, E. A., Svegliato, J., Bailey, L., Wang, T., Ong, I., Elmaaroufi, K., Abbeel, P., Darrell, T., Ritter, A., & Russell, S. (2024). Tensor Trust: Interpretable Prompt Injection Attacks from an Online Game. International Conference on Learning Representations (ICLR). arXiv:2311.01011. ## 下一步计划 ### 技术扩展: 将 Random Forest 和两个 LogReg 变体纳入 DistilBERT 经历过的相同 Mindgard/HackAPrompt 鲁棒性测试 pipeline 中。这将展示所有 5 个模型在对抗鲁棒性上的全面正面交锋对比,而不仅仅是干净的准确率。 探索数据增强(直接在 Unicode 混淆的示例上进行训练,而不仅仅是多样化的攻击内容)是否能消除消融实验中发现的剩余词语替换攻击差距。 使用专用的映射表来正确解决同形异义词易混淆性的限制,而不是使用部分手工构建的映射。 ### 部署/面向生产: 将 DistilBERT + 预处理 pipeline 打包为一个轻量级的 API endpoint(FastAPI),以便其他应用程序在将用户输入传递给 LLM 之前可以调用它。 在部署的应用中添加使用监控/日志记录,以追踪真实流量随时间出现的假阳性/假阴性模式。 ### 面向研究: 调查观察到的非确定性训练方差(源于 Python 的 `set()` 哈希随机化)是否值得通过固定 `PYTHONHASHSEED` 来控制,以实现更可复现的基准测试。 通过在 HackAPrompt 之外的额外保留数据集上进行测试,将“训练数据多样性是否比预处理更能修复漏洞”这一发现扩展为一项更系统的研究。 ### 个人: DistilBERT: 通过直接在对抗性扰动的训练示例上进行微调,来消除剩余的词语替换攻击差距(BAE、PWWS、TextFooler、Bert-Attack 等——在较低但非零的比率下仍会被规避),而不是仅仅依赖于训练数据的多样性。 - 用一个完整的易混淆字符映射表替换手工构建的同形异义词映射(例如通过 `confusable_homoglyphs` 包),因为当前的映射仅涵盖常见的 Cyrillic/Greek 相似字符,而遗漏了不太常见的字符。 - 使用固定的 `PYTHONHASHSEED` 重新运行训练,以消除由于 Python 非确定性的 `set()` 排序而观察到的运行间差异,从而实现更可复现的基准测试。 - 从单一的 训练/测试集 划分转向 k-fold 交叉验证,以获得对模型性能更稳健的估计,而不是依赖于单一固定的划分。 - 对部署的模型应用动态量化,以降低与实时应用程序交互的用户的推理延迟,同时不会对准确性产生实质性影响。 - 将泛化能力测试扩展到 HackAPrompt 之外,至少增加一个独立来源的攻击数据集,以更有把握地确认 Tensor Trust 的重新训练确实提高了现实世界的鲁棒性,而不是仅仅过拟合于该特定数据集的风格。
标签:Apex, Kubernetes, Streamlit, 人工智能, 后端开发, 大语言模型安全, 文本分类, 机器学习, 机密管理, 用户模式Hook绕过, 访问控制, 逆向工具