Cisco-Talos/EvidenceForge
GitHub: Cisco-Talos/EvidenceForge
由 Cisco Talos 开发的高保真合成安全日志生成器,通过因果一致的多格式日志数据集解决威胁狩猎训练中缺乏真实感数据的问题。
Stars: 0 | Forks: 0
# EvidenceForge
[](LICENSE)
[](https://github.com/cisco-foundation-ai/EvidenceForge/actions/workflows/ci.yml)
[](https://www.python.org/downloads/)
生成逼真的合成安全日志,用于网络安全威胁狩猎训练和研究。
## EvidenceForge 的与众不同之处
大多数合成日志生成器生成孤立的、单格式的数据,经验丰富的分析师能在几秒钟内识别出这些伪造数据。EvidenceForge 采用了一种截然不同的方法:
- **构造即一致。** 规范的 `SecurityEvent` 模型从单一事实来源为所有日志格式提供数据。两个发射器不可能在端口号、时间戳或 LogonID 上产生分歧,因为在事件对象上只有一个值。这消除了跨数据源不一致的问题,而这是合成数据最致命的破绽。
- **因果事件排序。** 事件遵循现实世界的依赖关系——DNS 查询先于连接,Kerberos TGT/TGS 先于域登录,审计事件跟随管理命令。一个可组合的规则引擎通过真实的时间偏移量自动生成先决条件,因此数据在跨日志源之间讲述了一个连贯的因果故事。
- **自激时间动态。** 用户活动遵循 Hawkes 过程——事件触发会自然逐渐平息的爆发,符合真实的人类工作模式。系统流量使用带抖动的周期性间隔。星期几的变化模拟了周一的登录风暴、周五的早退以及接近零的周末活动。大多数生成器使用均匀随机的时间安排,经验丰富的分析师一眼就能看穿。
- **20 多种相关的日志格式。** Windows Security(30 个事件 ID)、Sysmon、13 种 Zeek 日志类型、eCAR EDR/XDR、syslog、bash history、Snort IDS、Web 访问和代理日志——全部来自同一个事件管道。
- **网络可见性建模。** 定义传感器位置 (SPAN/TAP)、监控网段和方向。EvidenceForge 确定每个传感器可以看到哪些连接,并仅在网络日志在现实中应出现的位置生成它们。
- **确定性引擎,LLM 辅助创作。** 场景创建使用 Claude Code Skills 进行交互式的、经过研究的攻击规划。日志生成是完全确定性的——没有 LLM 调用,没有 API 成本,每次都能产生可重现的输出。
- **内置质量评估。** 一个 5 维度评分框架(23 个子分数)衡量可解析性、跨数据源一致性、噪声真实性、时间模式和信号完整性。在使用数据之前准确了解您的数据质量如何。
## 快速开始
```
# 安装
git clone https://github.com/cisco-foundation-ai/EvidenceForge.git
cd EvidenceForge
uv sync
# 安装 Claude Code 技能(推荐工作流)
uv run eforge install-skills
# 交互式创建场景(需要 Claude Code)
# /eforge scenario
# 或从现有场景生成
uv run eforge generate scenarios/retail-store-ftp-attack.yaml -o ./output
# 验证场景文件
uv run eforge validate scenarios/retail-store-ftp-attack.yaml
# 评估生成的数据质量
uv run eforge eval ./output --scenario scenarios/retail-store-ftp-attack.yaml
```
## Claude Code Skills(推荐)
EvidenceForge 包含用于交互式引导工作流的 Claude Code Skills。这是使用 EvidenceForge 的推荐方式。
| Skill | 描述 |
|-------|-------------|
| `/eforge scenario` | 通过结构化访谈引导创建场景。通过 MITRE ATT&CK 研究 TTP,构建环境/网络/角色,输出经过验证的 YAML + 学生上下文文档。 |
| `/eforge generate` | 验证场景,运行生成引擎,监控输出并诊断错误。 |
| `/eforge validate` | 检查场景的架构正确性和交叉引用完整性。修复简单问题,上报结构性错误。 |
| `/eforge evaluate` | 运行数据质量评估,解释分数,审查记录的真实性并提出改进建议。 |
| `/eforge config` | 添加、修改或删除角色、域、应用程序和其他配置数据。自动处理跨文件依赖关系。参见[自定义配置](docs/reference/CUSTOMIZING_CONFIG.md)。 |
使用 `uv run eforge install-skills`(项目范围)或 `uv run eforge install-skills --global` 安装 skills。
## CLI 参考
用于脚本化或非交互式使用:
| 命令 | 描述 |
|---------|-------------|
| `eforge generate -o ` | 从场景文件生成日志 |
| `eforge validate ` | 验证场景架构和交叉引用 |
| `eforge eval -s ` | 评估数据质量(5 个维度,23 个子分数) |
| `eforge info [field]` | 显示安装信息、配置路径和数据清单。传递点分路径字段以获取特定值(例如 `eforge info personas`)。使用 `--fields` 列出可用字段,使用 `--json` 输出供机器读取的结果。 |
| `eforge validate-config` | 验证配置文件的交叉引用完整性。使用 `--json` 输出供机器读取的结果。 |
| `eforge install-skills [--global]` | 安装 Claude Code skills |
| `eforge version` | 显示版本 |
常用标志:`--verbose` / `--debug` 用于日志记录,`--output` / `-o` 用于指定输出目录,`--force` / `-f` 用于在不提示的情况下覆盖现有输出。
## 自定义配置
EvidenceForge 内置 50 多个 YAML 配置文件,用于控制 DNS 域、应用程序、角色、流量配置文件等。您可以使用位于 `.eforge/config/` 的项目本地覆盖层来自定义这些配置——您的更改将在包升级后保留,并与内置默认值自动合并。
推荐的方法是使用 Claude Code skill:
```
/eforge config add a nurse persona for a healthcare scenario
```
有关覆盖系统、手动编辑和跨文件依赖关系的详细信息,请参阅 **[自定义配置](docs/reference/CUSTOMIZING_CONFIG.md)**。
## 它的工作原理
EvidenceForge 根据 YAML 场景定义创建多格式的安全日志数据集。您描述一个环境(用户、系统、网络拓扑)和一个故事线(攻击事件),EvidenceForge 会同时跨所有格式生成时间一致的日志——包括交叉引用的 LogonID、PID、时间戳和 UID。
每个攻击场景都包含一个 `GROUND_TRUTH.md` 文件,准确记录了发生的事情、时间和地点——使数据集可直接用于威胁狩猎训练。
### 核心能力
- **跨日志一致性** — 所有格式共享 LogonID、PID、时间戳和 Zeek UID
- **因果扩展引擎** — 通过可组合的规则自动生成前置事件(DNS、Kerberos、审计事件)
- **逼真的基线噪声** — 26 种横向移动模式、进程→网络关联、网络级的干扰项以及 18 个 Linux syslog 类别,生成了分析师必须加以甄别的噪声
- **感知操作系统的生成** — Windows 系统生成 Windows Event + Sysmon 日志;Linux 系统生成 syslog + bash history
- **网络可见性建模** — 定义传感器位置 (SPAN/TAP)、方向和监控网段
- **基础事实文档** — 每个攻击场景生成一个包含叙述、时间线和 IOC 的 GROUND_TRUTH.md
- **并行生成** — 多线程发射器在保持时间一致性的同时写入所有格式
- **场景验证** — 交叉引用检查、唯一性约束和网络拓扑验证
- **数据质量评估** — 具有验收标准的 5 维度评分框架(23 个子分数)
- **多时区支持** — 基于模式的按系统主机名划分的时区覆盖
## 支持的日志格式
| 格式 | 类别 | 描述 |
|--------|----------|-------------|
| Windows 安全事件 | 主机 | 30 个事件 ID:身份验证 (4624/4625/4634/4648/4672)、进程 (4688/4689)、Kerberos (4768/4769/4770/4771/4776)、持久化 (4697/4698-4701)、账户管理 (4720/4723/4724/4726/4738)、组成员身份 (4728/4729/4732/4733/4756/4757)、防火墙 (5156)、防御规避 (1102) |
| Windows Sysmon | 主机 | 进程创建 (Event 1)、终止 (Event 5)、远程线程注入 (Event 8)、进程访问 (Event 10) |
| Zeek(13 种日志类型) | 网络 | conn、dns、http、ssl、files、x509、dhcp、ntp、weird、pe、ocsp、packet_filter、reporter |
| eCAR | 主机 | 基于 MITRE CAR 格式的 EDR/XDR 遥测数据 (PROCESS, FILE, FLOW, REGISTRY, MODULE, THREAD, USER_SESSION, SERVICE) |
| Syslog | 主机 | Linux 身份验证和系统日志(BSD 格式) |
| Bash History | 主机 | 按用户划分的带时间戳的命令历史 |
| Snort Alert | 网络 | IDS 告警格式(快速告警) |
| Web 访问日志 | 网络 | Apache/Nginx 组合日志格式 |
| HTTP 代理 | 主机 | 正向代理访问日志(W3C Extended 格式,HTTPS 的 CONNECT 条目,缓存状态) |
有关详细的字段文档、输出路径和已知限制,请参阅[证据格式参考](docs/reference/EVIDENCE_FORMATS.md)。
## 场景结构
场景是描述环境、角色、时间窗口和可选攻击故事线的 YAML 文件:
```
version: "1.0"
name: my-scenario
description: "Description of the scenario"
environment:
description: "Corporate office network"
timezone:
default: "America/New_York"
users: [...]
systems: [...]
network: # Optional: segments and sensors
segments: [...]
sensors: [...]
personas: [...] # User behavior patterns
time_window:
start: "2024-01-15T08:00:00Z"
duration: "8h"
baseline_activity:
description: "Normal office activity"
intensity: medium
variation: low
storyline: # Optional: attack events
- time: "+2h"
actor: attacker
system: TARGET-01
activity: "Lateral movement via pass-the-hash"
events:
- type: process
process_name: "C:\\Windows\\System32\\cmd.exe"
command_line: "cmd.exe /c whoami"
output:
logs: [{format: windows_event_security}, {format: zeek}]
destination: ./output
```
有关完整的架构文档,请参阅[场景参考](docs/reference/scenario-reference.md)。
## 示例场景
| 场景 | 用户数 | 持续时间 | 描述 |
|----------|-------|----------|-------------|
| [minimal.yaml](tests/fixtures/scenarios/minimal.yaml) | 1 | 1 小时 | 仅包含最小基线的场景 |
| [attack.yaml](tests/fixtures/scenarios/attack.yaml) | 2 | 4 小时 | 横向移动 + 数据窃取 |
| [retail-store-ftp-attack.yaml](tests/fixtures/scenarios/retail-store-ftp-attack.yaml) | 20+ | 24 小时 | 带有 FTP RCE 攻击的零售店场景,包含完整网络拓扑 |
## 数据质量评估
EvidenceForge 包含一个内置的评估框架,从 5 个维度对生成的数据进行评分:
| 维度 | 权重 | 衡量内容 |
|-----------|--------|-----------------|
| 记录级保真度 | 15% | 可解析性、字段共现、填充统计 |
| 跨数据源一致性 | 25% | 来源正确性、追踪覆盖范围、跨格式一致性 |
| 背景噪声真实性 | 25% | 数量充足性、多样性、合理性、无异常性 |
| 时间真实性 | 15% | 工作时间分布、突发性、因果排序、时间安排 |
| 信号完整性 | 20% | 事件存在性、指标准确性、枢轴链接能力 |
**验收标准**(硬性通过/失败):可解析性 >= 98%,来源正确性 >= 95%,因果排序 >= 99%,事件存在性 >= 90%。
```
uv run eforge eval ./output -s scenario.yaml
```
## 架构
```
Scenario YAML
|
v
Validation (Pydantic schema + cross-reference checks)
|
v
GenerationEngine (hour-by-hour orchestration)
|
v
WorldModel / WorldPlanner (compile host roles, user placement, session bootstrap)
|
v
ActivityGenerator (builds SecurityEvents with composable contexts)
|
v
EventDispatcher (routes to StateManager + matching emitters)
|
+---> WindowsEventEmitter ---> Security.evtx (XML)
+---> SysmonEmitter ---------> Sysmon.evtx (XML)
+---> ZeekEmitter(s) --------> conn/dns/http/ssl/... (NDJSON)
+---> EcarEmitter -----------> ecar.json (NDJSON)
+---> SyslogEmitter ---------> syslog.log
+---> BashHistoryEmitter ----> per-user bash history
+---> SnortEmitter ----------> snort_alert.log
+---> WebEmitter ------------> web_access.log
+---> ProxyEmitter ----------> proxy_access.log
```
`WorldModel` 从场景字段(如 `primary_system`、`roles`、`services` 和工作站分配)编译权威的主机和用户能力。然后,`WorldPlanner` 在 `ActivityGenerator` 发出相关证据之前,选择逼真的交互式网络、SSH 和 RDP 会话路径。
有关深入的详细信息,包括世界模型层、SecurityEvent 模型、状态管理和发射器系统,请参阅[架构文档](docs/ARCHITECTURE.md)。
## 开发
```
# 安装依赖
uv sync
# 运行测试(1400+ 个测试)
uv run pytest
# 运行特定测试套件
uv run pytest tests/unit/test_network_visibility.py -v
# Lint 和格式化
uv run ruff check src/ tests/
uv run ruff format src/ tests/
```
### 技术栈
- Python 3.11+ 配合 [uv](https://docs.astral.sh/uv/)
- Pydantic v2 用于架构验证
- Jinja2 用于日志格式模板
- Typer + Rich 用于 CLI
- pytest(1400+ 个测试)
## 文档
- [场景参考](docs/reference/scenario-reference.md) — 完整的 YAML 架构文档
- [证据格式参考](docs/reference/EVIDENCE_FORMATS.md) — 所有日志类型、字段详情、已知限制
- [架构](docs/ARCHITECTURE.md) — 生成引擎的工作原理
- [贡献指南](CONTRIBUTING.md) — 如何为 EvidenceForge 做贡献
- [AGENTS.md](AGENTS.md) — AI 代理的编码约定
### 设计文档
- [PRD](docs/design/PRD.md) — 产品需求和规格
- [事件模型设计](docs/design/event-model-prd.md) — 规范的 SecurityEvent 架构
- [数据质量设计](docs/design/data-quality-prd.md) — 评估框架设计
- [研究报告](docs/design/synthetic-log-generation-research.md) — 对现有工具的分析
## 贡献
有关报告问题、发送 Pull Request 和设置开发环境的指南,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 许可证
[MIT 许可证](LICENSE) - 版权所有 (c) 2026 Cisco Systems, Inc.
标签:Cloudflare, DNS日志, EDR, MITRE ATT&CK, PE 加载器, Python, Rootkit, SIEM数据, Sysmon, Windows安全日志, Zeek, 事件模型, 合成数据, 安全培训, 安全日志, 安全规则引擎, 数据合成, 无后门, 日志关联分析, 日志生成, 时序分析, 模拟器, 沙靶场, 网络安全, 网络流量分析, 脆弱性评估, 隐私保护, 霍克斯过程