X-Abhishek-X/forensic-timeline-builder

GitHub: X-Abhishek-X/forensic-timeline-builder

基于Python的跨平台日志取证分析工具,支持SSH远程收集、多格式日志解析并生成统一时间线报告

Stars: 0 | Forks: 0

# 🔍 取证时间线构建器 一个基于 Python 的综合取证分析工具,可以从多个来源(本地和远程)收集日志,将其标准化为统一的时间线,并生成多种输出格式以供分析。 ![Python Version](https://img.shields.io/badge/python-3.11+-blue.svg) ![License](https://img.shields.io/badge/license-MIT-green.svg) ## 📋 目录 - [概述](#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界面, 上游代理, 协议分析, 威胁检测, 开源, 无后门, 日志管道, 日志聚合, 时间线构建, 暴力破解, 权限提升, 网络安全, 脆弱性评估, 逆向工具, 速率限制, 隐私保护