lalitbist641/piscan
GitHub: lalitbist641/piscan
PIScanner 是一款命令行工具,通过 61 种提示词注入攻击 payload 结合三层级联检测机制,帮助开发者和安全人员系统性评估 LLM 聊天机器人抵御提示词注入攻击的能力。
Stars: 0 | Forks: 1
# PIScanner
**一款用于测试 LLM 聊天机器人提示词注入漏洞的命令行工具。**
PIScanner 会向聊天机器人发射包含 5 个类别的 61 种提示词注入攻击库,记录每一次响应,并使用分层检测级联(关键词匹配、语义相似度以及作为基准事实的 LLM-as-judge)来评估哪些攻击真正取得了成功。它可以通过本地模型(通过 [Ollama](https://ollama.com))或任何真实的聊天机器人 API(借助可配置的 target profile)来运行。
可在 **Windows、macOS 和 Linux(包括 Kali)** 上运行 —— 它是纯 Python 编写的。
## 功能
- **61 个攻击 payload**,涵盖 5 个类别:直接覆盖、间接/RAG 注入、角色劫持、编码混淆和系统提示词提取 —— 外加 15 个良性对照组。
- **感知合规性的检测**,能够区分模型是*顺从*了攻击还是*拒绝*了攻击(因此拒绝不会被计入成功的注入)。
- **LLM-as-judge** 基准事实,使用 GPT-4o 或通过 Ollama 的**免费本地模型**,并提供精确率/召回率报告。
- **多次运行求平均值** (`--repeat`) 和**良性误报对照** (`--benign`)。
- **多模型扫描**,以比较不同模型对相同攻击的抵抗力。
- **可配置的 target adapter**,用于探测真实的聊天机器人 API,而不仅仅是 Ollama。
## 安装说明
要求 Python 3.9+。
```
# macOS / Linux / Kali
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
```
```
# Windows (PowerShell)
python -m venv .venv; .\.venv\Scripts\Activate
pip install -e .
```
可选附加项(重度依赖项,仅在需要时安装):
```
pip install -e ".[semantic]" # Layer-2 semantic detection (installs torch)
pip install -e ".[crawl]" # JS-aware endpoint discovery (installs Playwright)
pip install -e ".[all]" # everything
playwright install chromium # only if you installed the crawl extra
```
## 快速开始
使用 [Ollama](https://ollama.com) 测试本地模型(在所有三种操作系统上的运行方式完全相同):
```
ollama pull llama3.2
ollama serve # in a separate terminal
piscan probe http://localhost:11434/api/chat --output results.json
```
添加免费的本地 judge、多次运行以及误报对照:
```
piscan probe http://localhost:11434/api/chat \
--repeat 5 --benign \
--judge --judge-backend ollama --judge-model llama3.1:8b \
--output results.json
```
## 命令
| 命令 | 描述 |
|---|---|
| `piscan info` | 展示威胁模型和 payload 摘要。 |
| `piscan payloads [--category C] [--text]` | 列出攻击 payload。 |
| `piscan benign` | 列出良性对照提示词。 |
| `piscan discover URL` | 发现网站上的聊天机器人 endpoint(需要 `crawl` 附加项)。 |
| `piscan probe ENDPOINT [options]` | 将 payload 发送至 JSON 聊天机器人 API 并进行评分。 |
| `piscan probe-site URL [options]` | 通过驱动真实浏览器来探测**在线网站聊天机器人**(需要 `crawl` 附加项)。 |
| `piscan judge RESULTS.json [options]` | 使用 LLM judge 对现有的结果文件重新评分。 |
### 主要 `probe` 选项
| 选项 | 含义 |
|---|---|
| `--model NAME` | 作为目标的本地 Ollama 模型(默认为 `llama3.2`)。 |
| `--repeat N` | 将每个 payload 发送 N 次并求平均值(减轻非确定性影响)。 |
| `--benign` | 包含良性对照并报告误报率。 |
| `--profile FILE` | 通过 [target profile](TESTING_REAL_CHATBOTS.md) 探测真实的聊天机器人 API。 |
| `--judge` | 添加 LLM-judge 基准事实标签。 |
| `--judge-backend {openai,ollama}` | 付费的 GPT-4o 或免费的本地 judge。 |
| `--output FILE` | 将原始结果保存为 JSON。 |
## 工作原理
```
Payloads ---> Probe ---> Detect (3-layer cascade) ---> Judge (ground truth)
61 attacks send to 1. keyword (compliance-aware) GPT-4o or local
+ benign target 2. semantic similarity SUCCESS / REFUSED
3. LLM judge -> precision/recall
```
关键词层和语义层成本较低,会对每一次响应运行;而 LLM judge 提供基准事实,以便您衡量低成本层的精确率和召回率。
## 测试真实聊天机器人
根据目标不同有两种方式(无论哪种方式都**需要获得授权**):
**JSON API** —— 如果聊天机器人具有可调用的 HTTP/JSON endpoint,请在 [target profile](targets/example.json) 中对其进行描述:
```
piscan probe --profile targets/example.json --concurrent 1 --benign --output client_results.json
```
**在线网站小部件** —— 如果它是没有 API 的 JavaScript 聊天小部件(大多数网站都是如此),请驱动真实浏览器:
```
pip install -e ".[crawl]" && playwright install chromium
piscan probe-site https://client-website.com --preset intercom --benign --headful
```
预设:`intercom`、`drift`、`zendesk`、`tidio`、`generic`。如果都不合适,请通过 [browser profile](targets/browser-example.json) 提供 CSS 选择器。完整指南、DevTools 演示和授权检查清单,请参阅 **[TESTING_REAL_CHATBOTS.md](TESTING_REAL_CHATBOTS.md)**。
## 多模型比较
```
python sweep.py --models llama3.2 llama3.1:8b mistral --repeat 3 --benign --pull
```
打印出每个模型攻击成功率的并排对比表。
## 负责任地使用
PIScanner 是一款安全测试工具,旨在用于**防御目的**:帮助开发者和研究人员发现并修复他们拥有或被授权测试的系统中的提示词注入弱点。未经明确许可,请勿将其用于任何系统。作者对滥用行为不承担任何责任。请参阅 [LICENSE](LICENSE)。
## 贡献
欢迎贡献代码 —— 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 许可证
[MIT](LICENSE) © 2026 Lalit Bist
标签:AI安全, AI风险缓解, Chat Copilot, DLL 劫持, Python, 凭据扫描, 大语言模型, 无后门, 特征检测, 逆向工具