MintKangaroo/Cyber-Offensive-and-Defensive-Exercise

GitHub: MintKangaroo/Cyber-Offensive-and-Defensive-Exercise

面向ICS/OT关键基础设施的攻防一体化网络靶场平台,通过11个行业数字孪生与集成的EDR/SIEM系统,提供贴近实战的网络安全攻防训练和竞赛环境。

Stars: 0 | Forks: 0

# 🛡️ Cyber Range Platform — 攻防一体化训练平台

Live Fire Range 대시보드
Live Fire Range — 네트워크 토폴로지 · 팀별 실시간 점수 · 공격/방어 이벤트 피드 · 플래그 트래커

## 目录 - [平台功能简介](#무엇을-하는-플랫폼인가) - [架构](#아키텍처) - [主要界面 (截图)](#주요-화면-스크린샷) - [核心功能](#핵심-기능) - [Twin 漏洞服务 (60种)](#트윈-취약-서비스-60종) - [挑战目录 (69种)](#챌린지-카탈로그-69종) - [快速入门](#빠른-시작) - [验证 · 质量门禁](#검증--품질-게이트) - [RBAC (基于角色的访问控制)](#rbac-역할-기반-접근제어) - [实战运营 (多团队 · 初始化 · 安全管控)](#실전-운영-다중-팀--초기화--안전-통제) - [仓库结构](#저장소-구조) ## 平台功能简介 既然无法攻击真实的基础设施,我们就将**模拟关键基础设施的数字孪生(Digital Twin)**部署在安全的容器中,并在其上开展攻防训练。 - **Red(攻击方)** 负责对存在漏洞的 Twin 服务和 CTF 挑战进行漏洞利用(exploit),从而获取 flag。 - **Blue(防守方)** 负责使用 EDR 对入侵行为进行检测、隔离和阻断,编写 SIEM 检测规则,以及对服务进行修补和恢复。 - **指导员(Instructor)** 负责注入和控制场景,并调整评分。 - **观察者(Observer)** 以只读权限对全过程进行监控。 - 训练结束后,**AAR(After-Action Report)** 会自动生成包含 MTTD/MTTR、检测率、ATT&CK 热力图以及 PDF 报告的总结。 整个过程均使用 **MITRE ATT&CK / ATT&CK for ICS** 技术进行打标,使得攻击与检测能够以同一种语言进行关联。 ## 架构 ``` flowchart TB subgraph Users["🔴 Red / 🔵 Blue / 👀 Observer / 🎓 Instructor"] RT["Red 팀"]; BT["Blue 팀"]; OB["관전자"]; IN["교관"] end subgraph Dashboards["대시보드 (Vite/React)"] LF["Live Fire (5174)"]; SIEMUI["SIEM 콘솔 (5175)"]; EDRUI["EDR 콘솔 (5173)"] end subgraph Twins["🎯 디지털 트윈 (취약 자산, 네트워크 격리)"] GS["위성 지상국 :8001"]; PP["발전소 SCADA :8002"]; DN["사내망 :8003"] end subgraph Core["⚙️ 컨트롤 플레인"] EC["Event Collector :8010"]; SC["Scoring :8020"]; CF["Config :8030"] SE["Scenario Engine :8045"]; IA["Instructor API :8050"]; NOC["NOC Monitor :8070"] end subgraph Defense["🛰️ 탐지 · 대응"] EDR["EDR Backend :8080"]; SIEM["SIEM Core :8040"]; AAR["AAR Report :8090"] end subgraph Sensors["📡 네트워크 센서"] SUR["Suricata ×11"]; ZK["Zeek ×11"]; PF["pfSense syslog"] end RT -->|익스플로잇| Twins BT --> EDRUI & SIEMUI OB & IN --> LF Twins -->|텔레메트리·이벤트| EC Twins -->|access log| SIEM Sensors -->|알림·플로우| SIEM Twins -->|프로세스 스냅샷| EDR EC --> SC EDR -->|격리/kill| CF --> Twins SE --> EC SIEM -->|blue_detection| EC SC & EC & SIEM --> AAR Dashboards -.read.-> Core Dashboards -.read.-> Defense ``` **端口摘要**: Twin 8001–8003·8201–8208(经由 nginx 网关) · Event 8010 · Scoring 8020 · Config 8030 · SIEM 8040 · Scenario 8045 · Instructor 8050 · **Range Control 8055** · **Challenge Portal 8060** · NOC 8070 · EDR 8080 · AAR 8090 · **Match vhost 8088** · Dashboard 5173–5177 (EDR/LiveFire/SIEM/**RedPortal**/**BluePortal**)。 ## 主要界面 (截图) ### 🔥 Live Fire Range — 综合态势感知板 网络拓扑、各团队 Red/Blue 的实时得分与累计趋势、补丁状态、flag 追踪器, 以及展示攻击、检测和阶段完成情况的实时事件流。 ![Live Fire](https://static.pigsec.cn/wp-content/uploads/repos/cas/05/05870be4a4e20b0948a985c5f1d77eef4e25dadcc515991f6a73f7142eeeccff.png) ### 🏭 Process Impact — ICS 破坏行为的物理影响 将抽象的资产状态 (compromised/recovered) 转化为**各个 OT 部门的真实物理后果**—— 比如“系统频率崩塌 57.2Hz / SIS 联锁解除 · 反应器超压 / CRAC 制冷被覆盖 · 进气温度 41℃”。 通过颜色仪表盘和仪表数值显示严重程度(正常·扰动·破坏·恢复中), 直观地展现出破坏行为对物理世界意味着什么。仅需现有的事件流即可运行(无需额外后端)。

