gaestu/SurfSifter
GitHub: gaestu/SurfSifter
从 E01/EWF 磁盘镜像中提取并分析浏览器痕迹、缓存媒体和操作系统电子证据的跨平台图形化取证工作站。
Stars: 4 | Forks: 0
# SurfSifter
一个用于分析浏览器痕迹、缓存媒体以及来自磁盘镜像(E01/EWF 格式)的操作系统电子证据的跨平台取证工作站。基于 PySide6 构建,提供原生 GUI 界面,用于在不修改原始证据的情况下进行提取、分析、标记和报告生成。

## 状态
**v0.3.7-beta** — 核心功能已完善,正在积极测试中。[下载预构建版本](https://github.com/gaestu/surfsifter/releases) 或从源码构建。
主要在 Fedora 和 Ubuntu 上进行了测试 —— 在 Windows 上运行尚不稳定 :-) 建议在 Windows 上使用 WSL 运行本应用。
## 功能简介
SurfSifter 是一款取证分流工作站,旨在帮助调查人员:
- **提取** 浏览器痕迹(历史记录、Cookie、缓存等)和图像文件,从 E01 磁盘镜像中提取且不修改证据
- **分析** 通过专用查看器检视恢复的痕迹:按时间顺序浏览 URL,通过感知哈希聚类相似图像,查看浏览器会话,检查系统指标
- **关联** 使用时间线融合(13+ 种痕迹来源)、针对参考列表的 URL 模式匹配,以及基于哈希的文件情报来关联调查结果
- **报告** 通过带有取证截图和标记结果的可定制 PDF 报告输出结果
- **安全浏览** — 所有提取均离线进行;提供可选的沙盒浏览器预览(firejail)用于受控的 URL 检查
专为在任何平台(Linux/macOS/Windows 宿主机)上分析 Windows 证据而设计。
## 可选运行时依赖
- 导出主报告 PDF 需要安装 **WeasyPrint**。
- **Chromium 内核浏览器 131+**(`Chromium`、`Google Chrome`、`Microsoft Edge` 或 `Brave`)在可用时将作为默认的附录 PDF 渲染器,尤其推荐在包含大量图片的附录中使用。
- 如果缺少 Chromium `131+`、不受支持,或在运行时 Chromium 附录渲染失败,在已安装 WeasyPrint 的情况下,附录 PDF 导出将回退到较慢的 WeasyPrint 方案;否则,附录 PDF 导出功能将不可用。
## 快速入门
### 方式 1:Linux 安装脚本(推荐)
无需克隆仓库。直接以单行命令运行安装程序:
```
wget -qO- https://raw.githubusercontent.com/gaestu/surfsifter/main/scripts/install.sh | bash
```
### 升级
标准更新命令:
```
wget -qO- https://raw.githubusercontent.com/gaestu/surfsifter/main/scripts/install.sh | \
bash -s -- --from-release --release-version latest --non-interactive
```
预期输出摘要片段:
```
Install summary:
source: release
()
previous version:
installed version:
```
实用参数标志:
- `--verify-only` 仅检查工具而不安装
- `--dry-run` 仅打印命令而不改变系统
- `--prefix /path` 安装到自定义前缀路径下
- `--bin-source /path/to/binary` 从本地构建产物而不是 release 版本进行安装
### 方式 2:预构建发布版(手动)
从 [Releases 页面](https://github.com/gaestu/surfsifter/releases) 下载:
- **Linux:** 解压并运行 `./surfsifter`
- **Windows:** 运行 `surfsifter.exe`
### 方式 3:从源码安装
```
# Clone repository
git clone https://github.com/gaestu/surfsifter.git
cd surfsifter
# 使用 Poetry 安装(推荐)
poetry install
poetry run surfsifter
# 或使用 pip
pip install -e .
python -m app.main
```
### 入门指南
1. **创建案件** → 文件菜单 → “Open/Create Case” → 选择空目录
2. **添加证据** → 证据 (Evidence) 标签页 → 添加 E01 镜像(自动检测分段文件)
3. **运行提取器** → 提取 (Extraction) 标签页 → 选择所需的提取器 → 开始
4. **查看结果** → 浏览各个标签页(URL、图像、浏览器清单、时间线)
5. **标记与报告** → 标记发现的线索 → 生成 PDF 报告
## 功能特性
### 证据处理
- **只读 E01/EWF 访问** 通过 libewf + pytsk3 实现(不修改证据)
- 支持多分区及自动片段检测
- 集成 SleuthKit 进行文件系统枚举
- 并行提取引擎(在多核系统上提速 3-4 倍)
### 浏览器痕迹提取
**Chromium 系列** (Chrome, Edge, Brave, Opera, Vivaldi — 包括 beta/dev/canary/nightly):
- 历史记录与访问 (transition types, from_visit, visit_duration)
- Cookie (DPAPI 加密检测, SameSite 属性)
- 书签 (文件夹层次结构, 同步元数据)
- 下载 (状态/风险分析, URL 链, 来源页)
- 缓存 (simple cache v2, blockfile legacy, Service Worker caches)
- 会话 (SNSS 标签页状态, 窗口重建, 导航历史)
- 自动填充 (表单数据, 配置文件, 已保存凭证, 信用卡, 搜索引擎)
- 扩展程序 (元数据, 权限风险评分, 主机权限)
- 存储 (Local Storage, Session Storage, IndexedDB 包含 blob 提取)
- 传输安全 (HSTS 预加载, 域名固定)
- 网站图标与常用站点 (图标提取, 页面映射)
- 媒体历史 (播放会话, 来源关联)
- 同步数据 (账号元数据, 已同步设备)
- 权限 (来自 Preferences 的特定站点权限)
**Firefox / Tor Browser**:
- 历史记录与访问 (places.sqlite, frecency, typed input, visit types)
- Cookie (secure/httpOnly 标志, originAttributes, 容器隔离, 隐私浏览)
- 书签 (文件夹层次结构, jsonlz4 备份及 mozLz4 解压)
- 下载 (现代 moz_annos + 旧版 moz_downloads)
- 缓存 (cache2 支持 gzip/brotli/zstd 解压)
- 会话 (sessionstore.jsonlz4, 窗口/标签页状态, 导航历史)
- 自动填充 (表单历史, 已保存凭证, 已删除的表单条目)
- 扩展程序 (extensions.json 风险分类, AMO 元数据)
- 存储 (Local Storage, Session Storage, IndexedDB)
- 权限 (站点权限, 内容偏好设置)
- 网站图标 (图标提取, 页面映射, 旧版 schema 支持)
- 同步数据 (来自 signedInUser.json 的账号元数据, 已同步设备)
- 传输安全 (HSTS 及明文域名)
- Tor 状态 (Tor Browser 特有的链路/守卫节点数据)
**Internet Explorer / Legacy Edge**:
- WebCache (通过 libesedb-python 解析 ESE 数据库:历史记录、下载、缓存元数据)
- Cookie (WebCache 元数据 + 基于文件的 INetCookies 及低完整性级别跟踪)
- 收藏夹 (.url 文件及文件夹层次结构)
- 输入的 URL (注册表 NTUSER.DAT 提取)
- DOM 存储 (WebCache DOMStore 容器 + Edge Legacy DOMStore 文件)
- 标签页恢复 (IE Recovery .dat 文件, Edge 会话数据)
- Legacy Edge container.dat (用于历史/Cookie/存储的 UWP ESE 数据库)
- 阅读列表 (Edge 阅读列表作为书签导入)
**Safari** (实验性):
- History.db 解析
- 二进制 Cookie (需要 `binarycookies`)
- 书签,下载
### 媒体与文件雕刻
- **文件系统镜像:** 从证据中提取带有路径/时间戳上下文、签名验证、MACB 时间戳的图像
- **文件雕刻工具:** foremost 和 scalpel 用于未分配空间的雕刻(速度较慢,单线程)
- **批量提取:** bulk_extractor 用于提取 URL、电子邮件、域名、IP、电话号码、比特币/以太坊地址
- **SwiftBeaver:** 多格式图像雕刻 (JPEG/PNG/GIF/WebP/BMP/TIFF/HEIC/ICO) 和原生支持 E01 的 URL 提取
- **浏览器雕刻:** 深度扫描以雕刻浏览器 SQLite 数据库(历史记录/Cookie)并提取原始 URL
- **图像分析:** 感知哈希 聚类,重复检测,相似性搜索
- **格式支持:** JPEG, PNG, GIF, WebP, BMP, ICO, TIFF, SVG, AVIF, HEIC/HEIF
- **元数据:** EXIF 提取,缩略图生成,稀疏文件检测
### 系统痕迹
- **Windows 注册表** (通过 regipy:系统信息、网络配置文件、启动项、用户活动)
- **Jump Lists** (AutomaticDestinations, CustomDestinations, Recent Items 包含浏览器 URL 提取)
- **平台指纹识别** (操作系统版本,计算机名称,系统标识符)
- **文件列表关联** (SleuthKit fls 生成,FTK/EnCase CSV 导入,哈希/路径/扩展名匹配)
### 分析工具
- **时间线融合**(13+ 种痕迹来源)
- **URL 模式匹配**(针对参考列表的通配符/正则表达式匹配)
- **哈希匹配**(已知文件哈希)
- **文件列表情报**(路径/扩展名匹配)
- **标签管理**(跨痕迹的统一标记)
- **下载管理器**(带有哈希相似性搜索的分页查看器)
### 报告
- **PDF 生成**(通过 Jinja2 + WeasyPrint 的可定制模板)
- **取证截图**(带注释的案件证据捕获)
- **CSV 导出**(按痕迹类型或过滤后的结果导出)
- **审计日志**(只追加的流程记录)
更多细节请查阅 wiki。
## 项目治理
- 安全策略:[SECURITY.md](SECURITY.md)
- 贡献指南:[CONTRIBUTING.md](CONTRIBUTING.md)
- 行为准则:[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
## 系统要求
### 必需依赖
**Linux (Debian/Ubuntu):**
```
sudo apt-get install libewf-dev libtsk-dev build-essential python3-dev \
libpango-1.0-0 libcairo2 libgdk-pixbuf2.0-0 shared-mime-info
```
对于 Ubuntu/Fedora 上的打包二进制文件安装,建议使用:
```
wget -qO- https://raw.githubusercontent.com/gaestu/surfsifter/main/scripts/install.sh | bash
```
安装程序会自动处理发行版软件包的映射和工具验证。
**Python 包**(由 Poetry 自动安装):
- Python ≥3.10, <3.14
- PySide6, pytsk3, libewf-python, Pillow, pillow-heif, imagehash, WeasyPrint, regipy
### 内置 Python 依赖
所有痕迹解析库都会被自动安装:
- brotli, zstandard (Chromium 缓存解压)
- olefile, LnkParse3 (Windows Jump Lists)
- binarycookies (Safari 支持)
- ccl-chromium-reader (浏览器存储数据库)
- libesedb-python (IE/Edge ESE 解析)
- pillow-heif (用于图像缩略图预览的 HEIC/HEIF 解码)
如果缺少 HEIC/HEIF 预览功能,请确认 `pillow-heif` 能否在您的运行时
环境中加载(尤其是带有原生编解码器库的打包构建版本)。
### 外部工具(可选)
会在系统 `PATH` 中自动发现:
- **foremost** — 文件雕刻(图像、文档)
- **scalpel** — 高级文件雕刻
- **bulk_extractor** — URL/电子邮件/加密货币提取
- **swiftbeaver** — 图像雕刻和 URL 提取(原生支持 E01)
- **exiftool** — EXIF 元数据提取
- **firejail** — 浏览器沙盒(安全特性)
工具状态可在(应用程序 GUI 中的)**工具标签页** 中查看。
## 开发
### 测试
```
# Fast test suite(不含 GUI/E01 测试)
poetry run pytest -k "not gui and not e01" -q
# GUI 测试(需要 display server 或 Xvfb)
poetry run pytest -m gui_offscreen
# Full test suite
poetry run pytest
```
**注意:** 由于 PyEWF/PyTSK3 的线程问题,E01 测试可能会发生段错误。在 CI 流水线中请使用 `-k "not e01"`。
### 构建可执行文件
发布版本由 GitHub Actions 工作流(`.github/workflows/release.yml`)处理。
有关 PyInstaller 规范请参见 `packaging/` 目录。
## 架构
```
src/
├── app/ # PySide6 GUI (feature-sliced tabs)
├── core/ # Domain logic (database, evidence access, tools)
├── extractors/ # Modular extraction units (browser, system, media, carvers)
└── reports/ # PDF report generation
```
**核心原则:**
- 提取器绝不导入 GUI 代码
- 通过 helpers 访问数据库(UI 中无原始 SQL)
- 通过 `EvidenceFS` 抽象层访问证据
- 取证可靠性:只追加的审计日志,确定性的输出
详情请参阅 [agents.md](agents.md)。
## 文档
- **用户指南:** `docs/` (计划中)
- **开发者指南:** [agents.md](agents.md)
- **兼容性政策:** `docs/compatibility.md`
- **提取器文档:** `docs/extractors/`
- **参考列表:** `reference_lists/` (URL/哈希/文件匹配模式)
- **合规信息:** `docs/compliance/` (许可证,第三方声明)
## 许可证
Apache-2.0 — 详情请见 [LICENSE](LICENSE)。
第三方依赖列表详见 `docs/compliance/LICENSES.md`。标签:E01镜像, EWF镜像, PDF报告, PySide6, Python, Triage工作站, 司法鉴定, 图片聚类, 域渗透, 库, 应急响应, 感知哈希, 数字取证, 无后门, 无损提取, 沙箱分析, 浏览器取证, 电子数据取证, 痕迹分析, 磁盘取证, 离线分析, 缓存分析, 网络安全, 自动化脚本, 身份验证滥用, 逆向工具, 隐私保护