Établissez une surveillance continue pour suivre l'adoption de l'authentification multifacteur (MFA) et identifier les utilisateurs qui désactivent ou suppriment leurs méthodes d'authentification. Cela est crucial pour maintenir la posture de sécurité à l'approche des échéances de conformité de 2026.
Créez un script de surveillance pouvant être programmé pour s'exécuter chaque semaine :
# MFA-Monitor.ps1
# Surveillance hebdomadaire du statut MFA avec alertes par email
param(
[string]$SMTPServer = "smtp.office365.com",
[string]$From = "mfa-monitor@yourdomain.com",
[string]$To = "security-team@yourdomain.com",
[string]$ReportPath = "C:\Reports\Weekly-MFA-Monitor.csv"
)
# Connexion à Microsoft Graph
Connect-MgGraph -Scopes "User.Read.All", "UserAuthenticationMethod.Read.All" -NoWelcome
# Obtenir le statut actuel de MFA
$users = Get-MgUser -All -Property DisplayName,UserPrincipalName,Id,AccountEnabled,CreatedDateTime
$currentResults = @()
foreach ($user in $users) {
if ($user.AccountEnabled) {
$authMethods = Get-MgUserAuthenticationMethod -UserId $user.Id -ErrorAction SilentlyContinue
$mfaCapable = $false
$methodCount = 0
if ($authMethods) {
foreach ($method in $authMethods) {
$methodType = $method.AdditionalProperties["@odata.type"]
if ($methodType -in @(
"#microsoft.graph.microsoftAuthenticatorAuthenticationMethod",
"#microsoft.graph.phoneAuthenticationMethod",
"#microsoft.graph.fido2AuthenticationMethod",
"#microsoft.graph.softwareOathAuthenticationMethod",
"#microsoft.graph.windowsHelloForBusinessAuthenticationMethod"
)) {
$mfaCapable = $true
$methodCount++
}
}
}
$currentResults += [PSCustomObject]@{
UserPrincipalName = $user.UserPrincipalName
DisplayName = $user.DisplayName
MFACapable = $mfaCapable
MethodCount = $methodCount
CheckDate = Get-Date -Format "yyyy-MM-dd"
}
}
}
# Comparer avec les résultats de la semaine précédente si disponibles
$previousReportPath = $ReportPath -replace "\.csv$", "-Previous.csv"
$newIssues = @()
$resolvedIssues = @()
if (Test-Path $previousReportPath) {
$previousResults = Import-Csv $previousReportPath
# Trouver les utilisateurs qui ont perdu la capacité MFA
foreach ($current in $currentResults) {
$previous = $previousResults | Where-Object {$_.UserPrincipalName -eq $current.UserPrincipalName}
if ($previous -and $previous.MFACapable -eq "True" -and $current.MFACapable -eq $false) {
$newIssues += "$($current.DisplayName) ($($current.UserPrincipalName)) a perdu la capacité MFA"
}
}
# Trouver les utilisateurs qui ont acquis la capacité MFA
foreach ($current in $currentResults) {
$previous = $previousResults | Where-Object {$_.UserPrincipalName -eq $current.UserPrincipalName}
if ($previous -and $previous.MFACapable -eq "False" -and $current.MFACapable -eq $true) {
$resolvedIssues += "$($current.DisplayName) ($($current.UserPrincipalName)) a activé MFA"
}
}
}
# Exporter les résultats actuels
$currentResults | Export-Csv -Path $ReportPath -NoTypeInformation
# Archiver les résultats précédents
if (Test-Path $ReportPath) {
Copy-Item $ReportPath $previousReportPath -Force
}
# Envoyer une alerte par email s'il y a des problèmes
if ($newIssues.Count -gt 0 -or $resolvedIssues.Count -gt 0) {
$emailBody = @"
Mise à jour hebdomadaire du statut MFA
========================
Nouveaux problèmes MFA ($($newIssues.Count)):
$($newIssues -join "`n")
Problèmes résolus ($($resolvedIssues.Count)):
$($resolvedIssues -join "`n")
Statistiques actuelles:
Total des utilisateurs actifs: $($currentResults.Count)
Capables MFA: $(($currentResults | Where-Object {$_.MFACapable -eq $true}).Count)
Utilisateurs non-MFA: $(($currentResults | Where-Object {$_.MFACapable -eq $false}).Count)
Rapport généré: $(Get-Date)
"@
# Envoyer l'email (nécessite un SMTP configuré)
try {
Send-MailMessage -SmtpServer $SMTPServer -From $From -To $To -Subject "Alerte hebdomadaire du statut MFA" -Body $emailBody
Write-Host "Email d'alerte envoyé avec succès" -ForegroundColor Green
}
catch {
Write-Warning "Échec de l'envoi de l'alerte par email: $($_.Exception.Message)"
}
}
Disconnect-MgGraph
Programmez ce script pour s'exécuter chaque semaine à l'aide du Planificateur de tâches Windows :
# Créer une tâche planifiée pour la surveillance hebdomadaire de MFA
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\MFA-Monitor.ps1"
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At 9:00AM
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount
Register-ScheduledTask -TaskName "Surveillance hebdomadaire du statut MFA" -Action $action -Trigger $trigger -Settings $settings -Principal $principal
Avertissement : N'oubliez pas que la date limite d'octobre 2026 pour l'application de MFA sur le portail Azure approche. Les utilisateurs sans MFA perdront l'accès aux ressources Azure, donc une surveillance proactive est essentielle.
Vérification : Testez d'abord le script de surveillance manuellement, puis vérifiez que la tâche planifiée apparaît dans le Planificateur de tâches et s'exécute avec succès selon le calendrier désigné.