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注册详情接口。