Otrivinish/dfir-fenrir-v2

GitHub: Otrivinish/dfir-fenrir-v2

一个自托管的容器化数字取证与应急响应平台,覆盖事件全生命周期并符合 NIST CSF 2.0、SP 800-61 R3 等行业标准。

Stars: 0 | Forks: 0

# 🐺 DFIR-FENRIR v2 ### 一个容器化的**数字取证与应急响应**平台 *运行整个事件生命周期 — 检测 → 分析 → 遏制 → 恢复 → 报告*
![Status](https://img.shields.io/badge/status-active-success) ![Backend](https://img.shields.io/badge/backend-FastAPI%20%C2%B7%20Python%203.12-009688) ![Frontend](https://img.shields.io/badge/frontend-React%2019%20%C2%B7%20Vite-61dafb) ![Database](https://img.shields.io/badge/db-PostgreSQL%2016-336791) ![TLS](https://img.shields.io/badge/TLS-1.3%20%C2%B7%20Caddy-1f88c0) ![Deploy](https://img.shields.io/badge/deploy-Docker%20Compose-2496ed) ![Standards](https://img.shields.io/badge/aligned-CSF%202.0%20%C2%B7%20800--61%20R3%20%C2%B7%20CISA-6b46c1) ![API](https://img.shields.io/badge/API--first-OpenAPI%20%C2%B7%20MCP--ready-orange)
## 📑 目录 - [为什么选择 FENRIR](#-why-fenrir) - [截图](#-screenshots) - [核心亮点](#-highlights) - [架构](#-architecture) - [技术栈与依赖](#-tech-stack--dependencies) - [快速开始 (setup.sh)](#-quick-start) - [手动安装](#-manual-installation) - [配置](#-configuration) - [功能概览](#-feature-overview) · *(完整列表 → [FEATURES.md](FEATURES.md))* - [标准对齐](#-standards-alignment) - [主题](#-themes) - [安全态势](#-security-posture) - [文档](#-documentation) ## 🎯 为什么选择 FENRIR 大多数应急响应工具要么是希望将你的证据存放在别人云端的 SaaS,要么是一堆没有监管链的脚本。FENRIR 是一个**单一的自托管平台**,它能够: - 将**证据保留在你拥有的基础设施上**,使用 AES-256-GCM 进行静态加密。 - 生成**防篡改、哈希链化的审计日志**和**可用于法庭的执法机构包**。 - 提供一个没有网络路径的**物理隔离恶意软件分析 worker**。 - 是 **API 优先**的 — 每个功能不仅可以在浏览器中使用,还可以通过 `curl` 或 MCP 客户端使用。 - **按标准构建**:符合审计员关注的标准,如 NIST CSF 2.0、SP 800-61 R3、CISA playbooks、ISO/IEC 27037/27041。 ## 📸 截图 | | | |---|---| | ![Operations dashboard](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/41283d998d210621.png)
**运营仪表盘** — 投资组合 KPI(未解决 / 严重 / 逾期,MTTA · MTTR)、活跃阶段和严重程度细分、30 天趋势图表以及实时活动流。 | ![Incident register](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/e306338e30210626.png)
**事件登记册** — 可筛选的案例列表;每一行都带有其 NIST SP 800-61 R3 阶段、严重程度和 TLP 标记。 | | ![Incident timeline](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/3a7527dbcf210631.png)
**事件时间线** — 带有 MITRE ATT&CK 技术标签和一键 CSV / HTML 导出的按时间顺序排列的事件日志。 | ![Entities table](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/d2b2dbdacf210641.png)
**实体 — 表格** — 主机、用户、服务和 IP,带有严重性和被入侵标志,以及批量 CSV 导入。 | | ![Entities graph](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/7bf560705b210650.png)
**实体 — 图表** — 交互式关系图,将实体关联起来(例如*与之通信*)并高亮显示入侵情况。 | ![Indicators of compromise](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/558afce869210658.png)
**入侵指标** — 哈希、IP 和域名,带有置信度评分、富化、无害化处理和批量导入。 | | ![Evidence and chain of custody](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/4a146e61f1210703.png)
**证据与监管链** — SHA-256 哈希、完整的监管链日志、照片、完整性重新验证和密封传输。 | ![Forensic artifacts](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/7c2a3cca9d210732.png)
**取证工件** — 隔离工件浏览器,具有用于物理隔离静态分析的十六进制 / 字符串查看功能。 | | ![Email analyzer](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/a5cf3e9009210743.png)
**邮件分析器** — 离线钓鱼分诊:SPF / DKIM / DMARC、接收跳链、提取的 URL 和附件,可提升为证据。 | ![OSINT lookup](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/5d57604fef210753.png)
**OSINT 查询** — 被动富化(GeoIP、ASN、WHOIS、rDNS、DNS 记录),支持一键提取指标。 | | ![Host collections](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/d8a397c6a0210802.png)
**主机收集** — 签名的、事件范围的端点收集包,具有按主机配置的配置文件和可验证的结果。 | ![MITRE ATT&CK coverage](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/f8fb8559d1210812.png)
**MITRE ATT&CK 覆盖范围** — 跨事件观察到的战术和技术的企业矩阵,支持按技术下钻。 | | ![Respond board](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/aefdac571b210819.png)
**响应看板** — 遏制 / 消除 / 恢复看板,带有记录的决策记录。 | ![Playbook](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/8b7f98bb41210827.png)
**预案** — 与 CISA 对齐的、基于 800-61 阶段的检查清单,具有逐步状态和模板应用。 | | ![Regulatory deadlines](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/10da6188ef210837.png)
**合规截止日期** — 法定通知和违规报告义务的实时倒计时器。 | ![Post-incident activity](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/d81fbc5ef6210846.png)
**事件后活动** — 关闭检查清单、经验教训捕获和报告生成。 |
![Generated report](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/db176058ff210855.png) ***生成的报告*** — 包含严重性 / TLP / 阶段指标和完整事件详情的执行摘要,随时可导出。以 **Aurora Night** 主题显示 — 这是可从顶栏切换的三个运行时主题(Mission Control · Nordic Calm · Aurora Night)之一。
## ✨ 核心亮点 | | 能力 | 它的作用 | |---|---|---| | 🔗 | **监管链与证据完整性** | 静态 AES-256-GCM 加密、按项目的监管链时间线、哈希链审计日志、签名审计日志导出 (Ed25519)、一次性加密下载、法庭级执法机构包 | | 📦 | **签名的离线收集器** | 事件范围、签名的 Velociraptor 收集包 (Windows + macOS ARM64)。响应者在物理隔离环境中运行;输出自动解析到时间线中 | | 🧭 | **原生标准 IR** | 800-61 R3 阶段推进器、CSF 2.0 标记、11 个内置预案(NIST、CISA、勒索软件、网络钓鱼、DDoS、BEC 等)以及一个 4 列响应看板 | | 🔬 | **取证分析管道** | 多格式时间线导入(EVTX/XML/CSV/JSON + syslog/journald + macOS 统一日志)、进程树可视化、11 种静态分析工具、YARA、PCAP/DNS 侦察、邮件头分析器 | | 🌐 | **威胁情报** | 跨事件 IOC/实体关联、8 个威胁情报源、25 个与 MITRE 同步的威胁行为者(含 TTP 评分)、7 个 OSINT 来源、将 IOC 导出为 7 种 EDR/防火墙格式 | | 📊 | **报告与指标** | 6 个报告模板、执行/完整模式、修复路线图、MTTD/MTTR/MTTC、监管截止日期倒计时(GDPR、NIS2、DORA、HIPAA、CCPA、PCI-DSS) | | 🔌 | **API 优先与集成** | OpenAPI 作为唯一事实来源、Bearer token + cookie 认证、SMTP/Graph 邮件、Teams/Slack webhooks、入站 SIEM (Splunk/Sentinel/Elastic)、syslog 转发 (TLS 1.3 / mTLS) | | 🛡️ | **设计安全** | TLS 1.3 边缘、强化的 CSP/HSTS、非 root 只读容器、物理隔离分析网络、基于 Redis 的速率限制、TOTP 2FA、argon2id 密码 | ➡️ 完整的、分类的功能清单位于 **[FEATURES.md](FEATURES.md)** 中。 ## 🏗 架构 它通过 Caddy 作为纯 TLS 终结反向代理提供服务。React SPA 由一个专门的强化版 **nginx** 容器提供;API 是 FastAPI **后端**。一切都只能通过 Caddy 到达边缘。 ``` ┌─────────────────────────────────────────────────────────────────┐ │ Internet / Browser │ └────────────────────────────┬────────────────────────────────────┘ │ HTTPS :443 (TLS 1.3, HSTS, CSP) ┌─────────▼──────────┐ │ Caddy │ TLS termination + reverse proxy ONLY │ (pure proxy) │ └────┬──────────┬────┘ / (SPA) │ │ /api/* · /download/* · WS ┌─────────▼──┐ ┌───▼─────────┐ │ Frontend │ │ Backend │ FastAPI async │ nginx :3000│ │ :8000 │ │ static SPA │ └──┬───────┬──┘ │ non-root, │ │ │ │ read-only │ ┌───▼──┐ ┌──▼──────┐ └────────────┘ │ PG16 │ │ Redis 7 │ (sessions · rate-limit · cache) │ data │ └─────────┘ └───┬──┘ ┌───────────────┼──────────────────┐ ┌─────▼─────┐ ┌─────▼───────┐ ┌──────▼────────┐ │ Backup │ │ Audit │ │ (evidence │ │ daily │ │ monitor │ │ vol, ro) │ │ pg_dump │ │ tamper anchor│ └───────────────┘ └───────────┘ └─────────────┘ ── fenrir-analysis network (internal=true — NO internet) ────────────── ┌─────────────────────────┐ │ Analysis Worker │ air-gapped · caps dropped · noexec /tmp │ (malware tooling) │ reachable only from Backend └─────────────────────────┘ ``` ## 🧰 技术栈与依赖 ### 运行时(宿主机) | 要求 | 说明 | |---|---| | Windows 或 Linux(建议 4vCPU,8GB 内存和 60GB 磁盘) | **Docker** + **Docker Compose v2** | 必需 | | `openssl` *或* `python3` | 运行 `setup.sh` 所需 | | `curl` *(可选)* | 被 `setup.sh` 用于启动后的健康轮询。 | ### 后端 — Python 3.12 / FastAPI
后端依赖项(backend/requirements.txt | 包 | 用途 | |---|---| | `fastapi` · `uvicorn[standard]` · `python-multipart` | 异步 API 服务器 | | `pydantic[email]` · `pydantic-settings` | 验证与类型化配置 | | `sqlalchemy[asyncio]` · `asyncpg` | ORM + 异步 Postgres 驱动 | | `redis` | 会话、速率限制桶、缓存 | | `argon2-cffi` | argon2id 密码哈希 | | `cryptography` | Fernet(静态 TOTP 密钥)、AES-256-GCM 证据加密 | | `pyotp` · `qrcode[pil]` | RFC 6238 TOTP + 配置 QR 码 | | `httpx` · `pyyaml` | LOLBAS/GTFOBins 同步,威胁情报源拉取 | | `python-evtx` | Windows EVTX 二进制日志解析 | | `pyzipper` | 受 AES-256 密码保护的 ZIP 下载 | | `python-magic` | MIME 检测(封装了 `libmagic1`) | | `reportlab` | 签名审计日志导出 PDF | | `rfc3161ng` | RFC 3161 受信时间戳(延迟加载;仅在设置了 `TSA_URL` 时) | | `extract-msg` | 用于邮件分析器(离线)的 Outlook `.msg` 解析 |
### 前端 — React 19 / Vite,由强化的 nginx 提供
前端依赖项(frontend/package.json | 包 | 用途 | |---|---| | `react` · `react-dom` (19) | UI | | `react-router-dom` (7) | SPA 路由 | | `react-markdown` | Markdown 渲染(描述、报告) | | `@xyflow/react` | 实体 / 资产关系图 | | `vite` (8) · `@vitejs/plugin-react` | 构建工具(`node:20-alpine` 构建 → `nginx-unprivileged` 服务) |
### 分析 worker — Python 3.12,物理隔离
分析 worker 工具(analysis-worker/Dockerfile **系统工具:** `tshark` (PCAP)、`binutils` (`strings`)、`libimage-exiftool-perl`(元数据)、`libmagic1` (MIME)、`libyara-dev` (YARA 引擎)。 **Python 工具:** `pefile` (PE)、`oletools`(Office 宏)、`pdfminer.six` (PDF)、`yara-python`、`exifread`、`python-magic`。 以非 root uid `1002` 运行,所有 capabilities 均已丢弃,`/tmp` 挂载为 `noexec`,处于**没有互联网路由**的网络上。隔离区以只读方式挂载。
### 基础设施镜像 postgres:16-alpine` · `redis:7-alpine` · `caddy`(自定义构建)· 后端镜像被每日的 `backup` 和 `audit-monitor` 复用。 ## 🚀 快速开始 ``` git clone https://github.com/Otrivinish/dfir-fenrir-v2.git dfir-fenrir-v2 cd dfir-fenrir-v2 ./setup.sh # or: make setup ``` `setup.sh` 是**幂等且离线安全**的。它会: 1. 如果 `.env` 不存在,则从 `.env.example` 创建它。 2. 如果缺少,则生成所有必需的密钥 — `POSTGRES_PASSWORD`、`REDIS_PASSWORD`、`SECRET_KEY`、`EVIDENCE_KEK`、`AUDIT_SIGNING_KEY`(从不覆盖现有值)。 3. 生成自签名 TLS 证书(对于自带证书 / DuckDNS 模式会跳过)。 4. 构建 + 启动整个技术栈,并等待后端变得健康。 5. 打印**首次运行设置 URL + bootstrap token**。 然后打开 **`https://localhost/`** 并使用打印的 token 访问 `/setup` 以创建第一个管理员。 ``` ./setup.sh --print-token # re-show the first-run token later ``` ### Make 目标 | 命令 | 动作 | |---|---| | `make setup` | 首次安装 / 恢复(幂等) | | `make up` / `make down` | 启动 / 停止技术栈(保留卷) | | `make rebuild` | 重新构建镜像 + 启动 | | `make logs` | 追踪后端日志 | | `make token` | 重新显示首次运行 token | | `make ps` | 容器状态 | ## 🔧 手动安装
setup.sh 自动化的步骤 ``` # 1. 创建你的 env file cp .env.example .env # 2. 生成密钥并将其粘贴到 .env 中 # (EVIDENCE_KEK 和 AUDIT_SIGNING_KEY 是 MANDATORY 的 — backend # 没有它们将拒绝启动。) openssl rand -hex 24 # → POSTGRES_PASSWORD openssl rand -hex 24 # → REDIS_PASSWORD openssl rand -hex 64 # → SECRET_KEY openssl rand -hex 32 # → EVIDENCE_KEK (32 bytes = AES-256 KEK) ./scripts/generate-audit-key.sh # → AUDIT_SIGNING_KEY (Ed25519 seed, base64) # 3. 生成本地 TLS 证书(仅限 self-signed 模式) ./generate-certs.sh # 4. 构建并启动 docker compose up -d --build # 5. 验证 curl -sk https://localhost/api/health # {"status":"ok","service":"fenrir-v2-backend"} # 6. 获取首次运行令牌,然后访问 https://localhost/setup docker compose logs backend | grep -i token ```
对于非默认部署(自定义域名、通过 DuckDNS 使用 Let's Encrypt 或自带证书),请在运行**之前**编辑 `.env` — TLS 模式在 [`.env.example`](.env.example) 和 [`docs/deployment-runbook.md`](docs/deployment-runbook.md) 中有内联文档说明。 ## ⚙ 配置 所有配置都位于 `.env` 中(从 [`.env.example`](.env.example) 复制)。关键设置: | 变量 | 默认值 | 用途 | |---|---|---| | `DOMAIN` | `localhost` | 主机名;驱动 Caddy 的 TLS 模式自动选择 | | `POSTGRES_PASSWORD` · `REDIS_PASSWORD` · `SECRET_KEY` | _生成_ | 核心密钥 | | `EVIDENCE_KEK` | _生成_ | **必需。** 用于静态证据的 AES-256 主 KEK | | `AUDIT_SIGNING_KEY` | _生成_ | **必需。** 用于签名审计导出的 Ed25519 种子 | | `TOTP_REQUIRED` | `true` | 强制所有用户注册 2FA | | `INACTIVITY_TIMEOUT_MINUTES` | `30` | 空闲会话撤销 | | `CORS_ORIGINS` · `ALLOWED_HOSTS` | `https://localhost` … | 浏览器来源 / Host 头白名单 | | `TLS_CERT_FILE` / `TLS_KEY_FILE` | _空_ | 自带证书模式 | | `LETSENCRYPT_EMAIL` / `DUCKDNS_TOKEN` | _空_ | 通过 DuckDNS 使用 Let's Encrypt 模式 | | `TSA_URL` | _空_ | 可选的 RFC 3161 时间戳机构,用于链锚定 | | `ANCHOR_INTERVAL` | `3600` | 审计监控锚定频率(秒) | **TLS 模式**(由 Caddy 根据设置自动选择):**A** 自签名(默认) · **B** 通过 DuckDNS 使用 Let's Encrypt · **C** 自带证书。 ## 🧩 功能概览 FENRIR 涵盖了完整的事件生命周期。这是精简版的映射图 — 详尽的逐项列表在 **[FEATURES.md](FEATURES.md)** 中。
事件管理 带有过滤器的游标分页事件列表 · 创建/编辑并带有行内验证 · 带有已审计转换的 800-61 R3 阶段推进器 · 严重程度(内部 低/中/高/严重 → 报告时的 NCISS) · TLP 2.0 标记 · CSF 2.0 功能标签 · 受影响的系统 → 提升为实体 · 带有防护的关闭/重新打开 · 基于事件和团队的访问控制 · 运营深色模式切换。
调查与取证 **时间线**(垂直轴、MITRE 级联下拉菜单、CSV/HTML 导出、进程树可视化) · **取证时间线导入**(EVTX/XML/SQLite/CSV/JSON + Linux syslog/journald + macOS 统一日志、36-EID 分类引擎、分诊表、批量提升) · **IOCs**(去重、置信度、跨事件关联、批量导入、导出为 7 种 EDR/防火墙格式、威胁情报源匹配、富化) · **实体**(关系、react-flow 图表、资产日志、批量导入) · **工件**(拖拽、MD5/SHA256/SHA512、11 种静态分析工具、AES-ZIP 下载) · **YARA 检测** + SIEM 查询生成 · **LOLBins** (LOLBAS + GTFOBins) · **PCAP** (tshark、7 标签结果、DNS 侦察) · **OSINT**(7 个来源) · **威胁行为者归因**(25 个 MITRE 同步的攻击者、TTP 评分) · **MITRE ATT&CK 覆盖矩阵** · **邮件头分析器**(离线钓鱼分诊)。
证据与监管链 数字 + 物理证据模型 · 静态 AES-256-GCM(如果没有 `EVIDENCE_KEK` 则快速失败) · 传输/检查/验证/处置监管时间线 · 一次性 24 小时加密下载 token · 导出包(文件 + CoC JSON + 审计摘录 + SHA-256 清单 + 解密方案) · 监管日志 · 按需审计链验证 · ISO 27037/27041 收集向导、SOP 和工作副本账本 · 合规保留标记 · 受信的 RFC 3161 时间戳。
响应与恢复 11 个内置预案模板(NIST 800-61、CISA 联邦 IR 和漏洞响应、勒索软件、撞库、钓鱼、数据外泄、OAuth 撤销、内部人员外泄、DDoS、BEC) · 4 列响应看板(遏制/消除/恢复/决策),包含 42 个动作模板、还原工作流和自动时间线记录 · 决策日志 · 关闭检查清单 · 经验教训 · 响应分析 (TTD/TTC/TTR) · 成本跟踪 · 业务影响评估 · 监管截止日期倒计时。
报告与跨事件分析 6 个报告模板(Mission Control / Executive / Nordic Calm / Forensic / Compact / Tactical),包含执行/完整模式、修复路线图、审计级历史记录和重新下载 · **执法机构包**(AES-256 ZIP、HMAC 清单、完整性文件、解密证据 + 监管 CSV、完整审计追踪) · 带有 7 个 KPI 卡片 + 趋势图 + 工作负载 + 活动流的仪表盘 · 全局 ⌘K 搜索 · 关联 · 威胁情报中心 · 投资组合指标。
协作与通信 评论 · 带外通信日志(密码、渠道、暗操作切换) · WebSocket 作战室(实时聊天 + 在线状态) · 实时通知(铃铛 + toasts) · 利益相关者联系人目录。
管理与 API 哈希链审计日志(全局 + 每个事件查看器) · 签名的审计日志导出 (Ed25519、加密 ZIP、一次性下载) · 会话管理 · 存储/卷监控 · 备份状态与触发 · Fernet 加密的 API-key 保险库 · 主题与时区选择器 · 用户/团队/角色 · OpenAPI 文档 (Swagger/ReDoc) · API token (Bearer) · CSP/HSTS · Redis 速率限制 · 已认证的 WebSockets · 集成(SMTP/Graph 邮件、Teams/Slack webhooks、入站 SIEM、syslog 转发)。
## 🔒 安全态势 - **传输中:** Caddy 边缘的 TLS 1.3;HSTS;强化的 CSP(`object-src 'none'`、`frame-ancestors 'none'` 等);COOP/CORP/Permissions-Policy。 - **静态:** AES-256-GCM 证据加密(来自环境变量的 KEK,快速失败);Fernet 加密的 TOTP 密钥和 API 密钥。 - **身份:** argon2id 密码,RFC 6238 TOTP 2FA(组织可强制执行),具有空闲超时的不透明会话,双轴 RBAC,Bearer API token 角色上限为 `min(user, token)`。 - **隔离:** 非 root 容器(后端 1001,worker 1002),前端/worker 上的只读 rootfs + tmpfs,丢弃 capabilities,`no-new-privileges`,物理隔离分析网络(`internal: true`)。 - **完整性:** 哈希链防篡改审计日志,Ed25519 签名导出,后台审计链锚定(+ 可选的 RFC 3161 时间戳),基于 IP/基于凭据的 Redis 速率限制。 ## 📚 文档 ** 即将推出 ** | 文档 | 涵盖内容 | |---|---| | [FEATURES.md](FEATURES.md) | 完整的分类功能清单 | | [docs/deployment-runbook.md](docs/deployment-runbook.md) | 启动、引导、证书模式、完整环境参考 | | [docs/threat-model.md](docs/threat-model.md) | 信任边界、加密、物理隔离、偏差 | | [docs/audit-integrity.md](docs/audit-integrity.md) | 哈希链、签名导出、审计事件 | | [docs/backup-restore.md](docs/backup-restore.md) | 备份范围、保留、手动恢复 | | [docs/standards-map.md](docs/standards-map.md) · [docs/coc-procedure-27037.md](docs/coc-procedure-27037.md) | 标准与监管链程序 | | [docs/README.md](docs/README.md) | 完整文档索引 |
标签:AV绕过, Docker, FastAPI, PostgreSQL, React, Syscalls, 安全防御评估, 库, 应急响应, 搜索引擎查询, 数字取证, 版权保护, 自动化脚本, 自定义脚本