Ap6pack/ai_tabletop_world_builder

GitHub: Ap6pack/ai_tabletop_world_builder

一个基于AI的网络安全桌面推演平台,可自动生成逼真组织场景、运行多团队攻防演练并生成行动后回顾报告。

Stars: 0 | Forks: 1

# 网络安全兵棋推演平台 一个**开源** (Apache-2.0)、基于 AI 的桌面兵棋推演平台,专为 IT/安全团队培训设计。生成逼真的网络安全场景,运行 AI 主持的事件模拟,并生成事后报告 —— 兼容 MITRE ATT&CK,基于 FastAPI + Streamlit 技术栈并使用 PostgreSQL 存储。 ## 概述 该平台改编了 AI 桌面 RPG 框架,以创建用于培训目的的**定制化网络安全演练**。它不再使用奇幻世界,而是生成具有 IT 基础设施、漏洞和威胁场景的逼真组织,供安全团队练习技能。 ### 核心功能 - **分层场景生成**:创建具有完整 IT 基础设施的逼真组织 - 组织 -> 部门 -> 系统 -> 漏洞/威胁 - 特定行业的配置(金融、医疗、科技等) - 可定制的复杂度和范围 - **交互式兵棋推演**:实时事件响应模拟 - 基于 AI 的威胁行为者行为 - 逼真的事件时间线 - 工具和访问权限管理 - 决策后果模拟 - **多团队桌面演练**:基于团队的协同演练 - 蓝/红/白队角色,基于轮询的协调机制 - MITRE ATT&CK 集成(涵盖 14 种战术的 93 种技术) - 带有 20 个模板和 6 种启发式算法的危机注入引擎 - 实时演练编排 - **高管与合规仪表板**:战略性报告 - 带有 Ponemon 校准财务指标的高管仪表板 - 针对 NIST CSF、PCI DSS 和 HIPAA 框架的合规评分 - 生成带有 PDF 导出功能的行动后回顾 (AAR) - 决策质量分析和备选路径建议 - **灵活的内容策略**:多级培训标准 - **防御性 (Defensive)**:仅限安全监控和防御措施 - **教育性 (Educational)**:以防御为重点的逼真场景 - **高级 (Advanced)**:面向经验丰富团队的红队战术 - **无限制 (Unrestricted)**:面向专家培训的完全真实性 - **性能跟踪**:监控与改进 - 实时事件仪表板 - 决策跟踪和评分 - 行动后回顾 (AAR) - 团队绩效分析 ## 架构 ### 后端 (FastAPI) ``` api/ ├── models/ # Pydantic data models ├── providers/ # LLM provider abstraction (OpenAI, Anthropic, Ollama) ├── services/ # 37 business logic services ├── routers/ # 12 API routers (81 routes) ├── middleware/ # Auth middleware └── main.py # FastAPI application ``` ### 前端 (Streamlit) ``` app/ ├── Home.py # Main dashboard with full navigation ├── config.py # Centralized configuration ├── constants.py # UI <-> API value mappings └── pages/ ├── 1_Scenario_Builder.py # Generate training scenarios ├── 2_War_Game.py # Interactive war gaming ├── 3_Settings.py # Platform configuration ├── 4_Session_Manager.py # Manage game sessions ├── 5_Scenario_Editor.py # Customize generated scenarios ├── 6_Analytics.py # Performance analytics ├── 7_After_Action_Review.py # AAR review and PDF export ├── 8_Login.py # Authentication ├── 9_Scenario_Library.py # Scenario library browser ├── 10_Exercise_Setup.py # Multi-team exercise setup ├── 11_Exercise_Play.py # Live exercise play └── 12_Executive_Dashboard.py # Executive metrics dashboard ``` ### 数据模型 **组织层级结构:** ``` Organization ├── Departments (Finance, IT, HR, etc.) │ └── Systems (Servers, Applications, Networks) │ └── Vulnerabilities & Security Controls └── Threat Actors (APT, Ransomware, Insider, etc.) ``` **游戏状态:** - 玩家角色和权限 - 可用的安全工具 - 事件时间线 - 目标和评分 ## 快速开始 ### 前置条件 - Python 3.11+ - 至少一个 LLM 提供商的 API 密钥: - OpenAI(推荐) - Anthropic Claude - Ollama(本地,免费) ### 安装 1. **克隆代码仓库** ``` git clone https://github.com/Ap6pack/ai_tabletop_world_builder.git cd ai_tabletop_world_builder ``` 2. **创建虚拟环境** ``` python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate ``` 3. **安装依赖项** ``` pip install -r requirements.txt ``` 4. **配置环境** ``` cp .env.example .env # 使用你的 API 密钥和偏好编辑 .env ``` ### 配置 使用您的设置编辑 `.env` 文件: ``` # 选择你的 LLM provider DEFAULT_LLM_PROVIDER=openai # or anthropic, ollama # 添加 API 密钥 OPENAI_API_KEY=sk-... ANTHROPIC_API_KEY=sk-ant-... # 设置内容策略 DEFAULT_CONTENT_POLICY=educational # defensive, educational, advanced, unrestricted ``` ### 运行平台 **选项 1:分别运行两个服务** 终端 1 - 启动 FastAPI 后端: ``` python main.py # API 将在 http://localhost:8000 上运行 # API 文档:http://localhost:8000/docs ``` 终端 2 - 启动 Streamlit 前端: ``` cd app streamlit run Home.py # Web UI 将在 http://localhost:8501 打开 ``` **选项 2:Docker (基于 PostgreSQL)** ``` docker-compose up ``` Compose 技术栈会自动运行 API 并连接内置的 **PostgreSQL** 和 Redis 服务(它会为您设置 `DATABASE_URL`/`REDIS_URL`)。可以通过 `POSTGRES_DB`、`POSTGRES_USER` 和 `POSTGRES_PASSWORD` 覆盖数据库凭据。 ## 数据库 可变的应用程序状态 —— 用户、游戏会话、演练、API 密钥和 webhook —— 通过 SQLAlchemy 存储。后端完全由 `DATABASE_URL` 环境变量决定,因此相同的代码可以运行在以下任一环境中: - **本地开发(默认):SQLite** —— 零配置,文件位于 `./data/app.db`。 - **生产环境:PostgreSQL**(推荐)。指向托管实例: DATABASE_URL=postgresql+psycopg://user:password@host:5432/dbname `psycopg` 驱动程序已包含在 `requirements.txt` 中。API 是无状态的, 因此您可以在负载均衡器后针对单个 Postgres 运行多个实例。 **Schema 迁移:**使用 [Alembic](https://alembic.sqlalchemy.org) 管理。 对于全新的数据库,在启动应用程序之前运行 `alembic upgrade head`;在 后续更改 schema 时,使用 `alembic revision --autogenerate -m "describe change"` 生成迁移脚本,并使用 `alembic upgrade head` 应用它。(为了方便本地/开发使用,应用程序在启动时也会创建任何缺失的 表。) **Redis(可选):**实时多团队演练可以使用 Redis 作为低延迟 快速通道 —— 设置 `REDIS_URL=redis://host:6379/0`。如果没有它,演练状态将 直接从数据库提供。审计日志在设计上即为只追加的 JSONL。 ## 使用指南 ### 1. 配置 LLM 提供商 进入 **Settings** 页面并配置您的 LLM 提供商: - 选择提供商(OpenAI、Anthropic 或 Ollama) - 输入 API 密钥 - 测试连接 - 设置内容策略级别 ### 2. 生成场景 进入 **Scenario Builder** 页面: - 选择行业(金融、医疗、科技等) - 选择组织规模 - 设置复杂度和难度 - 定义重点领域(勒索软件、APT、内部威胁等) - 选择玩家角色(SOC Analyst、CISO 等) - 点击“生成场景” ### 3. 开始兵棋推演 从生成的场景中: - 查看组织详情 - 检查威胁态势 - 点击“开始兵棋推演” - 实时响应事件 - 使用可用的安全工具 - 做出决策并查看后果 ### 4. 运行多团队演练 进入 **Exercise Setup** 页面: - 配置蓝/红/白队 - 设置演练参数和 MITRE ATT&CK 技术 - 加载危机注入模板 - 启动演练并进行多轮对抗 ### 5. 查看表现 完成场景后: - 在 Analytics 页面上查看事件时间线 - 生成带有 PDF 导出功能的行动后回顾 - 查看高管仪表板以了解财务影响 - 检查针对 NIST/PCI/HIPAA 的合规评分 ## 培训场景 ### 示例场景 **初级:网络钓鱼调查** - 时长:30 分钟 - 角色:SOC Analyst - 重点:电子邮件分析、用户教育 - 工具:SIEM、电子邮件网关 **中级:勒索软件响应** - 时长:90 分钟 - 角色:事件响应人员 - 重点:遏制、恢复、沟通 - 工具:EDR、防火墙、备份系统 **高级:APT 威胁狩猎** - 时长:180 分钟 - 角色:安全工程师 - 重点:威胁检测、横向移动、取证 - 工具:完整的安全技术栈 ## API 文档 ### FastAPI 端点(涵盖 12 个路由的 81 条路径) **LLM 服务:** - `POST /llm/complete` - 生成 LLM 补全 - `GET /llm/providers` - 检查提供商可用性 **内容策略:** - `POST /content-policy/check` - 验证内容安全性 - `GET /content-policy/policies` - 列出可用策略 **场景:** - `POST /scenarios/generate` - 生成培训场景 - `GET /scenarios/list` - 列出所有已保存的场景 - `GET /scenarios/industries` - 列出支持的行业 - `GET /scenarios/industries/{industry}` - 获取行业详情 - `GET /scenarios/{filename}` - 按文件名加载场景 - `DELETE /scenarios/{filename}` - 删除已保存的场景 **游戏:** - `POST /game/start` - 开始新的兵棋推演会话 - `POST /game/action` - 处理玩家动作 - `GET /game/state/{session_id}` - 获取当前游戏状态 - `POST /game/hint` - 请求上下文提示 - `POST /game/end` - 结束游戏会话 - `GET /game/sessions` - 列出所有会话(可选过滤) - `DELETE /game/sessions/{session_id}` - 删除游戏会话 - `POST /game/objective` - 标记目标为已完成/失败 **MITRE ATT&CK:** - `GET /mitre/techniques` - 按战术列出技术 - `GET /mitre/matrix` - 完整的 ATT&CK 矩阵 **演练:** - `POST /exercise/create` - 创建多团队演练 - `POST /exercise/advance` - 推进演练回合 - `GET /exercise/state` - 获取演练状态 **分析与报告:** - `GET /analytics/session/{session_id}` - 会话分析 - `POST /analytics/aar` - 生成行动后回顾 **设置:** - `GET /settings/current` - 获取当前配置 - `POST /settings/update` - 更新设置并持久化到 .env - `GET /settings/storage/stats` - 实时存储统计信息 - `POST /settings/export` - 将配置导出为 JSON - `DELETE /settings/data/clear` - 删除所有数据 - `POST /settings/reset/defaults` - 重置为默认值 API 文档位于:`http://localhost:8000/docs` ## 开发 ### 项目结构 ``` ai_tabletop_world_builder/ ├── api/ # FastAPI backend │ ├── models/ # Data schemas │ ├── providers/ # LLM provider implementations │ ├── services/ # 37 business logic services │ ├── routers/ # 12 API routers │ ├── middleware/ # Auth middleware │ └── utils/ # Shared utilities ├── app/ # Streamlit frontend │ ├── Home.py # Main page │ └── pages/ # 12 pages ├── tests/ # 25 test files (245 tests) ├── docs/ # Phase completion & planning docs ├── scripts/ # Shell scripts and utilities ├── config/ # Configuration ├── scenarios/ # Generated scenarios ├── data/ # Storage ├── monitoring/ # Observability configs ├── main.py # FastAPI entry point ├── Dockerfile # Container build ├── docker-compose.yml # Multi-service orchestration ├── requirements.txt # Python dependencies └── README.md # This file ``` ### 运行测试 ``` pytest --tb=short -q # 244 个通过,1 个跳过 # 测试是封闭的 —— 不需要 API 密钥或网络(一个假的 LLM provider 通过 # tests/conftest.py 注入)。测试位于 tests/ 目录中。 ``` ## 内容策略级别 | 级别 | 描述 | 用例 | 包含 | 排除 | |-------|-------------|----------|----------|----------| | **防御性 (Defensive)** | 仅限防御性安全 | 初级团队,对合规敏感 | 监控、事件响应、控制措施 | 漏洞利用代码、攻击性技术 | | **教育性 (Educational)** | 以防御为重点的逼真场景 | SOC 培训,安全意识 | 漏洞概念、威胁建模 | 真实的漏洞利用、真实的凭据 | | **高级 (Advanced)** | 逼真的攻防对抗 | 经验丰富的团队,红蓝对抗演练 | 红队战术、漏洞利用理论 | 生产级漏洞利用、非法活动 | | **无限制 (Unrestricted)** | 完全的逼真度 | 专家级研究员,受控环境 | 详细的漏洞利用、高级 TTP | 非法活动 | ## 安全考量 - **API 密钥**:切勿提交 API 密钥。请使用 `.env` 文件。 - **内容策略**:为您的团队技能水平设置适当的策略。 - **数据隐私**:场景和游戏数据存储在本地。 - **审计日志**:所有操作均通过 SHA256 哈希记录,以确保合规。 - **身份验证**:基于 JWT 的身份验证,使用 Argon2id 密码哈希。设置 `REQUIRE_AUTH=true`(以及强健的 `JWT_SECRET_KEY`)以强制执行验证:产品 端点随后将要求有效的 bearer token,而破坏性的管理员操作 (`/settings/data/clear`、`/settings/update`、配置写入)则需要 `admin` 角色。在禁用身份验证的情况下(本地/开发默认设置),端点是开放的。 注意:Streamlit UI 尚未附加 token,因此请在禁用了身份验证的 API 上运行它,或者 将其置于身份验证网关之后。 - **速率限制**:所有 API 端点均具有固定窗口限制,以每个 已验证用户(或匿名时的客户端 IP)为键,以保护基于 LLM 的 端点免受滥用。通过 `RATE_LIMIT_ENABLED`、`RATE_LIMIT_REQUESTS` 和 `RATE_LIMIT_WINDOW_SECONDS` 进行配置;使用 Redis (`REDIS_URL`) 以实现跨实例的共享限制, 否则使用进程内计数器。 ## 许可证 版权所有 2026 Adam Rhys Heaton (Ap6pack) 及其贡献者。 基于 **Apache License, Version 2.0** 授权。这是免费的开源 软件 —— 您可以根据该许可证的条款(其中还包括明确的 专利授权)使用、修改和分发它,包括用于商业 目的。有关全文,请参阅 [LICENSE](LICENSE) 文件。 ## 资源 - [API 文档](http://localhost:8000/docs) - [FastAPI 文档](https://fastapi.tiangolo.com/) - [Streamlit 文档](https://docs.streamlit.io/) ## 故障排除 **API 连接失败:** - 检查 `.env` API 密钥是否设置正确 - 验证提供商是否可用(在 `/llm/providers` 测试) - 检查网络连接 **Ollama 不工作:** - 确保 Ollama 正在运行:`ollama serve` - 拉取所需的模型:`ollama pull llama3` - 检查设置中的 base URL **Streamlit 页面未加载:** - 确保您位于 `/app` 目录中 - 检查 FastAPI 后端是否正在运行 - 清除 Streamlit 缓存:`streamlit cache clear` ## 支持 对于问题和疑问: - 在 [GitHub](https://github.com/Ap6pack/ai_tabletop_world_builder/issues) 上提出 issue - 查看文档 **版本**:1.0.0 **状态**:积极开发中 —— 核心平台功能正常且 CI 为通过状态。可变 状态(用户、会话、演练、API 密钥、webhook)通过 SQLAlchemy 存储 (默认为 SQLite,通过 `DATABASE_URL` 可支持 Postgres)。当 `REQUIRE_AUTH=true` 时强制执行身份验证(产品端点需要 token;管理 端点需要 `admin` 角色) —— 有关生产环境设置,请参阅 [DEPLOY.md](DEPLOY.md)。 **最后更新**:2026-07-18 有关完整详细信息,请参阅 [CHANGELOG.md](CHANGELOG.md)。
标签:AI模拟, AI风险缓解, AV绕过, FastAPI, Kubernetes, Petitpotam, PostgreSQL, Streamlit, 战争演习, 搜索引擎查询, 桌面演练, 测试用例, 网络安全, 访问控制, 请求拦截, 逆向工具, 隐私保护