getvictor/fleet-edr
GitHub: getvictor/fleet-edr
Fleet EDR 是一款完全自托管的 macOS 开源端点检测与响应系统,提供实时进程与网络遥测、行为检测规则以及主机端响应拦截能力。
Stars: 6 | Forks: 0
# Fleet EDR
[](LICENSE) [](https://github.com/getvictor/fleet-edr/releases)
 [](https://github.com/getvictor/fleet-edr/actions/workflows/test.yml) [](https://sonarcloud.io/summary/new_code?id=getvictor_fleet-edr) [](https://codecov.io/gh/getvictor/fleet-edr)
[](https://github.com/getvictor/fleet-edr/actions/workflows/codeql.yml) [](https://github.com/getvictor/fleet-edr/actions/workflows/go-vulncheck.yml) [](https://github.com/getvictor/fleet-edr/actions/workflows/osv-scanner.yml)
[](https://www.bestpractices.dev/projects/12994) [](https://scorecard.dev/viewer/?uri=github.com/getvictor/fleet-edr) [](https://slsa.dev/spec/v1.0/levels#build-l2) [](docs/best-practices.md#4-supply-chain-security)
Fleet EDR 是一款专为 macOS 终端群设计的开源端点检测与响应(EDR)系统。它为安全团队提供对 Apple Silicon Mac 上进程、网络和 DNS 活动的实时可见性,基于物化的进程图运行行为检测规则,并可在端点上拦截执行或终止进程。它是完全自行托管的:使用你自己的服务器和自己的数据,不依赖任何 SaaS。
## 快速开始
你可以直接部署它并注册真实的 Mac,也可以先通过无需 Mac 的演示进行体验。
### 部署说明
只需两步。搭建一台服务器,然后将 agent 推送到你的 Mac 上。
**1. 搭建服务器。**
- **使用你自己的域名单独部署 VM(推荐)。** 只需一台 Linux VM 和一个脚本:Caddy 会自动获取 Let's Encrypt 证书并进行反向代理到服务器,因此你无需管理任何证书,也不会有执行内容检测的边缘 WAF 将你的 agent 遥测数据误判为攻击。完整操作指南:[docs/quickstart-vm.md](docs/quickstart-vm.md)。
EDR_DOMAIN=edr.example.com EDR_VERSION=latest ./bootstrap.sh
在生产环境中,请固定使用特定已签名的发布版本,而不是 `latest`:请参阅 [docs/quickstart-vm.md](docs/quickstart-vm.md)。
- **或者自行托管容器**,支持在任何容器宿主机上运行(Docker、Kubernetes、AWS ECS/EKS、GCP、Azure 或你自己的 VM)。该服务器是一个标准的多架构 Linux 镜像。设置、密钥和 TLS:请参阅 [docs/install-server.md](docs/install-server.md)。
**2. 将 agent 部署到你的 Mac 上**(Apple Silicon,macOS 26+)。该 agent 以 Developer ID 签名、经过公证的 `.pkg` 包以及两个 `.mobileconfig` 配置文件的形式提供,通过你的 MDM 进行分发。
- **通过 MDM**(Fleet、Jamf、Kandji、Intune、mosyle):厂商中立方案位于 [docs/mdm-deployment.md](docs/mdm-deployment.md);特定于 Fleet 的方案位于 [docs/fleet-deployment.md](docs/fleet-deployment.md)。
- **在 1 到 5 台 Mac 上手动部署**(无需 MDM,用于评估):请参阅 [docs/install-agent-manual.md](docs/install-agent-manual.md)。
一旦 agent 完成注册,打开服务器的 `/ui/` 即可实时查看主机、进程树和警报。
### 体验演示(无需 Mac)
想在部署前先看看吗?只需大约五分钟即可评估完整的服务器、UI 和检测 pipeline。无需 Apple Silicon Mac、MDM 或 Apple 权限。
```
docker compose -f docker-compose.demo.yml up
```
打开 ,接受自签名证书警告,并使用内置的 SSO 账号 `demo@fleet-edr.local` / `demo` 登录。
你将看到两台真实的 macOS 主机(一台工程师笔记本电脑和一台 CI 构建服务器),每台都有一个深度的进程图,以及来自真实脱敏捕获数据的关联网络和 DNS 活动。在这些环境活动交织中,触发了五个 ATT&CK 检测:一个凭证钥匙串转储和一个 DNS C2 信标(在所有三个流中关联了 exec、DNS 和出站连接),以及 sudoers 篡改、launchd 持久化和应用程序控制拦截。每个警报都来自真实的接入和检测 pipeline,而不是手动插入的行记录,并且良性活动不会引发误报。
注意事项:
- 设备端部分(系统扩展、网络扩展、agent)需要 Apple 授予的 Endpoint Security 权限以及 Apple Silicon 支持,因此无法在 Docker 中运行。演示体验涵盖了服务器、UI 和检测 pipeline;若要查看实时捕获功能,请在真实的 Mac 上部署(如上所述)。
- 在演示中,响应操作会进入队列但永远不会完成,因为没有连接实时的 agent。
- 仅供评估:MySQL 密码为空,使用自签名证书,包含提交到代码库的开发密钥。请勿将其暴露在互联网上。
- 若要从源码构建演示镜像而不是拉取发布 tag,请运行:`docker compose -f docker-compose.demo.yml -f docker-compose.demo.build.yml up --build`。
## 功能说明
- **实时 macOS 监控。** 设备端扩展捕获进程执行、fork/exit、文件访问、DNS 查询和网络连接,并将其持续流式传输到你的服务器。
- **进程图关联。** 服务器会重建每台主机的实时进程树,因此每个警报都携带了触发该警报的完整祖先链。
- **行为检测。** 涵盖凭证访问、持久化、权限提升、进程注入、命令控制信标和可疑执行等类别的规则目录,包括将 exec、DNS 和网络关联在一起的检测。
- **应用程序控制。** 通过二进制哈希、路径、CDHash、签名 ID、团队 ID 或叶证书拦截执行,并在执行时于端点进行强制验证。
- **响应。** 按需终止主机上正在运行的进程。
- **具备 RBAC、SSO 和仅追加审计日志的运营 UI。** OIDC 单点登录加上 WebAuthn 紧急访问路径,五种内置角色,以及每个特权操作的不可变记录。
有关每个版本的完整功能列表,请参阅[变更日志](CHANGELOG.md)。
## 工作原理
### 设备端
### 服务器端
- **接入 API**:通过 HTTP 接收来自 agent 的事件批次。
- **处理器**:从原始事件中生成每台主机的进程图,并运行检测规则。
- **MySQL 存储**:存储事件、进程、警报和命令。服务器是无状态的 (ADR-0010),因此可以在负载均衡器后扩展为多个副本。
- **Web UI** (React/TypeScript):提供进程树可视化、警报管理和响应操作。
## 文档说明
运营和参考文档位于 [`docs/`](docs/) 中:
| 主题 | 文档 |
| -------------------------------------------------------- | --------------------------------------------------------------------- |
| 使用你自己的域名单独部署 VM(推荐) | [`quickstart-vm.md`](docs/quickstart-vm.md) |
| 自行托管服务器端 | [`install-server.md`](docs/install-server.md) |
| 通过任意 MDM 部署 agent | [`mdm-deployment.md`](docs/mdm-deployment.md) |
| Fleet MDM 方案 | [`fleet-deployment.md`](docs/fleet-deployment.md) |
| 在没有 MDM 的情况下在 1 到 5 台 Mac 上进行评估 | [`install-agent-manual.md`](docs/install-agent-manual.md) |
| 日常运维:升级、轮换、备份、故障排除 | [`operations.md`](docs/operations.md) |
| 检测规则:行为、ATT&CK 映射、配置 | [`detection-rules.md`](docs/detection-rules.md) |
| HTTP API 参考 | [`api.md`](docs/api.md) + [`api/openapi.yaml`](docs/api/openapi.yaml) |
| 架构决策(“为什么”) | [`adr/`](docs/adr/) |
此目录树中的文档跟踪的是开发版本。如需查看与特定发布版本匹配的文档,请浏览该发布标签下的代码库([发布页面](https://github.com/getvictor/fleet-edr/releases) 中列出了这些标签)。文档如何与代码进行版本控制:请参阅 [`doc-versioning.md`](docs/doc-versioning.md)。
代码库布局:
```
extension/edr/ Swift system extension + network extension (Xcode project)
agent/ Go agent daemon (XPC receiver, SQLite queue, uploader)
server/ Go server (ingestion, processor, detection, REST API)
internal/ Shared packages (envparse, etc.)
ui/ React/TypeScript frontend (Vite, D3.js process tree)
docs/ Operator + reference docs, ADRs
```
## 开发说明
```
mise install # install pinned tools (Go, Node, golangci-lint, lefthook, task) from .tool-versions
lefthook install # format + lint on commit, build + tsc on push
task lint:install # builds the custom golangci-lint (with the commentwrap plugin)
task db:up # local MySQL on 33306 (dev) / 33307 (test)
task build:ui # build the UI, embedded into the server binary
task dev:server # run the server at https://localhost:8088/ui/ (break-glass-only auth)
task test # everything (Go + UI); requires MySQL
task --list # the Taskfile is the source of truth for all commands
```
`task dev:server` 仅以紧急权限运行。若要在本地针对内置的 dex IdP 测试 SSO,请运行 `task qa:up`,然后运行 `task dev:server:qa-oidc`;如需配置真实的 OIDC 租户,请参阅 [`docs/okta-setup.md`](docs/okta-setup.md)。
## 开源许可
[MIT](LICENSE)
标签:EDR, EVTX分析, Go, HTTP工具, IP 地址批量处理, Qt, Ruby工具, 日志审计, 终端安全, 网络遥测, 脆弱性评估, 行为检测, 请求拦截