AdityaBhatt3010/Entra-ID-Monitoring
GitHub: AdityaBhatt3010/Entra-ID-Monitoring
基于 Splunk 的 Microsoft Entra ID 身份攻击检测与调查的逐步实战指南,涵盖密码攻击、MFA 绕过、权限提升和 OAuth 滥用等场景的 SPL 查询与分析方法。
Stars: 1 | Forks: 0
# Entra ID 监控 🔐
关于 **Entra ID 监控** 的逐步指南,涵盖针对 Microsoft Entra ID 的常见身份攻击,并演示如何使用 **Splunk** 进行检测。
此仓库记录了调查过程,解释了每个 SPL 查询背后的原理,并将每个解决方案映射到相应的截图,以便于理解和验证。
## 实验信息
* **房间:** Entra ID 监控
* **难度:** 中等
* **重点领域:**
* 基于密码的攻击
* 条件访问策略
* Identity Protection
* MFA 绕过技术
* 权限提升与持久化
* OAuth 应用程序滥用
# 仓库结构
```
.
├── README.md
└── Entra
├── 1.png
├── 2.png
├── 3.png
├── ...
└── 10.png
```
本指南中引用的所有截图都存储在 **Entra** 目录中。
# 涵盖技能 🛡️
* Microsoft Entra ID 监控
* Splunk SPL
* Azure AD 登录日志
* Azure AD 审计日志
* Identity Protection
* 条件访问策略
* 威胁狩猎
* 事件调查
* MFA 攻击检测
* 权限提升分析
* OAuth 滥用检测
# 你将学到什么
* 检测 Password Spraying 攻击
* 检测 Brute Force 尝试
* 调查受损用户
* 分析 Identity Protection 警报
* 调查条件访问失败
* 检测 MFA 疲劳攻击
* 识别权限提升
* 调查通过 MFA 注册进行的持久化
* 检测恶意的 OAuth 同意授权
# 操作指南
## 任务 1 — 简介
本房间介绍了针对 Microsoft Entra ID 身份的最常见攻击技术,并解释了登录日志、审计日志、条件访问策略和 Identity Protection 如何帮助防御者检测恶意活动。
# 任务 2 — 基于密码的攻击
攻击者通常从违规数据库中获取泄露的凭据开始。他们不利用软件漏洞,而是直接尝试对公开暴露的 Entra ID endpoint 进行身份验证。
涵盖两种常见技术:
* Password Spraying
* 限速 Brute Force
## 检测 Password Spraying
以下 SPL 查询按 IP 地址对失败的身份验证尝试进行分组。
它有助于识别尝试对多个账户使用相同密码的主机,这是 password spraying 的常见指标。
### Payload
```
index="task-2" sourcetype="azure:aad:signin" "status.errorCode"!=0 conditionalAccessStatus!=success
| stats dc(userPrincipalName) as targeted_accounts, count as failures by ipAddress
| sort - failures
```
查询显示,**94.20.222.248** 针对了多个用户账户并产生了最多的失败次数,使其成为 password spraying 的来源。
答案:
```
94.20.222.248
```

## 检测限速 Brute Force
与 password spraying 不同,brute force 在较长时间内专注于单个账户,以避免触发账户锁定策略。
识别出的可疑 IP 为:
```
38.165.231.218
```
## 识别受损用户
在识别出可疑 IP 后,我们搜索了源自该 IP 的成功身份验证,以确定攻击最终是否成功。
### Payload
```
index="task-2" sourcetype="azure:aad:signin" "status.errorCode"=0
| where ipAddress="38.165.231.218"
| stats count by userPrincipalName, status.errorCode
| sort status.errorCode
```
成功的登录属于:
```
amanda.costa@finegalo
```

# 任务 3 — 条件访问与 Identity Protection
条件访问根据组织策略评估每次登录,而 Identity Protection 则根据可疑的身份验证行为持续分配风险评分。
它们共同为受损身份提供了有效的防御。
## 识别高风险用户
此查询搜索 Microsoft 标记为 **高风险** 的登录。
### Payload
```
index="task-3" sourcetype="azure:aad:signin"
| where riskLevelDuringSignIn="high"
| table _time, userPrincipalName, appDisplayName, ipAddress, location.countryOrRegion, riskLevelDuringSignIn, riskLevelAggregated
| sort - _time
```
识别出的风险用户:
```
allan.senna@finegalo
```

## 调查风险检测日志
Identity Protection 提供了有关为何登录被视为风险的附加上下文。
### Payload
```
index="task-3" sourcetype="azure:aad:identity_protection:riskdetection"
| where riskEventType="anonymizedIPAddress"
| table _time, userPrincipalName, activity, ipAddress, location.countryOrRegion, riskLevel, riskEventType
| sort - _time
```
最近的风险登录:
```
2026-03-03 13:50:59
```
风险类型:
```
anonymizedIPAddress
```