Process Impact 패널
Process Impact(실제 event_collector 이벤트로 렌더) — 전력망 트립 · 정유 SIS 해제 · 데이터센터 냉방 오버라이드가 사보타주로, 수도·LNG는 교란, 철도는 블루팀 복구중으로 표시. 각 이벤트의 phase(objective·data_exfiltration)까지 반영

### 🖥️ EDR 控制台 — 应急响应 主机资产清单(在线状态)、进程树探索、实时检测告警(reverse shell/web 服务器 shell 生成), 以及**一键隔离主机 / 结束进程** 的响应操作。 | 概览 (主机 · 检测) | 选择主机 (进程探索 · 隔离) | |---|---| | ![EDR 概览](https://static.pigsec.cn/wp-content/uploads/repos/cas/08/08b6070f5429e49ccfc28624c42a16149257ee144bb999dc7deec51b1b0883c8.png) | ![EDR 主机](https://static.pigsec.cn/wp-content/uploads/repos/cas/2e/2e95e90064e878e297ce3a7191661c750abbadf3e3198669c9dd8f3314684895.png) | ### 🔎 SIEM 控制台 — 检测 · 搜索 全文日志搜索、实时检测告警、MITRE ATT&CK 覆盖率,以及 Suricata/Zeek/Twin/pfSense 数据源健康状态。 | 搜索 (日志检索) | 告警 (检测) | 覆盖率 (ATT&CK) | |---|---|---| | ![SIEM 搜索](https://static.pigsec.cn/wp-content/uploads/repos/cas/d6/d67049c63f8bf8dbdabac41c0368535306b168a263a25df0126adbece7acd5e7.png) | ![SIEM 告警](https://static.pigsec.cn/wp-content/uploads/repos/cas/ef/eff7795ef95659d45e8b66fa5509969175ad0ab56db33726d183e499df97c58b.png) | ![SIEM 覆盖率](https://static.pigsec.cn/wp-content/uploads/repos/cas/f6/f685a6447a6f0014ad3af2ff589846763b92f3efcb824618f9dbf862b30af088.png) | ## 核心功能 | 领域 | 内容 | |---|---| | **数字孪生 (Digital Twin)** | 在**11个 ICS/OT 部门**(卫星·电力·内网 + 炼油·智能工厂·水务·LNG·铁路·机场·数据中心·医院)中内置了**60种存在漏洞的服务**(SQLi/IDOR/RCE/命令注入/SSRF/XXE/LDAP + OPC UA·Modbus·HART·SIS·ESD·Profinet 等 OT 协议),并生成 telemetry 和 access log。**全部11个部门均实现 per-twin 网络隔离**(nginx 网关 + internal 网络),从而阻断横向移动和流量流出。 | | **EDR** | 收集进程快照 → 检测 reverse shell、web 服务器生成 shell 等行为 → 隔离主机/结束进程(包含审计日志)。 | | **SIEM** | 数据摄取(11个 Twin 日志·Suricata·Zeek·pfSense syslog) → 格式标准化 → 规则匹配(match/threshold/sequence/periodicity,**包含19项 ICS/OT 领域规则**:match 16 + 部门 kill chain sequence 2 + OT 多重漏洞 threshold 1)进行检测 → 与 Live Fire 评分系统联动。进行 ATT&CK 覆盖率映射。 | | **场景引擎** | 通过代码定义 kill chain 场景(强制顺序执行,提供 chain bonus)。加载了**14个场景** —— **11个部门均有专属 kill chain** + 3个跨界场景(包含**IT→OT 跳板**:以内网为跳板→窃取凭证→对炼油 OPC UA 进行侦察→破坏 SIS,即跨越 Purdue 边界多资产 kill chain)。 | | **评分/AAR** | 基于事件自动评分(Red 目标 / Blue 检测·恢复)。自动生成 MTTD/MTTR、检测率、误报率、ATT&CK 热力图以及**PDF 报告**。 | | **恢复判定** | NOC Monitor 轮询 Twin 健康状态,判定“入侵→修补→恢复”过程,计算出 MTTR 并为 Blue 队伍加分。 | | **RBAC** | instructor/red/blue/observer 等不同角色的 token。防御操作仅限 instructor 和 blue 执行,控制操作仅限 instructor 执行,**观察者仅拥有只读权限**。 | | **实战运营** | **多团队租户隔离**(Range→Match→Team→TwinSet,每场比赛配备独立的物理 Twin 集合·flag 轮换) · **可复现的初始化**(snapshot/reset/drift/verify-baseline) · **指导员安全管控**(紧急停止·隔离状态)。 → [实战运营章节](#실전-운영-다중-팀--초기화--안전-통제) | | **69项挑战** | 7大类别 × easy~insane 难度。各团队使用动态 flag(HMAC)以防止答案共享。全部通过自动化 QA。 | ## Twin 漏洞服务 (60种) 内置于11个 ICS/OT 部门 Twin 中的漏洞服务清单。每个漏洞均可通过 `PATCH_=true` 环境变量 或在指导员控制台进行无停机补丁切换来单独停用,并可通过 `python3 shared/safe_probe.py` 一次性判定全部60项的 patched/vulnerable 状态。

