divergent99/ZeroDay

GitHub: divergent99/ZeroDay

一个基于浏览器的电影级网络安全事件指挥模拟游戏,玩家在全球指挥中心对基础设施威胁进行分类、部署团队并做出带有分支后果的高风险决策。

Stars: 0 | Forks: 0

# ZERO DAY 模拟器 ### 电影般的网络安全事件指挥模拟器 对级联式基础设施威胁进行分类、部署专家团队、调查证据,并在时间耗尽前做出高风险决策。 [![React](https://img.shields.io/badge/React-18-61DAFB?logo=react&logoColor=white)](https://react.dev/) [![FastAPI](https://img.shields.io/badge/FastAPI-0.115-009688?logo=fastapi&logoColor=white)](https://fastapi.tiangolo.com/) [![Playwright](https://img.shields.io/badge/Playwright-11%20tests-2EAD33?logo=playwright&logoColor=white)](https://playwright.dev/) [![Vite](https://img.shields.io/badge/Vite-5-646CFF?logo=vite&logoColor=white)](https://vite.dev/) [![Simulation](https://img.shields.io/badge/Environment-Simulation%20Only-E5484D)](#responsible-use) [功能](#what-makes-it-different) · [工作原理](#the-command-loop) · [本地运行](#run-it-locally) · [架构](#architecture) · [测试](#testing)
## 理念 大多数网络安全游戏侧重于输入命令或解决孤立的谜题。Zero Day Simulator 探讨了一个不同的问题: 玩家运营着一个全球危机指挥中心。事件会影响电网、供水系统、铁路网络、电信基础设施、港口、医院、卫星和半导体设施。每次响应都会消耗时间、情报或专家能力。一个技术上正确的选择仍然可能造成平民生活受干扰、财务损失或引发下一次级联事件。 这是一个个人项目,旨在将网络安全故事叙述、决策设计、地理空间可视化、AI 辅助情报以及完整的带有状态的游戏循环结合到一个浏览器体验中。 ## 与众不同之处
### 全球指挥地图 十五个基础设施事件出现在交互式世界地图上,带有实时状态颜色、骨干路由、昼夜可视化、集群、影响计数器以及级联威胁动画。 ### 带有后果的决策 每次响应都会根据速度、证据、团队契合度、实际造成的平民影响、财务损失、遏制质量和运营恢复情况进行评估。
### 分支战役 为期五天的战役会根据每个战区的最差结果改变路线。遏制、升级和崩溃将引向不同的运营路线。 ### 持久化的指挥官职业生涯 行动可以被保存、恢复、归档、重播、比较和导出。指挥官的 XP、军衔、奖章、呼号和界面主题会在不同会话之间保留。
### 可选的实时情报 Tavily 可以将当前头条新闻拉取到情报源中,并生成新的场景素材。内置的场景库无需外部密钥即可运行。 ### AI 决策支持 Anthropic 为顾问和通俗语言的事件解释提供支持,同时保留玩家对最终决策的责任。
## 指挥循环 ``` flowchart LR A["Triage threat queue"] --> B["Deploy specialist team"] B --> C["Investigate telemetry"] C --> D["Authorize response"] D --> E["Review consequences"] E --> F["Acknowledge operational update"] F --> A E --> G["Archive operation"] ``` 1. **分类** 严重程度、地区、受影响的系统、置信度和影响范围。 2. **部署** 根据所需的专业特性部署 Sentinel、Cipher 或 Aegis。 3. **调查** 通过消耗情报点数和决策时间来调查机密遥测数据。 4. **决策** 在事件计时器到期之前做出决定。 5. **审查** 实际影响、得分、团队恢复情况和下一个优先事项。 6. **适应** 随着团队的恢复、情报的变化和战役的分支进行调整。 ## 响应资产 | 团队 | 专长 | 最适合的任务 | | --- | --- | --- | | **Sentinel** | 基础设施 | 电力、供水、铁路、港口、工厂、卫星和物理控制系统 | | **Cipher** | 情报 | 凭据、电信、身份验证、数据泄露和信号滥用 | | **Aegis** | 危机 | 公共安全、业务连续性、平民影响和协同破坏事件 | 专家匹配可提供额外的决策时间。跨专业部署会施加时间惩罚,并且每个部署的单位在事件结束后都会进入恢复状态。 ## 战役逻辑 战役不遵循固定的序列。当前作战日的最差结果决定了下一条路线。 ``` flowchart TD D["Operational day"] --> C{"Worst outcome"} C -->|"All contained"| G["Containment lane"] C -->|"Any partial"| A["Escalation lane"] C -->|"Any spread"| R["Collapse lane"] ``` - **遏制:** 每个已处理的突发事件都已被控制。 - **升级:** 至少有一个已处理的突发事件被部分控制。 - **崩溃:** 任何已处理的突发事件发生扩散;扩散优先于其他结果。 - 备用任务仍然作为背景可见,但在该战役中被永久跳过。 ## 不仅仅是原型 Zero Day Simulator 包含了完整应用程序应有的支持系统,而不是单屏幕演示: - 首次运行引导式入门和可重玩的《现场手册》 - 学员、分析师、操作员以及可解锁的“ Nightmare ”难度 - 根据玩家表现自适应调整决策时机 - 服务端权威的会话、分数、决议和事件计时器 - 七天的会话过期和恢复处理 - 具有安全恢复行为的本地操作快照 - 基于 SQLite 的会话和排行榜持久化 - 实时情报冷却时间和每个会话的生成内容限制 - 后果报告、行动后报告和 Markdown 导出 - 带有过滤器和回放速度的逐事件操作回放 - 归档详情、删除、比较和旧版存档兼容性 - 指挥官军衔、XP、奖章、呼号和颜色主题 - 响应式桌面/移动布局并支持减少动态效果 ## 架构 ``` flowchart TB subgraph Client["React + Vite client"] UI["Command UI"] MAP["Geospatial theater"] STATE["Local save + archive"] E2E["Playwright tests"] end subgraph API["FastAPI backend"] ROUTES["Session and incident API"] ENGINE["Resolution and consequence engine"] INTEL["Intelligence services"] end subgraph Data["Persistence"] SESSIONS["SQLite sessions"] BOARD["SQLite leaderboard"] BASE["Scenario library"] end subgraph Optional["Optional external services"] TAVILY["Tavily"] CLAUDE["Anthropic"] end UI --> ROUTES MAP --> ROUTES STATE --> UI ROUTES --> ENGINE ENGINE --> SESSIONS ROUTES --> BOARD ENGINE --> BASE INTEL --> TAVILY INTEL --> CLAUDE E2E --> UI ``` ### 技术栈 | 层级 | 技术 | | --- | --- | | 前端 | React 18, Vite, react-simple-maps, D3 Geo, Lucide React | | 后端 | FastAPI, Pydantic, Uvicorn | | 情报 | Tavily 和 Anthropic API — 两者均为可选 | | 持久化 | 服务端使用 SQLite,浏览器端使用 localStorage | | 测试 | Python unittest 和 Playwright 端到端测试 | ## 项目结构 ``` zero-day-simulator/ |-- backend/ | |-- main.py # FastAPI routes and resolution API | |-- scenarios.py # Built-in scenario library | |-- scenario_generator.py # News, advisor, and explanation integrations | |-- sessions.py # Sessions, timers, persistence, and expiry | |-- leaderboard.py # Persistent leaderboard | `-- test_sessions.py # Backend regression tests |-- frontend/ | |-- e2e/ # Playwright test suite | |-- src/components/ # Screens, overlays, map, manual, and replay | |-- src/App.jsx # Game state and orchestration | `-- playwright.config.js |-- .gitignore `-- README.md ``` ## 本地运行 ### 前置要求 - Python 3.11+ - Node.js 18+ - npm ### 1. 后端
PowerShell ``` cd backend python -m venv .venv .\.venv\Scripts\Activate.ps1 pip install -r requirements.txt python -m uvicorn main:app --reload --port 8010 ```
macOS / Linux ``` cd backend python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt python -m uvicorn main:app --reload --port 8010 ```
后端运行在 `http://127.0.0.1:8010`。健康检查: ``` http://127.0.0.1:8010/api/health ``` ### 2. 前端 打开第二个终端: ``` cd frontend npm install npm run dev ``` 打开 `http://127.0.0.1:5173`。 ## 可选的情报配置 完整的内置模拟无需 API 密钥即可运行。要启用当前头条新闻、生成的情报、顾问和通俗语言解释: ``` cp backend/.env.example backend/.env cp frontend/.env.example frontend/.env ``` 配置后端: ``` TAVILY_API_KEY=your_tavily_key ANTHROPIC_API_KEY=your_anthropic_key CORS_ORIGINS=http://localhost:5173,http://127.0.0.1:5173 ``` 可选的前端覆盖配置: ``` VITE_API_URL=http://127.0.0.1:8010 ``` ## 测试 ### 端到端测试套件 ``` cd frontend npm run test:e2e ``` 当前覆盖率:涵盖入门、移动端布局、战役路由、授权、部署、调查、决议、后果、实时情报刷新、存档恢复、会话过期和归档在内的 **11 个通过的测试**。 交互式 Playwright 模式: ``` npm run test:e2e:ui ``` ### 后端套件 ``` cd backend python -m unittest test_sessions.py ``` ### 生产构建 ``` cd frontend npm run build ``` ## API 接口 | 方法 | Endpoint | 用途 | | --- | --- | --- | | `POST` | `/api/session` | 启动权威的行动会话 | | `GET` | `/api/session/{id}/status` | 恢复得分、结果、计时器和顾问配额 | | `GET` | `/api/scenarios` | 加载基础和会话生成的事件 | | `POST` | `/api/scenarios/refresh` | 拉取当前情报并生成事件 | | `POST` | `/api/incident/start` | 启动权威的事件计时器 | | `POST` | `/api/resolve` | 决定处理方案并计算后果 | | `POST` | `/api/copilot` | 向可选的 AI 顾问提问 | | `POST` | `/api/explain` | 请求通俗语言的解释 | | `GET/POST` | `/api/leaderboard` | 读取或提交验证后的分数 | | `GET` | `/api/status` | 检查可选服务的配置 | ## 部署 将 monorepo 作为同一个 Railway 项目中的两个服务进行部署。 | 服务 | Railway 根目录 | Runtime | | --- | --- | --- | | `zeroday-api` | `/backend` | FastAPI / Uvicorn | | `zeroday-web` | `/frontend` | 由 Caddy 提供服务的 Vite build | ### 后端服务 包含的 `Procfile` 会在 Railway 分配的端口上启动 FastAPI: ``` web: uvicorn main:app --host 0.0.0.0 --port $PORT ``` 推荐设置: - 根目录:`/backend` - 健康检查路径:`/api/health` - 副本数:使用 SQLite 时为 `1` - Volume 挂载路径:`/data` 附加了 volume 时,排行榜和会话存储会自动使用 `RAILWAY_VOLUME_MOUNT_PATH`。 后端环境变量: ``` TAVILY_API_KEY=your_tavily_key ANTHROPIC_API_KEY=your_anthropic_key CORS_ORIGINS=https://your-frontend-domain.up.railway.app ``` ### 前端服务 前端包含一个多阶段 `Dockerfile` 和一个 Caddy SPA 配置,支持 gzip、健康检查处理和 `index.html` 回退路由。 推荐设置: - 根目录:`/frontend` - 健康检查路径:`/health` 前端环境变量: ``` VITE_API_URL=https://your-backend-domain.up.railway.app ``` `VITE_API_URL` 是在构建时嵌入的,因此更改它后需要重新部署前端。为两个服务生成公共域名,然后使用最终的前端 origin 更新 `CORS_ORIGINS`,并重新部署后端。 ## 负责任的使用 Zero Day Simulator 是一款教育模拟软件。它不会扫描网络、利用系统漏洞、发出真实命令或连接到实际运营的基础设施。现实世界中的参考用于描述广泛的防御性事件模式;组织、时间线和场景细节均为了游戏玩法而进行了虚构。 ## 后续计划 - 托管的公开演示 - 额外的战役包和场景类别 - 扩大的无障碍审核和本地化 - 可分享的行动后报告页面 - 可选的多人指挥室模式
作为对网络危机响应、系统思维和互动叙事的个人探索而构建。 **[返回顶部](#zero-day-simulator)**
标签:AV绕过, FastAPI, React, Syscalls, 事件响应模拟, 决策模拟, 特征检测, 网络安全游戏, 自定义脚本, 逆向工具