aifred0729-TW/Minerva

GitHub: aifred0729-TW/Minerva

面向 Mythic C2 的赛博朋克风格现代化 Web 操作界面,提供 3D 网络拓扑、实时协作图和完整作战管理功能。

Stars: 26 | Forks: 1

Minerva - Next-Generation Mythic C2 Interface

繁體中文 | English

下一代 Mythic C2 接口
高级命令与控制 UI,具备协作图可视化、3D 网络拓扑和实时操作功能

Version License React TypeScript Tailwind Three.js

## 概述 Minerva 是一个面向 [Mythic C2 Framework](https://github.com/its-a-feature/Mythic) 的现代化赛博朋克主题 Web 接口。它用功能丰富、视觉沉浸式的操作体验取代了 Mythic 内置的 React UI,专为红队操作而设计。 Minerva 由 React、TypeScript、Tailwind CSS 和 Three.js 构建,提供实时协作图可视化、3D 网络拓扑、交互式命令控制台以及全套操作工具——所有这些都封装在时尚的深色赛博朋克美学中。 ### 关键亮点 - **实时协作图** — 交互式回调网络可视化,支持自定义节点创建和多用户同步 - **3D 网络拓扑** — 由 Three.js 驱动的完整 3D 网络地图,具备轨道控制、子网分组和实时更新 - **交互式控制台** — 丰富的命令任务分发,具备语法高亮、分屏输出和流式结果 - **战斗模式** — 针对活跃操作的战术 UI 优化,支持战斗/侦察/普通模式切换 - **音频集成** — 背景音乐、音效和操作事件的音频提示 - **赛博朋克主题** — 深色主题 UI,采用等宽字体、扫描线效果和绿/青色调装饰色 ## 截图 ### 登录 赛博朋克风格的认证界面,具备实时服务器状态监控、HTTPS 加密指示器和会话状态追踪。

Login Page

### 仪表板 中央指挥概览,显示活跃回调、总 Payload 数、C2 基础设施状态、操作详情、命令统计、资产收集指标和近期活动流。

Dashboard

### 活跃回调 回调管理界面,通过交互式图可视化显示连接到活跃 Agent 的 Minerva 核心节点。包含带有实时状态指示器的视觉拓扑视图和下方的可排序数据表。

Active Callbacks

### Payload 概览 Payload 创建和管理中心,包含列出 Payload、创建新 Payload 和构建 Wrapper 的标签页。支持 Payload 配置的导入/导出。

Payloads Overview

### 交互式控制台 丰富的命令任务分发界面,具备实时输出渲染。侧边栏显示回调详情(主机、操作系统、架构、Agent 类型)。支持语法高亮输出、文件浏览器集成和结构化数据的分屏视图。

Interactive Console

### 3D 网络拓扑 由 Three.js 驱动的完整 3D 网络拓扑地图,具备交互式轨道控制。节点按类型(核心/存活/死亡/自定义)进行颜色编码,并带有虚线连接。具有图例覆盖和显示节点计数的实时状态栏。

3D Cyber-Topology

### 文件管理器 集中式文件管理,侧边栏按类别分为下载、上传、截图和事件工作流。包含目标机器浏览器和文件搜索功能。

File Manager

### 凭证库 凭证存储和组织,支持多字段搜索(账户、域、凭证、备注、标签)。追踪已验证与已收集的凭证数量。

Credentials Vault

### 隧道管理器 隧道管理界面,通过视觉拓扑显示操作员侧代理、C2 服务器中继和目标侧端点。以赛博朋克风格的流程图显示活跃隧道状态、端口映射和连接链。

Tunnel Manager

### MITRE ATT&CK 完整的 MITRE ATT&CK 矩阵可视化,涵盖所有战术类别的 637 项技术映射。支持按任务、任务/PT、命令或标签进行筛选,并具备执行追踪功能。

MITRE ATT&CK

### C2 配置文件 C2 通信配置文件管理,显示所有已安装的配置文件(discord, dns, github, http, https, tcp, websocket)及其版本信息、状态指示器和配置控制。

C2 Profiles

### 操作管理器 操作生命周期管理,具备状态追踪(Active/Complete/Deleted)、操作员分配和用于 OpSec 强制的命令块列表。

Operations Manager