## 调查条件访问策略
接下来,我们检查了失败的条件访问评估,以确定是哪个安全策略阻止了身份验证尝试。
### Payload
```
index="task-3" sourcetype="azure:aad:signin" conditionalAccessStatus=failure
| spath output=policies path=appliedConditionalAccessPolicies{}
| mvexpand policies
| spath input=policies output=policy_result path=result
| spath input=policies output=policy_name path=displayName
| where policy_result="failure"
| stats values(policy_name) as FailedPolicies by _time, appDisplayName, userDisplayName, ipAddress, conditionalAccessStatus
| eval FailedPolicies=mvjoin(FailedPolicies, ", ")
| table _time, appDisplayName, userDisplayName, ipAddress, conditionalAccessStatus, FailedPolicies
| sort - _time
```
被阻止的策略:
```
Block Suspicious Countries
```
被阻止的 IP:
```
94.20.222.251
```


# 任务 4 — MFA 绕过技术
即使在获得有效凭据后,攻击者也必须绕过多因素身份验证。
此任务侧重于使用身份验证日志识别 MFA 疲劳攻击。
## 检测 MFA 疲劳
以下查询搜索与重复身份验证提示相关的常见 MFA 失败代码。
### Payload
```
index="task-4" sourcetype="azure:aad:signin" (status.errorCode=50074 OR status.errorCode=50076 OR status.errorCode=500121)
| stats count as mfa_failures values(status.errorCode) as errorCodes values(status.failureReason) as failureReasons by userPrincipalName, ipAddress
| sort - mfa_failures
```
受害者:
```
igor.bicalho@finegalo
```
错误代码:
```
500121
```

## 识别正常登录位置
为了识别可疑行为,我们首先确立了用户的正常登录位置。
### Payload
```
index="task-4" sourcetype="azure:aad:signin" status.errorCode=0
| table _time, userPrincipalName, ipAddress, location.countryOrRegion, conditionalAccessStatus
| sort - _time
```
正常国家/地区:
```
DK
```
攻击者的成功身份验证:
```
2026-03-04 13:26
```

# 任务 5 — 权限提升与持久化
一旦攻击者获得访问权限,他们通常会创建持久化机制并提升权限,以维持对租户的长期控制。
## 检测角色分配
此查询在 Entra ID 审计日志中搜索特权角色分配。
### Payload
```
index="task-5" sourcetype="azure:aad:audit" activityDisplayName="Add member to role"
| table _time, activityDisplayName, initiatedBy.user.userPrincipalName, targetResources{}.userPrincipalName, targetResources{}.modifiedProperties{}.newValue
| sort - _time
```
新账户:
```
rafael.maciel@finegalo
```
分配的角色:
```
Global Administrator
```

## 检测新的 MFA 注册
攻击者通常会注册自己的身份验证器应用程序,以在密码重置后仍能保持访问权限。
### Payload
```
index="task-5" sourcetype="azure:aad:audit" activityDisplayName="User started security info registration" loggedByService="Authentication Methods" operationType="Add"
| eval initiator=coalesce('initiatedBy.user.userPrincipalName','initiatedBy.app.displayName')
| table _time, activityDisplayName, initiator, initiatedBy.user.ipAddress, additionalDetails{}.value
```
注册的新 MFA 设备:
```
2026-03-04 13:36
```

# 任务 6 — OAuth 应用程序滥用
即使在密码重置或 MFA 更改后,OAuth 应用程序仍能保留访问权限。
关键指标包括:
* 应用程序同意事件
* 高风险委托权限
* 租户范围的应用程序权限
* 可疑的同意授权
讨论的重要权限:
* Mail.Read.All
* Mail.ReadWrite.All
* Files.ReadWrite.All
* Directory.ReadWrite.All
* RoleManagement.ReadWrite.Directory
* offline_access
# 关键要点 ✨
* Password spraying 会在多个用户中留下广泛的身份验证失败模式。
* Brute force 攻击通常在较长时间内针对单个账户。
* Identity Protection 提供了有价值的风险信号,但应始终通过登录日志进行验证。
* 如果配置正确,条件访问策略可显著降低账户被入侵的风险。
* MFA 仍然是最强的防御手段之一,尽管攻击者越来越依赖于诸如 MFA 疲劳等社会工程学技术。
* 在初始入侵后,审计日志成为主要的证据来源,可帮助调查人员识别权限提升、持久化和管理变更。
* OAuth 应用程序滥用是一种隐蔽的持久化机制,在事件响应调查中应始终将其纳入考虑范围。
# 免责声明
此仓库仅出于学习 **Entra ID 监控** 的教育目的而创建。所有练习均在官方实验环境中进行。
标签:Microsoft Entra ID, URL发现, 安全检测, 红队行动, 身份安全, 防御加固