BlackNinjaKR/Forensic-Acquisition-Toolkit

GitHub: BlackNinjaKR/Forensic-Acquisition-Toolkit

一款跨平台模块化数字取证工具,支持磁盘位流镜像和 Android 逻辑采集,具备完整的完整性验证与监管链日志功能。

Stars: 1 | Forks: 0

# 取证获取工具包 ### 磁盘位流镜像 + Android 逻辑 (ADB) 采集 一个跨平台的取证获取框架,支持: - **物理磁盘位流镜像 (.dd)** - **通过 ADB 进行 Android 逻辑获取** - **结构化日志、元数据捕获和 SHA-256 完整性验证** **许可证:** MIT | **平台:** Windows, Linux, macOS | **目标用户**:数字取证学生、研究人员、事件响应人员 ## 目录 - [概述](#overview) - [主要功能](#key-features) - [系统要求](#system-requirements) - [安装](#installation) - [使用说明](#usage) - [工作原理](#how-it-works) - [取证完整性](#forensic-integrity) - [法律与合规](#legal--compliance) - [架构](#architecture) - [故障排除](#troubleshooting) - [贡献指南](#contributing) ## 概述 **Forensic Acquisition Toolkit** 是一款教育性质的数字取证获取工具,专为以下人员设计: - **执法人员** - 符合监管链要求的证据收集 - **事件响应人员** - 快速获取受损系统 - **数字调查员** - 法庭可采信的取证镜像 - **安全研究人员** - 低成本、便携式镜像解决方案 本项目提供了一个模块化的获取框架,专为数字取证领域的研究和教育用途而设计。 它支持两种获取模式: - 物理磁盘镜像 (位流 Bitstream) - Android 逻辑采集 (基于 ADB) 该框架强调: - 透明的日志记录 - 加密完整性验证 (SHA-256) - 可复现性 - 明确的获取模式文档 它不能替代经过验证的商业取证套件,而是作为一个研究级、低成本的获取平台。 ### 为什么使用这个工具? | 特性 | 优势 | |---------|---------| | **原始扇区级镜像** | 捕获已删除数据、松散空间 (Slack Space)、未分配扇区 | | **SHA-256 哈希验证** | 证明镜像完整性并检测篡改 | | **跨平台支持** | Windows, Linux, macOS 兼容 | | **监管链日志** | 法庭可采信的审计追踪 | | **设备元数据收集** | 用于证据文档的硬件识别 | | **便携且低成本** | 可在 Raspberry Pi 或标准计算机上运行 | | **支持写保护器** | 设计用于集成硬件写保护器 | ## 主要功能 ### 1. **取证镜像获取** - 对存储设备执行原始的、逐扇区镜像 - 读取整个设备,包括: - 所有磁盘部分(已分配 + 未分配) - 已删除文件和恢复残留物 - 分区表和隐藏分区 - 松散空间 (Slack Space) 和系统元数据 - 可配置的块大小(默认:1 MB) - 实时进度报告 ### 2. **加密哈希验证** - 计算以下对象的 SHA-256 哈希: - 源设备(镜像前) - 镜像文件(镜像后) - 自动哈希比对 - 检测损坏或篡改 - 法庭可采信的完整性证明 ### 3. **监管链日志** - 带有时间戳的获取日志 - 操作员身份追踪 - 设备识别 - 获取参数文档 - 自动日志隔离和归档 ### 4. **设备元数据收集** - **Linux**: `udevadm` + `lsblk` 集成 - **Windows**: WMI (Windows Management Instrumentation) 查询 - **macOS**: `system_profiler` 集成 - 捕获: - 设备制造商和型号 - 序列号(唯一设备 ID) - 固件版本 - 接口类型 (USB/SATA/NVMe) - 存储容量 ### 5. **跨平台兼容性** - **Windows**: 使用原始设备路径 (`\\.\E:`) - **Linux**: 使用 `/dev/` 设备节点 - **macOS**: 使用原始磁盘设备 (`/dev/rdiskX`) - 自动 OS 检测和路径解析 ### 6. **专业元数据存储** - 主机信息(主机名、用户名、OS 详情) - 获取时间线(开始、结束、持续时间) - 设备信息(大小、挂载点) - 系统能力(处理器、机器类型) - 存储统计(前/后可用空间) ## 系统要求 ### 最低要求 - **OS**: Windows 10+, Ubuntu 18.04+, macOS 10.14+ - **Python**: 3.7 或更高版本 - **RAM**: 2 GB - **磁盘空间**: 最少 10 GB 可用空间(取决于设备大小 + 5 GB 缓冲) - **权限**: 管理员 (Windows) 或 Root (Linux/macOS) ### 可选硬件 - **写保护器**: 硬件写保护器设备(建议用于取证可靠性) - **外置 SSD**: 用于高速镜像存储 - **Raspberry Pi**: 用于便携式获取工作站 ## 安装 ### 步骤 1:克隆仓库 ``` git clone https://github.com/BlackNinjaKR/Pi-Forensic-Imager.git cd Pi-Forensic-Imager ``` ### 步骤 2:安装依赖 ``` pip install -r requirements.txt ``` ### 步骤 3:验证安装 ``` python -c "import psutil, hashlib, logging; print('Dependencies OK')" ``` ### 步骤 4:验证平台工具 **Linux/macOS:** ``` which udevadm lsblk system_profiler # Check if tools exist ``` **Windows:** ``` wmic os get version # Check WMIC availability ``` ## 使用说明 ### 获取模式 #### 1. 物理磁盘位流镜像 对存储设备执行逐扇区获取。 **功能** - 原始设备访问 - 顺序块读取(可配置块大小) - SHA-256 哈希 - 元数据文件生成 - 带时间戳的监管链日志 - 跨平台设备处理 **捕获内容** - 已分配和未分配扇区 - 已删除数据残留 - 分区表 - 松散空间 (Slack Space) - 隐藏分区 **输出产物** ``` image_YYYYMMDD_HHMMSS.dd image_YYYYMMDD_HHMMSS.dd.meta Logs/YYYYMMDD_HHMMSS_forensic_imager.log ``` **完整性模型** - 镜像文件的 SHA-256 哈希 - 可选设备哈希验证 - 记录获取持续时间和大小 - 完整的获取元数据 #### 2. Android 逻辑获取 (ADB 模式) 使用 Android Debug Bridge (ADB) 从 Android 设备执行逻辑数据收集。 除非具有 root 级别访问权限,否则这不是物理获取。 **要求** - adb 已安装并在 PATH 中可用 - 设备上已启用 USB 调试 - 设备已授权 - 设备已解锁(对于大多数操作) **Android 采集模块** `extract.py` – 完整逻辑采集 执行扩展的基于 ADB 的获取。 **收集的产物** | 类别 | 示例命令 | |----------|------------------| | 系统属性 | `adb shell getprop` | | 电池 | `dumpsys battery` | | CPU | `dumpsys cpuinfo` | | 连接性 | `dumpsys connectivity, ip addr` | | 使用统计 | `dumpsys usagestats` | | 已安装应用 | `pm list packages -f` | | 包详情 | `dumpsys package ` | | 服务与活动 | `dumpsys activity` | | 账户 | `dumpsys account` | | 联系人 | `content query content://contacts/phones/` | | 通话记录 | `content query content://call_log/calls` | | 短信 | `content query content://sms/` | | 日志 | `logcat -d -t 1000` | | 完整 Bugreport | `bugreport` / `bugreportz` | | 媒体文件 | `adb pull /sdcard/DCIM` | **输出布局** ``` ADB_Report_YYYYMMDD_HHMMSS/ device_info.txt dumpsys_battery.txt packages.txt logcat_snapshot.txt pulled_files/ summary.txt ``` 由于大小和运行时间原因,Bugreport 在后台线程中执行。 `dump_adb.py` – 快速取证采集 轻量级、快速的 Android 状态捕获。 专为快速取证 (Triage) 场景设计。 **收集的数据** - `getprop` - `dumpsys battery` - `dumpsys cpuinfo` - `pm list packages` - 短 logcat 快照 - 选定的 content 查询(如果允许) 不会等待完整的 bugreport。 ### 使用示例 **磁盘镜像** ``` python Notebook/Forensic_Imager.ipynb # 或 jupyter notebook Notebook/Forensic_Imager.ipynb ``` **Android 完整提取** ``` python extract.py --device --output ./ADB_Report ``` **Android 快速取证模式** ``` python dump_adb.py --device --output ./ADB_Report ``` ## 工作原理 ### 获取流程 ``` ┌─────────────────────────────────────────────────────┐ │ 1. Device Detection (psutil.disk_partitions) │ │ - Enumerate all connected storage devices │ │ - Filter out system partitions (C:\\, /, etc.) │ └──────────────────┬──────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────┐ │ 2. User Selection & Validation │ │ - User chooses target device │ │ - Verify sufficient free space │ │ - Check write permissions │ └──────────────────┬──────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────┐ │ 3. Raw Device Path Resolution │ │ - Windows: \\\\.\\E: (raw device path) │ │ - Linux: /dev/sdb1 (via df command) │ │ - macOS: /dev/rdisk2s1 (raw disk) │ └──────────────────┬──────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────┐ │ 4. Sector-by-Sector Reading (1 MB chunks) │ │ - Open raw device in binary mode │ │ - Read 1 MB blocks sequentially │ │ - Write each block to image file │ │ - Display live progress │ └──────────────────┬──────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────┐ │ 5. Hash Computation (SHA-256) │ │ - Device hash (sector-by-sector read) │ │ - Image hash (file verification) │ │ - Compare for integrity proof │ └──────────────────┬──────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────┐ │ 6. Metadata & Logging │ │ - Device info (manufacturer, serial, model) │ │ - Acquisition metadata (.meta file) │ │ - Chain-of-custody logs │ │ - Timestamped audit trail │ └─────────────────────────────────────────────────────┘ ``` ### 文件输出 镜像完成后,将生成三个文件: 1. **`.dd` 镜像文件** (取证镜像) - 设备的原始逐扇区副本 - 无压缩,无修改 - 可使用取证工具(EnCase, FTK 等)进行分析 2. **`.dd.meta` 元数据文件** (获取记录) Acquisition Tool: PyForensic Imager v1.0 Hostname: investigator-pc Username: admin Device Name: /dev/sdb Device Size (Bytes): 15728640000 SHA256: a3f7e9d2c4b1e8f6... Acquisition Start: 20251129_143022 Acquisition Duration (secs): 450.5 ... 3. **`.log` 文件** (监管链) - 带时间戳的操作日志 - 法庭可采信 - 示例:`Logs/20251129_143022_forensic_imager.log` ## 取证完整性 ### 哈希验证流程 ``` # 设备 hash (逐扇区读取) Device SHA-256: a3f7e9d2c4b1e8f6... # 镜像文件 hash Image SHA-256: a3f7e9d2c4b1e8f6... # 比较 Match? ✓ YES → Image is an exact copy of the source device ✗ NO → Image is corrupted or incompletely acquired ``` ### 哈希验证证明了什么 | 场景 | 哈希匹配 | 结论 | |----------|-----------|------------| | 成功镜像 | ✓ 是 | 镜像是设备的精确副本 | | 数据损坏 | ✗ 否 | 检测到镜像错误 | | 篡改 | ✗ 否 | 检测到证据污染 | | 获取不完整 | ✗ 否 | 设备读取中断 | ### 为什么这很重要 根据 **Daubert 标准**: 1. **哈希验证在数字取证中被科学接受** 2. **它是可复现的** - 同一设备 + 同一过程 = 同一哈希 3. **法庭将其认可为完整性证明** - 法庭广泛接受加密哈希验证作为标准的取证实践,但其可靠性仍可在证词中接受审查。哈希支持完整性主张,但并不能使证据免受法律审查。 4. **在许多司法管辖区,这是法律要求** 用于证据的可采性 ## 法律与合规 ### 监管链要求 此工具通过以下方式维护取证完整性: | 要求 | 实现 | |-------------|-----------------| | **时间戳日志** | 每个操作都记录有精确的时间戳 | | **操作员身份** | 用户名、主机名和用户信息 | | **设备识别** | 序列号、型号、制造商 | | **完整性证明** | SHA-256 哈希验证 | | **审计追踪** | `.log` 文件中的完整操作历史 | | **元数据存储** | 包含所有获取详细信息的独立 `.meta` 文件 | ### 法律原则 此工具遵守以下取证标准: 1. **真实性与完整性** - 哈希验证证明无修改 2. **可复现性** - 同一设备/程序 = 同一结果 3. **证据处理** - 在副本上分析,而非原件 4. **文档记录** - 用于法庭展示的完整日志 5. **监管链** - 可追溯的所有权和处理过程 6. **写保护器支持** - 兼容硬件写保护器 ### 适用标准 - **SWGDE** (数字证据科学工作组) - **NIST SP 800-86** (整合取证技术指南) - **ISO/IEC 27037** (数字证据) - **Daubert 标准** (美国法庭证据的可采性) ## 架构 ### 系统组件 ``` ┌────────────────────────────────────────────────────────┐ │ Forensic_Imager.ipynb (Main) │ │ - Device detection & listing │ │ - User interface & validation │ │ - Imaging orchestration │ └────────────────────────────────────────────────────────┘ ↓ ↓ ↓ ┌────────┐ ┌─────────┐ ┌─────────────┐ │ image_ │ │ sha256_ │ │ write_ │ │ device │ │ file() │ │ metadata() │ └────────┘ └─────────┘ └─────────────┘ ↓ ↓ ↓ ┌─────────────────────────────────────────────────┐ │ Cross-Platform OS Abstraction Layer │ │ - Windows: Raw device paths (\\.\\E:) │ │ - Linux: /dev/ nodes + df command │ │ - macOS: /dev/rdisk + system_profiler │ └─────────────────────────────────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ Logging & Audit Trail │ │ - Timestamped operation logs │ │ - Chain-of-custody records │ │ - Error handling & reporting │ └──────────────────────────────────────┘ ``` ### 模块细分 | 模块 | 用途 | |--------|---------| | `Forensic_Imager.ipynb` | 主镜像工作流 | | `device_metadata.py` | 特定于 OS 的元数据收集 | | `Logs/` | 监管链审计追踪 | ### 关键函数 ``` # 设备发现 list_all_devices() # Enumerate connected storage # 设备信息 get_raw_device_path(mount) # Resolve hardware device path get_device_size(device) # Calculate device capacity get_device_metadata(device) # Collect hardware info # 成像 & Hashing image_device(mount, output) # Perform sector imaging sha256_file(path) # Hash file sha256_device(path) # Hash device # 验证 & 日志记录 verify_image_integrity(mount, image) # Compare hashes write_metadata(path, info) # Store acquisition metadata ``` ## 故障排除 ### 问题:Linux/macOS 上 "Permission denied" (权限被拒绝) **原因:** 访问原始设备需要 root/管理员权限 **解决方案:** ``` sudo python Notebook/Forensic_Imager.ipynb ``` 或者为特定命令配置 `sudoers`: ``` sudo visudo # 添加: %forensics ALL=(ALL) NOPASSWD: /usr/bin/python3 ``` ### 问题:找不到可移动设备 **原因:** 设备未挂载或未被检测到 **解决方案:** ``` # Linux: 检查已连接设备 lsblk df -h # Windows: 在磁盘管理中检查 diskpart > list disk # macOS: 在系统信息中检查 system_profiler SPUSBDataType ``` ### 问题:磁盘空间不足 **原因:** 可用空间不足(需要 device_size + 5GB 缓冲) **解决方案:** 1. 释放输出目录的空间 2. 使用具有更大容量的外置 SSD 3. 减少并发操作的数量 ### 问题:哈希验证失败 (不匹配) **原因:** 镜像错误、设备断开连接或损坏 **解决方案:** 1. 查设备连接 2. 验证在镜像期间未对设备进行写入操作 3. 使用硬件写保护器 4. 在不同的 USB 端口上重试镜像 5. 使用 `SMART` 诊断测试设备 ``` # Linux: 检查设备健康状况 sudo smartctl -a /dev/sdb # Windows: 检查磁盘状态 wmic logicaldisk get name,size,freespace ``` ### 问题:镜像速度慢 **原因:** USB 2.0 设备、系统负载或存储缓慢 **解决方案:** 1. 使用 USB 3.0/3.1 设备和端口 2. 关闭不必要的应用程序 3. 减少系统后台进程 4. 使用外置 SSD 进行输出 5. 检查设备是否有坏道 ## 贡献指南 ### 指引 1. **Fork** 本仓库 2. **创建** 一个特性分支 (`git checkout -b feature/improvement`) 3. **进行更改** 并附上清晰的提交信息 4. 在 Windows, Linux 和 macOS 上**测试** 5. **提交** Pull Request ### 开发设置 ``` # 克隆并以开发模式安装 git clone https://github.com/BlackNinjaKR/Pi-Forensic-Imager.git cd Pi-Forensic-Imager pip install -r requirements.txt ``` ### 测试 ``` # 使用测试设备运行 (需要 setup) python Notebook/Forensic_Imager.ipynb ``` ### 报告问题 报告 Bug 时,请包含: - OS 和版本 - Python 版本 - 设备类型(USB 驱动器、外置 SSD 等) - 错误信息和日志 - 重现步骤 ## 许可证 MIT 许可证 - 详见 LICENSE 文件 ## 免责声明 此工具专为授权人员进行合法的数字取证调查而设计。用户必须遵守其所在司法管辖区适用的所有法律和法规。未经授权访问设备是非法的。 **监管链合规性:** 此工具提供日志记录和元数据收集。但是,用户有责任根据法律要求维护适当的监管链程序和文档。 ## 参考资料 - [NIST SP 800-86: 将取证技术整合到事件响应中的指南](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-86.pdf) - [ISO/IEC 27037:2012 数字证据识别、收集、获取和保存指南](https://www.iso.org/standard/44381.html) - [Daubert 标准 - 证据可采性](https://en.wikipedia.org/wiki/Daubert_standard) **有问题?发现问题?** 创建一个 GitHub issue。
标签:ADB提取, Android取证, DD镜像, HTTP工具, Python, Python安全工具, SHA-256, 取证完整性, 取证工具箱, 司法鉴定, 哈希校验, 域渗透, 库, 应急响应, 数字取证, 数据固定, 数据获取, 无后门, 比特流成像, 电子数据取证, 磁盘镜像, 网络信息收集, 网络犯罪调查, 自动化脚本, 逆向工具, 逻辑取证, 链式保管