### 设置 综合设置面板,包含操作员偏好、显示开关、时间戳格式化、任务交互模式、浏览器脚本选项和主题定制。

Settings

## 功能 ### 核心操作 | 功能 | 描述 | |---------|-------------| | **回调** | 实时回调用踪,具备健康指示器(alive/dead/streaming)、批量操作、分组和 sleep/jitter 配置 | | **Payload** | 多步 Payload 创建向导,支持 Staging、构建、Wrapper 支持和自动生成 | | **控制台** | 交互式命令任务分发,具备语法高亮、分屏输出、命令历史和流式结果 | | **文件** | 下载/上传跟踪、截图查看器、键盘记录搜索和工件组织 | | **凭证** | 凭证存储,具备去重、哈希管理和账户关联功能 | | **搜索** | 跨所有数据类型的全局搜索,支持高级过滤 | ### 可视化 | 功能 | 描述 | |---------|-------------| | **回连图** | 使用 ReactFlow 和 ELK 自动布局的交互式 2D 图,支持自定义节点创建、边管理和 PNG 导出 | | **3D 拓扑** | 由 Three.js 驱动的 3D 网络地图,具备轨道控制、子网分组 (CIDR)、物理定位和上下文菜单 | | **自定义节点** | 在图视图中创建中继/代理节点,支持多用户协作编辑(5秒同步轮询) | | **MITRE ATT&CK** | 完整的 ATT&CK 矩阵可视化,具备技术映射和执行追踪 | | **隧道图** | 隧道可视化,显示父子关系和状态 | ### 高级 | 功能 | 描述 | |---------|-------------| | **战斗模式** | 战斗/侦察/普通模式切换,具备战术 UI 优化和 2 倍动画速度 | | **事件** | 事件驱动自动化,具备触发器、订阅和实时通知 | | **音频系统** | 全局音乐播放器(IndexedDB 存储)、操作事件音效(回连、隧道、认证) | | **操作** | 操作生命周期管理,具备基于角色的访问控制 | | **报告** | 基于操作数据的报告生成与分析 | | **C2 配置文件** | 配置文件配置与管理 | | **浏览器脚本** | 自定义浏览器自动化脚本 | | **标签** | 基于标签的组织和跨所有实体的过滤 | ## 技术栈 | 类别 | 技术 | |----------|-------------| | **前端** | React 18, TypeScript 5.9, React Router 7 | | **样式** | Tailwind CSS 3.4, Material-UI 7, Emotion, Framer Motion | | **状态** | Zustand (持久化应用存储), Apollo Client (GraphQL + 缓存) | | **实时** | 通过 WebSocket (graphql-ws) 的 GraphQL 订阅 | | **3D** | Three.js 0.175, React Three Fiber, React Three Drei | | **图表** | @xyflow/react 12.6, ELK.js (分层布局) | | **图表** | MUI X Charts, MUI X Data Grid | | **编辑器** | React Ace (带语法高亮) | | **构建** | React App Rewired, PostCSS, Webpack | | **部署** | Docker, Nginx (SSL 反向代理) | ## 快速开始 ### 前置条件 - [Docker](https://docs.docker.com/get-docker/) 和 Docker Compose - 一个运行中的 [Mythic C2](https://github.com/its-a-feature/Mythic) 实例 ### 生产环境(独立 Docker) 在端口 **443** 上作为独立容器运行 Minerva,将 API 请求代理到端口 **7443** 上的 Mythic 实例。 ``` # 默认:连接到 Mythic,地址为 https://host.docker.internal:7443 docker compose build docker compose up -d ``` 打开 **https://\** 并使用您的 Mythic 凭证登录。 要指向远程 Mythic 实例: ``` MYTHIC_ADDRESS=https://10.0.0.5:7443 docker compose up -d ``` 停止运行: ``` docker compose down ``` ### 设置(替换 mythic_react) 如果您希望替换 Mythic 内置的 UI 而不是独立运行: ``` ./scripts/minerva_setup.sh # Full setup ./scripts/minerva_setup.sh verify # Verify installation ./scripts/minerva_setup.sh fix # Fix issues ./scripts/minerva_setup.sh status # Check status ./scripts/minerva_setup.sh clean # Reset database ``` ## 开发模式(热重载) ### 架构 开发模式使用两个容器: | 容器 | 角色 | 描述 | |-----------|------|-------------| | `minerva-dev` | React 开发服务器 | 在端口 3000 上运行 `react-app-rewired start`,具备热模块替换 (HMR)。源代码以卷形式挂载,因此任何文件更改都会触发即时浏览器刷新。 | | `minerva` | Nginx SSL 代理 | 监听端口 **443**,使用自签名 SSL。将 `/new/` 代理到开发服务器,`/ws` 用于 HMR WebSocket,以及 `/graphql/`、`/auth`、`/refresh`、`/direct/` 代理到您的 Mythic 实例。 | ``` Browser :443 ──> nginx (SSL) ──> minerva-dev :3000 (React dev server) | └──> Mythic :7443 (API / GraphQL / WebSocket) ``` ### 快速开始 ``` # 启动 dev 模式(首次运行将安装 npm dependencies) docker compose -f docker-compose.dev.yml up -d --build # 检查两个 containers 是否都在运行 docker compose -f docker-compose.dev.yml ps # 查看 dev server 日志(等待 "webpack compiled") docker logs -f minerva-dev ``` 打开 **https://\** — 对 `src/` 或 `public/` 下文件的任何更改都将自动在浏览器中热重载。 ### 挂载卷 | 主机路径 | 容器路径 | 用途 | |-----------|---------------|---------| | `./src/` | `/app/src/` | React 源代码(热重载) | | `./public/` | `/app/public/` | 静态资产(音频、图标等) | | `./tailwind.config.js` | `/app/tailwind.config.js` | Tailwind CSS 配置 | | `./postcss.config.js` | `/app/postcss.config.js` | PostCSS 配置 | | `./config-overrides.js` | `/app/config-overrides.js` | Webpack 覆盖设置 | | `./tsconfig.json` | `/app/tsconfig.json` | TypeScript 配置 | | `./.env` | `/app/.env` | 环境变量 | ### 连接到远程 Mythic 实例 ``` MYTHIC_ADDRESS=https://10.0.0.5:7443 docker compose -f docker-compose.dev.yml up -d --build ``` ### 在开发和生产环境之间切换 ``` # 切换到 production(static build,无 hot reload) docker compose -f docker-compose.dev.yml down docker compose up -d --build # 切换回 dev(hot reload) docker compose down docker compose -f docker-compose.dev.yml up -d --build ``` ## 项目结构 ``` Minerva/ ├── src/ │ ├── Minerva/ # Main application │ │ ├── App.tsx # Router & layout │ │ ├── store.ts # Zustand app state (persisted) │ │ ├── index.css # Global styles & CSS variables │ │ │ │ │ ├── pages/ # Page components │ │ │ ├── Dashboard.tsx # Home dashboard │ │ │ ├── Callbacks.tsx # Callback management & graph │ │ │ ├── Console.tsx # Interactive command tasking │ │ │ ├── Payloads.tsx # Payload creation & management │ │ │ ├── Topology3D.tsx # 3D network visualization │ │ │ ├── Files.tsx # File management │ │ │ ├── Credentials.tsx # Credential vault │ │ │ ├── MitreAttack.tsx # MITRE ATT&CK matrix │ │ │ ├── Search.tsx # Global search │ │ │ ├── Tunnels.tsx # Tunnel management │ │ │ ├── Eventing.tsx # Event automation │ │ │ ├── Operations.tsx # Operation management │ │ │ ├── Settings.tsx # User preferences │ │ │ ├── Login.tsx # Authentication │ │ │ └── ... # + more pages │ │ │ │ │ ├── components/ # Reusable UI components │ │ │ ├── CallbackGraph.tsx # Interactive graph (ReactFlow) │ │ │ ├── FileBrowser.tsx # File tree browser │ │ │ ├── OutputRenderer.tsx # Rich output rendering │ │ │ ├── Sidebar.tsx # Navigation sidebar │ │ │ ├── GlobalAudioPlayer.tsx # Music player │ │ │ ├── BattleMode.tsx # Combat mode toggle │ │ │ └── ... # + more components │ │ │ │ │ ├── lib/ # Business logic & API │ │ │ ├── api.ts # GraphQL queries & mutations │ │ │ ├── customGraphNodeService.ts # Graph node serialization │ │ │ ├── soundEffects.ts # Audio playback │ │ │ ├── utils.ts # Helper functions │ │ │ └── musicDB.ts # Music library (IndexedDB) │ │ │ │ │ ├── types/ # TypeScript interfaces │ │ └── context/ # React Context providers │ │ │ ├── components/ # Legacy shared components │ ├── index.js # React root & Apollo setup │ └── cache.js # Apollo cache & reactive vars │ ├── public/ # Static assets ├── nginx/ # Nginx configuration templates ├── docker/ # Dockerfiles (dev, prod, nginx) ├── scripts/ # Setup & maintenance scripts ├── docs/ # Banner, screenshots ├── docker-compose.yml # Production deployment ├── docker-compose.dev.yml # Development (hot reload) ├── tailwind.config.js # Tailwind theme configuration └── package.json # Dependencies ``` ## 自定义图节点 在回连 → 图视图中创建自定义节点以建模中继/代理基础设施: | 操作 | 方式 | |--------|-----| | 创建节点 | 右键点击空白区域 → "Create Custom Node" | | 连接节点 | 右键点击节点 → "Set Parent" | | 编辑/删除 | 右键点击节点 → Edit/Delete | 自定义节点存储主机名、IP、操作系统、架构和 C2 配置文件数据。节点位置在会话间持久保存,并通过 5 秒轮询在所有连接的用户之间同步数据。 ### 调试 在 `CallbackGraph.tsx` 中设置 `DEBUG_GRAPH = true` 以启用图操作日志记录。 ## 主题系统 Minerva 使用 CSS 自定义属性进行动态主题化: ``` /* Dark theme (default) */ :root { --color-signal: 255 255 255 /* Text & highlights */ --color-accent: 34 197 94 /* Green accent */ --color-void: 0 0 0 /* Background */ --color-ghost: 153 153 153 /* Borders & secondary */ --color-machine: 51 51 51 /* Card backgrounds */ } /* Light theme */ :root.minerva-light { --color-signal: 30 30 40 --color-accent: 22 163 74 --color-void: 240 240 245 --color-ghost: 90 90 100 --color-machine: 225 225 230 } ``` 字体:**JetBrains Mono** (等宽) 和 **Inter** (无衬线)。 ## 认证与会话 - 基于 JWT 的认证,采用 access + refresh token 模式 - 4 小时 JWT 生命周期,自动刷新 - 会话过期检测和自动登出 - 用于实时 GraphQL 订阅的 WebSocket 认证 - 剩余 30 分钟时提醒用户 ## 故障排除 | 问题 | 解决方案 | |-------|----------| | CSS 未加载 | 确保 `tailwind.config.js` 和 `postcss.config.js` 存在。使用 `--build` 重启。 | | 热重载不工作 | 检查 `docker logs minerva-dev`。开发服务器使用 `CHOKIDAR_USEPOLLING=true` 以适配 Docker。 | | `MODULE_NOT_FOUND` | 检查 `docker-compose.dev.yml` 中的卷挂载。 | | 找不到新的 npm 包 | 重新构建:`docker compose -f docker-compose.dev.yml up -d --build` | | 浏览器 SSL 警告 | 预期行为 — 开发模式使用自签名证书。接受并继续。 | | 图节点不同步 | 运行 `./scripts/minerva_setup.sh fix` 以验证 agentstorage 表。 | | 数据库问题 | 运行 `./scripts/minerva_setup.sh clean` 进行重置,然后重启。 | ## 许可证 本项目采用双重许可: - **开源**: [AGPL-3.0](./LICENSE) — 您可以根据 AGPL-3.0 的条款使用、修改和分发本软件。 使用本软件的任何衍生作品或服务也必须在 AGPL-3.0 下发布。 - **商业许可证**: 如果您希望在专有/闭源产品或服务中使用本软件 而不遵守 AGPL-3.0 的义务, 可以获取商业许可证。 联系方式:aifred072tw@gmail.com
标签:3D可视化, C2框架, Mythic, React, Syscalls, Tailwind CSS, Three.js, TypeScript, Web界面, 命令控制, 图形化界面, 安全学习资源, 安全插件, 实时协作, 攻击模拟, 数据采集, 流量捕获, 网络安全, 网络拓扑, 自动化攻击, 请求拦截, 赛博朋克, 隐私保护, 驱动签名利用