OWASP/PwnzzAI

GitHub: OWASP/PwnzzAI

一个由 OWASP 推出的、以披萨店为场景的交互式学习平台,旨在通过实操演示帮助安全从业者掌握并防御大语言模型应用中的各类安全漏洞。

Stars: 62 | Forks: 17

# 🍅 欢迎来到 PwnzzAI(/pəʊnzɑː/) Shop —— 充满漏洞的披萨店!💻 PwnzzAI Shop 在 PwnzzAI Shop,每一块披萨都为您提供了一份**全面的 AI 安全教学**。这个注重实践的学习平台旨在帮助专业人员通过引人入胜且实用的披萨店场景,掌握如何**广泛地保护 AI 技术**。 就像错误的配料会毁掉一个披萨一样,有缺陷的 prompt 或不完善的架构也会使 AI 技术面临严重威胁,包括信息泄露、知识产权盗窃或非法访问。 在这里,您将探索有关漏洞如何产生、被利用以及如何缓解的**实际案例**。某些页面需要您使用 alice/alice 或 bob/bob 进行登录。拿上一块披萨,开始深入探索,体验学习 AI 安全的无限乐趣吧。 **目录** - [关于](#about) - [范围与学习目标](#scope-and-learning-goals) - [设置说明](#setup-instructions) - [选项 1:Docker (PwnzzAI + Ollama)](#option-1-docker-pwnzzai--ollama) - [如果默认镜像拉取失败(本地构建)](#if-the-default-image-does-not-pull-build-locally) - [选项 2:Docker(使用您自己的 Ollama + PwnzzAI 镜像)](#option-2-docker-your-own-ollama--pwnzzai-image) - [选项 3:自行运行源码](#option-3-run-source-code-yourself) - [故障排除:Ollama 连接问题 (WSL + Docker)](OLLAMA_CONNECTION_TROUBLESHOOTING.md) - [研讨会主办方:选择 OpenAI、Claude、Gemini 或其他云模型](docs/workshop-cloud-llm-setup.md) - [功能](#features) - [AI 安全覆盖范围](#ai-security-coverage) - [学习框架](#learning-framework) - [已实现的漏洞](#implemented-vulnerabilities) - [模型支持](#model-support) ## 关于 PwnzzAI Shop 是一个专为 AI 技术保护教学而打造的**实践性学习平台**。这个有意设计为不安全的基于 Flask 的 Web 应用,通过沉浸式的披萨店体验,展示了广泛的 AI 安全弱点。 **创始合作伙伴**:[OWASP AI Exchange](https://owaspai.org/) ### 范围与学习目标 PwnzzAI 被设计为一个与 **[AI Exchange 风险分类法](https://owaspai.org/docs/ai_security_overview/#threats-overview)** 保持一致的综合性、可扩展学习平台。其范围随着 OWASP AI Exchange 安全分析框架和防御指南而逐步扩展,确保在 AI 安全实践不断成熟的过程中保持长期的适用性。 该项目目前整合了 OWASP Top 10 for LLMs,其架构特意映射到 AI Exchange 的风险分类。随着时间的推移,PwnzzAI 旨在发展为一个结构化的学习生态系统,支持: - AI 保护与防御培训,包括自主学习路径 - 具有实用、场景驱动练习的实操安全培训计划 - 针对安全工程师和从业者的团队学习倡议 - 涵盖设计、开发、部署和运营的端到端 AI 安全教育 ## 设置说明 从以下 3 种运行 PwnzzAI 的方式中选择一种: 1. 使用同时包含两个镜像的 Docker (PwnzzAI + Ollama) 2. 使用您自己的本地/远程 Ollama 以及仅包含 PwnzzAI 镜像的 Docker 3. 自行运行源代码 ### 开始之前(所有选项) 1. 从 `https://www.docker.com/products/docker-desktop` 安装 Docker Desktop。 2. 打开 Docker Desktop 并等待其显示 Docker 正在运行。 3. 如果尚未安装 Git,请先安装。 4. 克隆此代码库并进入该目录: ``` git clone https://github.com/OWASP/PwnzzAI.git cd PwnzzAI ``` #### 可选:配置云模型(OpenAI / Gemini / Claude) 这些实验默认开箱即用地在免费的本地模型上运行。如果您还想使用**云模型**选项卡(OpenAI / Gemini / Claude),您需要**两样**东西 —— 一个 API key **和**一个模型名称: - **API key** —— 可以在运行时通过应用内的 *Lab Setup* 页面输入,**或者**在 `.env` 中设置(`OPENAI_API_KEY=...`)。Lab Setup 中的密钥具有优先权。 - **模型名称** —— **没有 UI** 界面;必须通过 `.env` 提供。代码中没有默认值,因此如果未设置,调用将失败并提示 `LLM Provider NOT provided`。 从模板创建 `.env` 文件并取消模型行的注释: ``` cp .env.example .env # 然后编辑 .env 并设置,例如: # OPENAI_MODEL=gpt-4o-mini # (或 LITELLM_MODEL=gemini/gemini-2.5-flash 等) ``` 编辑 `.env` 后重启应用。有关完整的 provider/model 演练,请参阅[研讨会主办方:选择 OpenAI、Claude、Gemini 或其他云模型](docs/workshop-cloud-llm-setup.md)。 ### 选项 1:Docker (PwnzzAI + Ollama) 如果您希望 Docker 同时为您运行 PwnzzAI 应用和 Ollama,请使用此选项。 1. 启动两个容器: ``` docker compose up -d ``` 2. 验证两个服务是否正在运行: ``` docker compose ps ``` 3. 在浏览器中打开该应用: ``` http://localhost:8080 ``` 4. 在应用中,进入 Basics 页面并运行 Ollama 设置以拉取模型。 5. 如有需要,跟踪查看日志: ``` # App 日志 docker compose logs -f pwnzzai-app # Ollama 日志(可选) docker compose logs -f ollama ``` 6. 完成后停止所有服务: ``` docker compose down ``` 7. 可选的完全重置(也会删除已保存的 Ollama 模型): ``` docker compose down -v ``` 如果您将应用镜像发布到其他 registry 路径下,请在启动时覆盖镜像名称: ``` PWNZZAI_IMAGE=ghcr.io/owasp/pwnzzai:latest docker compose up -d ``` ### 如果默认镜像拉取失败(本地构建) `docker compose` 使用 `docker-compose.yml` 中的默认 `pwnzzai-app` 镜像(可通过 **`PWNZZAI_IMAGE`** 覆盖)。如果 `docker compose up` 在拉取该镜像时报 **`denied`**、**`unauthorized`** 或类似错误,可能是 registry 需要登录或您的账户没有拉取权限。您依然可以通过**在本地构建应用镜像**并让 compose 指向它,来从此代码库运行所有内容。 在代码库根目录下执行: ``` docker build -t pwnzzai-local:dev . PWNZZAI_IMAGE=pwnzzai-local:dev docker compose up -d ``` Windows PowerShell: ``` docker build -t pwnzzai-local:dev . $env:PWNZZAI_IMAGE="pwnzzai-local:dev"; docker compose up -d ``` 然后打开 **`http://localhost:8080`**。首次加载时可能会短暂失败,因为 Flask 正在容器内启动;如果看到连接错误,请等待几秒钟并刷新。 如果您确实拥有该 registry 镜像的访问权限,可以先进行身份验证(以 GitHub Container Registry 为例): ``` docker login ghcr.io ``` 如果您在使用 `docker-compose.external-ollama.yml` 时遇到相同的拉取错误,同样的 `PWNZZAI_IMAGE=pwnzzai-local:dev` 方法也适用于**选项 2**。 ### 选项 2:Docker(使用您自己的 Ollama + PwnzzAI 镜像) 如果 Ollama 已经在其他地方运行,而您只想在 Docker 中运行 PwnzzAI,请使用此选项。 如果您在 WSL 上运行 Ollama,而在 Docker 中运行 PwnzzAI,请参阅 [`OLLAMA_CONNECTION_TROUBLESHOOTING.md`](OLLAMA_CONNECTION_TROUBLESHOOTING.md) 获取有关连接问题的修复方法(`Connection refused`、`host.docker.internal`、绑定以及环境变量验证)。 1. 保持您的 Ollama 服务运行。 2. 如果 Ollama 在**远程**机器上,请在启动前设置 `OLLAMA_HOST`(如果 Ollama 与 Docker 在同一台机器上,并且可以通过 `docker-compose.external-ollama.yml` 中的默认地址 `http://host.docker.internal:11434` 访问,则跳过此步骤)。 Linux/macOS: ``` export OLLAMA_HOST=http://your-ollama-server:11434 ``` Windows PowerShell: ``` $env:OLLAMA_HOST="http://your-ollama-server:11434" ``` 3. 使用 external-Ollama compose 文件启动 PwnzzAI: ``` docker compose -f docker-compose.external-ollama.yml up -d ``` 如果无法从 GHCR 拉取默认应用镜像,请按照[如果默认镜像拉取失败(本地构建)](#if-the-default-image-does-not-pull-build-locally)中的说明在本地构建并设置 `PWNZZAI_IMAGE`。 4. 在浏览器中访问 `http://localhost:8080` 查看应用程序。从 Basic 页面开始设置您的实验环境。 5. 如有需要,跟踪查看应用日志: ``` docker compose -f docker-compose.external-ollama.yml logs -f pwnzzai-app ``` 6. 完成后停止它: ``` docker compose -f docker-compose.external-ollama.yml down ``` ### 选项 3:自行运行源代码 如果您想直接运行 Python(不为该应用使用 Docker),请使用此选项。 1. 安装 Python 3.11。 2. 创建并激活一个虚拟环境。 Linux/macOS: ``` python -m venv venv source venv/bin/activate ``` Windows PowerShell: ``` python -m venv venv .\venv\Scripts\Activate.ps1 ``` 3. 安装依赖项: ``` ./install.sh ``` 4. 确保 Ollama 可用: 通过 `OLLAMA_HOST` 设置 `http://localhost:11434` 或其他 endpoint。 5. 运行应用: ``` flask run --host=0.0.0.0 --port=8080 ``` 6. 打开: ``` http://localhost:8080 ``` 如果您需要更多详细信息,请观看 此演练视频 ,其中展示了分步设置过程。 ## 功能 - **披萨服务**:浏览令人垂涎的披萨、查看客户反馈、发表评论并下虚拟订单! - **丰富的漏洞展示**:涵盖 OWASP LLM Top 10 和 AI Exchange 威胁类别的动态演示,包括模型输入威胁、开发时威胁、运行时安全威胁以及系统级 AI 风险。 - **以学习为中心的设计**:通过透明的描述发现利用方法和防御措施,专为系统化的教学计划设计,并与 [AI Exchange 威胁分类法](https://owaspai.org/docs/ai_security_overview/) 保持一致。 - **多 Provider 实现**:每个演示都可以在商业的 OpenAI 和免费的 Ollama 框架下运行,确保所有参与者都能轻松访问。 - **基于标准的内容**:与 [OWASP AI Exchange](https://owaspai.org/) 同步的教育材料,该交易所是 ISO/IEC 27090 和 prEN 18282 等新兴 AI 安全标准的基础。 ## AI 安全覆盖范围 该平台展示了广泛的 AI 保护挑战,与 **[OWASP AI Exchange 综合威胁分类法](https://owaspai.org/docs/ai_security_overview/)** 保持一致。目前的实现涵盖了 OWASP Top 10 for LLM Applications 和核心的 AI Exchange 威胁类别,其可扩展的架构专为未来的 AI 风险覆盖而构建。 ### 学习框架 PwnzzAI 中展示的每个弱点都包含: 1. 演示漏洞机制的**动态演示** 2. 提供交互式攻击练习的**利用场景** 3. 详细说明防御方法的**加固替代方案** ### 已实现的漏洞: 根据 [OWASP AI Exchange 威胁](https://owaspai.org/docs/ai_security_overview/) 和 OWASP Top 10 for LLM Applications 2025: 1. **Prompt Injection** [AI Exchange: Direct Prompt Injection](https://owaspai.org/docs/2_threats_through_use/#221-direct-prompt-injection), [Indirect Prompt Injection](https://owaspai.org/docs/2_threats_through_use/#222-indirect-prompt-injection), [Top 10: LLM-01](https://genai.owasp.org/llmrisk/llm01-prompt-injection/). - **Direct Prompt Injection**: 通过精心构造的用户输入绕过系统指令,以操纵模型行为。 - **Indirect Prompt Injection**: 利用外部数据源注入恶意指令并操纵模型响应。 - *AI Exchange Context*: 攻击者构造指令以欺骗模型的模型输入威胁。 2. **数据泄露** [AI Exchange: Disclosure of sensitive data in model output ](https://owaspai.org/docs/2_threats_through_use/#231-disclosure-of-sensitive-data-in-model-output), [Top 10: LLM-02](https://genai.owasp.org/llmrisk/llm022025-sensitive-information-disclosure/) - 通过模型输出提取训练数据、系统信息和凭证。 - *AI Exchange Context*: 模型的输出可能包含来自训练集或输入的敏感数据(可能包括增强数据)。 3. **供应链漏洞** [AI Exchange: Supply Chain Model Poisoning](https://owaspai.org/docs/3_development_time_threats/#313-supply-chain-model-poisoning), [Top 10: LLM 03](https://genai.owasp.org/llmrisk/llm032025-supply-chain/) - 来自受损供应商的第三方模型和插件安全风险。 - *AI Exchange Context*: 开发时的供应链威胁,包括被投毒的预训练模型、损坏的数据源以及被入侵的模型托管。 4. **数据和模型投毒** [AI Exchange: Data Poisoning](https://owaspai.org/docs/3_development_time_threats/#311-data-poisoning), [Model Poisoning](https://owaspai.org/goto/modelpoison/), [Top 10: LLM04](https://genai.owasp.org/llmrisk/llm042025-data-and-model-poisoning/) - 演示恶意训练数据如何影响模型的响应和行为。 - *AI Exchange Context*: 开发时面临的威胁,其中训练数据篡改或直接的模型参数篡改会导致非预期的模型行为。 5. **不当输出处理** [AI Exchange: Output Contains Conventional Injection](https://owaspai.org/docs/4_runtime_application_security_threats/#44-output-contains-conventional-injection), [Top 10:LLM05](https://genai.owasp.org/llmrisk/llm052025-improper-output-handling/) - 未经验证的 LLM 输出导致在下游系统中出现 XSS 和其他注入攻击。 - *AI Exchange Context*: 文本形式的模型输出可能包含常规的注入攻击(例如 XSS-Cross site scripting),在处理时(例如在网站上显示或执行命令)可能会产生漏洞。 6. **过度权限** [AI Exchange: Least Model Privilege](https://owaspai.org/goto/leastmodelprivilege/), [Oversight](https://owaspai.org/goto/oversight/), [Top 10:LLM06](https://genai.owasp.org/llmrisk/llm062025-excessive-agency/) - 权限过高的 LLM 操作以及没有适当的自主行为。 - *AI Exchange Context*: 通过权限管理和人工监督来限制不良模型行为的影响控制措施,这对于 Agentic AI 系统尤为关键。 7. **System Prompt 泄露** [AI Exchange: Sensitive Information Disclosure](https://owaspai.org/goto/disclosureuse/), [Top 10:LLM07](https://genai.owasp.org/llmrisk/llm072025-system-prompt-leakage/) - 通过操纵技术提取嵌入在 system prompt 中的机密信息。 - *AI Exchange Context*: 攻击者通过精心构造的输入提取机密指令或配置数据的模型使用威胁。 8. **Vector 和 Embedding 漏洞** [AI Exchange: Direct augmentation data leak](https://owaspai.org/go/augmentationdataleak/), [Top 10:LLM08](https://genai.owasp.org/llmrisk/llm082025-vector-and-embedding-weaknesses/) - 在 RAG 系统或向量数据库中未经授权访问包含敏感信息的 embedding。 - *AI Exchange Context*: 检索存储库或 embedding 存储泄露机密信息的增强数据威胁。 9. **错误信息** [AI Exchange: Augmentation data manipulation](https://owaspai.org/docs/4_runtime_application_security_threats/#47-augmentation-data-manipulation), [Top 10:LLM09](https://genai.owasp.org/llmrisk/llm092025-misinformation/) - 没有人工监督的关键决策导致有害的错误信息或幻觉。 - *AI Exchange Context*: 需要监督控制、可解释性和持续监控以确保准确性和安全性的非预期模型行为风险。 10. **无限制消耗** [AI Exchange: AI Resource Exhaustion](https://owaspai.org/docs/2_threats_through_use/#25-ai-resource-exhaustion), [Top 10:LLM10](https://genai.owasp.org/llmrisk/llm102025-unbounded-consumption/) - 导致拒绝服务的资源耗尽攻击和速率限制绕过技术。 - *AI Exchange Context*: 通过过量或精心构造的输入导致资源耗尽的模型可用性威胁。 此外, 11. **模型盗窃** ([AI Exchange: Model Exfilteration](https://owaspai.org/go/modelexfiltration/), [Earlier versions of Top 10](https://genai.owasp.org/llmrisk2023-24/llm10-model-theft/) - 通过 API 滥用和输入输出采集进行模型提取和知识产权盗窃。 - *AI Exchange Context*: 攻击者收集现有模型的输入和输出,并利用这些组合训练新模型,以复制原始模型。 ### 模型支持: - **OpenAI 模型**:通过 OpenAI API 进行 GPT-3.5/GPT-4 演示。 - **Ollama 模型**:可通过 Ollama 访问免费模型,如 Mistral 7B 和 LLaMA 3.2 1B。 **⚠️ 仅供教育目的**:此应用程序包含有意设计的安全漏洞。请勿在生产环境中使用。
标签:AI风险缓解, DLL 劫持, Docker, Flask, LLM评估, Ollama, 人工智能安全, 合规性, 后端开发, 大语言模型, 安全防御评估, 安全靶场, 教育平台, 请求拦截, 逆向工具