alfonza1/incident-sim

GitHub: alfonza1/incident-sim

一款实战型生产事件响应模拟器,让工程师在真实压力下通过终端、遥测和拓扑排查并修复故障场景。

Stars: 0 | Forks: 0

# 关键响应 Critical Response 是一款专为软件工程师和安全响应人员设计的实战型事件响应模拟器。玩家可以通过终端、操作手册、遥测数据、代码库历史、服务拓扑以及模拟的高管消息来调查真实的生产环境故障——随后诊断根本原因、进行修复、验证恢复情况并最终解决事件。 ## 产品预览
Train against realistic production pressure
Critical Response homepage
Choose your response discipline
Standard, Security, Blackout, and On-call response modes
Select a modeled active incident
Incident queue with modeled system scale
Investigate and remediate in the live shell
Live incident terminal, messages, briefing, and timer
## 玩家将练习的内容 - **标准响应 (Standard Response)** — 涉及部署、数据库、分布式系统、队列、缓存、网络和区域基础设施的软件工程事件。 - **安全响应 (Security Response)** — 凭证滥用、暴露的基础设施、供应链攻击、授权失效、数据泄露和遏制。 - **黑盒模式 (Blackout)** — 封闭的软件、安全或混合型事件,在验收通过之前,标题和症状均处于隐藏状态。 - **受控 (Controlled)、生产 (Production) 和关键 (Critical) 严重级别** — 调查深度、证据要求、拓扑、干扰信息、响应窗口和恢复检查会随难度进行动态扩展。 当前目录包含 **56 个场景**。这些事件模拟了真实的服务规模、请求量、区域、部署池、依赖关系、客户影响、时间戳以及多种看似合理的修复路径。 该模拟器奖励的是高质量的响应过程,而非某条神奇的命令。一个安全的回滚操作可以通过测试,而经过充分测试的向前修复、金丝雀发布、区域性遏制或更高效的恢复路径,在所模拟的系统支持的情况下,可以获得更高的分数。难度较高的事件还会增加诱饵证据、嘈杂的日志、多区域行为、部署池、依赖项遥测、对时间戳敏感的线索,以及具有不同客户影响权衡的修复方案选择。 ## 系统架构 ``` flowchart LR player([Player]) ui[React + Vite client] auth[Firebase Authentication] api[Express + TypeScript API] catalog[Scenario catalog] engine[Session + incident engine] shell[Virtual shell + evidence model] scoring[Diagnosis, remediation + scoring] store[Bounded application store] postgres[(Postgres snapshot)] player --> ui ui <-->|Google sign-in| auth ui -->|Bearer token + JSON API| api auth -->|Token verification| api api --> catalog api --> engine engine --> shell engine --> scoring catalog --> engine api --> store engine --> store store -->|Durable JSONB snapshot| postgres ``` API 负责场景展示、特定账户的 Blackout 队列、会话时钟、终端命令、评分、用户资料、徽章和排行榜排名。活跃状态保存在有限的内存存储中,以实现流畅的 shell 交互,并同时写入持久的 Postgres 快照中。 ## 数据模型 ``` erDiagram OPERATOR ||--o{ SESSION : runs SCENARIO ||--o{ SESSION : instantiates SESSION ||--o| DIAGNOSIS : records SESSION ||--o| REMEDIATION : applies SESSION ||--o{ INCIDENT_MESSAGE : receives SESSION ||--o| SCORE : produces OPERATOR ||--o{ BADGE_PIN : selects BADGE ||--o{ BADGE_PIN : appears_in OPERATOR ||--o{ COMPLETED_SCENARIO : clears SCENARIO ||--o{ COMPLETED_SCENARIO : completed_as OPERATOR { string id PK string username string provider boolean profilePublic string location string linkedinUrl string githubUrl string websiteUrl } SCENARIO { string id PK string mode string track string severity json scale json topology } SESSION { string id PK string incidentId string status int startedAt int finishedAt int commandCount } DIAGNOSIS { string text boolean correct int qualityScore } REMEDIATION { string label string quality } SCORE { int total int diagnosisPoints int remediationPoints int efficiencyPoints } INCIDENT_MESSAGE { int level string sender boolean acknowledged } BADGE { string id PK string category int target int prestige } BADGE_PIN { string operatorId string badgeId int position } COMPLETED_SCENARIO { string operatorId string scenarioId } ``` 徽章资格、工程级别、实时排名、前百分比和排行榜名次均根据已完成的会话推导得出。只有操作者选定的五个徽章胸针会直接存储在个人资料中。 ## 本地开发 ### Docker Compose ``` docker compose up --build ``` 打开: - 前端:http://localhost:5173 - API 健康状态:http://localhost:4000/api/health Docker Compose 会启动带有健康检查和持久化本地卷的前端和后端。 ### 原生开发 ``` # Terminal 1 cd backend npm install npm run dev # Terminal 2 cd frontend npm install npm run dev ``` 前端在端口 `5173` 上运行,并将 API 请求代理到端口 `4000`。 ## 验证 ``` # Backend cd backend npm run typecheck npm test npm run build # Frontend cd frontend npm run typecheck npm test npm run build -- --mode uat npm run test:e2e # 部署镜像 cd .. docker compose build ``` 当前的验证覆盖范围: - **160 个后端测试** - **50 个前端测试** - **14 个 Playwright 端到端测试** - 后端和前端的生产构建 - Docker 镜像构建 - 实时 UAT 认证、CORS、健康状态、Pages 和持久化冒烟测试 ## 更多文档 - [架构与部署](ARCHITECTURE.md) - [UAT 基础设施](docs/UAT_INFRASTRUCTURE.md) - [分支管理与发布](docs/BRANCHING_AND_RELEASES.md) - [Firebase 身份验证](docs/firebase-auth.md) - [完整的账户与基础设施设置](docs/ACCOUNT_AND_INFRASTRUCTURE_SETUP.md) - [场景编写技能](.agents/skills/incident-sim-scenario-author/SKILL.md)
标签:自动化攻击, 请求拦截