mine_ctf/docs/ctf-platform-plan.md
2026-05-05 21:27:34 +08:00

475 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 学 / 练 / 考一体化 CTF 平台规划文档
## 1. 文档目的
本文档用于规划一套基于现有开源项目二次开发的 CTF 平台,目标是支持:
- 学:课程化学习、知识点引导、实验闯关
- 练:日常刷题、专题训练、战队训练、靶场实操
- 考:正式考试、分班分组、限时考核、成绩导出
规划重点不是“从零重写一个 CTF 平台”,而是“基于成熟开源项目快速搭建可持续演进的平台”。
## 2. 建设目标
### 2.1 总目标
建设一套统一账号、统一题库、统一成绩、统一运维的 CTF 平台,让同一批题目可以在不同场景下复用:
- 在学习场景中作为带引导的实验题
- 在训练场景中作为刷题题或战队训练题
- 在考试场景中作为正式考核题
### 2.2 业务目标
- 降低办赛、带队训练、组织考核的重复配置成本
- 让题库从“赛事型资产”升级为“教学型资产”
- 让用户成长路径可追踪:学过什么、练过什么、考得怎样
- 让平台可以支持学校、培训营、企业内训三类典型场景
### 2.3 非目标
首期不建议把范围做得过大,以下内容建议暂不作为一期硬目标:
- 完整 LMS 能力(长视频直播、作业批改、论坛社区)
- 远程 AI 监考
- 全量攻防演练平台
- 完整 OJ / 编程题平台
## 3. 现有开源项目选型判断
### 3.1 结论先行
推荐路线:
-`GZCTF` 作为题目运行与比赛引擎
- 以自研“门户层 / 教学层 / 考试层”补齐学练考一体化能力
- 课程编排、模块化学习路径可借鉴 `pwn.college dojo` 的组织方式
- `CTFd` 适合作为备选方案,尤其适合 Python 团队或轻量活动场景
### 3.2 选型对比
| 项目 | 更适合做什么 | 优势 | 短板 | 结论 |
| --- | --- | --- | --- | --- |
| GZCTF | 比赛引擎、容器题运行、动态环境 | 原生支持 Docker / K8s、动态容器、动态 Flag、动态分值、分组与写作收集偏实战赛事 | 学习路径、课程编排、考试流程管理仍需补齐;二开需考虑其授权与品牌要求 | 作为底座优先 |
| CTFd | 轻量比赛平台、插件式扩展、主题定制 | 社区成熟、插件和主题机制完善、动态分值 / Hint / Unlock 链路成熟 | 容器题与隔离环境能力通常要依赖插件或外围系统,自带“学练考一体”能力不足 | 作为备选 |
| pwn.college dojo | 学习编排与课程组织参考 | 课程 / 模块 / 挑战的组织模型清晰,适合“学”的层面借鉴 | 系统复杂,直接作为底座成本较高 | 作为设计参考,不建议直接做底座 |
### 3.3 为什么更推荐 GZCTF
对于“学、练、考一体”平台,最难的往往不是前台页面,而是下面这些底层能力:
- 容器题的生命周期管理
- 动态 Flag 和题目隔离
- 并发下的稳定性
- 比赛中的监控、日志、排行榜
- 后续向靶场 / 实验环境扩展的空间
GZCTF 在这些方面更贴近目标平台的核心诉求。如果后面考试和训练都需要大量 Web / Pwn / Misc 实验环境GZCTF 更容易成为长期底座。
### 3.4 选型注意事项
- `GZCTF` 的官方资料显示其核心基于 AGPLv3同时存在受限组件与商标要求二开前要先确认对外部署方式、代码开放义务、品牌展示要求。
- `CTFd` 为 Apache-2.0,更宽松,但平台核心能力更偏“赛事壳子 + 插件扩展”。
- 如果团队主力是 Python且一期重点是“题库管理 + 课程引导 + 轻考试”CTFd 可更快起步。
- 如果团队需要中长期支撑容器题、实训、校赛、结课考核GZCTF 更值得投入。
## 4. 产品定位与场景设计
### 4.1 平台定位
目标平台不是单纯办赛平台,而是“安全实训操作系统”,至少覆盖三类场景:
1. 课程学习
2. 日常训练
3. 正式考核
### 4.2 三大模式定义
#### 学
面向初学者与课程学习过程,强调引导和路径:
- 按方向组织课程Web、Pwn、Crypto、Reverse、Misc、AWD 基础等
- 按模块组织知识点:基础、进阶、专题、综合
- 每个模块绑定题目、附件、题解、讲义、视频或外链资料
- 支持前置依赖与解锁规则
- 支持练习记录、学习进度、掌握度统计
#### 练
面向平时训练和战队培养,强调自由度和强反馈:
- 公开练习场
- 专题训练营
- 限时训练赛
- 班级 / 战队内部排行榜
- 靶机或容器环境一键启动、重置、续期
#### 考
面向正式考试和结业考核,强调过程可控与结果可审计:
- 题单 / 试卷编排
- 限时开放、迟到策略、交卷策略
- 分班 / 分组 / 分考场
- 随机抽题或 A/B 卷
- 成绩冻结、申诉复核、成绩导出
- 操作日志、提交记录、异常行为审计
### 4.3 统一设计原则
同一题目应当只维护一份“主数据”,在不同场景下用不同策略发布:
- 学习模式:可见提示、可见知识点、可见题解、可多次重置
- 训练模式:弱提示、开放时间长、强调排行榜与环境可用性
- 考试模式:严格限制提示、限制可见性、强调审计与防泄题
## 5. 核心能力规划
### 5.1 统一账号与组织体系
- 用户账号
- 班级 / 训练营 / 战队 / 学院组织
- 角色权限:学生、教练、讲师、命题人、管理员、考务
- 单点登录预留:学校统一认证、企业 AD / OAuth
### 5.2 统一题库
每道题建议维护以下元数据:
- 题目名称、方向、难度、标签
- 题目类型:附件题、静态容器题、动态容器题
- 知识点、前置知识、学习目标
- 场景属性:可学习、可训练、可考试
- 预计用时、建议人群、题解开放策略
- 附件、容器镜像、Flag 策略、环境依赖
- 风险等级:是否容易泄题、是否需独立环境、是否适合考试
### 5.3 学习中心
- 课程树 / 模块树
- 学习路径解锁
- 讲义 / 视频 / 外链资料挂载
- 分步提示与题解控制
- 学习进度、完成率、掌握度看板
### 5.4 训练中心
- 自由刷题
- 专题闯关
- 周赛 / 月赛 / 内部选拔赛
- 战队协作模式
- 环境重置、限时续期、实例回收
### 5.5 考试中心
- 题库抽题
- 固定题单组卷
- 分班分卷
- 防串题策略
- 审计日志与导出
- 成绩单、班级统计、知识点维度分析
### 5.6 内容运营与运维中心
- 题目导入导出
- 镜像构建与发布
- 附件管理
- 公告、通知、活动配置
- 平台监控、容器监控、告警
- 比赛 / 考试结束后的归档与复盘
## 6. 推荐总体架构
### 6.1 架构原则
- 核心运行能力复用开源项目
- 业务编排能力自研
- 题目主数据与运行实例分离
- 平台门户与比赛内核解耦
### 6.2 分层架构
```mermaid
flowchart LR
A[统一门户 Frontend] --> B[业务中台 API]
B --> C[学习服务]
B --> D[训练服务]
B --> E[考试服务]
B --> F[用户与组织服务]
C --> G[统一题库服务]
D --> G
E --> G
D --> H[GZCTF 比赛/环境引擎]
E --> H
G --> H
B --> I[统计分析服务]
H --> J[(PostgreSQL/Redis/Object Storage)]
B --> J
H --> K[Docker / K8s]
```
### 6.3 模块拆分建议
建议拆成两大域:
#### A. 平台业务域
- 门户前端
- 账号与组织
- 课程与学习路径
- 训练计划
- 考试编排
- 数据分析
#### B. 题目运行域
- 比赛 / 练习实例
- 动态容器
- Flag 校验
- 排行榜
- 提交记录
- 环境监控
这样做的好处是:以后即使底层引擎从 GZCTF 调整为别的方案,平台层仍可保留。
## 7. 一期建议范围MVP
### 7.1 一期目标
先验证“统一题库 + 训练 + 考试”能跑通,再补“课程化学习”。
原因:
- 训练和考试更接近 GZCTF / CTFd 的现有能力,落地更快
- 学习中心需要更多内容运营和教学设计,见效略慢
- 先把题库、环境、权限、成绩这些硬骨头打通,后续扩展最稳
### 7.2 一期功能清单
- 统一登录
- 统一题库主数据
- 题目与 GZCTF 实例映射
- 公开练习场
- 限时训练赛
- 基础考试模式
- 成绩导出
- 基础统计报表
- 题目发布审批流
### 7.3 一期不做或弱化
- 视频课程
- 复杂学习画像
- AI 助教
- 高级反作弊
- 多校区多租户强隔离
## 8. 二期建议范围
二期再把“学”补齐,形成真正的一体化闭环:
- 课程中心
- 模块化知识图谱
- 学习路径解锁
- 分步提示与题解策略
- 教师面板
- 班级画像
- 训练推荐
- 题目质量分析
## 9. 三期建议范围
- 多租户 / 多院系隔离
- SSO 与组织同步
- 高级防作弊策略
- 题目工厂与 CI/CD
- 自动化镜像体检
- 资源预算与弹性扩缩容
- 区域化部署与灾备
## 10. 技术实现建议
### 10.1 底座策略
推荐采用“外包内核”思路:
- GZCTF 负责比赛、容器、Flag、提交、排行等运行时能力
- 自研业务服务负责课程、训练编排、考试编排、组织、报表
不要一开始就深改 GZCTF 核心代码,优先采用:
- API 集成
- 主题定制
- 外挂服务
- 数据同步
只有在 API 明显不够时,再考虑有边界地修改底层项目。
### 10.2 题目内容流水线
建议从一开始就建立题目标准化流程:
1. 题目源码和附件放在 Git 仓库
2. 容器题通过 CI 构建镜像
3. 题目元数据同步到统一题库
4. 题目按场景发布到学习 / 训练 / 考试
5. 结束后回收环境并归档数据
### 10.3 部署建议
按阶段划分:
- 本地开发:`Docker Compose`
- 测试环境:`Docker + 单节点 K3s`
- 生产环境:`K8s + PostgreSQL + Redis + MinIO + 监控告警`
如果目标规模在校内 100 到 300 人,初期可以从 Docker 起步。
如果目标是长期平台、公开赛事或多班并发考试,尽早上 K8s 更稳。
### 10.4 数据与审计建议
至少要保留以下数据:
- 用户学习记录
- 提交记录
- 题目 solve / fail 数据
- 环境启动与销毁日志
- 成绩变更日志
- 考试过程日志
这些数据决定了后续是否能做:
- 成绩复核
- 异常行为分析
- 题目难度校准
- 学习推荐
## 11. 关键风险与应对
### 11.1 授权与合规风险
风险:
- 直接二开 GZCTF 可能涉及 AGPL、受限组件、商标展示要求
应对:
- 在立项阶段先做开源合规审查
- 能用 API / 插件方式扩展,就先不深 Fork
- 对外发布前准备版权说明、源码开放策略和品牌说明
### 11.2 泄题与场景污染风险
风险:
- 同一题同时用于学习、训练、考试,容易泄题
应对:
- 题目增加场景标签与发布策略
- 题解、Hint、附件按模式隔离
- 考试题优先使用变体题或同知识点不同载体题
### 11.3 容器资源与并发风险
风险:
- Web / Pwn 动态环境消耗大,考试高峰容易打满机器
应对:
- 题目按资源等级分层
- 预热热点镜像
- 配置实例回收策略
- 提前做压测和限流
### 11.4 内容生产瓶颈
风险:
- 平台搭好了,但课程和题库跟不上
应对:
- 优先做 1 到 2 个方向的精品专题
- 建立题目模板和审核标准
- 把命题、讲义、题解形成统一生产规范
## 12. 建议里程碑
### M02 周
- 完成开源选型确认
- 梳理授权与合规边界
- 跑通 GZCTF 本地 PoC
- 明确统一题库的数据模型
### M14 到 6 周
- 完成统一登录
- 完成题库后台
- 完成练习场 MVP
- 打通题目发布与实例启动
### M24 到 6 周
- 完成训练赛模式
- 完成基础考试模式
- 完成成绩导出和基础报表
### M34 到 8 周
- 完成课程中心
- 完成学习路径与进度跟踪
- 完成教师 / 教练视角看板
### M4持续演进
- 多租户
- SSO
- 监控告警完善
- 自动化题目流水线
- 更完整的数据分析
## 13. 当前建议的落地路径
最务实的落地方案是:
1. 先把 `GZCTF + 统一题库后台 + 练习/考试编排` 做出来
2. 用最小成本跑通一个真实场景,例如“校队训练营 + 结课考核”
3. 通过一期积累用户、题目、流程数据
4. 再把课程学习、知识图谱、推荐系统慢慢补上
这样做比“一开始就做一个特别全的平台”更稳,也更容易真正上线。
## 14. 下一步建议
如果按这个方向继续推进,建议下一份文档直接进入下面三选一:
1. `一期 PRD`:把 MVP 功能拆成页面、角色、流程、字段
2. `技术架构设计`:把服务划分、数据流、部署拓扑画出来
3. `题库模型设计`:把课程、题目、训练、考试之间的数据关系先定死
## 15. 参考项目与资料
- GZCTF 官方文档https://gzctf.gzti.me/
- GZCTF GitHubhttps://github.com/GZTimeWalker/GZCTF
- CTFd 官方文档https://docs.ctfd.io/
- CTFd GitHubhttps://github.com/CTFd/CTFd
- pwn.college dojohttps://github.com/pwncollege/dojo
- pwn.college example-dojohttps://github.com/pwncollege/example-dojo
## 16. 本文档的推荐决策
如果现在就要拍板,我的建议是:
- 底座选 `GZCTF`
- 业务层自研
- 一期先做“练 + 考”
- 二期再补“学”
- 题库从第一天起就按“同题多场景复用”设计
这条路线综合了建设速度、长期扩展性和容器题支撑能力,整体风险最低。