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
```
### 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规则, 全文搜索, 取证套件, 可视化界面, 多线程处理, 威胁检测, 子域名变形, 安全运营, 库, 应急响应, 应用安全, 快速分类, 扫描框架, 数字取证, 日志检索, 时间线重构, 本地部署, 案件报告, 自动化脚本, 逆向工具, 通知系统