X-Abhishek-X/forensic-timeline-builder
GitHub: X-Abhishek-X/forensic-timeline-builder
基于Python的跨平台日志取证分析工具,支持SSH远程收集、多格式日志解析并生成统一时间线报告
Stars: 0 | Forks: 0
# 🔍 取证时间线构建器
一个基于 Python 的综合取证分析工具,可以从多个来源(本地和远程)收集日志,将其标准化为统一的时间线,并生成多种输出格式以供分析。


## 📋 目录
- [概述](#overview)
- [功能特性](#features)
- [架构](#architecture)
- [安装说明](#installation)
- [快速开始](#quick-start)
- [配置](#configuration)
- [使用方法](#usage)
- [输出格式](#output-formats)
- [项目结构](#project-structure)
- [故障排除](#troubleshooting)
- [贡献指南](#contributing)
## 🎯 概述
Forensic Timeline Builder 专为需要以下功能的安全分析师、事件响应人员和取证调查员设计:
- 从多台主机(Windows 和 Linux)收集日志
- 将不同格式的日志标准化为统一的时间线
- 按时间顺序分析跨多个系统的事件
- 生成多种格式(CSV, HTML, PDF)的报告
- 通过 Web 界面可视化时间线
## ✨ 功能特性
### 日志收集
- **SSH/SFTP 支持**:远程收集 Linux/Unix 系统的日志
- **本地文件支持**:处理本地目录中的日志
- **多主机支持**:同时从无限数量的主机收集日志
- **灵活路径**:支持绝对路径和相对路径
### 日志解析
- **Syslog 解析器**:解析标准 Linux syslog 文件
- **Auth.log 解析器**:解析认证日志
- **Windows 事件日志解析器**:解析 Windows EVTX 文件
- **可扩展**:易于为不同的日志格式添加新解析器
### 时间线生成
- **统一时间线**:将所有日志合并为单一的按时间顺序排列的时间线
- **多种格式**:导出为 CSV、HTML 和 PDF
- **时间戳标准化**:将所有时间戳转换为 UTC
- **排序输出**:事件自动按时间戳排序
### Web 界面
- **基于 Flask 的 UI**:在浏览器中查看时间线
- **交互式表格**:浏览和搜索事件
- **实时更新**:刷新以查看最新时间线数据
## 🏗️ 架构
```
graph TD
A[run_all.py] --> B[Collector]
A --> C[Processor]
A --> D[Timeline Builder]
B --> B1[SSH/SFTP Collection]
B --> B2[Local File Collection]
B --> B3[ssh_hosts.json Config]
C --> C1[Syslog Parser]
C --> C2[Auth.log Parser]
C --> C3[EVTX Parser]
C --> C4[Normalizer]
D --> D1[CSV Export]
D --> D2[HTML Export]
D --> D3[PDF Export]
E[Web UI] --> D1
B1 --> F[output/raw_logs]
B2 --> F
F --> C
C --> D
```
## 🚀 安装说明
### 前置条件
- Python 3.11 或更高版本
- pip (Python package manager)
- wkhtmltopdf(用于生成 PDF - 可选)
### 步骤 1:克隆或下载
```
cd forensic-timeline-builder
```
### 步骤 2:安装依赖
```
pip install -r requirements.txt
```
### 已安装的依赖:
- `paramiko` - SSH/SFTP 客户端
- `pandas` - 数据操作和分析
- `matplotlib` - 绘图和可视化
- `Flask` - 用于 UI 的 Web 框架
- `evtx` - Windows 事件日志解析器
- `python-dateutil` - 日期解析工具
- `pdfkit` - PDF 生成
## ⚡ 快速开始
### 1. 配置主机
编辑 `collector/ssh_hosts.json` 以指定要从哪些主机收集日志:
```
[
{
"host": "192.168.1.10",
"user": "admin",
"password": "password",
"paths": ["/var/log/syslog", "/var/log/auth.log"]
},
{
"host": "test.local",
"local_path": ["collector/sample_local_logs/syslog_sample.log"]
}
]
```
### 2. 运行流水线
```
python run_all.py
```
这将:
1. ✅ 从所有配置的主机收集日志
2. ✅ 解析并标准化所有日志文件
3. ✅ 生成 CSV、HTML 和 PDF 格式的时间线
### 3. 查看结果
**选项 A:检查输出文件**
```
# 导航到输出目录
cd output
# 查看文件
dir
```
**选项 B:使用 Web 界面**
```
# 启动 Web 服务器
python webui/app.py
# 打开浏览器访问 http://localhost:8080
```
## ⚙️ 配置
### SSH 主机配置 (`collector/ssh_hosts.json`)
配置文件支持两种类型的条目:
#### 远程 SSH 主机
```
{
"host": "192.168.1.10",
"user": "admin",
"password": "password",
"paths": ["/var/log/syslog", "/var/log/auth.log"]
}
```
#### 本地文件
```
{
"host": "test.local",
"local_path": ["collector/sample_local_logs/syslog_sample.log"]
}
```
### 支持的日志类型
| 日志类型 | 文件模式 | 解析器 | 描述 |
|----------|-------------|--------|-------------|
| Syslog | `*syslog*` | `syslog_parser.py` | 标准 Linux 系统日志 |
| Auth Log | `*auth.log*` | `authlog_parser.py` | 认证日志 |
| Windows Event | `*.evtx` | `windows_evtx_parser.py` | Windows 事件日志 |
## 📖 使用方法
### 运行单个组件
#### 仅收集日志
```
python collector/collect_logs.py
```
#### 仅标准化日志
```
python processor/normalize.py
```
#### 从现有数据生成时间线
```
from processor.normalize import normalize_all
from processor.timeline_builder import build_timeline_csv, build_html, build_pdf
df = normalize_all()
build_timeline_csv(df)
build_html(df)
build_pdf(df)
```
### Web 界面
启动 Flask Web 服务器:
```
python webui/app.py
```
访问时间线地址:`http://localhost:8080`
Web 界面将自动从 `output/final_timeline.csv` 加载最新时间线。
## 📊 输出格式
所有输出文件均保存在 `output/` 目录中:
### 1. CSV 格式 (`final_timeline.csv`)
- 机器可读格式
- 易于导入 Excel、Splunk 或其他工具
- 包含:时间戳、主机、消息、原始日志行
### 2. HTML 格式 (`timeline.html`)
- 人类可读的表格格式
- 可在任意 Web 浏览器中打开
- 可使用浏览器的查找功能进行搜索
### 3. PDF 格式 (`timeline.pdf`)
- 可打印格式
- 包含时间线的可视化
- 适用于报告和文档
### 4. 原始日志 (`raw_logs/`)
- 按主机组织的原始日志文件
- 保留以供参考和重新处理
- 目录结构:`raw_logs//`
## 📁 项目结构
```
forensic-timeline-builder/
│
├── collector/ # Log collection module
│ ├── __init__.py
│ ├── collect_logs.py # Main collection script
│ ├── ssh_hosts.json # Host configuration
│ └── sample_local_logs/ # Sample log files for testing
│ └── syslog_sample.log
│
├── processor/ # Log processing module
│ ├── __init__.py
│ ├── normalize.py # Main normalization script
│ ├── timeline_builder.py # Timeline export functions
│ └── parsers/ # Log format parsers
│ ├── __init__.py
│ ├── syslog_parser.py # Syslog parser
│ ├── authlog_parser.py # Auth.log parser
│ └── windows_evtx_parser.py # Windows EVTX parser
│
├── webui/ # Web interface
│ ├── app.py # Flask application
│ ├── templates/ # HTML templates
│ │ └── timeline.html
│ └── static/ # CSS, JS, images
│ └── style.css
│
├── output/ # Generated output
│ ├── raw_logs/ # Collected raw logs
│ │ └── / # Per-host directories
│ ├── final_timeline.csv # CSV timeline
│ ├── timeline.html # HTML timeline
│ └── timeline.pdf # PDF timeline
│
├── requirements.txt # Python dependencies
├── run_all.py # Main execution script
├── README.md # This file
└── DOCUMENTATION.md # Detailed technical documentation
```
## 🔧 故障排除
### 常见问题
#### 1. ModuleNotFoundError: No module named 'evtx'
**解决方案:**
```
pip install -r requirements.txt
```
#### 2. OSError: Cannot save file into a non-existent directory
**解决方案:** 输出目录结构会自动创建。如果出现此错误,请确保你是从项目根目录运行脚本:
```
cd forensic-timeline-builder
python run_all.py
```
#### 3. SSH 连接超时
**症状:** `[-] SSH connect failed for : timed out`
**解决方案:**
- 验证主机是否可达:`ping `
- 检查防火墙设置
- 验证 `ssh_hosts.json` 中的 SSH 凭据
- 确保目标主机上正在运行 SSH 服务
#### 4. 远程主机权限被拒绝
**解决方案:**
- 验证用户是否拥有日志文件的读取权限
- 尝试使用 sudo 或特权用户
- 检查 `ssh_hosts.json` 中的文件路径
#### 5. 标准化后未发现事件
**可能原因:**
- 未收集到日志
- 无法识别日志格式
- 解析器未能提取事件
**解决方案:**
- 检查 `output/raw_logs/` 以确认日志已收集
- 查看适用于你日志格式的解析器代码
- 检查控制台输出中的解析器错误
### 调试模式
通过修改 `run_all.py` 启用详细输出:
```
import logging
logging.basicConfig(level=logging.DEBUG)
```
## 🤝 贡献指南
### 添加新解析器
1. 在 `processor/parsers/` 中创建一个新的解析器文件:
```
# processor/parsers/my_custom_parser.py
import pandas as pd
def parse_my_log(file_path, host):
events = []
with open(file_path, "r", errors="ignore") as f:
for line in f:
# Parse your log format
events.append({
"timestamp": parsed_timestamp,
"message": parsed_message,
"host": host,
"raw": line.strip()
})
return pd.DataFrame(events)
```
2. 在 `processor/normalize.py` 中注册解析器:
```
from processor.parsers.my_custom_parser import parse_my_log
EXT_MAP = {
"syslog": parse_syslog,
"auth.log": parse_authlog,
"evtx": parse_evtx,
"my_log": parse_my_log # Add your parser
}
```
## 📄 许可证
本项目采用 MIT 许可证授权 - 详情请参阅 LICENSE 文件。
## 🙏 致谢
- 使用 Python 和开源库构建
- 使用 `evtx` 库解析 Windows 事件日志
- 由 `pandas` 驱动数据操作
- Web 界面使用 Flask 构建
## 📞 支持
如有问题、疑问或贡献,请在项目仓库中提交 issue。
**祝取证分析愉快!🔍🔐**
标签:AMSI绕过, CSV导出, DevSecOps, EDR, EVTX, HTML报告, MIT许可, PDF报告, PE 加载器, PoC, Python, SSH, Syslog, Web界面, 上游代理, 协议分析, 威胁检测, 开源, 无后门, 日志管道, 日志聚合, 时间线构建, 暴力破解, 权限提升, 网络安全, 脆弱性评估, 逆向工具, 速率限制, 隐私保护