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 劫持, 域名收集, 大语言模型, 恶意代码分类, 误配置预防, 逆向工具, 零日漏洞检测