deXwn/DFIR_Log_Parser

GitHub: deXwn/DFIR_Log_Parser

一款统一处理 EVTX 和文本日志的本地 DFIR 取证分析套件,提供检测驱动的快速分类、时间线重建和案例报告输出能力。

Stars: 1 | Forks: 0

# DFIR 套件 用于两种 DFIR 工具的统一本地工作区: 1. `Event Log Parser`(专注于 EVTX) 2. `Log Parser`(纯文本日志分析) 这两个工具都通过一个启动器启动,并通过一个落地页进行访问。 ## 内容 1. 目的 2. 组件 3. 解析器功能 4. 文件夹结构 5. 前置条件 6. 安装 7. 启动 8. 日常工作流 9. 使用(Web 导入) 10. URL 11. 环境变量 12. 故障排除 ## 目的 此套件为 DFIR 工作流提供单一的本地入口点,以便您可以: - 通过一条命令启动所有服务, - 快速切换 EVTX 和文本日志工作流, - 并在调查中保持分析操作的一致性。 ## 组件 运行 `./start.sh` 会启动四个进程: 1. EventLogParser 后端 (`http://localhost:8080`) 2. EventLogParser 前端 (`http://localhost:3000`) 3. Log Parser 服务 (`http://localhost:8800`) 4. 落地页服务器 (`http://localhost:8899`) 启动行为: - 检查所需端口(`3000`、`8080`、`8800`、`8899`) - 在声明成功之前等待健康/可用性检查 - 仅在所有端点均可访问后打印 `All services started.` - 当您使用 `Ctrl+C` 停止时清理子进程 ## 解析器功能 ### Event Log 解析器 (EVTX 工作流) 最适合 Windows 原生取证时间线和事件通道调查。 核心功能: - 多线程 EVTX 导入到 SQLite。 - 核心事件字段的结构化提取(事件 ID、通道、主机、用户、SID、提供者、时间戳以及原始 XML/JSON payload)。 - 对索引事件数据进行全文事件搜索。 - 按事件 ID、通道、用户/SID、IP 相关字段、包含/排除关键词和时间窗口进行过滤的事件检索。 - 具有分钟/小时桶的时间线聚合。 - 针对热门事件 ID、通道、用户和源/目标 IP 的统计聚合。 - 进程聚焦视图(包括进程相关的事件 ID)。 - 由 YAML 规则驱动的检测引擎,包含: - severity/metadata, - 字段级过滤器, - regex 匹配, - correlation chains 和时间窗口。 - 调查/报告功能: - 标准案例摘要报告, - 来自选定事件的自定义 Markdown 报告, - 用于打印/导出工作流的自定义 HTML 报告。 - 用于可疑事件、登录失败/成功摘要以及 4624/4625 关联的实用程序端点。 主要 API 接口(高价值端点): - `POST /ingest` - `GET /events` - `GET /search` - `GET /timeline` - `GET /stats` - `GET /detections` - `POST /report` - `POST /reports/custom` - `POST /reports/custom/html` ### Log 解析器 (纯文本 Log 工作流) 最适合大容量的 Web/服务器/应用程序文本日志和模式密集型搜索。 核心功能: - 对 `.log`、`.txt`、轮转日志文件和无扩展名文件进行并行目录扫描。 - 使用包含/排除词集和 `any/all` 匹配模式的文本搜索。 - 结构化行解析,用于: - timestamp 提取, - status code, - bytes received, - 源/目标/公共 IP。 - 过滤和排序: - `status_code` 过滤器, - `ip_scope`(私有/公共), - `min_bytes_received`, - 按文件位置或字节升序/降序排序。 - Context retrieval API,用于返回命中结果周围的行。 - IP 汇总模式,包含唯一计数和可选的 CSV 导出。 - 用于检测的规则引擎,包含: - regex 标准, - 字段条件和比较运算符, - threshold rules, - time-windowed 分组(`global/src_ip/dst_ip/status`)。 - 检测持久化存储在 SQLite 中: - 规则 upsert/list/disable, - 检测运行历史, - 带有游标排序的分页命中列表, - false-positive 标记和备注, - 检测命中的 CSV 导出。 - 具有可写目录回退的导出行为(`exports` -> `exports_local`)。 主要 API 接口(高价值端点): - `POST /search` - `POST /ip_summary` - `POST /context` - `POST /detections/run` - `GET /detections/rules` - `POST /detections/rules` - `GET /detections/hits` - `POST /detections/hits/:id/false_positive` - `POST /detections/export` ## 文件夹结构 ``` DFIR_suite/ ├─ setup.sh ├─ start.sh ├─ README.md ├─ landing/ │ └─ index.html ├─ logs/ └─ apps/ ├─ EventLogParser/ └─ Log_parser/ ``` ## 前置条件 必需: - `bash` - Rust toolchain (`cargo`) - Node.js + npm - Python 3 (或 Python) - `curl` - `ss` (来自 `iproute2`) 推荐: - `git` - `rg` (ripgrep) ## 安装 使用自动安装程序(推荐),然后启动套件。 ### 快速设置(推荐) 在 `DFIR_suite` 目录下: ``` chmod +x setup.sh start.sh ./setup.sh ./start.sh ``` `setup.sh` 安装所需的系统/运行时依赖项,为 Event UI 安装 npm 依赖项,并为两个解析器预取 Rust 依赖项。 ### 手动设置(可选) 如果您不想使用 `setup.sh`,请按照下面的手动步骤操作。 ### 1. 安装 Rust 和 Cargo(必需) 使用 `rustup`(推荐): ``` curl https://sh.rustup.rs -sSf | sh source "$HOME/.cargo/env" rustc --version cargo --version ``` ### 2. 安装 Node.js 和 npm(必需) 使用 Node.js 20 LTS 或更新版本: ``` node --version npm --version ``` ### 3. 安装系统包(必需) Ubuntu/Debian 示例: ``` sudo apt update sudo apt install -y curl iproute2 python3 ``` ### 4. 安装前端依赖项 ``` cd apps/EventLogParser/web npm ci cd ../../.. ``` ### 5. 验证所需工具 ``` bash --version cargo --version node --version npm --version python3 --version curl --version ss --version ``` ## 启动 在 `DFIR_suite` 目录下: ``` ./start.sh ``` 如果端口已在使用中,并且您想要自动清理: ``` AUTO_KILL_PORTS=1 ./start.sh ``` 如果由于构建/依赖项安装导致首次启动缓慢: ``` STARTUP_TIMEOUT_SECS=900 ./start.sh ``` ## 日常工作流 1. 使用 `./start.sh` 启动服务。 2. 打开 `http://localhost:8899`。 3. 选择工具: - 事件聚焦分析 -> Event Log Parser - 大型文本日志分析 -> Log Parser 4. 从 Web UI 导入数据(见下方 `使用(Web 导入)`)。 5. 运行分析和导出。 6. 使用 `Ctrl+C` 停止所有服务。 ## 使用(Web 导入) 将文档截图存储在 `docs/images/` 下,以保持项目根目录整洁。 ### EVTX Parser (EventLogParser) 导入流程 1. 打开 `http://localhost:3000`。 2. 转到 `Ingest`。 3. 在 `EVTX folder path` 中,输入您的 EVTX 目录(例如 `event_log` 或绝对路径)。 4. 点击 `List`。 5. 从表中选择一个或多个文件。 6. 点击 `Ingest Selected`。 7. 导入完成后,转至 `Events`、`Search`、`Timeline` 或 `Detections`。 ### Log Parser 导入流程 1. 打开 `http://localhost:8800`。 2. 在 `Root path` 中,输入包含日志文件的目录。 3. 可选设置关键词、排除项、状态/IP 过滤器和页面大小。 4. 点击 `Search` 以解析并加载结果。 5. 如需检测,打开 `Detection`,提供/选择规则,然后运行检测。 ## URL - 落地页:`http://localhost:8899` - Event Parser UI:`http://localhost:3000` - Event Parser API:`http://localhost:8080` - Log Parser UI/API:`http://localhost:8800` - Log Parser 健康检查:`http://localhost:8800/healthz` ## 环境变量 由 `start.sh` 支持: - `AUTO_KILL_PORTS` - `0`(默认):当所需端口在使用中时失败 - `1`:终止所需端口上的现有监听器并继续 - `STARTUP_TIMEOUT_SECS` - 启动等待超时 - `RUST_LOG` - Rust 日志级别 - `EVTX_DB_PATH` - Event parser DB 文件路径 - `NEXT_PUBLIC_API_BASE` - Event frontend API 基础 URL - `BIND_ADDRESS` - Log Parser 绑定地址 ## 故障排除 ### 端口已被占用 运行: ``` AUTO_KILL_PORTS=1 ./start.sh ``` ### 服务在启动期间失败 检查运行时日志: ``` tail -n 120 logs/event_backend.log tail -n 120 logs/event_frontend.log tail -n 120 logs/log_parser.log tail -n 120 logs/landing.log ``` ### Event Frontend 依赖项问题 ``` cd apps/EventLogParser/web npm ci ``` ### 首次运行缓慢 首次运行时预期会出现: - Rust 编译 - Node package 安装 如有需要,使用更长的超时时间: ``` STARTUP_TIMEOUT_SECS=1200 ./start.sh ```
标签:AMSI绕过, EVTX解析, LogParser, MITM代理, SQLite, Web界面, Windows事件日志, YAML规则, 全文搜索, 取证套件, 可视化界面, 多线程处理, 威胁检测, 子域名变形, 安全运营, 库, 应急响应, 应用安全, 快速分类, 扫描框架, 数字取证, 日志检索, 时间线重构, 本地部署, 案件报告, 自动化脚本, 逆向工具, 通知系统