usmanzia-ux/llm-security-toolkit
GitHub: usmanzia-ux/llm-security-toolkit
一款针对 LLM 应用的轻量级黑盒安全扫描器,基于 OWASP LLM Top 10(2025)标准自动探测已部署 LLM 服务中的安全漏洞。
Stars: 0 | Forks: 0
# llm-security-toolkit
一款**针对基于 LLM 应用的黑盒安全扫描器**。将其指向某个聊天机器人、agent 或 LLM API endpoint,它将运行一系列映射到 [OWASP Top 10 for LLM Applications (2025)](https://genai.owasp.org/llm-top-10/) 的对抗性**探针**(probes),随后生成一份评估报告,您可以直接将其提交给工程团队或附加到 pentest 报告中。
它内置了**离线 mock 目标**,因此您可以直接克隆代码库并通过一条命令查看完整的扫描过程——包含真实发现的漏洞——且无需 API key。
```
llmsec --target mock
```
```
Scan Results
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Probe ┃ OWASP ┃ Severity ┃ Result ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━┩
│ LLM02-SID │ LLM02:2025 │ Critical │ VULNERABLE │
│ LLM01-PI │ LLM01:2025 │ High │ VULNERABLE │
│ LLM01-JB │ LLM01:2025 │ High │ VULNERABLE │
│ LLM05-IOH │ LLM05:2025 │ High │ VULNERABLE │
│ LLM07-SPL │ LLM07:2025 │ Medium │ VULNERABLE │
└───────────┴────────────┴──────────┴────────────┘
Overall posture: Critical (5/5 probes vulnerable)
```
## 为什么需要
大多数 LLM 安全工具要么是研究型 notebook,要么是重量级平台。而这是一个小巧、轻依赖的 CLI/库,只专注做好一件事:**像攻击者一样探测已部署的 LLM 应用,并报告出哪些环节被攻破**,且使用客户已经熟悉的术语(OWASP LLM Top 10)。
## 测试内容
每个探针代表一种攻击类别。检测基于签名机制(canary 字符串、凭据格式的 regex、标记反射),因此测试结果具有高可信度,而不是基于“模型说了一些令人毛骨悚然的话”这种主观判断。
| Probe | OWASP (2025) | 检查内容 |
| --- | --- | --- |
| `LLM01-PI` | LLM01 Prompt Injection | 直接指令覆盖 —— 攻击者输入是否会劫持任务? |
| `LLM01-JB` | LLM01 Prompt Injection | 通过角色扮演(DAN)和 Base64/ROT13 编码绕过越狱(Jailbreak) / 护栏 |
| `LLM07-SPL` | LLM07 System Prompt Leakage | 隐藏的 system prompt 是否能被原封不动地提取出来? |
| `LLM02-SID` | LLM02 Sensitive Information Disclosure | 应用是否会在其上下文中泄露 secrets/PII(API key、连接字符串、密码)? |
| `LLM05-IOH` | LLM05 Improper Output Handling | 活动内容(XSS/SSTI)是否在未转义的情况下返回到了下游 sink? |
运行 `llmsec --list` 查看详情。
## 目标
扫描器仅控制 *user* 消息 —— 无论应用使用了何种 system prompt、工具或护栏,这些都是受测试的对象。
| Backend | Spec | 备注 |
| --- | --- | --- |
| 离线 mock | `mock` / `mock-secure` | 故意设计的易受攻击 / 已加固的聊天机器人。无需网络,无需 key。 |
| OpenAI 兼容 | `openai:gpt-4o-mini` | OpenAI, Azure, Ollama, vLLM, OpenRouter… (`OPENAI_API_KEY`) |
| Anthropic | `anthropic:claude-sonnet-4-6` | Claude Messages API (`ANTHROPIC_API_KEY`) |
| 通用 HTTP | `http` + `--config file.yaml` | 任何自定义 endpoint;支持模板化请求 + JSON 响应路径 |
API 目标仅使用 Python 标准库 —— 无需安装任何供应商 SDK。
## 安装
```
git clone https://github.com/usmanzia-ux/llm-security-toolkit
cd llm-security-toolkit
pip install -e . # installs the `llmsec` command
# 或无需安装直接运行:
PYTHONPATH=. python3 -m llmsec.cli --target mock
```
要求 Python 3.9+。运行时依赖:`rich`、`pyyaml`。
## 用法
```
# 离线 mock 的全面扫描,Markdown 报告(默认)
llmsec --target mock -o report.md
# 扫描真实的 OpenAI 兼容部署
export OPENAI_API_KEY=sk-...
llmsec --target openai:gpt-4o-mini --system "You are ACME support bot."
# 扫描由 Claude 支持的应用
export ANTHROPIC_API_KEY=sk-ant-...
llmsec --target anthropic:claude-sonnet-4-6
# 指向任意聊天机器人 endpoint
llmsec --target http --config examples/http_target.yaml
# 运行部分 probes,输出 JSON
llmsec --target mock --probes LLM01-PI,LLM02-SID -f json -o findings.json
# CI gate:如果确认存在 High+ 级别的 finding,则以非零状态退出
llmsec --target mock --fail-on high
```
### CI 集成
`--fail-on {critical,high,medium,low}` 可将扫描器作为构建门禁 —— 当确认的发现达到设定的阈值时,它将以状态码 `1` 退出,从而在您的 prompt 加固出现回退时使流水线(pipeline)失败:
```
- run: llmsec --target $STAGING_LLM --fail-on high
```
## 输出
- **Markdown**(默认)—— 精简的评估报告,可在 GitHub 上完美渲染,包含摘要表格、每个漏洞的概念验证(攻击 prompt + 模型响应)以及修复建议。
- **JSON** —— 机器可读格式,适用于流水线(pipelines)、仪表盘或对比两次扫描结果。
## 架构
```
llmsec/
├── targets/ one backend per file (mock, openai, anthropic, http) → Target.ask()
├── probes/ one attack class per file → ProbeResult; registry in __init__
├── detectors.py pure response classifiers (refusal, secret regex, marker reflection)
├── scanner.py runs probes against a target → ScanReport
├── reporters/ one output format per file (markdown, json)
├── models.py Severity / Owasp / Attempt / ProbeResult / ScanReport
└── cli.py argparse + rich front-end
```
**扩展它非常简单:**
- *添加攻击* → 在 `probes/` 中放入一个 `Probe` 子类,并在 `probes/__init__.py` 中注册它。它需要实现 `attack_prompts()` 和 `judge()`。
- *添加目标* → 在 `targets/` 中放入一个 `Target` 子类,并将其接入工厂模式中。
- *添加输出格式* → 在 `reporters/` 中添加一个模块。
`mock` 和 `mock-secure` 目标兼作测试预言机(test oracle):每个探针必须在易受攻击的 mock 上触发,并在已加固的 mock 上通过,这正是测试套件所断言的内容。
## 测试
```
pip install -e ".[dev]"
pytest -q # 36 tests, fully offline
```
## 道德规范使用说明
这是一款防御性工具,仅用于对您拥有或获得书面授权评估的系统进行测试。未经同意,请勿将其指向第三方服务。
## 许可证
MIT © Usman Zia
标签:DLL 劫持, 域名收集, 大语言模型, 恶意代码分类, 误配置预防, 逆向工具, 零日漏洞检测