hassanazeem2/detection-time-machine

GitHub: hassanazeem2/detection-time-machine

一个可复现的安全检测评估靶场,通过模拟 ATT&CK 攻击场景生成 OCSF 遥测数据并回放 Sigma 检测规则来量化检测质量。

Stars: 0 | Forks: 0

Screenshot 2026-06-12 at 9 54 29 AM # 检测时光机 这是一个小型且可复现的网络靶场,用于记录安全的攻击模拟,将生成的遥测数据标准化为 OCSF 格式的事件,评估 Sigma 风格的规则,并衡量检测质量。 构建这个工具是因为我希望有一种快速的方法来回答“我的检测真的能捕获到这种情况吗?”,而无需每次都搭建一个完整的实验室。一切都是确定性的,并且可以安全地在 CI 中运行——这里没有任何实际执行攻击的步骤。 ## 模拟内容 | 动作 | MITRE ATT&CK | 遥测数据 | 检测 | |---|---|---|---| | 密码猜测 | T1110.001 | 身份验证 + 网络 | 密码失败规则 | | 有效的实验室账户 | T1078 | 身份验证 + 网络 | 时间线上下文 | | 模拟 shell 命令 | T1059.004 | HTTP + endpoint + 网络 | 管理员 endpoint 和命令行规则 | “shell 命令”步骤**绝不执行**。受害者会写入一个带有 `simulated: true` 的进程形态事件,因此它可以在任何地方安全运行,包括 CI。 ## 快速开始 唯一的要求是 Python 3.11+。 ``` make test make gui make demo ``` `make gui` 会在 http://127.0.0.1:8765 开启一个本地 Web 界面,您可以在那里运行确定性演示、回放最新的记录、检查指标/警报/OCSF 遥测数据,并打开生成的时间线报告。 您也可以直接从 CLI 运行演示并直接打开 `artifacts/latest/report.html`。该记录还包含: ``` artifacts/latest/ ├── raw/ # attacker, auth, endpoint, app, network logs ├── ocsf-events.jsonl # normalized telemetry ├── alerts.jsonl # Sigma detections ├── benign-ocsf-events.jsonl # negative-control telemetry ├── benign-alerts.jsonl # should be empty ├── metrics.json # coverage, FP rate, TTD └── report.html # action → telemetry → alert timeline ``` 在更改或添加规则后回放记录: ``` PYTHONPATH=src python3 -m dtm replay artifacts/latest \ --output artifacts/replay ``` 以 headless 模式运行 GUI: ``` PYTHONPATH=src python3 -m dtm gui --no-open ``` ## 容器靶场 在安装了 Docker 的情况下: ``` make docker-demo ``` Compose 会启动一个仅限内部访问的网络,其中包含四个服务: ``` flowchart LR A["Attacker
safe HTTP actions"] --> V["Victim
lab service"] V --> L[("Shared raw logs")] A --> L P["PCAP sensor
tcpdump"] --> C["capture.pcap"] L --> M["Monitor
OCSF + Sigma"] M --> R["Alerts, metrics,
timeline report"] ``` - `attacker` — 运行确定性的 ATT&CK 映射场景并退出 - `victim` — 仅暴露故意受限的实验室 API - `monitor` — 标准化日志、评估规则、生成报告 - `pcap` — 从 victim 网络命名空间捕获 8080 端口的流量 容器是只读的并带有 `no-new-privileges` 设置,且仅共享实验产物目录。靶场网络设置为 `internal: true` —— “命令”步骤使用无效的 `example.invalid` 文本,并且绝不实际运行。 ## 检测规则 规则位于 `rules/*.yml` 中。它们实际上是带有 YAML 扩展名的 JSON 文档 —— JSON 是 YAML 的严格子集,因此它们在保持项目无依赖性的同时,依然是有效的 YAML。 支持的 Sigma 子集: - 嵌套字段(例如 `process.cmd_line`) - 等于匹配 - `contains`、`startswith`、`endswith`、`re` 修饰符 - 使用 `and`、`or`、`not` 构建的基于命名选择的条件 这使得回放行为易于推理。如果您想进一步扩展,可以使用 pySigma 编译相同的规则,并将 OCSF 事件发送到 Elastic、Splunk、Loki 等。 ## 测量指标 `metrics.json` 记录: - **检测覆盖率** — 触发的预期场景规则 ID - **误报** — 由良性控制装置生成的警报 - **误报率** — 良性警报 ÷ 良性事件 - **检测时间** — 第一个警报的时间戳减去第一个攻击者动作的时间戳 - **遗漏/意外规则** — 可作为 CI 质量门禁 GitHub Actions 工作流会运行单元测试,创建新记录,强制要求 100% 的预期覆盖率和零良性警报,然后上传该记录。 ## 扩展方法 1. 添加一个包含 ATT&CK ID 和确定性步骤的 JSON 场景文件 2. 添加一个会发出新原始事件类型的 victim endpoint 或传感器 3. 在 `src/dtm/normalize.py` 中映射该事件 4. 将规则及其 ID 添加到 `expected_rules` 中 5. 添加类似于正常使用的良性示例 6. 运行 `make test`、`make demo`,并回放之前的记录 有关系统边界和设计选择,请参阅 [docs/architecture.md](docs/architecture.md)。
标签:OCSF, OPA, Python, 无后门, 版权保护, 网络安全, 请求拦截, 逆向工具, 隐私保护, 靶场