hetsonii/Chakravyuh

GitHub: hetsonii/Chakravyuh

Chakravyuh 是一个零信任的防御型 CTF 平台,让参赛者通过修补漏洞而非利用漏洞来抵御自动化攻击。

Stars: 0 | Forks: 0

# ChakravyuhFullLogo ChakravyuhTextWhite(梵文:चक्रव्यूह - 意为“轮型阵”,一种古老的军事阵法)是一个颠覆了传统攻击安全挑战的 Capture The Flag 平台。玩家无需入侵系统,而是必须在隔离的零信任环境中防御自动化的攻击。 ## 🎯 功能 - **专注于防御的挑战**:修补漏洞,而不是利用漏洞 - **类 VSCode 编辑器**:支持语法高亮的 Monaco 编辑器 - **隔离执行**:每次提交都在安全的 Docker container 中运行 - **零信任安全**:网络隔离、资源限制和 capability dropping - **实时反馈**:攻击验证期间的 WebSocket 更新 - **双重 Flag 模式**: - 全攻击模式:单一按钮,修补所有漏洞后获得一个 flag - 单攻击模式:多个按钮,每次攻击获得独立的 flag - **Rate Limiting**:多层 Rate Limiting(每分钟、每 15 分钟、每小时) ## 🏗️ 架构 ``` Frontend (React + Vite) ↓ API Gateway (Express) ↓ Backend Services ├── Challenge Manager ├── Submission Handler └── Analytics Service ↓ Queue System (BullMQ + Redis) ↓ Orchestrator Workers ├── Docker Container Management ├── Attack Execution └── Result Processing ``` ## 📋 前置条件 - Docker & Docker Compose - Node.js 20+(用于本地开发) - 4GB+ RAM - 推荐 Linux 主机(以获得更好的 Docker 性能) ## 🚀 快速开始 ### 1. 克隆与配置 ``` git clone cd ctf-defense-platform # 复制环境文件 cp .env.example .env # 使用你的配置编辑 .env nano .env ``` ### 2. 启动服务 ``` # 构建并启动所有服务 docker-compose up -d # 查看日志 docker-compose logs -f # 检查服务健康状态 docker-compose ps ``` ### 3. 访问平台 - **前端**:http://localhost - **后端 API**:http://localhost:3000 - **MongoDB**:localhost:27017 - **Redis**:localhost:6379 ### 4. 创建首个用户 ``` # 通过 API 注册或使用位于 http://localhost 的 Web 界面 curl -X POST http://localhost/api/auth/register \ -H "Content-Type: application/json" \ -d '{ "username": "admin", "email": "admin@example.com", "password": "SecurePass123" }' ``` ### 5. 加载示例挑战 ``` # 使用 API(首先从登录获取 JWT token) curl -X POST http://localhost/api/challenges/load \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -H "Content-Type: application/json" \ -d '{"challengeId": "sql-injection-101"}' ``` ## 📁 项目结构 ``` ctf-defense-platform/ ├── frontend/ # React frontend │ ├── src/ │ │ ├── components/ # React components │ │ ├── pages/ # Page components │ │ ├── services/ # API & WebSocket services │ │ └── styles/ # CSS files │ └── Dockerfile ├── backend/ # Express API server │ ├── src/ │ │ ├── routes/ # API routes │ │ ├── services/ # Business logic │ │ ├── middleware/ # Auth, rate limiting │ │ └── models/ # Mongoose models │ └── Dockerfile ├── orchestrator/ # Docker orchestration service │ └── src/ │ ├── services/ # Container & attack management │ ├── models/ │ └── worker.js # BullMQ worker ├── worker/ # Additional worker service │ └── src/ ├── challenges/ # Challenge definitions │ └── sql-injection-101/ │ ├── challenge.json │ ├── server.js │ ├── package.json │ └── attacks/ └── docker-compose.yml ``` ## 🎮 创建挑战 ### 挑战结构 ``` challenges/ └── your-challenge-id/ ├── challenge.json # Challenge configuration ├── [source files] # Files players will edit └── attacks/ # Attack scripts ├── attack1.py └── attack2.py ``` ### 挑战配置示例 完整示例请查看 `challenges/sql-injection-101/challenge.json`。 核心字段: - `flagPolicy.mode`:`"all_attacks"` 或 `"per_attack"` - `files[].editable`:允许玩家编辑此文件 - `attacks[].buttonLabel`:按钮文本(例如:“Attack 1”或“SQL Injection”) - `network.mode`:`"isolated"`(推荐)或 `"allowlist"` ### 攻击脚本要求 - Exit code 0 = 攻击成功(漏洞依然存在) - Exit code 非 0 = 攻击失败(漏洞已被修补) - 接收目标 IP 作为第一个命令行参数 - 在指定时间后 timeout 示例: ``` import sys import requests target_ip = sys.argv[1] response = requests.post(f"http://{target_ip}:3000/api", ...) sys.exit(0 if vulnerable else 1) ``` ### 加载挑战 ``` # 通过 API(仅限管理员) POST /api/challenges/load { "challengeId": "your-challenge-id" } # 系统将: # 1. 读取 challenge.json # 2. 加载所有文件 # 3. 验证配置 # 4. 使 challenge 对玩家可用 ``` ## 🔒 安全功能 ### Container 隔离 - 每次提交拥有隔离的 Docker 网络 - 默认无互联网访问 - 尽可能使用只读根文件系统 - Capability dropping(移除所有 capabilities) - 资源限制(CPU、内存、磁盘、PID) ### Rate Limiting - 每分钟 2 次尝试 - 每 15 分钟 10 次尝试 - 每小时 30 次尝试 - 基于 Redis 的分布式 Rate Limiting ### 攻击防御 - 默认禁止出站网络 - 攻击脚本在独立的 container 中运行 - 验证完成后 container 自动清理 - 强制 Timeout 机制 - 净化错误消息(无 stack trace) ## 📊 统计分析 访问 `/api/analytics` 获取分析数据(仅限管理员): - **平台范围**:用户数、挑战统计、成功率 - **单挑战统计**:攻击成功率、平均解决时间 - **排行榜**:按得分排名的顶级解决者 - **用户统计**:个人进度与历史记录 ## 🔧 配置 ### 环境变量 查看 `.env.example` 了解所有选项。核心变量: - `JWT_SECRET`:认证密钥(生产环境中务必修改!) - `RATE_LIMIT_*`:Rate Limiting 配置 - `DEFAULT_*`:Container 的资源限制 - `QUEUE_CONCURRENCY`:并行 worker 数量 ### 扩展性 扩展 worker: ``` docker-compose up -d --scale orchestrator=4 --scale worker=6 ``` ### 资源限制 在 `challenge.json` 中针对单个挑战进行编辑: ``` "resources": { "cpuLimit": "1.0", "memoryLimit": "1G", "diskLimit": "2G", "timeoutSeconds": 600 } ``` ## 🐛 故障排除 ### Container 未启动 ``` # 检查日志 docker-compose logs backend docker-compose logs orchestrator # 验证 Docker socket ls -la /var/run/docker.sock # 确保正确的权限 sudo usermod -aG docker $USER ``` ### 提交卡在队列中 ``` # 检查 Redis docker-compose exec redis redis-cli KEYS "*" # 检查 worker 日志 docker-compose logs -f orchestrator # 重启 worker docker-compose restart orchestrator worker ``` ### 前端构建问题 ``` # 重新构建 frontend docker-compose build frontend docker-compose up -d frontend ``` ## 📝 开发 ### 本地开发 ``` # Backend cd backend npm install npm run dev # Frontend cd frontend npm install npm run dev # 确保 Redis 和 MongoDB 正在运行 docker-compose up -d redis mongo ``` ### 本地测试挑战 ``` # 手动构建 challenge 容器 cd challenges/sql-injection-101 docker build -t test-challenge . # 运行攻击脚本 docker run --rm test-challenge python attacks/sqli_basic.py localhost ``` ## 📞 支持 如有问题或疑问: - 在仓库中创建 issue - 查看现有 issue 寻找解决方案 **尽情去 Hack 吧!🛡️**
标签:CTF平台, Docker, GNU通用公共许可证, MITM代理, Node.js, React, Redis, Syscalls, 安全防御评估, 搜索引擎查询, 版权保护, 网络安全, 自定义脚本, 请求拦截, 防御训练, 隐私保护