SalCyberAware/PromptShield

GitHub: SalCyberAware/PromptShield

PromptShield 是一款开源的LLM应用漏洞扫描器,专门解决AI系统缺乏标准化安全测试的问题。

Stars: 1 | Forks: 0

# 🛡️ PromptShield **针对LLM应用的开源漏洞扫描器** *使用OWASP LLM Top 10、MITRE ATLAS技术及自定义对抗性攻击测试AI端点和聊天机器人。* [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/3e1351e640072654.svg)](https://github.com/SalCyberAware/PromptShield/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) ![Python](https://img.shields.io/badge/Python-3.11%20%7C%203.12%20%7C%203.13-blue) ![Tests](https://img.shields.io/badge/tests-162%20passing-brightgreen) ![Attacks](https://img.shields.io/badge/attacks-50-orange) ![OWASP](https://img.shields.io/badge/OWASP%20LLM-Top%2010%20Coverage-purple) ## PromptShield 是什么? PromptShield 是一个免费、开源的漏洞扫描器,专门为AI应用设计。虽然 Nessus 和 Qualys 等传统扫描器覆盖了基础设施,但尚无等效工具用于测试 LLM 驱动的系统,以防范提示注入、数据泄露、越狱和其他特定于 AI 的攻击。 **PromptShield 填补了这一空白。** **问题所在:** 公司正在各处部署 LLM,但缺乏标准化的方法来测试其安全漏洞。现有的 AI 红队测试需要人类专家、昂贵的顾问或每年花费超过5万美元的专有工具。 **解决方案:** 一个社区驱动的开源扫描器,它使用多分析器集成方法自动测试 AI 端点,以应对行业标准框架(OWASP LLM Top 10、MITRE ATLAS),从而实现低误报率。 ## 状态 **第一阶段完成。** PromptShield 拥有一个可用的命令行界面扫描器,包含覆盖所有10个 OWASP LLM Top 10 类别的50种攻击、两个互补的分析器(基于模式 + Claude AI)、HTML 和 JSON 报告生成器,以及在 Python 3.11、3.12 和 3.13 上运行的、包含162个测试的 pytest 套件。 ## 截图 ### CLI 扫描输出 ![CLI 扫描摘要](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/02411615e1072655.png) ### HTML 报告 单个可分享文件,按严重性着色,包含可折叠的详细记录: ![HTML 扫描报告](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/35f0f932ba072656.png) ## 路线图 - ✅ **第一阶段**(已完成):核心 CLI 扫描器,包含50-攻击的 OWASP LLM Top 10 库、多分析器引擎、HTML/JSON 报告、pytest 套件 - 🚧 **第二阶段**(下一步):通过 Playwright 进行 Web 应用扫描 - 📋 **第三阶段**:额外的集成分析器(GPT-4o-mini 验证器) - 📋 **第四阶段**:Web UI + 高级报告(PDF / SARIF) - 📋 **第五阶段**:研究论文及对公共 AI 应用的实证研究 ## 功能 ### 当前可用 - **50种攻击**,覆盖所有10个 OWASP LLM Top 10 类别 - **多分析器引擎**:基于模式 + Claude AI 分析器,采用置信度加权投票 - **多提供商支持**:自动检测 Anthropic 和 OpenAI API - **HTML 报告**:可分享的单文件输出,具有严重性着色的布局、摘要卡片和可折叠的详细记录 - **JSON 报告**:机器可读输出,包含相同数据,适用于管道和 SIEM 系统 - **详细模式**:检查完整的提示/响应记录以供研究 - **密钥脱敏**:API 密钥在保存的报告中自动脱敏 - **基于环境的认证**:从 `.env` 加载 API 密钥(绝不通过命令行) - **MITRE ATLAS 映射**:攻击标记了相应的 ATLAS 技术(如适用) - **丰富的 CLI**,带有彩色输出、进度条和结构化表格 - **自动重试**:瞬时 API 故障(速率限制、服务器错误、超时)会以指数退避方式重试 - **优雅中断**:Ctrl+C 会干净地停止扫描,而不是转储堆栈跟踪 ### 计划中 - Web 应用扫描(Playwright) - 用于集成分析的 GPT-4o-mini 验证器 - PDF / SARIF 报告格式 - Web UI 仪表板 - GitHub Actions SARIF 集成 ## 安装 ``` git clone https://github.com/SalCyberAware/PromptShield.git cd PromptShield pip install -e ".[dev]" ``` 需要 Python 3.11+。 ### 配置 API 密钥 将 `.env.example` 复制为 `.env` 并添加您的 API 密钥: ``` cp .env.example .env # 编辑 .env 并添加: # ANTHROPIC_API_KEY=sk-ant-... # OPENAI_API_KEY=sk-... ``` **切勿将 `.env` 提交到源代码控制中。** PromptShield 的 `.gitignore` 默认会排除它。 ## 快速开始 ``` # 显示系统信息(验证您的 API 密钥已加载) promptshield info # 浏览攻击库 promptshield library list promptshield library stats promptshield library show PS-LLM01-001 # 扫描 API 端点(仅模式匹配,免费) promptshield scan --target https://api.anthropic.com/v1/messages --categories LLM10 # 启用 AI 分析器进行扫描(使用 Claude 进行更深层次的语义分析) promptshield scan --target https://api.anthropic.com/v1/messages \ --categories LLM10 \ --use-ai-analyzer \ --verbose \ --output scan_results.json # 将报告保存为可分享的 HTML(格式根据扩展名自动检测) promptshield scan --target https://api.anthropic.com/v1/messages \ --categories LLM10 \ --use-ai-analyzer \ --output report.html # Dry-run 以查看将被扫描的内容 promptshield scan --target https://api.example.com --dry-run # 扫描特定的 OWASP 类别 promptshield scan --target https://api.example.com --categories LLM01,LLM06 ``` ## 攻击库 PromptShield 附带了覆盖所有 OWASP LLM Top 10 类别的 **50种攻击**: | 类别 | 描述 | 数量 | |----------|-------------|-------| | LLM01 | 提示注入 | 10 | | LLM02 | 不安全的输出处理 | 5 | | LLM03 | 训练数据投毒 | 3 | | LLM04 | 模型拒绝服务 | 5 | | LLM05 | 供应链漏洞 | 3 | | LLM06 | 敏感信息泄露 | 6 | | LLM07 | 不安全的插件设计 | 3 | | LLM08 | 过度授权 | 5 | | LLM09 | 过度依赖 | 3 | | LLM10 | 模型窃取 | 3 | | CUSTOM | PromptShield 研究 | 4 | **严重性分布:** 2个严重 · 21个高危 · 21个中危 · 6个低危 攻击参考了真实研究(CVE-2021-44228 Log4Shell, Greshake et al. 2023, Zou et al. 2023, Carlini et al. 训练数据提取),并为每个发现提供了修复指导。 ## 多分析器架构 PromptShield 使用两个互补的分析器对攻击是否成功进行投票: ``` Target's Response │ ├──→ PatternAnalyzer (fast, free, deterministic) │ └─ Regex/keyword matching against expected indicators │ └──→ ClaudeAnalyzer (slower, costs ~$0.003 per call, semantic) └─ Claude evaluates whether the attack succeeded │ Combined Verdict ←──────────────────────────┘ (both analyzers agree = HIGH confidence finding) (analyzers disagree = MEDIUM confidence, flagged for review) (neither detects = no finding) ``` ### 为何重要 在针对 Anthropic 的 Claude API 测试三个 LLM10(模型窃取)攻击时,**仅基于模式的检测正确识别了3个攻击中的2个**。添加 Claude AI 分析器后找回了被遗漏的攻击(`PS-LLM10-002` 能力映射)——但两个分析器在该攻击上*意见不一致*。置信度加权投票正确地产生了**中等置信度的发现(57%),标记为需要人工审查**,而不是静默丢弃(假阴性)或假装结论是确定的(假阳性)。 这是纯模式匹配存在可衡量的假阴性率的经验证据,也表明具有明确分歧处理能力的集成方法可以同时做到两件有用的事:减少漏检,并将不确定的案例交由人工处理,而不是过度声称置信度。 这一发现将在最终的研究论文中引用。 ## 测试 PromptShield 有一个全面的 pytest 套件,通过 GitHub Actions 在每次推送时运行: ``` # 运行所有测试 pytest tests/ -v # 带覆盖率 pytest tests/ --cov=promptshield --cov-report=term-missing ``` **当前状态:** 162个测试在约4秒内通过,总体覆盖率为93%。 | 模块 | 覆盖率 | |--------|----------| | `models.py` | 100% | | `analyzers/pattern.py` | 100% | | `analyzers/claude_analyzer.py` | 88% | | `attacks/library.py` | 96% | | `reporters/json_reporter.py` | 96% | | `reporters/html_reporter.py` | 100% | | `engines/api_scanner.py` | 75% | | `engines/base.py` | 98% | | `cli.py` | 93% | 测试中所有 HTTP 调用和 API 交互都被模拟——没有真实的 API 调用,没有成本,没有不稳定的网络依赖。 ## 架构 ``` PromptShield/ ├── promptshield/ │ ├── cli.py # Click + Rich command-line interface │ ├── models.py # Pydantic data models │ ├── attacks/ │ │ ├── library.py # Attack library loader and filtering │ │ └── data/attacks_v1.yaml │ ├── analyzers/ │ │ ├── pattern.py # Fast pattern-based analyzer │ │ └── claude_analyzer.py # AI-powered semantic analyzer │ ├── engines/ │ │ ├── base.py # Multi-analyzer orchestration │ │ └── api_scanner.py # Multi-provider API scanner │ └── reporters/ │ ├── html_reporter.py # HTML output (Jinja2 template, redacted) │ ├── json_reporter.py # JSON output with secret redaction │ └── templates/ │ └── scan_report.html.j2 └── tests/ # 162 pytest tests ``` ## 技术栈 - **语言:** Python 3.11+ - **CLI:** Click + Rich - **API 扫描:** httpx (异步) - **Web 扫描 (第二阶段):** Playwright - **AI 分析器:** Anthropic Claude (工作中), OpenAI GPT-4o-mini (计划中) - **报告:** JSON (标准库) + HTML (Jinja2) - **Web 框架 (第四阶段):** FastAPI + React/Vite - **数据模型:** Pydantic v2 - **测试:** pytest, pytest-asyncio, pytest-cov ## 安全与隐私 PromptShield 将安全和隐私作为首要关注点: - **默认零数据保留**——除非明确启用,否则不存储扫描数据 - **无遥测**——PromptShield 绝不发送数据回服务器 - **自动密钥脱敏**——API 密钥和凭据在 JSON 和 HTML 输出中被脱敏 - **本地优先设计**——攻击库加载后可完全离线工作 - **基于环境的认证**——API 密钥从 `.env` 加载,绝不通过命令行要求 - **仅限负责任使用**——该工具设计用于测试您拥有或有权测试的系统 漏洞披露政策详见 [SECURITY.md](SECURITY.md)。 ### 合规对齐 - NIST AI 风险管理框架 (AI RMF) - ISO 42001 (AI 管理系统) - OWASP LLM Top 10 - MITRE ATLAS - NIST 800-53 (如适用) ## 贡献 欢迎贡献——特别是: - **攻击库的新攻击**(影响最大,入门门槛低) - 额外的分析器集成 - 文档改进 - 错误报告和功能请求 攻击贡献格式和拉取请求流程详见 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 为何选择 PromptShield? ### 对比手动红队测试 - **手动:** 需要人类专家,速度慢,昂贵,不一致 - **PromptShield:** 自动化,快速,可重复,社区可贡献 ### 对比商业 AI 安全工具 - **商业:** 每年超过5万美元,供应商锁定,方法不透明 - **PromptShield:** 免费,开源,透明,社区驱动 ### 对比单模型测试 - **单模型:** 单一分析器带来的偏见,单点故障 - **PromptShield:** 基于模式匹配 + Claude AI 的集成,采用置信度加权投票 ## 作者 **Salah-Adin Mozeb** 网络安全硕士 — 佐治亚理工学院 (在读) CompTIA Security+ | Network+ | A+ | Cisco CCNA GitHub: [@SalCyberAware](https://github.com/SalCyberAware) ### 该作者的其他开源安全工具 - **[ThreatScan](https://github.com/SalCyberAware/ThreatScan)** — 多引擎威胁情报平台 - **[SOCTriage](https://github.com/SalCyberAware/SOCTriage)** — AI 驱动的 SOC 警报分诊助手 ## 许可证 MIT — 免费使用、修改和分发。见 [LICENSE](LICENSE)。
标签:AI安全, AI应用安全, AI红队, Chat Copilot, LLM漏洞扫描器, MITRE ATLAS, OWASP LLM Top 10, Python, 二进制发布, 低误报率, 安全测试, 安全规则引擎, 对抗攻击测试, 开源工具, 提示注入, 攻击性安全, 无后门, 社区驱动, 运行时操纵, 逆向工具, 集群管理