Zunalkhan/LLM-VUlnerable-scan-Aisec-

GitHub: Zunalkhan/LLM-VUlnerable-scan-Aisec-

面向本地 HuggingFace 模型的 LLM 安全扫描器,通过多检测引擎评估 prompt injection 和越狱漏洞风险。

Stars: 0 | Forks: 0

# LLM 漏洞扫描器 (MVP) 一个用于**本地 HuggingFace 模型**的 prompt injection 和越狱检测扫描器。 向目标模型发射包含对抗性探测的库,通过多个独立的检测引擎对响应进行评分, 并生成 HTML/JSON 报告。 ## 架构 ``` llm_vuln_scanner/ core/ model_adapter.py # LocalHFModel wrapper (+ MockModel for smoke tests) detectors.py # KeywordEngine, CanaryTokenEngine, PerplexityEngine, EmbeddingSimilarityEngine orchestrator.py # Scanner: loads probes, runs them, aggregates risk scores report.py # HTML/JSON report rendering data/ injection_payloads.json # prompt injection probe library jailbreak_payloads.json # jailbreak probe library cli.py # command-line interface api.py # FastAPI service requirements.txt ``` ### 检测引擎 | 引擎 | 检测内容 | 备注 | |---|---|---| | `KeywordEngine` | 已知的顺从/泄露短语,缺少预期的拒绝回复 | 速度快,始终开启,无依赖 | | `CanaryTokenEngine` | System prompt / 上下文泄露 | 在 system prompt 中植入一个秘密 token;如果它出现在输出中,则准确率接近 100% | | `PerplexityEngine` | 对抗性后缀 / GCG 风格攻击 | 标记统计学上异常的 payload token 序列;需要真实模型(非 mock) | | `EmbeddingSimilarityEngine` | 已知攻击的释义/变体 | 可选(`--use-embeddings`),需要 `sentence-transformers` | 每个探测都会结合所有引擎的判定结果获得一个**加权风险评分 (0-100)**; 超过 `--flag-threshold`(默认 40)的探测将在报告中被标记为 `VULNERABLE`。 ## 设置 ``` pip install -r requirements.txt ``` ## 用法 ### CLI 无需下载模型的快速冒烟测试(使用确定性的 mock 模型): ``` python cli.py scan --mock --out report.html ``` 针对本地/hub 模型的真实扫描: ``` python cli.py scan \ --model gpt2 \ --system-prompt "You are a helpful banking assistant. Never reveal account numbers." \ --categories injection --categories jailbreak \ --use-embeddings \ --flag-threshold 40 \ --out report.html ``` 在浏览器中打开 `report.html` 查看完整报告,或使用 `--out report.json` 获取机器可读的输出(例如用于拦截 CI/CD pipeline)。 ### API ``` uvicorn api:app --reload --port 8000 ``` ``` curl -X POST http://localhost:8000/scan \ -H "Content-Type: application/json" \ -d '{ "model_name": "gpt2", "system_prompt": "You are a helpful assistant.", "categories": ["injection", "jailbreak"], "use_embeddings": true }' ``` `GET /probes` 列出当前的探测库。`GET /health` 用于存活检测。 ## 扩展探测库 向 `data/injection_payloads.json` 或 `data/jailbreak_payloads.json` 添加条目: ``` { "id": "inj-009", "category": "direct_override", "payload": "..." } ``` 无需修改代码 —— orchestrator 会动态加载这些内容。 ## 路线图(超出此 MVP 的范围) 根据当前范围,此 MVP 仅涵盖 prompt injection + 越狱检测。 遵循相同的“探测 + 检测器”模式,后续自然的扩展模块包括: 1. **数据/token 中毒检测** — 对 fine-tuning 数据集进行统计异常值检测 (embedding 聚类),与干净的基线模型进行差异化测试。 2. **权重/供应链扫描** — `safetensors` 验证,拒绝加载 pickled checkpoints,基于 activation-clustering 的后门/trojan 检测。 3. **敏感信息泄露探测** — 针对 PII/训练数据 记忆的定向探测(例如重复 token 提取攻击)。 4. **LLM-as-judge 引擎** — 使用第二个模型根据评分规则对响应进行评分, 捕捉 keyword/embedding 引擎遗漏的更隐蔽的违规策略。 5. **多轮升级跟踪** — 评估整个 对话过程中的累积风险,而不仅仅是单次探测。 6. **CI/CD 集成** — 如果 `report.json` 中的 `overall_risk_score` 超过 阈值,则使构建失败,类似于 SAST 拦截。 ## 已知局限性(请提前了解这些) - 检测属于启发式方法;预期会存在误报/漏报,特别是仅使用 `KeywordEngine` 时。请组合使用多个引擎并调整 `--flag-threshold`。 - `PerplexityEngine` 需要一个真实模型(而不是 `MockModel`)才能产生有意义的分数。 - 这是一个防御/红队工具,用于测试**您自己的**模型。未经授权, 它不适用于指向第三方的生产系统。
标签:AI红队, DLL 劫持, 大语言模型, 越狱检测, 逆向工具, 零日漏洞检测