繁體中文 | English
下一代 Mythic C2 接口
高级命令与控制 UI,具备协作图可视化、3D 网络拓扑和实时操作功能
## 概述
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 加密指示器和会话状态追踪。
### 仪表板
中央指挥概览,显示活跃回调、总 Payload 数、C2 基础设施状态、操作详情、命令统计、资产收集指标和近期活动流。
### 活跃回调
回调管理界面,通过交互式图可视化显示连接到活跃 Agent 的 Minerva 核心节点。包含带有实时状态指示器的视觉拓扑视图和下方的可排序数据表。
### Payload 概览
Payload 创建和管理中心,包含列出 Payload、创建新 Payload 和构建 Wrapper 的标签页。支持 Payload 配置的导入/导出。
### 交互式控制台
丰富的命令任务分发界面,具备实时输出渲染。侧边栏显示回调详情(主机、操作系统、架构、Agent 类型)。支持语法高亮输出、文件浏览器集成和结构化数据的分屏视图。
### 3D 网络拓扑
由 Three.js 驱动的完整 3D 网络拓扑地图,具备交互式轨道控制。节点按类型(核心/存活/死亡/自定义)进行颜色编码,并带有虚线连接。具有图例覆盖和显示节点计数的实时状态栏。
### 文件管理器
集中式文件管理,侧边栏按类别分为下载、上传、截图和事件工作流。包含目标机器浏览器和文件搜索功能。
### 凭证库
凭证存储和组织,支持多字段搜索(账户、域、凭证、备注、标签)。追踪已验证与已收集的凭证数量。
### 隧道管理器
隧道管理界面,通过视觉拓扑显示操作员侧代理、C2 服务器中继和目标侧端点。以赛博朋克风格的流程图显示活跃隧道状态、端口映射和连接链。
### MITRE ATT&CK
完整的 MITRE ATT&CK 矩阵可视化,涵盖所有战术类别的 637 项技术映射。支持按任务、任务/PT、命令或标签进行筛选,并具备执行追踪功能。
### C2 配置文件
C2 通信配置文件管理,显示所有已安装的配置文件(discord, dns, github, http, https, tcp, websocket)及其版本信息、状态指示器和配置控制。
### 操作管理器
操作生命周期管理,具备状态追踪(Active/Complete/Deleted)、操作员分配和用于 OpSec 强制的命令块列表。
### 设置
综合设置面板,包含操作员偏好、显示开关、时间戳格式化、任务交互模式、浏览器脚本选项和主题定制。
## 功能
### 核心操作
| 功能 | 描述 |
|---------|-------------|
| **回调** | 实时回调用踪,具备健康指示器(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