GiorgosNicolaides/ir-simulator

GitHub: GiorgosNicolaides/ir-simulator

一个基于 FastAPI 的事件响应决策模拟训练服务,通过真实安全场景演练并映射 MITRE ATT&CK 框架来提升防守方的 IR 实战能力。

Stars: 0 | Forks: 0

# 事件响应 Runbook 模拟器 一个用于练习事件响应 (IR) 决策的 FastAPI 服务。 玩家每次完成一个阶段的真实安全事件, 选择如何响应,并接收映射到 **MITRE ATT&CK** 框架的评分事后报告。 它是一个**防御性、教育性**工具:没有漏洞利用代码或 恶意软件——只有对健全的 IR 实践给予奖励的决策树。 ## 演示的事件响应概念 该模拟器围绕经典的 IR 生命周期 (NIST SP 800-61 / SANS PICERL)构建。每个场景都会引导玩家经历以下 阶段: | 阶段 | 含义 | 出现位置 | | ----- | ------------- | ---------------- | | **分类 / 识别** | 验证警报并了解发生了什么 | `initial_alert`, `initial_detection` | | **遏制** | 在其蔓延之前限制爆炸半径 | `isolate endpoint`, `segment the network`, `isolate affected systems` | | **根除** | 移除威胁并连根拔起持久性机制 | `reset credentials`, `block exfiltration`, `analyze variant in sandbox` | | **恢复** | 将系统安全地恢复正常运行 | `restore from verified clean backup`, `rebuild from scratch` | | **经验教训** | 事后审查以防重蹈覆辙 | `full forensic investigation`, `root cause analysis` | 良好的决策(在监控前进行遏制、保留证据、 在恢复前验证备份)会获得正分;而真实 攻击者会利用的捷径(支付赎金、忽略横向移动、跳过 取证)会扣分。 ## 场景与 MITRE ATT&CK 映射 ### 1. 钓鱼 (`phishing`) 用户点击恶意链接并提交凭据。五个阶段: 初始警报 → 凭据检查 → 横向移动 → 数据外泄 → 事后处理。 | 阶段 | IR 阶段 | MITRE ATT&CK 技术 | | ----- | -------- | ---------------------- | | 初始警报 | 分类 / 遏制 | **T1566** – Phishing | | 凭据检查 | 根除 | **T1078** – Valid Accounts | | 横向移动 | 遏制 | **T1021** – Remote Services | | 数据外泄 | 遏制 / 根除 | **T1048** – Exfiltration Over Alternative Protocol · **T1567** – Exfiltration Over Web Service | | 事后处理 | 经验教训 | — | ### 2. 勒索软件 (`ransomware`) 加密的文件和勒索说明出现在多个主机上。五个阶段: 初始检测 → 范围评估 → 威胁行为者 ID → 恢复决策 → 事后处理。 | 阶段 | IR 阶段 | MITRE ATT&CK 技术 | | ----- | -------- | ---------------------- | | 初始检测 | 分类 / 遏制 | **T1486** – Data Encrypted for Impact | | 范围评估 | 识别 / 恢复 | **T1490** – Inhibit System Recovery | | 威胁行为者 ID | 根除 | **T1083** – File and Directory Discovery | | 恢复决策 | 恢复 | **T1489** – Service Stop | | 事后处理 | 经验教训 | **T1567** – Exfiltration Over Web Service (double-extortion) | ## 评分标准 你的 `total_score` 会与 `max_possible_score`(每个场景中 **最佳**选项的总和 —— 每个场景 50 分)进行对比。百分比 映射到字母等级: | 等级 | 百分比 | | ----- | ---------- | | **A** | ≥ 90% | | **B** | ≥ 80% | | **C** | ≥ 70% | | **D** | ≥ 60% | | **F** | < 60% | 报告还会列出**优势**(你选择了最佳 选项的阶段)、**改进之处**(你未选最佳选项的阶段)、遇到的 MITRE 技术以及基于成绩的建议。 ## API 流程 Base URL(本地):`http://localhost:8000`。交互式文档位于 `/docs` (Swagger UI) 和 `/redoc`。 | 方法 | 路径 | 用途 | | ------ | ---- | ------- | | `GET` | `/health` | 存活状态 + 已加载的场景数量 | | `GET` | `/scenarios` | 列出场景摘要 | | `GET` | `/scenarios/{id}` | 完整场景(学习模式 —— 包含分数/反馈) | | `POST` | `/sessions` | 开启一个新的模拟会话 | | `GET` | `/sessions/{id}` | 当前会话状态(下一阶段 + 选项) | | `POST` | `/sessions/{id}/decide` | 为当前阶段提交决策 | | `GET` | `/sessions/{id}/report` | 事后报告(完成后) | ### 使用 curl 的演练 ``` # 1. 检查 service 是否已启动 curl -s http://localhost:8000/health # {"status":"ok","version":"1.0.0","scenarios_loaded":2} # 2. 浏览可用的 scenarios curl -s http://localhost:8000/scenarios # 3. 启动一个 phishing session(保存返回的 session_id) SESSION=$(curl -s -X POST http://localhost:8000/sessions \ -H 'Content-Type: application/json' \ -d '{"scenario_id": "phishing"}' | python -c 'import sys,json;print(json.load(sys.stdin)["session_id"])') # 4. 检查当前 stage 及其选项 curl -s http://localhost:8000/sessions/$SESSION # 5. 做出决定(对每个 stage 重复此操作) curl -s -X POST http://localhost:8000/sessions/$SESSION/decide \ -H 'Content-Type: application/json' \ -d '{"decision_id": "isolate_endpoint"}' # {"feedback":"Correct...","score_delta":10,"total_score":10, # "next_stage_id":"credential_check","completed":false,"percentage":20.0} # ...继续使用:reset_all, segment_network, block_and_preserve, full_forensics # 6. 完成后,获取 post-incident report curl -s http://localhost:8000/sessions/$SESSION/report ``` 对未知选项或已完成会话做出的决策, 返回 `400`。在会话完成之前请求报告会返回 `400`;未知的会话返回 `404`。 ## 在本地运行 需要 Python 3.11+。 ``` # 1. 创建一个虚拟环境并安装依赖 python -m venv .venv && source .venv/bin/activate pip install -r requirements.txt # 2. (可选)配置环境 cp .env.example .env # 3. 运行 API(带有 hot reload) uvicorn main:app --reload --port 8000 ``` 然后打开 http://localhost:8000/docs。 ### 运行测试 ``` pytest -q ``` ## 使用 Docker 运行 ``` # Build image docker build -t ir-simulator . # 运行它(将 container 的端口 8000 映射到 localhost:8000) docker run --rm -p 8000:8000 ir-simulator # 或者覆盖端口 docker run --rm -e PORT=9000 -p 9000:9000 ir-simulator ``` 容器启动绑定到 `0.0.0.0:$PORT` 的 uvicorn,因此它可以直接 在注入 `$PORT` 的平台(Cloud Run, Render, Heroku)上运行。 ## 项目结构 ``` ir-simulator/ ├── main.py # FastAPI app: lifespan, CORS, rate limiting, routers ├── api/ │ ├── limiter.py # Shared slowapi Limiter │ ├── schemas.py # Pydantic request/response models │ └── routes/ │ ├── health.py # GET /health │ ├── scenarios.py # GET /scenarios, GET /scenarios/{id} │ └── sessions.py # session lifecycle + decisions + report ├── engine/ │ ├── loader.py # Scenario loading & validation │ ├── session.py # In-memory session store & decision engine │ └── scorer.py # Post-incident report generation ├── scenarios/ │ ├── phishing.json │ └── ransomware.json ├── tests/ # loader, session, scorer, and API tests ├── Dockerfile ├── requirements.txt ├── README.md └── SECURITY.md ``` 有关部署加固指南,请参阅 [SECURITY.md](SECURITY.md)。
标签:AV绕过, Cloudflare, FastAPI, MITRE ATT&CK, OPA, 安全培训, 网络测绘, 请求拦截, 逆向工具, 靶场