MFA漏网之鱼排查:PowerShell+Graph+Entra脚本审计未注册用户

本文基于SANS ISC日记,介绍使用PowerShell、Microsoft Graph和Entra(Azure AD)脚本快速审计MFA部署遗漏。通过Get-MgBetaReportAuthenticationMethodUserRegistrationDetail导出用户注册状态,筛选未注册MFA账号,并进一步识别短信、语音回拨等弱认证方式,帮助安全团队收敛身份认证风险。

🔍 Low 其他

本文基于SANS ISC分享的运维技巧,介绍如何使用PowerShell调用Microsoft Graph的Beta版Reports API,快速审计Entra/Azure AD中未注册MFA的用户。技术核心是利用Get-MgBetaReportAuthenticationMethodUserRegistrationDetail批量导出注册状态,再结合Get-MgUser补全账号信息,从而让管理员在MFA强制上线后高效发现绕过多因素认证的账号。

来源:SANS ISC | 2026-08-21 | 原文链接

🔍 关键发现

  • Microsoft.Graph.Beta.Reports中的Get-MgBetaReportAuthenticationMethodUserRegistrationDetail可批量导出Entra用户MFA注册详情。
  • 通过过滤IsMfaRegistered -eq $false可快速定位MFA rollout后的漏网账号。
  • 同一脚本改为筛选IsMfaRegistered为true后,可排查以SMS或voiceMobile为主要MFA方法的弱验证用户。

⚔️ 攻击链分析

不适用(本文为MFA部署审计脚本,非攻击事件)

🚩 失陷指标 (IOC)

  • 无IOC(本文不涉及恶意入侵指标)

🛡️ 缓解建议

  • ✅ 在MFA强制上线后,定期使用上述脚本导出未注册MFA的用户清单,逐一禁用或强制注册。
  • ✅ 对已注册用户进行MFA方法审计,将SMS、语音回拨等弱方法替换为FIDO2、Windows Hello或Authenticator推送等强认证方式。
  • ✅ 为Graph连接配置最小权限,如AuditLog.Read.All、User.Read.All,并限制脚本输出文件访问权限,防止用户数据泄露。

涉及漏洞:[]


⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。

🤖 常见问题解答(FAQ)

❓ 如何快速找出MFA强制后仍未注册的用户?

导入Microsoft.Graph.Beta.Reports,用Connect-MgGraph -Scopes AuditLog.Read.All,User.Read.All登录,调用Get-MgBetaReportAuthenticationMethodUserRegistrationDetail -All,筛选IsMfaRegistered -eq $false即可。

❓ 如何用脚本排查使用短信或语音回拨的用户?

将筛选条件改为IsMfaRegistered -eq $true,再检查MethodsRegistered或UserPreferredMethodForSignIn中是否包含SMS或voiceMobile,从而定位弱MFA方法用户。

❓ 为什么要使用Microsoft.Graph.Beta.Reports而非正式版?

Get-MgBetaReportAuthenticationMethodUserRegistrationDetail当前属于Beta Graph API,正式版Reports模块通常不包含该Cmdlet,只有引入Beta库才能调用此MFA注册详情接口。

[!] CONTACT_CHANNELS

如需商务合作、技术咨询或漏洞反馈,请通过以下离岸节点联系作者。

> PING_AUTHOR (@A1RedTeam)