EDR 콘솔 — 11개 ICS/OT 섹터 자산
EDR 콘솔 — 11개 ICS/OT 섹터 자산이 온라인으로 관측되는 모습

### 11个 ICS/OT 部门 | # | 部门 | 资产键 | 主要子系统 / 协议 | 状态 | |---|---|---|---|---| | 1 | 电网 SCADA | `power_plant` | 发电厂·EMS·RTU/IED / IEC 104·DNP3·Modbus·IEC 61850 | 已有 | | 2 | 卫星地面站 | `ground_station` | TT&C·天线控制·RF·GPS·Mission Control | 已有 | | 3 | 内网 | `defense_network` | AD·SMB·文件服务器·邮件 | 已有 | | 4 | 炼油·石化 | `refinery_plant` | DCS·SIS·Tank Farm / OPC UA·Modbus·HART | **新增** | | 5 | 智能工厂 | `smart_factory` | PLC·Robot·MES·Conveyor / Profinet·S7 | **新增** | | 6 | 水务设施 | `water_utility` | 净水厂·水泵·加氯 / SCADA·Modbus | **新增** | | 7 | LNG 终端 | `lng_terminal` | Storage·BOG·Cryogenic·F&G·ESD | **新增** | | 8 | 铁路信号 | `railway_signaling` | 信号·ATS·ATP·CTC·电力供应 | **新增** | | 9 | 机场 OT | `airport_ot` | BHS·跑道照明·Fuel Farm·ATC | **新增** | | 10 | 数据中心 | `datacenter_bms` | UPS·CRAC·Generator·BMS·DCIM | **新增** | | 11 | 医院 OT | `hospital_ot` | PACS·HIS·医疗设备 VLAN·BMS | **新增** | ### 核心3类 #### 🛰️ 卫星地面站 (`ground_station`) — 7种 | ID | 漏洞 | CWE | ATT&CK | 端点 | |---|---|---|---|---| | GS-001 | Telemetry API SQL Injection | CWE-89 | T1190 | `GET /api/telemetry?sensor_id=` | | GS-002 | Hardcoded Admin Credentials / Weak JWT | CWE-798 | T1078,T1552.001 | `POST /api/login` | | GS-003 | Mission Plan IDOR | CWE-639 | T1213 | `GET /api/mission-plan/{id}` | | GS-004 | File Download Path Traversal | CWE-22 | T1005 | `GET /api/download?file=` | | GS-005 | Debug Endpoint Config Exposure | CWE-215 | T1592 | `GET /api/debug/config` | | **GS-006** | **TLE Import SSRF** | CWE-918 | T1090 | `POST /api/tle/import` | | **GS-007** | **Config XML XXE** | CWE-611 | T1005 | `POST /api/config/xml-import` | #### ⚡ 发电厂 · SCADA (`power_plant`) — 7种 | ID | 漏洞 | CWE | ATT&CK | 端点 | |---|---|---|---|---| | PP-001 | Unauthenticated PLC Register Write | CWE-306 | T0836 | `POST /api/plc/write` | | PP-002 | Default HMI Credentials | CWE-521 | T1078.001 | `POST /api/hmi/login` | | PP-003 | Diagnostics Command Injection | CWE-78 | T1059 | `POST /api/diagnostics/ping` | | PP-004 | Historian Insecure Deserialization | CWE-502 | T1059.006 | `POST /api/historian/export` | | PP-005 | Safety Monitor Bypass | CWE-284 | T0800 | `POST /api/safety/override` | | **PP-006** | **Unauthorized Modbus Register Write (ICS)** | CWE-306 | T0836,T0855 | `POST /api/modbus/write-register` | | **PP-007** | **Unsigned Firmware Update (ICS)** | CWE-345 | T0857 | `POST /api/plc/firmware-update` | #### 🏢 内网 (`defense_network`) — 6种 | ID | 漏洞 | CWE | ATT&CK | 端点 | |---|---|---|---|---| | DN-001 | SMB Anonymous Share Access | CWE-284 | T1039 | `GET /api/smb/shares` | | DN-002 | Kerberoastable Service Account | CWE-521 | T1558.003 | `GET /api/ad/service-accounts` | | DN-003 | Exposed Backup Config (Plaintext Creds) | CWE-256 | T1552.001 | `GET /api/fileserver/backup-config` | | DN-004 | Open Mail Relay |-284 | T1583.007 | `POST /api/mail/relay` | | **DN-005** | **Directory LDAP Injection** | CWE-90 | T1087 | `GET /api/directory/search` | | **DN-006** | **URL Preview SSRF** | CWE-918 | T1090 | `POST /api/webhook/preview` | ### 扩展 ICS/OT 部门8类 (24个服务) #### ⛽ 炼油·石化工厂 (`refinery_plant`) — DCS·SIS·Tank Farm / OPC UA·Modbus·HART | ID | 漏洞 | CWE | ATT&CK | 端点 | |---|---|---|---|---| | REF-001 | OPC UA Anonymous Read | CWE-306 | T0886 | `GET /api/opcua/read` | | REF-002 | SIS Safety Bypass | CWE-284 | T0858,T0800 | `POST /api/sis/bypass` | | REF-003 | HART Tank Gauge Spoof | CWE-306 | T0836 | `POST /api/tankfarm/gauge` | #### 🏭 智能工厂 (`smart_factory`) — PLC·Robot·MES / Profinet·S7·OPC UA | ID | 漏洞 | CWE | ATT&CK | 端点 | |---|---|---|---|---| | FAC-001 | PLC Program Download | CWE-306 | T0843 | `POST /api/plc/program-download` | | FAC-002 | Robot Command Injection | CWE-77 | T0807 | `POST /api/robot/exec` | | FAC-003 | MES Work-Order SQLi | CWE-89 | T1190 | `GET /api/mes/workorder` | #### 🚰 水务设施 (`water_utility`) — 净水厂·水泵·加氯 / SCADA·Modbus | ID | 漏洞 | CWE | ATT&CK | 端点 | |---|---|---|---|---| | WTR-001 | Chlorine Dosing Tamper | CWE-306 | T0836 | `POST /api/dosing/chlorine` | | WTR-002 | Pump Control Unauth | CWE-306 | T0855 | `POST /api/pump/control` | | WTR-003 | SCADA HMI Default Creds | CWE-521 | T0812 | `POST /api/hmi/login` | #### ❄️ LNG 终端 (`lng_terminal`) — Storage·BOG·Cryogenic·F&G·ESD | ID | 漏洞 | CWE | ATT&CK | 端点 | |---|---|---|---|---| | LNG-001 | ESD Trigger/Bypass | CWE-284 | T0858 | `POST /api/esd/trigger` | | LNG-002 | BOG Compressor Setpoint | CWE-306 | T0836 | `POST /api/bog/compressor` | | LNG-003 | Fire&Gas Alarm Suppress | CWE-284 | T0878 | `POST /api/firegas/suppress` | #### 🚈 铁路信号 (`railway_signaling`) — 信号·ATS·ATP·CTC | ID | 漏洞 | CWE | ATT&CK | 端点 | |---|---|---|---|---| | RWY-001 | Signal Aspect Override | CWE-306 | T0855 | `POST /api/signal/set` | | RWY-002 | Interlocking Bypass | CWE-284 | T0858 | `POST /api/interlocking/override` | | RWY-003 | ATS Command Injection | CWE-77 | T0807 | `POST /api/ats/command` | #### ✈️ 机场 OT (`airport_ot`) — BHS·跑道照明·Fuel Farm·ATC | ID | 漏洞 | CWE | ATT&CK | 端点 | |---|---|---|---|---| | AIR-001 | Runway Lighting Control | CWE-306 | T0855 | `POST /api/runway/lighting` | | AIR-002 | BHS Route SQLi | CWE-89 | T1190 | `GET /api/bhs/route` | | AIR-003 | Fuel Farm Valve Unauth | CWE-306 | T0836 | `POST /api/fuelfarm/valve` | #### 🖧 数据中心 (`datacenter_bms`) — UPS·CRAC·Generator·BMS·DCIM | ID | 漏洞 | CWE | ATT&CK | 端点 | |---|---|---|---|---| | DCX-001 | CRAC Setpoint Tamper | CWE-306 | T0836 | `POST /api/crac/setpoint` | | DCX-002 | UPS Shutdown Unauth | CWE-306 | T0816 | `POST /api/ups/command` | | DCX-003 | DCIM SSRF | CWE-918 | T1090 | `POST /api/dcim/fetch` | #### 🏥 医院 OT (`hospital_ot`) — PACS·HIS·医疗设备 VLAN·BMS | ID | 漏洞 | CWE | ATT&CK | 端点 | |---|---|---|---|---| | HSP-001 | PACS Study IDOR | CWE-639 | T1213 | `GET /api/pacs/study` | | HSP-002 | HIS Patient SQLi | CWE-89 | T1190 | `GET /api/his/patient` | | HSP-003 | Infusion Pump Unauth | CWE-306 | T0855 | `POST /api/device/infusion` | ## 挑战目录 (69种) web·forensics·network·reversing·detection·ai 6大类均提供 **easy → medium → hard → insane** 的难度曲线。 标记说明:`得分(Red/Blue)`。每个团队的 flag 和正确答案均由 HMAC 动态生成且互不相同,因此无法共享答案。
🌐 Web (8) | ID | 标题 | 难度 | ATT&CK | 得分 | |---|---|---|---|---| | WEB-000 | 暴露的调试配置 | easy | T1592 | 50/50 | | WEB-001 | 网络诊断命令注入 | medium | T1059 | 150/60 | | WEB-002 | 伪造的指挥权 — JWT Forgery | medium | T1078,T1552.001 | 150/150 | | WEB-003 | 无查阅权限 — Mission Plan IDOR | medium | T1083,T1213 | 120/120 | | WEB-004 | 文件下载路径遍历 | medium | T1083 | 120/50 | | WEB-007 | 伪装成图片 — Upload Filter Bypass | medium | T1190,T1505.003 | 150/150 | | WEB-005 | 恢复的代价 — Historian 反序列化 RCE | hard | T1059,T1203 | 250/250 | | WEB-009 | WAF 绕过 + 盲注 SQL Injection | insane | T1190 | 300/150 |
🔬 Forensics (9) | ID | 标题 | 难度 | ATT&CK | 得分 | |---|---|---|---|---| | FOR-000 | 明文凭证挖掘 | easy | T1552.001 | 50/30 | | FOR-001 | 命令历史取证 — 追踪数据泄露 | easy | T1048 | 50/30 | | FOR-004 | 电子邮件头取证 — 追踪钓鱼发件源 | easy | T1566 | 50/30 | | FOR-005 | 内存转储字符串分析 — 凭证恢复 | easy | T1003 | 50/30 | | FOR-006 | 持久化痕迹分析 — 恶意计划任务 | easy | T1053 | 50/35 | | FOR-002 | 沉默的地面站 — 重构入侵过程 | medium | T1190,T1046,T1041 | 200/0 | | FOR-003 | 会话劫持痕迹 — 调查访问日志 | medium | T1539 | 55/35 | | **FOR-007** | **内存注入检测 — 进程空洞化** | **hard** | T1055.012 | 180/0 | | FOR-009 | 反取证多阶段攻击(时间戳篡改→隐蔽通道→解密) | insane | T1070.006,T1564.004,T1027 | 300/0 |
🌐 Network (9) | ID | 标题 | 难度 | ATT&CK | 得分 | |---|---|---|---|---| | NET-000 | 明文协议嗅探 | easy | T1040 | 50/30 | | NET-004 | ARP 欺骗检测 — 追踪中间人攻击 | easy | T1557 | 50/40 | | NET-001 | DNS 隧道分析 — 还原隐蔽通道外泄 | medium | T1071.004 | 60/40 | | NET-002 | 跨越边界 — Lateral Pivot | medium | T1021,T1090 | 150/100 | | NET-003 | C2 信标间隔分析 | medium | T1071 | 55/40 | | NET-005 | 还原端口敲门序列 | medium | T1205 | 50/35 | | NET-006 | TCP 分段重组 — 还原分片外泄数据 | medium | T1041 | 50/35 | | **NET-007** | **追踪多跳 Pivot 链路关联** | **hard** | T1090.003 | 180/0 | | NET-009 | 重构 OT 破坏痕迹 | insane | T0836,T0855,T0831 | 300/0 |
🔩 Reversing (8) | ID | 标题 | 难度 | ATT&CK | 得分 | |---|---|---|---|---| | REV-000 | 被隐藏的信号 — XOR Decode | easy | T1027 | 100/50 | | REV-001 | 混淆的许可证校验 | medium | T1027 | 150/0 | | REV-002 | 重复密钥 XOR 还原 | medium | T1027 | 120/0 | | REV-003 | 多阶段编码还原 | medium | T1140 | 130/0 | | REV-006 | 位旋转密码解密 | medium | T1027 | 130/0 | | REV-004 | 栈式 VM 逆向 | hard | T1027 | 140/0 | | REV-005 | LCG 流密码解密 | hard | T1027 | 130/0 | | REV-009 | 自定义 VM 混淆(Handler Table) | insane | T1027.007 | 300/0 |
🕵️ Detection (13) — Blue 专属,由真正的 SIEM 引擎评分 | ID | 标题 | 难度 | ATT&CK | 得分 | |---|---|---|---|---| | DET-000 | 首个暴力破解规则 | easy | T1110 | 0/60 | | DET-002 | 检测 Web 日志中的 SQL Injection | easy | T1190 | 0/80 | | DET-001 | 噪声中的扫描 — Threshold Tuning | medium | T1046 | 0/100 | | DET-003 | Web shell kill chain 检测 — 上传后执行序列 | medium | T1505.003 | 0/90 | | DET-005 | Log4Shell(JNDI) 注入检测 | medium | T1190 | 0/80 | | DET-006 | DNS DGA 检测 — 大量域名查询 | medium | T1568.002 | 0/90 | | DET-007 | BACnet 未授权 WriteProperty(制冷覆盖) 检测 | medium | T0855,T0836 | 0/80 | | DET-010 | EtherNet/IP CIP 安全 assembly 未授权 SetAttribute 检测 | medium | T0836,T0855 | 0/80 | | DET-011 | S7comm 安全 DB(62) 未授权 WRITE_VAR 检测 | medium | T0836,T0855 | 0/80 | | DET-012 | MQTT Sparkplug B 未授权执行器 DCMD 检测 | medium | T0855,T0831 | 0/80 | | DET-004 | C2 信标周期性检测 | hard |1071 | 0/90 | | DET-008 | Foundation Fieldbus MODE_BLK O/S(控制回路停止) 检测 | hard | T0836,T0855,T0831 | 0/90 | | DET-009 | APT Low-and-Slow 信标狩猎(噪声率 90%) | insane | T1071.004,T1029 | 0/200 |
🤖 AI Security (9) | ID | 标题 | 难度 | ATT&CK | 得分 | |---|---|---|---|---| | AI-000 | 特征空间规避 — Feature-Space Evasion | easy | T1027 | 60/40 | | AI-002 | Prompt Injection 痕迹分析 | easy | T1059 | 60/40 | | AI-005 | 模型提取 API 滥用检测 | easy | T1595 | 50/40 | | AI-001 | 影子模型 — Model Extraction | medium | T1587.001 | 150/100 | | AI-003 | 数据投毒痕迹分析 — Backdoor Trigger | medium | T1195 | 55/40 | | AI-004 | RAG 间接 Prompt Injection 痕迹 | medium | T1059 | 55/40 | | AI-006 | 训练数据 memorization 泄露 | medium | T1552 | 55/40 | | **AI-007** | **预算约束对抗规避 — PGD Evasion (基于真实 ML)** | **hard** | T1027 | 220/100 | | AI-009 | 重构对抗规避安全事件(迁移攻击) | insane | T1027,T1551 | 300/0 |
🏭 ICS/OT (13) — 基于 OT 协议 (服务型 2 + 流量分析型 11) | ID | 标题 | 难度 | ATT&CK | 类型 | 得分 | |---|---|---|---|---|---| | ICS-001 | OPC UA 匿名 Tag 读取 | easy | T0886 | full docker | 70/40 | | ICS-000 | 安全联锁绕过 — Modbus Safety Interlock | medium | T0836,T0858 | full docker | 120/60 | | ICS-002 | Modbus 破坏分析 — 未授权写入安全寄存器 | medium | T0836,T0855 | artifact | 120/0 | | ICS-003 | DNP3 未授权控制命令检测 | medium | T0855 | artifact | 120/0 | | ICS-004 | 追踪 IEC 104 ASDU 篡改 | medium | T0855 | artifact | 120/0 | | ICS-005 | Profinet DCP 欺骗分析 — Station Identity Spoof | medium | T0842,T0830 | artifact | 120/0 | | ICS-007 | HART 命令注入分析 — Transmitter Range Tamper | medium | T0836,T0855 | artifact | 120/0 | | ICS-008 | BACnet 未授权 WriteProperty 分析 — Priority Override | medium | T0855,T0836 | artifact | 120/0 | | ICS-012 | MQTT Sparkplug B 未授权执行器命令 — DCMD Injection | medium | T0855,T0831 | artifact | 120/0 | | ICS-006 | IEC 61850 GOOSE 伪造分析 — Spoofed Trip | hard | T0832,T0855 | artifact | 130/0 | | ICS-009 | Foundation Fieldbus 块 MODE 篡改 — PID OOS Sabotage | hard | T0836,T0855,T0831 | artifact | 140/0 | | ICS-010 | EtherNet/IP CIP 未授权控制 — Safety Assembly Tamper | hard | T0836,T0855,T0831 | artifact | 140/0 | | ICS-011 | S7comm 安全 DB 未授权写入 — Safety DB Write | hard | T0836,T0855 | artifact | 140/0 |
## 快速入门 ### 环境要求 - Docker + Docker Compose v2 - (如需运行 Dashboard 开发服务器)Node.js 20+ ### 1) 启动平台 ``` cd cyber-range-platform docker compose up -d --build # 集成 E2E smoke (默认 35/35 PASS) bash scripts/smoke_test.sh ``` ### 2) 运行 Dashboard 不同角色访问的 Dashboard 各不相同。**请注意各端口并不一样**: | 角色 | Dashboard | 端口 | 运行命令 | |---|---|---|---| | 🔴 **Red(攻击)** | **Red Portal** — 挑战列表·artifact·提交 flag | **5176** | `cd dashboards/redportal && npm install && npm run dev` | | 🔵 **Blue(防御)** | **Blue Portal** — 事件·补丁·提交检测规则 | **5177** | `cd dashboards/blueportal && npm install && npm run dev` | | 🔵 Blue | EDR 控制台 — 进程隔离/kill | 5173 | `cd services/edr/console && npm install && npm run dev` | | 🔵 Blue | SIEM 控制台 — 日志检索·检测 | 5175 | `cd dashboards/siem && npm install && npm run dev` | | 🎓 管理/观察 | Live Fire — 态势感知板·得分·场景 | 5174 | `cd dashboards/livefire && npm install && npm run dev` | **Red/Blue Portal 需要后端支持** — `challenge_portal`(端口 8060):提供挑战目录·生成 artifact·服务端评分·记分板。运行 `docker compose up -d challenge_portal` 或 `INSTRUCTOR_TOKEN=$INSTRUCTOR_TOKEN uvicorn services.challenge_portal.main:app --host 0.0.0.0 --port 8060`。 (可通过 Live Fire 顶部的 `🚩 RED PORTAL` / `🛡️ BLUE PORTAL` 按钮直接跳转。) ### 3) 验证挑战 (示例) ``` # 服务型(docker) — 实际部署→exploit→评分→teardown python3 infra/challenge_qa/run_all.py --challenge AI-007 # 制品型 — 生成→solve→评分 python3 infra/challenge_qa/run_all.py --challenge FOR-007 python3 infra/challenge_qa/run_all.py --challenge NET-007 ``` ## 验证 · 质量门禁 本项目的原则是**“展示实际通过的结果,而不是仅凭代码定论”**。 - **72个单元测试** (`python -m pytest tests/`) — 契约验证 + 针对过往已修复 bug 的回归测试。 - **35/35 集成冒烟测试** (`scripts/smoke_test.sh`) — 涵盖健康检查 → Twin 攻击 → SIEM 摄取 → 评分 → 场景 → EDR 检测 → AAR/PDF → 网络隔离的 E2E 流程。 - **C-QA 流水线** (`infra/challenge_qa/run_all.py`) — 针对不同挑战类型使用正确的门禁来验证全部69项: - **服务型**: `deploy_up → intended_solve → blank_submit → flag_determinism → teardown` - **Artifact 型**: `artifact_solve` (生成 → 特征分支解题 → 评分 + 拒绝空提交) - **检测型**: `detection_solve` (生成数据集 → **由真实 SIEM DetectionEngine 评分** + 拒绝无效规则) - **GitHub Actions CI** (`.github/workflows/ci.yml`) — 包含3个 job: - `unit`: 单元/契约测试(**72个**)。 - `challenges`: 全部挑战 schema + artifact/检测门禁实际评分(无需 docker,使用 `scripts/validate_challenges.sh`)。 - `integration`: 完整 docker 栈 build+up → `SMOKE_RECOVERY=1` 冒烟测试 → teardown。 ## RBAC (基于角色的访问控制) Token 到角色的映射 (`shared/rbac.py`)。本地开发中若未设置 token 则会宽容放行(向后兼容)。 | 端点 | 无 Token | red | blue | observer | instructor | |---|---|---|---|---|---| | config `/instructor/patch/toggle` | 401 | 403 | 403 | 403 | ✅ 200 | | instructor_api `/scenario/start` | 401 | 403 | 403 | 403 | ✅ 200 | | edr `/isolate` · `/kill` (防御操作) | 401 | 403 | ✅ 200 | 403 | ✅ 200 | | scoring `/score/adjust` (手动加减分) | 401 | 403 | 403 | 403 | ✅ 200 | | **读取**: scoring `/scores`, edr `/edr/hosts`·`/edr/alerts` | 401\* | ✅ | ✅ | ✅ | ✅ | ## 实战运营 (多团队 · 初始化 · 安全管控) 为满足实战比赛运营需求的 P1 运营功能。**由 `range_control` 服务(8055)** 统一进行编排,并通过 指导员控制台(Live Fire INSTRUCTOR)提供 UI 界面。详见:[docs/MULTI-TENANT.md](docs/MULTI-TENANT.md) · [services/range_control/README.md](services/range_control/README.md)。 ### #9 多团队租户隔离 — Range → Match → Team → Twin Set ``` Range ─ Match A ─ {Red A, Blue A, Twin Set A} (scenario_id=match_a) └ Match B ─ {Red B, Blue B, Twin Set B} (scenario_id=match_b) ``` 所有数据均标记为 `range_id·match_id·team_id`。**Match 注册表**(`/matches`) 作为唯一事实来源。 | 隔离维度 | 实现方式 | 实测验证 | |---|---|---| | 事件/得分 | 根据 `scenario_id` 分区 (`/replay/events?scenario_id=` · `/scores?scenario_id=`) | 按比赛隔离 ✓ | | Flag | 团队专属 HMAC + **按比赛轮换**(Portal 的 `match_id`→组合键 `match::team`) | 每场比赛不同·拒绝跨比赛访问 ✓ | | 网络(物理) | **按比赛分配 Twin 集**: 通过独立的 compose project 复制11个部门的 Twin 实例 | 阻断跨比赛访问 `gaierror`·egress `OSError` ✓ | | 端口/域名 | 动态端口(base+1~+11) + **vhost**(`match_proxy` 8088, `..range.local`) | 11个部门路由分发 ✓ | | 观察者 | 公开信息**延迟队列**(`/events/delayed`, Live Fire observer 延迟 30s) | 隐藏实时事件 ✓ | ``` # 按比赛部署物理 twin 集合(由教官在 host 上执行 — 服务不暴露 docker socket) scripts/deploy_match.sh match_a 8300 # 11섹터 8301~8311, scenario=match_a scripts/deploy_match.sh match_b 8400 # 8401~8411, scenario=match_b scripts/teardown_match.sh match_a ``` ### #10 可复现的初始化 (Snapshot · Reset · Rollback) 采用 `Baseline Snapshot → 训练 → Reset → Verify-Baseline` 循环。对每个有状态服务的 `/admin/reset`(instructor) 接口进行编排(重置事件·得分·solve状态·补丁)。 | 端点 | 描述 | |---|---| | `POST /ranges/{id}/snapshot` | 将当前状态保存为 baseline | | `POST /ranges/{id}/reset` | 重置事件·得分·solve状态·补丁 | | `GET /ranges/{id}/drift` | 对比 baseline 的变化量 | | `POST /ranges/{id}/verify-baseline` | 检查全局服务 health + safe_probe 全量状态为 VULNERABLE + 事件清空 → 必须通过才能开始下一次训练 | ### #11 指导员安全管控 `GET /safety/status` — 在指导员 Dashboard 中显示隔离/安全状态: ``` Safety Status containment 100% ├─ Internet egress: BLOCKED (11 트윈 internal 네트워크) ├─ Cross-team traffic: BLOCKED (per-twin/매치 네트워크 격리) ├─ Docker socket: NONE (compose 미마운트) ├─ Active emergency stop: false └─ Unauthorized dst: 0 ``` `POST /safety/emergency-stop [/release]` 全局紧急停止(killswitch) · `POST /safety/team-pause` 停止特定团队。 ## 仓库结构 ``` cyber-range-platform/ ├── services/ # 17개 마이크로서비스(트윈3 + 코어 + EDR/SIEM/AAR/센서) │ ├── ground_station/ power_plant/ defense_network/ # 디지털 트윈 │ ├── edr/ (+ console/) siem/ scenario_engine/ scoring_engine/ │ ├── event_collector/ config_service/ instructor_api/ noc_monitor/ aar_report/ │ └── core/ # 복구 판정(recovery_watcher) 등 공용 코어 ├── dashboards/ # livefire/ · siem/ (Vite+React) ├── challenges/ # web/ forensics/ network/ reversing/ detection/ ai/ ics/ (59종) ├── infra/challenge_qa/ # C-QA 파이프라인(run_all + 게이트들) ├── scenarios/ # 코드로 정의된 킬체인 시나리오 ├── scripts/smoke_test.sh ├── shared/ # rbac.py, event_schema.py 등 공용 모듈 ├── tests/ # unit/ + 계약 테스트 (pytest) ├── docs/ # 설계/구현 문서 + images/ ├── CONTRACTS.md # 공통 계약(스키마/인터페이스) 단일 진실원 └── docker-compose.yml ``` ## 许可证 · 注意事项 本平台仅供训练和教学使用。**所有漏洞、flag 和凭证均为合成的虚拟数据**,不包含任何真实 系统或真实数据。挑战容器已通过 `read_only`/`cap_drop`/`mem_limit` 等配置进行安全加固, Twin 也实现了网络隔离,从而阻断流量流出和横向移动。请务必仅在获批的受控训练环境中使用。
标签:Metaprompt, OPA, PKINIT, 工控安全, 数字孪生, 网络安全, 网络靶场, 请求拦截, 逆向工具, 隐私保护, 靶场