Rakeshdash177/Email-Investigation-Dashboard

GitHub: Rakeshdash177/Email-Investigation-Dashboard

基于 Next.js 的 Microsoft 365 安全调查仪表板,通过聚合 Graph API 登录数据、审计日志和收件箱规则来支持 BEC 检测与账户妥协分析。

Stars: 0 | Forks: 0

# Email-Investigation-Dashboard # 一个基于 Next.js 的 Microsoft 365 调查仪表板,用于分析用户活动、登录、审计事件和收件箱规则,以支持安全调查和 BEC 检测。 # BEC 调查仪表板 一个用于跨 Microsoft 365 租户调查疑似商业电子邮件妥协 (BEC) 事件的本地工具: 添加一个租户(一次性管理员同意),选择一个用户,选择一个回溯时间窗口,即可获得基于实时 Microsoft Graph 登录和审计数据构建的妥协报告, 外加 AI 生成的叙述性摘要(Claude Fable 5)。 完全通过 `npm run dev` 在您的本地机器上运行。无需部署单独的后端。 ## 1. 一次性设置:Azure AD 应用注册 此应用以自身身份(application permissions、client-credentials 流程)向 Microsoft Graph 进行身份验证,而不是作为交互式用户——这正是它无需您每次登录即可提取您添加的任何租户数据的原因。您需要在自己的租户中注册一次。 1. 前往 [Entra 管理中心](https://entra.microsoft.com) → **Identity** → **Applications** → **App registrations** → **New registration**。 2. 随意命名(例如 "BEC Investigation Dashboard")。 3. 在 **Supported account types** 下,选择 **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant)**。这是必须的——它能让您以后添加其他租户时无需重新注册应用。 4. 在 **Redirect URI** 下,选择平台 **Web** 并输入: http://localhost:3000/api/tenants/consent-callback 5. 点击 **Register**。从概述页面复制 **Application (client) ID**。 6. 前往 **Certificates & secrets** → **New client secret**。立即复制密钥 **value** ——它只会显示一次。 7. 前往 **API permissions** → **Add a permission** → **Microsoft Graph** → **Application permissions**,并添加以下所有权限: - `User.Read.All` - `AuditLog.Read.All` - `Directory.Read.All` - `IdentityRiskyUser.Read.All` - `Policy.Read.All` - `MailboxSettings.Read` — 读取每个用户的实时收件箱规则 - `AuditLogsQuery.Read.All` — Purview 统一审计日志(收件箱规则创建 事件、邮箱删除、SharePoint/OneDrive 下载和删除) 您**无需**在此处为您自己的租户授予管理员同意,除非您也想调查它——应用内的“添加租户”流程会处理每个租户的同意,包括您自己的租户。 ## 2. 本地设置 ``` npm install cp .env.example .env.local ``` 填写 `.env.local`: ``` AZURE_CLIENT_ID= AZURE_CLIENT_SECRET= AZURE_REDIRECT_URI=http://localhost:3000/api/tenants/consent-callback ANTHROPIC_API_KEY= ``` 然后: ``` npm run dev ``` 打开 http://localhost:3000。 ## 3. 添加租户 点击 **Add Tenant**,输入租户的已验证域名(例如 `contoso.com`)或其 Azure AD 租户 ID,然后继续。您将被重定向到 Microsoft,以**该租户的 Global Administrator** 身份登录并批准请求的权限。批准后,Microsoft 会重定向回此应用, 应用会验证授权并将该租户标记为 **Active**。 这是每个租户只需执行一次的步骤——之后,随时从列表中选择它即可。 ## 4. 调查用户 打开一个租户,选择一个用户,并选择一个时间线。报告会立即加载身份层面的证据 (登录、目录审计、风险用户状态)**以及**用户当前的 **收件箱规则**——并对将邮件转发至外部、删除邮件、 将邮件移动到隐藏文件夹或停止规则处理的规则标记危险信号(典型的 BEC 持久化手段)。 对于邮箱/文件数据层面,请在 *Mailbox & Files Audit* 部分点击 **Run audit**。 这将查询 Microsoft Purview 统一审计日志以获取: - **收件箱规则更改事件** —— 规则何时被创建/修改/删除,由谁操作,从哪个 IP (这就是“此规则是何时创建的”答案的来源——实时的规则对象本身 不包含创建时间戳) - **已删除邮件项目** —— 软删除、硬删除以及移动到“已删除邮件”中的项目,包含主题 - **文件下载** —— SharePoint / OneDrive 的 `FileDownloaded` 和同步事件,包含文件路径和 IP - **文件删除** —— 包括回收站阶段 - **批量删除警报** —— 当一小时内发生 ≥ 20 次删除(邮件或文件)时显示红色横幅, 这是账户被接管后销毁证据的常见特征 如果您随后点击 **Generate AI Report**,加载的审计结果和标记的收件箱规则将 包含在 Fable 5 看到的内容中,因此叙述也将涵盖规则、删除和下载。 ## 数据流向 - **租户注册表**(`data/tenants.json`,gitignored):您添加的租户及其 同意状态。不包含任何密钥——仅包含租户 ID/域名。 - **Graph 调用**:按请求在服务端发出,使用范围限定为正在调查的特定租户的 client-credentials token(`@azure/msal-node`)进行身份验证。 - **AI 叙述**:结构化、已通过启发式评估的评分结果(绝不包含原始 token 或 密钥)会被发送到服务端的 `claude-fable-5` 以生成报告的书面摘要部分。 这是每个报告的可选操作——点击 **Generate AI Report**。 ## 已知限制 - 侧边栏的用户列表不会显示每个用户的实时风险徽章(原始的静态数据 原型有此功能)——这需要拉取每个用户的登录历史才能呈现 列表,这对于实时的 Graph 数据来说并不实际。风险评分会在您选择 用户和时间线后出现。 - “偏离基准网络”的检测是根据登录样本本身(选定窗口中最 频繁的位置/IP 前缀)按用户推导出来的,而不是硬编码的家庭网络。在样本非常 少(1-2 次登录)的情况下,这种启发式方法本质上较弱——请将其视为分类筛选,而非确凿证据。 - `IdentityRiskyUser.Read.All` 和 Conditional Access 策略数据取决于租户是否实际 拥有 Entra ID P2 / 相关许可——如果不可用,这些部分会优雅降级, 而不会导致整个报告失败。 - **Purview 审计搜索**要求在租户上启用审计。Microsoft Purview Audit (Standard) 默认对 M365 租户开启,并将记录保留 180 天 (Standard) 或 更长 (Premium) ——但是全新的租户或被禁用审计的租户将不返回任何 记录。此外还存在引入延迟:一个操作可能需要 **30-60+ 分钟** 才能出现在 审计日志中,因此您刚刚创建的规则不会立即在查询中显示。 - **批量删除阈值**是一个固定的启发式规则(≥ 20 次删除/小时)。合法的邮箱 清理可能会触发它;请将横幅视为调查的提示,而非最终定论。 - 收件箱规则**可疑标志**依赖于邮箱确实具有可通过 `MailboxSettings.Read` 读取的规则。共享或未授权的邮箱可能会返回权限/404 错误, 面板会显示此错误,而不是导致整个报告失败。
标签:BEC检测, MITM代理, 安全调查, 微软365, 自动化攻击