ktx0r/Threat-Hunt-Scattered-Invoice
GitHub: ktx0r/Threat-Hunt-Scattered-Invoice
一个在 Microsoft Sentinel 中利用 KQL 对模拟的 Scattered Spider BEC 攻击进行完整威胁狩猎与溯源的实战案例报告。
Stars: 0 | Forks: 0
# 威胁狩猎:Scattered Spider
### *Microsoft Sentinel / Log Analytics Workspace BEC(商业电子邮件妥协)调查*
| | |
|---|---|
| **环境** | Microsoft Sentinel ---> Log Analytics Workspace |
| **分析师** | *[Katie aka ktx0r]* |
| **狩猎类型** | 假设驱动 / 事件触发 |
| **遥测数据** | `SigninLogs` · `CloudAppEvents` · `EmailEvents` |
| **狩猎窗口** | 2026-02-25 21:00 UTC → 2026-02-26 00:00 UTC |
| **威胁行为者** | Scattered Spider (UNC3944 / Octo Tempest) |
| **结论** | ⚠ 已确认威胁:完整 BEC 攻击链 |
| **财务风险** | £24,500 欺诈性电汇(被外部银行欺诈检测冻结) |
## 目录
1. [执行摘要](#1-executive-summary)
2. [假设与范围](#2-hypothesis--scope)
3. [调查过程](#3-investigation)
4. [攻击时间线](#4-attack-timeline)
5. [已确认的发现](#5-confirmed-findings)
6. [MITRE ATT&CK 映射](#6-mitre-attck-mapping)
7. [检测盲点](#7-detection-gaps)
8. [建议](#8-recommendations)
9. [创建的检测规则](#9-detection-rules-created)
10. [最终评估](#10-final-assessment)
11. [分析师笔记](#11-analyst-notes)
12. [经验教训与下一次狩猎假设](#12-lessons-learned--next-hunt-hypotheses)
13. [证据索引](#13-evidence-index)
## 1. 执行摘要
在此次狩猎中,我调查了一起针对 LogN Pacific Financial Services 财务部门的已确认商业电子邮件妥协(BEC)事件。此次狩猎完全在 Microsoft Sentinel 的 Log Analytics Workspace 中进行,跨越了三个数据源,覆盖了 2026 年 2 月 25 日晚间两个小时的窗口期。
完整的攻击链已被确认,并归因于 **Scattered Spider (UNC3944)**,这是一个以攻击 MGM Resorts、Caesars Entertainment 和多家英国金融机构而闻名的出于经济动机的威胁组织。攻击者利用预先获取的凭证通过推送轰炸绕过了 MFA,通过 Outlook Web 访问了受害者的邮箱,创建了两条隐蔽的收件箱规则以转发财务电子邮件并删除安全警报,随后发送了一封线程劫持的 BEC 电子邮件,导致了一次 **£24,500 的欺诈性电汇尝试**。
从 MFA 批准到发送欺诈电子邮件,整个攻击过程耗时**不到 35 分钟**,并且没有触发任何内部警报。资金之所以被冻结,仅仅是因为外部银行拦截了它。
## 2. 假设与范围
### 假设
### 狩猎触发
此次狩猎是在银行标记了一笔可疑的 £24,500 电汇后启动的。财务部报告称收到了一封来自 Mark Smith 的电子邮件,其中包含更新后的供应商银行详细信息。Smith 确认他前一天晚上不断收到 MFA 推送通知,并批准了其中一次以使其停止。我将调查范围限定在 2026 年 2 月 25 日的 21:00-23:00 UTC 窗口期。
### 数据源
| 来源 | 平台 | 覆盖范围 |
|---|---|---|
| `SigninLogs` | Microsoft Entra ID | 身份验证事件、MFA 状态、设备和位置数据 |
| `CloudAppEvents` | Microsoft Defender for Cloud Apps | 邮箱活动、收件箱规则创建、云应用访问 |
| `EmailEvents` | Microsoft Defender for Office 365 | 电子邮件发送/接收事件、发送者 IP、方向、主题 |
## 3. 调查过程
### 阶段 1:身份确认
我首先确认了银行欺诈警报中提及的用户身份,在 Microsoft Sentinel 的 Log Analytics Workspace 中使用 KQL 查询了 Mark Smith 账户的 `SigninLogs`。我在给定的时间范围内简单搜索了 'mark',结果只显示了一条记录,如下所示。
```
SigninLogs
| where UserDisplayName has "mark"
| distinct UserPrincipalName, UserDisplayName
```

**结果:** 已确认 `m.smith@lognpacific.org`。所有后续查询都围绕此账户和在阶段 2 中识别出的攻击者 IP 展开。
### 阶段 2:身份验证分析
我提取了 Mark 账户在整个攻击窗口期的完整登录历史,并按时间顺序排序。我筛选了与 MFA 疲劳攻击最相关的结果类型:成功验证(`0`)、MFA 未满足(`50074`)和 MFA 中断(`50140`)。
```
SigninLogs
| where UserPrincipalName == "m.smith@lognpacific.org"
| where TimeGenerated between (datetime(2026-02-25T21:00:00Z) .. datetime(2026-02-26T00:00:00Z))
| where ResultType in (0, 50074, 50140)
| project TimeGenerated, IPAddress, Location, ResultType,
AuthenticationRequirement, ConditionalAccessStatus
| order by TimeGenerated asc
```

**结果:** 日志中出现了两个 IP:
- `172.175.65.103` (美国):Mark 合法的白天会话,`ResultType 0`
- `205.147.16.190` (荷兰):攻击者 IP,序列如下:
- `ResultType 50074` x2(需要 MFA,未满足)
- `ResultType 50140` x1(MFA 中断)
- `ResultType 0`(成功验证)
这是一个经典的 MFA 疲劳模式:反复发送推送通知,直到用户批准其中一次。Mark 确认情况正是如此——他的手机不断收到提示,最终为了图清静点击了批准。仅仅这一次点击就赋予了攻击者一个完全经过验证的会话。
成功会话上的 `ConditionalAccessStatus: notApplied` 确认没有评估或执行任何 CA 策略。通俗地说:存在一项安全策略,本应在允许来自未知位置或设备的登录之前要求进行额外的验证。但该策略并未应用到 Mark 的账户上。这就是导致整个妥协事件的根本原因。
```
SigninLogs
| where UserPrincipalName == "m.smith@lognpacific.org"
| where IPAddress == "205.147.16.190"
| where ResultType == 50074
| count
```

**结果:** 在攻击窗口期内,来自攻击者 IP 的 2 × `ResultType 50074`。
### 阶段 3:设备特征分析
我查询了攻击者会话的设备和浏览器详细信息,以确认其并非来自受管理的公司端点。
```
SigninLogs
| where UserPrincipalName == "m.smith@lognpacific.org"
| where IPAddress == "205.147.16.190"
| where ResultType == 0
| project TimeGenerated, UserAgent, DeviceDetail
| take 1
```

**结果:** 该会话来自一台运行 Firefox 147.0 的非托管 Ubuntu Linux 机器——这与 Mark 平时使用的受管理 Windows / Edge 基线完全不同。
通俗地讲:公司发放的每台笔记本电脑上都装有软件,用于将其标识为受信任的设备。而登录 Mark 账户的机器上根本没有这些软件。它看起来完全不像公司曾见过的 Mark 使用过的任何设备。这是一个巨大的危险信号,本应自动阻止该次登录。
| 字段 | 值 |
|---|---|
| 操作系统 | Linux (Ubuntu) |
| 浏览器 | Firefox 147.0 |
| isManaged | false |
| isCompliant | false |
| UserAgent | `Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0` |
一个会话中出现了三个异常信号:异国登录、非托管操作系统、非公司浏览器。但没有针对其中任何一个触发警报。
### 阶段 4:身份验证后活动
我转向 `CloudAppEvents` 并提取了攻击者在获得访问权限后进行的所有操作,按升序排序以按顺序查看事件序列。
```
CloudAppEvents
| where TimeGenerated between (datetime(2026-02-25T21:00:00Z) .. datetime(2026-02-26T00:00:00Z))
| where IPAddress == "205.147.16.190"
| project TimeGenerated, ActionType, AccountDisplayName, ObjectName, RawEventData
| order by TimeGenerated asc
```

**结果:** 完整的身份验证后序列:
| 时间 (UTC) | ActionType | 意义 |
|---|---|---|
| 21:56 | `MailItemsAccessed` | 在进行任何其他操作之前先阅读收件箱 |
| 21:57 | `MailItemsAccessed` | 持续的侦察 |
| 22:02 | `New-InboxRule` | 创建了规则 1(名称:`.`) |
| 22:03 | `New-InboxRule` | 创建了规则 2(名称:`..`) |
| 22:04 | `Create` | 起草欺诈电子邮件 |
| 22:04 | `MailItemsAccessed` | 发送前最后一次检查收件箱 |
| 22:06 | `Send` | 发送 BEC 电子邮件 |
| 22:07 | `FileAccessed` | 访问了 OneDrive 文件 |
| 22:07 | `SignInEvent` | 建立了 SharePoint 会话 |
| 22:07+ | `ListCreated`, `ListColumnCreated` | 修改了 SharePoint/OneDrive 结构 |
| 22:07+ | `Broke sharing inheritance` | 更改了文件共享权限 |
攻击者在建立持久性之前阅读了收件箱——他们需要了解 Mark 的供应商关系和活跃的邮件线程,以使欺诈更具说服力。这种排序是有意的。
### 阶段 5:收件箱规则分析
我展开了两起 `New-InboxRule` 事件的 `RawEventData`,以记录完整的规则配置。
```
CloudAppEvents
| where TimeGenerated between (datetime(2026-02-25T21:00:00Z) .. datetime(2026-02-26T00:00:00Z))
| where IPAddress == "205.147.16.190"
| where ActionType == "New-InboxRule"
| project TimeGenerated, ActionType, ObjectName, RawEventData
| order by TimeGenerated asc
```

**规则 1:财务收集(名称:`.`)**
| 参数 | 值 |
|---|---|
| Name | `.`(单句号) |
| ForwardTo | `insights@duck.com` |
| SubjectOrBodyContainsWords | `invoice, payment, wire, transfer` |
| StopProcessingRules | `True` |
| CreationTime | `2026-02-25T22:02:33Z` |
| SessionId | `00225cfa-a0ff-fb46-a079-5d152fcdf72a` |

**规则 2:安全警报抑制(名称:`..`)**
| 参数 | 值 |
|---|---|
| Name | `..`(双句号) |
| SubjectOrBodyContainsWords | `suspicious, security, phishing, unusual, compromised, verify` |
| DeleteMessage | `True` |
| StopProcessingRules | `True` |
规则 1 将财务邮件转发到攻击者控制的地址。规则 2 在 Mark 看到安全警报邮件之前将其永久删除。这两条规则都使用 `StopProcessingRules: True` 以优先于任何合法规则。
规则名称——`.` 和 `..`——特别值得一提。收件箱规则通常具有描述性名称,例如“将新闻稿移至文件夹”。当您扫描列表时,单个句号基本上是看不见的。它的设计初衷就是为了被忽略。这绝非偶然。
### 阶段 6:欺诈执行
我转向 `EmailEvents` 以查找欺诈性电子邮件,并确认其来自同一个攻击者会话。
```
EmailEvents
| where TimeGenerated between (datetime(2026-02-25T21:00:00Z) .. datetime(2026-02-26T00:00:00Z))
| where SenderIPv4 == "205.147.16.190"
| project TimeGenerated, SenderFromAddress, RecipientEmailAddress,
Subject, EmailDirection, SenderIPv4
```

**结果:**
| 字段 | 值 |
|---|---|
| Timestamp | `2026-02-25T22:06:39Z` |
| Sender | `m.smith@lognpacific.org` |
| Recipient | `j.reynolds@lognpacific.org` |
| Subject | `RE: Invoice #INV-2026-0892 - Updated Banking Details` |
| Direction | `Intra-org` |
| Sender IP | `205.147.16.190` |
`RE:` 前缀确认了线程劫持——攻击者在阶段 4 期间找到了一个活跃的发票对话,并作为回复插入了欺诈性的银行详细信息。`Intra-org` 投递绕过了所有外部电子邮件过滤器。发送者 IP 与攻击者的登录 IP 匹配,确认这来自同一个会话。
除了技术细节之外,`Intra-org` 方向的意义在于:这意味着电子邮件完全在公司自己的电子邮件系统内的两名员工之间传输。所有旨在捕获来自组织外部可疑电子邮件的过滤器(如垃圾邮件过滤器、网络钓鱼检测、发件人信誉检查)都不适用于内部账户之间的邮件。攻击者专门使用被攻陷的内部账户,正是因为它绕过了大多数公司最关注的那一层安全防护。
### 阶段 7:范围扩展
我检查了 `CloudAppEvents` 中是否有对邮箱以外的云存储访问,以评估完整的数据暴露足迹。
```
CloudAppEvents
| where TimeGenerated between (datetime(2026-02-25T21:00:00Z) .. datetime(2026-02-26T00:00:00Z))
| where IPAddress == "205.147.16.190"
| where ActionType != "MailItemsAccessed"
and ActionType != "New-InboxRule"
and ActionType != "Send"
| project TimeGenerated, ActionType, Application, AccountDisplayName, ObjectName
| order by TimeGenerated asc
```

**结果:** 发送欺诈邮件后,攻击者访问了:
- `Microsoft OneDrive for Business`:文件访问、列表创建、共享权限更改
- `Microsoft SharePoint Online`:会话建立、额外的列表活动
`Broke sharing inheritance` 事件表明攻击更改了 OneDrive 项目的文件权限,可能是为了在外部访问而暂存文件。通俗地说:他们不仅阅读了文件,还更改了允许访问这些文件的人员,这是将数据窃取出组织的常见步骤。完整的数据暴露范围需要进行专门的文件访问审计。
### 阶段 8:会话关联
所有三个表中的所有攻击者活动都可以追溯到一个单一的身份验证会话。
**会话 ID:** `00225cfa-a0ff-fb46-a079-5d152fcdf72a`
已在以下位置确认:
- `SigninLogs`:成功的身份验证事件
- `CloudAppEvents`:规则 1 RawEventData 中的 `AppAccessContext.AADSessionId`
- `EmailEvents`:与同一会话相关联
这证实了整个攻击链是由一名操作者在一个会话中完成的。
## 4. 攻击时间线
```
── PRE-COMPROMISE ────────────────────────────────────────────────────────────
[Prior to hunt window]
Infostealer malware harvests credentials for m.smith@lognpacific.org
Credential logs acquired by Scattered Spider operator
── INITIAL ACCESS ────────────────────────────────────────────────────────────
2026-02-25
21:54 UTC MFA push bombing begins from 205.147.16.190 (Netherlands)
21:54-21:58 Two ResultType 50074 + one ResultType 50140 from attacker IP
~21:59 UTC Mark approves MFA prompt, attacker gains authenticated session
OS: Ubuntu Linux / Browser: Firefox 147.0
isManaged: false / isCompliant: false
ConditionalAccessStatus: notApplied
── RECONNAISSANCE ────────────────────────────────────────────────────────────
21:56 UTC First post-auth action: MailItemsAccessed
21:57 UTC Continued mailbox reading, vendor threads and invoice context
── PERSISTENCE ───────────────────────────────────────────────────────────────
22:02 UTC Rule 1 created (name: ".")
Forwards finance-keyword mail to insights@duck.com
StopProcessingRules: True
22:03 UTC Rule 2 created (name: "..")
Permanently deletes security alert emails
DeleteMessage: True / StopProcessingRules: True
── FRAUD EXECUTION ───────────────────────────────────────────────────────────
22:04 UTC Fraud email drafted using intercepted invoice context
22:06 UTC Email sent to j.reynolds@lognpacific.org
Subject: RE: Invoice #INV-2026-0892 - Updated Banking Details
Direction: Intra-org
Sender IP: 205.147.16.190
── SCOPE EXPANSION ───────────────────────────────────────────────────────────
22:07 UTC Microsoft OneDrive for Business accessed
FileAccessed, ListCreated, Broke sharing inheritance
22:07 UTC Microsoft SharePoint Online session established
Session ID: 00225cfa-a0ff-fb46-a079-5d152fcdf72a
── DETECTION & CONTAINMENT ───────────────────────────────────────────────────
2026-02-26 External bank fraud detection flags £24,500 wire transfer
Funds frozen
[Post-event] Hunt initiated, kill chain confirmed across 3 data sources
Sessions revoked, inbox rules deleted, credentials rotated
```
## 5. 已确认的发现
### 发现 1:通过 MFA 疲劳攻击导致账户妥协
| | |
|---|---|
| **严重性** | 🔴 严重 |
| **账户** | `m.smith@lognpacific.org` |
| **攻击者 IP** | `205.147.16.190` (荷兰) |
| **MFA 尝试** | 共 3 次:2x `ResultType 50074`,1x `ResultType 50140` |
| **根本原因** | `ConditionalAccessStatus: notApplied` |
| **证据** | SigninLogs:MFA 失败序列 → ResultType 0 |
攻击者不断生成 MFA 推送通知,直到 Mark 批准了其中一个。尽管同时出现了异国 IP、非托管设备和新地理位置,但该会话没有强制执行任何 Conditional Access 策略。
### 发现 2:通过隐蔽收件箱规则进行持久收集
| | |
|---|---|
| **严重性** | 🔴 严重 |
| **账户** | `m.smith@lognpacific.org` |
| **规则 1** | 名称:`.`,将财务关键字转发至 `insights@duck.com` |
| **规则 2** | 名称:`..`,永久删除安全警报邮件 |
| **创建时间** | 22:02 和 22:03 UTC,获得访问权限后 3 分钟 |
| **证据** | CloudAppEvents:New-InboxRule x2,RawEventData 参数 |
在不到 90 秒的时间内创建了两条规则:一条用于收集,一条用于抑制。两者都使用了 `StopProcessingRules: True`。规则 2 使用了 `DeleteMessage: True`——这些邮件不仅仅是被重定向了,而是被永久删除了。如果 Mark 试图去寻找 Microsoft 发出的关于异常登录的安全警报,他将一无所获。
### 发现 3:线程劫持 BEC / 欺诈性电汇
| | |
|---|---|
| **严重性** | 🔴 严重 |
| **目标** | `j.reynolds@lognpacific.org` |
| **金额** | £24,500 |
| **方法** | 回复活跃的发票线程并替换银行详细信息 |
| **结果** | 已发起电汇,被外部银行欺诈检测冻结 |
| **证据** | EmailEvents:发送者 IP 匹配,Intra-org 方向,RE: 主题前缀 |
攻击者利用邮箱侦察阶段获取的上下文信息,伪造了一封对真实发票线程极具迷惑性的回复。该邮件在内部投递,绕过了所有外部控制。银行发现了它。而没有任何内部控制起到作用。
### 发现 4:云存储访问和权限修改
| | |
|---|---|
| **严重性** | 🟠 高 |
| **范围** | Microsoft OneDrive for Business,Microsoft SharePoint Online |
| **值得注意** | `Broke sharing inheritance` 事件:文件/文件夹上的权限被更改 |
| **状态** | 完整的数据暴露范围需要有针对性的文件访问审计 |
| **证据** | CloudAppEvents:FileAccessed,ListCreated,Broke sharing inheritance |
发送欺诈邮件后,攻击者访问了 OneDrive 和 SharePoint,并修改了文件的共享权限。到底访问了哪些内容或为数据外发做了哪些暂存准备,目前仍在评估中。
### 发现 5:Conditional Access 策略缺陷(根本原因)
| | |
|---|---|
| **严重性** | 🟠 高 |
| **证据** | 攻击者成功会话上的 `ConditionalAccessStatus: notApplied` |
| **影响** | MFA 强制执行未生效;来自异国 IP 的单因素验证成功 |
被攻陷的账户不在 Conditional Access 策略的覆盖范围内。通俗地说:Conditional Access 是一组规则,要求“在我们允许某人登录之前,检查他们的来源、使用的设备以及我们是否信任它。”这些规则在此环境中存在——只是没有应用到 Mark 的账户上。正是这一个缺口使得其他所有攻击成为可能。阻止它所需的工具在 M365 中原生存在,只是没有被配置。
## 6. MITRE ATT&CK 映射
| 技术 ID | 名称 | 战术 | 观察到的情况 |
|---|---|---|---|
| T1078 | 有效账户 | 初始访问 / 持久化 | 全程使用了预先获取的凭证 |
| T1621 | MFA 请求生成 | 凭证访问 | 推送轰炸,成功前进行了 3 次尝试 |
| T1114.002 | 远程电子邮件收集 | 收集 | 通过 Outlook Web 的 MailItemsAccessed |
| T1114.003 | 电子邮件转发规则 | 收集 | 规则 1 将财务关键字外部转发 |
| T1564.008 | 电子邮件隐藏规则 | 防御规避 | 规则命名为 `.` 和 `..` |
| T1070 | 指标移除 | 防御规避 | 规则 2 永久删除安全警报 |
| T1566.002 | 鱼叉式钓鱼链接 | 初始访问 | 线程劫持 BEC 电子邮件 |
| T1213.002 | 来自 SharePoint 的数据 | 收集 | 妥协后访问了 OneDrive 和 SharePoint |
| T1657 | 金融盗窃 | 影响 | £24,500 欺诈性电汇 |
**威胁行为者:** Scattered Spider (UNC3944 / Octo Tempest / G1015)
## 7. 检测盲点
| 缺陷 | 影响 | 证据 |
|---|---|---|
| 未强制执行 Conditional Access | MFA 绕过成功 | `ConditionalAccessStatus: notApplied` |
| 无 MFA 疲劳检测 | 来自同一 IP 的 3 次失败 + 1 次成功未触发警报 | 未触发警报 |
| 无收件箱规则创建警报 | 两条隐蔽规则生效而未被检测 | 针对 `New-InboxRule` 无警报 |
| 无异常位置登录警报 | 荷兰登录未被标记 | 首次登录国家未触发警报 |
| 未强制执行设备合规性 | 非托管 Linux 设备获得了完整的 M365 访问权限 | `isManaged: false` |
| 未阻止外部自动转发 | 财务邮件不受阻碍地被外部转发 | 无传输规则 |
| 无内部组织 BEC 检测 | 欺诈邮件未经检查即被投递 | `Intra-org` 绕过了过滤器 |
## 8. 建议
### 立即行动:0 到 72 小时
1. **撤销所有活动会话** 针对 `m.smith@lognpacific.org` 并强制更改凭证
2. **删除两条收件箱规则**(`.` 和 `..`)从被攻陷的邮箱中
3. **审计所有财务部门邮箱** 以查找类似的规则模式
4. **在电子邮件网关处阻止 `insights@duck.com`**
5. **与 j.reynolds 确认** 没有处理任何付款;保留电子邮件线程
### 短期行动:1 到 2 周
6. **全面强制执行 Conditional Access**,将财务和高管角色迁移到抗网络钓鱼的 MFA(FIDO2 / 号码匹配)
7. **通过 Exchange 传输规则阻止外部自动转发**
8. **部署 Sentinel 检测规则** 针对收件箱规则异常和 MFA 疲劳(参见 §9)
9. **在 Entra ID 中启用异常位置和新 ASN 警报**
10. **在 Conditional Access 中强制执行设备合规性**,阻止非托管设备
### 战略行动:30 到 90 天
11. **启用连续访问评估 (CAE)** 以减少会话令牌重用窗口
12. **实施 Defender for Office 365 Safe Links** 并带有实时沙箱引爆功能
13. **建立带外供应商支付验证**:更改银行详细信息需要向已知联系人进行电话确认
14. **为财务人员开展 BEC 防范意识培训**,涵盖线程劫持和付款重定向的危险信号
15. **实施 MFA 推送速率限制**:在连续 N 次失败后锁定账户
## 9. 创建的检测规则
作为此次狩猎的直接输出,编写了两条 Sentinel 分析规则。
**规则 1:可疑收件箱规则 / 极简或混淆名称**
当创建具有空白、单字符或点模式名称的收件箱规则时触发。
严重性:**高** | MITRE:T1564.008
```
CloudAppEvents
| where ActionType == "New-InboxRule"
| extend RuleName = tostring(parse_json(RawEventData).ObjectName)
| where RuleName in ("", ".", "..")
or string_size(RuleName) <= 2
| project TimeGenerated, AccountDisplayName, RuleName,
IPAddress, ActionType, RawEventData
| order by TimeGenerated desc
```
**规则 2:MFA 疲劳 / 重复失败后跟随成功验证**
当来自同一 IP 的 2 次或更多 `ResultType 50074` 事件,在同一用户的 15 分钟窗口内跟随有 `ResultType 0` 时触发。
严重性:**严重** | MITRE:T1621, T1078
```
let failures = SigninLogs
| where ResultType == 50074
| project FailTime = TimeGenerated, UserPrincipalName, IPAddress;
let successes = SigninLogs
| where ResultType == 0
| project SuccessTime = TimeGenerated, UserPrincipalName, IPAddress;
failures
| join kind=inner successes on UserPrincipalName, IPAddress
| where SuccessTime between (FailTime .. (FailTime + 15m))
| summarize FailCount = count(), FirstFail = min(FailTime),
Success = min(SuccessTime) by UserPrincipalName, IPAddress
| where FailCount >= 2
| project UserPrincipalName, IPAddress, FailCount, FirstFail, Success
```
## 10. 最终评估
此次狩猎确认了一条在不到 35 分钟内执行且零内部警报的完整六阶段 BEC 攻击链。这笔 £24,500 的电汇被银行阻止,而不是被组织内部的任何措施阻止。
**未解决的风险项:**
| 风险 | 状态 | 严重性 |
|---|---|---|
| 未强制执行 Conditional Access | 未解决,正在修复中 | 🔴 严重 |
| 未阻止外部自动转发 | 未解决 | 🔴 严重 |
| 无收件箱规则创建警报 | 已解决,已部署规则 | ✅ 已缓解 |
| 无 MFA 疲劳检测 | 已解决,已部署规则 | ✅ 已缓解 |
| 未强制执行设备合规性 | 未解决 | 🟠 高 |
| 无供应商付款更改协议 | 未解决 | 🟠 高 |
| 未启用 CAE | 未解决 | 🟡 中 |
| OneDrive/SharePoint 数据暴露范围 | 正在评估中 | 🟠 高 |
攻击之所以成功是因为策略缺陷,而不是缺少技术。阻止此事件所需的一切都存在于 M365 技术栈中。在强制执行 Conditional Access 并阻止外部转发之前,该组织仍将处于暴露状态。
## 11. 分析师笔记
两条规则的组合是此次调查中最有趣的部分。规则 1 是意料之中的举动:将财务邮件转发到外部地址。规则 2 则是区分这次攻击的关键。关键字列表(`suspicious`、`security`、`phishing`、`unusual`、`compromised`、`verify`)几乎与 Microsoft 在其自身异常登录通知邮件中使用的语言完全匹配。攻击者构建了一个专门用于抑制 Microsoft 原生警报的反检测层。这不是投机取巧,而是一套经过测试的攻击剧本。
规则 2 上的 `DeleteMessage: True` 值得单独一提。这些邮件并没有被移到某个文件夹里。它们彻底消失了。如果 Mark 去找 Microsoft 发出的安全通知,他根本找不到。
从 MFA 批准到欺诈邮件发出的 35 分钟窗口期速度很快,但并不慌乱。侦察花了 6 分钟。规则创建不到 2 分钟。欺诈执行花了 3 分钟。剩下的是范围扩展。这种节奏表明操作者以前运行过这个序列。
`Intra-org` 电子邮件方向往往是事后容易被忽略的细节。外部网络钓鱼防御:SPF、DKIM、DMARC、Safe Links,都不适用于两个内部 M365 账户之间的电子邮件。攻击者专门使用被攻陷的内部账户,正是因为它绕过了组织花费最多时间配置的控制措施。这里的检测必须以身份为首要导向。
OneDrive 中的 `Broke sharing inheritance` 事件仍未解决。大多数 BEC 事后分析在邮件链和电汇处就停止了。这里的文件权限更改表明攻击者可能不仅在眼前的欺诈之外暂存了数据,还可能准备外发。这值得进行一次后续调查。
## 12. 经验教训与下一次狩猎假设
### 此次狩猎证明了什么
- 完整的 BEC 攻击链可从三个 M365 表中重建。没有一个单一来源能说明全部情况。
- 在 35 分钟的攻击者活动中零警报,这本身就是一项发现,而不仅仅是缺少发现。
- 点模式规则名称和安全关键字删除列表是比 IP 地址更可靠的检测信号。
- 持久化之前的侦察是区分定向操作与机会性账户滥用的可靠指标。
### 哪些可以更快
- 尽早检查 `ConditionalAccessStatus` 可以更快地查明根本原因。
- 在任何 BEC 调查中,应立即查询收件箱规则事件的 `RawEventData`。这些参数在一个视图中讲述了完整的持久化过程。
- 跨越所有三个表的会话 ID 关联应尽早进行,以确认单一行为者归属。
### 下一次狩猎假设
## 13. 证据索引
| ID | 截图文件 | 来源 | 描述 |
|---|---|---|---|
| E-01 | `01-identity-pivot.png` | `SigninLogs` | 确认 m.smith@lognpacific.org 为被攻陷账户 |
| E-02 | `02-signin-sequence.png` | `SigninLogs` | 完整验证序列:50074 x2,50140 x1,ResultType 0;可见两个 IP |
| E-03 | `03-mfa-count.png` | `SigninLogs` | 确认来自攻击者 IP 的 2x ResultType 50074 的计数查询 |
| E-04 | `04-device-profile.png` | `SigninLogs` | Ubuntu Linux,Firefox 147.0,isCompliant: false,isManaged: false |
| E-05 | `05-cloudappevents-sequence.png` | `CloudAppEvents` | 完整的验证后活动:MailItemsAccessed → 规则 → Send → SharePoint |
| E-06 | `06-rule1-parameters.png` | `CloudAppEvents` | 规则 1 RawEventData:名称、ForwardTo、关键字、会话 ID、StopProcessingRules、SessionId、UserId、ResultStatus |
| E-07 | `08-rule2-parameters.png` | `CloudAppEvents` | 规则 2 参数:名称 `..`,删除关键字,DeleteMessage: True |
| E-08 | `09-fraud-email.png` | `EmailEvents` | 欺诈性 BEC 电子邮件:收件人、主题、Intra-org、发件人 IP 匹配 |
| E-09 | `10-scope-expansion.png` | `CloudAppEvents` | OneDrive/SharePoint 访问:FileAccessed,Broke sharing inheritance |
| E-10 | | `SigninLogs` | 会话 ID `00225cfa-a0ff-fb46-a079-5d152fcdf72a`,在 E-06/E-07 中可见 |
| E-11 | | Sentinel | 检测规则 1:可疑收件箱规则,极简名称 |
| E-12 | | Sentinel | 检测规则 2:MFA 疲劳模式 |
*[Katie aka ktx0r] · [4/17/2026]*
*Microsoft Sentinel 实验室*
*Scattered Spider BEC 调查(模拟)*
标签:BEC, EDR, KQL查询, Log Analytics Workspace, MFA绕过, Microsoft Sentinel, Octo Tempest, Outlook Web, Scattered Spider, SOC分析, UNC3944, 商业电子邮件入侵, 威胁情报, 安全运营中心, 开发者工具, 微软Sentinel, 推送轰炸, 攻击链, 数据展示, 红队, 网络安全, 网络攻击调查, 网络映射, 网络欺诈, 脆弱性评估, 邮箱安全, 金融安全, 隐私保护