yuvikapoorDFIR/WebTrail

GitHub: yuvikapoorDFIR/WebTrail

WebTrail 是一款面向 BEC 事件响应的浏览器历史取证桌面工具,可从 8 款主流浏览器中提取历史记录并利用内置 130+ 条 IOC 规则自动分析凭据钓鱼、OAuth 滥用等威胁行为。

Stars: 0 | Forks: 0

webtrail_banner # WebTrail **用于商业电子邮件入侵调查的浏览器历史记录取证工具** [![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=flat-square&logo=python&logoColor=white)](https://python.org) [![License](https://img.shields.io/badge/License-Apache%202.0-blue?style=flat-square)](LICENSE) [![Platform](https://img.shields.io/badge/Platform-Windows-lightgrey?style=flat-square)]() [![DFIR](https://img.shields.io/badge/Use%20Case-DFIR%20%7C%20BEC-E95555?style=flat-square)]() [![Author](https://img.shields.io/badge/Author-Yuvi%20Kapoor-2EAD7A?style=flat-square)](https://linkedin.com/in/yuvi-kapoor-5a38581a5)
## 概述 **WebTrail** 是一款桌面 DFIR 工具,用于在处理商业电子邮件入侵 (BEC) 和勒索软件事件期间,从受损终端中提取和分析浏览器历史记录。只需将任何受支持浏览器的原始浏览器 `History` 或 `places.sqlite` 文件拖入其中,即可在几秒钟内获得清晰、可搜索、专供调查人员使用的视图——其内置的 BEC IOC 分析引擎可自动标记凭据钓鱼基础设施、OAuth 滥用、文件窃取、金融门户和电子签名活动,覆盖 20 多个规则类别。 WebTrail 直接从 SQLite 历史记录数据库中读取数据,而不会触及实时浏览器进程,通过安全的“读取前复制”机制处理锁定文件,并根据文件路径和 schema 自动检测浏览器类型。 由 [Yuvi Kapoor](https://linkedin.com/in/yuvi-kapoor-5a38521a5) 构建 ## 截图 WebTrail Screenshot 1 WebTrail Screenshot 2 ## 功能特性 - **多浏览器支持** — 原生读取 Chrome、Edge、Firefox、Brave、Opera、Vivaldi、Safari (macOS) 和 Yandex 历史记录文件 - **安全文件读取** — 在读取前将数据库复制到临时位置;适用于来自实时系统的锁定文件 - **自动检测** — 根据 SQLite schema(`moz_places` 检查)识别 Firefox 或 Chromium 格式,并根据文件路径猜测浏览器名称 - **多配置文件扫描** — 自动发现浏览器 `User Data` 文件夹中的每个配置文件目录(`Default`、`Profile 1`、`Profile 2` 等) - **BEC IOC 分析引擎** — 20 个规则类别,130+ 种模式;标记 Microsoft Auth 滥用、OAuth 设备代码钓鱼、AiTM/PhaaS 基础设施、电子签名平台、文件共享、银行门户、URL 缩短器、Cloudflare Workers、Ngrok、PhaaS 套件字符串等 - **严重性分类** — 四级系统(严重 / 高 / 中 / 信息),每次发现均带有颜色编码 - **Excel 风格的多列排序** — 单击可循环切换升序/降序/不排序;Shift+单击可添加次要和第三排序键,并在标题中显示优先级编号 - **日期过滤器** — 五种模式:所有时间、最近 N 天、晚于、早于、介于 — 格式均为 DD/MM/YYYY - **实时快速过滤** — 跨 URL、标题、浏览器、配置文件和访问类型进行文本搜索,具有 150ms 的防抖机制 - **分块渲染** — 表格以 500 行为一批进行填充;无论数据集大小如何,首批结果都会立即显示 - **预缓存时间戳** — `fmt_dt` 在加载时每行只运行一次,而不是在每次渲染时运行 - **导出** — CSV、TSV、JSON 和自包含的样式化 HTML;BEC 发现结果可单独导出为 CSV - **“无效”日期处理** — 损坏的、超出范围(2000 年之前 / 2035 年之后)或零纪元的时间戳将显示为 `Not valid`,而不是乱码值 ## BEC IOC 规则覆盖范围 | 类别 | 严重性 | 示例 | |---|---|---| | **Microsoft Auth — OAuth / 同意授权** | 严重 | `login.microsoftonline.com/common/oauth2`, `login.live.com/oauth20` | | **OAuth 设备代码钓鱼** | 严重 | `microsoft.com/devicelogin`, `oauth2/deviceauth` | | **Microsoft 登录门户** | 严重 | `login.microsoftonline.com`, `login.live.com` | | **已知 PhaaS 套件指标** | 严重 | `mamba2fa`, `tycoon2fa`, `evilproxy`, `eviltokens` | | **Okta 登录 — 非 Okta 域名** | 严重 | `okta-login.`, `login-okta.`, `/okta/signin` | | **Cloudflare Workers (AiTM 代理)** | 严重 | `*.workers.dev/` | | **钓鱼基础设施 — 域名仿冒** | 高 | `microsoftonline-login.`, `0ffice365.`, `mlcrosoft.` | | **EvilGinx / AiTM 指标** | 高 | `microsoft-online.`, `microsoftonlne.`, `0utlook.` | | **Ngrok / 隧道服务** | 高 | `ngrok.io`, `ngrok-free.app`, `trycloudflare.com` | | **Railway.app 托管** | 高 | `railway.app` | | **Milanote LOTS 诱饵** | 高 | `milanote.com/m/`, `milanote.com/plan/` | | **Adobe Acrobat 分享链接** | 高 | `acrobat.adobe.com/id/urn:`, `/link/share` | | **URL 缩短器** | 严重 | `bit.ly/`, `tinyurl.com/`, `rb.gy/`, `cutt.ly/` | | **DocuSign** | 严重 | `docusign.com`, `docusign.net`, `na3.docusign.net` | | **Adobe Sign / HelloSign** | 高 | `adobesign.com`, `hellosign.com`, `dropboxsign.com` | | **SharePoint / OneDrive** | 高 | `-my.sharepoint.com`, `onedrive.live.com`, `1drv.ms` | | **Outlook / OWA** | 高 | `outlook.office365.com`, `mail.office365.com`, `owa/` | | **Azure AD / Entra 管理员** | 高 | `portal.azure.com`, `entra.microsoft.com` | | **文件共享** | 高 | `wetransfer.com`, `dropbox.com/s/`, `drive.google.com` | | **银行门户** | 严重 | CommBank, NAB, Westpac, ANZ, HSBC, Chase, PayPal | | **电汇 / 支付** | 严重 | `wise.com/send`, `remitly.com`, 银行转账 URL | | **礼品卡套现** | 高 | `apple.com/shop/buy-giftcard`, `amazon.com/gift-cards/buy` | | **非企业 Webmail** | 高 | Gmail, ProtonMail, Tutanota, `temp-mail.org`, Mailinator | | **远程访问工具** | 高 | AnyDesk, TeamViewer, ScreenConnect, LogMeIn | | **加密货币交易所** | 高 | Coinbase, Binance, Kraken, Crypto.com, Bybit | | **Microsoft Forms 钓鱼诱饵** | 高 | `forms.office.com/pages/responsepage`, `forms.office.com/r/` | | **Slack 钓鱼重定向** | 高 | `/slack/connection/`, `/integration/payroll/` | | **直接 IP 访问** | 高 | `http(s)://x.x.x.x` — 正则表达式匹配,无主机名 | | **可疑 TLD** | 中 | `.xyz/`, `.top/`, `.icu/`, `.work/`, `.online/` | | **协作 / 数据暂存** | 中 | `notion.so`, `pastebin.com`, `gist.github.com` | ## 支持的浏览器 | 浏览器 | 格式 | 配置文件 | |---|---|---| | **Google Chrome** | Chromium SQLite | 自动发现所有配置文件 | | **Microsoft Edge** | Chromium SQLite | 自动发现所有配置文件 | | **Brave** | Chromium SQLite | 自动发现所有配置文件 | | **Opera** | Chromium SQLite (扁平布局) | 单一配置文件 | | **Vivaldi** | Chromium SQLite | 自动发现所有配置文件 | | **Yandex Browser** | Chromium SQLite | 自动发现所有配置文件 | | **Firefox** | Mozilla `places.sqlite` | 自动发现所有配置文件 | | **Safari** | WebKit SQLite | 仅限 macOS | ## 安装说明 ### 1. 安装依赖项 ``` pip install pillow ``` ### 2. 运行 ``` python WebTrail.py ``` 或者,如果 Python 已与 `.py` 文件关联,双击 `WebTrail.py` 即可运行。 **一键启动器 — 在同一文件夹中创建 `run.bat`:** ``` @echo off python WebTrail.py pause ``` ## 使用方法 ### 加载历史记录文件 1. 点击标题栏中的 **📂 打开历史记录文件…** 2. 导航至浏览器的历史记录数据库: | 浏览器 | 路径 | |---|---| | Chrome | `%LOCALAPPDATA%\Google\Chrome\User Data\Default\History` | | Edge | `%LOCALAPPDATA%\Microsoft\Edge\User Data\Default\History` | | Brave | `%LOCALAPPDATA%\BraveSoftware\Brave-Browser\User Data\Default\History` | | Firefox | `%APPDATA%\Mozilla\Firefox\Profiles\\places.sqlite` | | Opera | `%APPDATA%\Opera Software\Opera Stable\History` | | Vivaldi | `%LOCALAPPDATA%\Vivaldi\User Data\Default\History` | | Yandex | `%LOCALAPPDATA%\Yandex\YandexBrowser\User Data\Default\History` | ### 历史记录表 - **单击**列标题可按升序排序;再次单击按降序排序;第三次单击以清除排序 - **Shift+单击**第二个或第三个列可添加辅助排序键——标题中将显示优先级编号 - 在过滤栏中**输入**内容可跨 URL、标题、浏览器、配置文件和访问类型进行搜索 - **右键单击**任意行可执行:在浏览器中打开、复制 URL、复制行、按域名过滤、按浏览器过滤 - **单击**任意行可展开详细面板,显示完整的 URL、标题和元数据 ### 日期过滤器 从侧边栏中选择一种模式: | 模式 | 描述 | |---|---| | 所有时间 | 无日期限制 | | 最近 N 天 | 从现在开始的滚动窗口 — 输入天数 | | 晚于 | 在给定日期 (DD/MM/YYYY) 当天或之后的所有记录 | | 早于 | 直到并包括给定日期的所有记录 | | 介于 | 两个日期之间的包含范围 | 日期过滤器和文本过滤器可叠加——两者同时应用。 ### BEC 分析页面 1. 加载历史记录文件——数据加载完成后,标题栏中的 **🔍 分析** 选项卡将被激活 2. 点击 **🔍 分析** 切换到分析视图 3. 摘要标签一目了然地显示严重 / 高 / 中 / 总发现数 4. 使用严重性过滤按钮或文本搜索来缩小发现范围 5. 点击任意发现卡片可跳转回历史记录表中该确切的行 6. 点击 **📋 导出发现结果 (CSV)** 以保存所有发现结果,包含严重性、类别、标签、URL、时间戳、浏览器和配置文件 ## 输出列 | 列 | 描述 | |---|---| | `Visit Time` | 本地时间戳,格式为 `DD/MM/YYYY HH:MM:SS`;损坏/超出范围的值显示为 `Not valid` | | `URL` | 历史记录数据库中存储的完整 URL | | `Title` | 访问时的页面标题 | | `Browser` | 检测到的浏览器名称 | | `Profile` | 配置文件目录名(`Default`、`Profile 1` 等) | | `Type` | 访问过渡类型:`Typed`、`Link`、`Reload`、`Bookmark`、`Form Submit` 等 | | `Visits` | 此 URL 的总访问次数 | | `Typed` | 直接在地址栏中输入 URL 的次数 | ## 日期处理 WebTrail 在加载时验证每个时间戳: - **Chrome/Edge/Brave/Opera/Vivaldi/Yandex** — 自 1601-01-01 UTC 以来的微秒数(Chromium 纪元) - **Firefox** — 自 1970-01-01 UTC 以来的微秒数(Unix 纪元) - **Safari** — 自 2001-01-01 UTC 以来的秒数(Core Data 纪元) 任何超出 **01/01/2000 — 31/12/2035** 范围的时间戳都被视为损坏,并显示为 `Not valid`。这可以捕获零纪元伪影、未初始化的数据库字段、整数溢出值和部分数据库损坏情况。 ## 导出格式 | 格式 | 内容 | |---|---| | **CSV** | 所有可见(已过滤)行,UTF-8 编码,逗号分隔 | | **TSV** | 所有可见行,制符分隔,便于粘贴到 Excel | | **JSON** | 作为 JSON 数组的所有可见行 | | **HTML** | 自包含的样式化报告,带有可排序的表格,可在任何浏览器中打开 | | **BEC 发现结果 CSV** | 所有 IOC 命中的严重性、类别、标签、URL、标题、时间戳、浏览器、配置文件 | 所有导出均遵循当前激活的过滤器——仅导出当前可见的行。 ## 数据与隐私 ### 哪些数据会离开您的工作站 | 组件 | 外部联系 | 发送的数据 | |---|---|---| | 历史记录解析 | 无 — 完全本地化 | 无 | | BEC IOC 分析 | 无 — 完全本地化 | 无 | | 所有导出 | 无 | 除非您发送文件,否则无 | ### 隐私考虑 浏览器历史记录数据库包含用户访问的每个网站的详细记录——包括身份验证门户、个人通信、金融交易和医疗信息。 | 管辖区 | 法规 | 主要考虑事项 | |---|---|---| | 澳大利亚 | 隐私法 1988 / APPs | 仅收集任务所需的数据;不再需要时予以销毁 | | 欧盟 | GDPR | 适用数据最小化和目的限制原则 | | 英国 | 英国 GDPR / DPA 2018 | 实际操作与欧盟 GDPR 相同 | ## 文件结构 ``` WebTrail/ └── WebTrail.py # Single-file application — parsing engine + BEC IOC rules + GUI └── README.md ``` ## 依赖项 | 包 | 用途 | |---|---| | `tkinter` | GUI 框架 — 包含在标准 Python 中 | | `Pillow` | 浏览器图标渲染 *(可选 — 如果缺失则退回显示彩色圆点)* | ## 作者 **Yuvi Kapoor** 专注于勒索软件和 BEC 事件响应业务。 [![LinkedIn](https://img.shields.io/badge/LinkedIn-Yuvi%20Kapoor-0A66C2?style=flat-square&logo=linkedin)](https://linkedin.com/in/yuvi-kapoor-5a38581a5) ## 许可证 Apache 2.0 — 参见 [LICENSE](LICENSE)
为 DFIR 社区构建
标签:BEC调查, Brave, Chrome, Edge, IOC分析, IP 地址批量处理, OAuth滥用检测, Opera, Python, Safari, SQLite解析, SQL数据库解析, Vivaldi, Windows平台, Yandex, 凭据钓鱼检测, 勒索软件调查, 商业电子邮件入侵, 域渗透, 妥协指标, 威胁情报, 安全分析与可视化, 库, 应急响应, 开发者工具, 数字取证, 数据泄露分析, 无后门, 桌面安全工具, 浏览器历史分析, 火狐浏览器, 电子数据取证, 端点安全, 网络安全, 自动化脚本, 补丁管理, 逆向工具, 隐私保护