Importância da Autenticação Multifator
A autenticação multifator (MFA) é uma componente essencial na estratégia de segurança de qualquer organização. Identificar quais utilizadores já estão configurados para utilizar MFA permite:
- Monitorizar a adoção de MFA na organização
- Planear campanhas direcionadas de adoção
- Identificar utilizadores de alto risco que ainda não utilizam MFA
- Criar relatórios de conformidade para auditorias de segurança
Identificação via Microsoft Graph
Para identificar utilizadores capazes de utilizar MFA:
# Ligar ao Microsoft Graph
Connect-MgGraph -Scopes "User.Read.All", "UserAuthenticationMethod.Read.All"
# Obter todos os utilizadores
$users = Get-MgUser -All
# Array para resultados
$mfaCapableUsers = @()
foreach ($user in $users) {
# Obter métodos de autenticação do utilizador
$authMethods = Get-MgUserAuthenticationMethod -UserId $user.Id
# Verificar métodos de MFA (qualquer método exceto palavra-passe)
$mfaMethods = $authMethods | Where-Object {
$_.AdditionalProperties.'@odata.type' -ne '#microsoft.graph.passwordAuthenticationMethod'
}
# Se tiver pelo menos um método MFA, é capaz de MFA
$isMfaCapable = $mfaMethods.Count -gt 0
$mfaCapableUsers += [PSCustomObject]@{
DisplayName = $user.DisplayName
UserPrincipalName = $user.UserPrincipalName
IsLicensed = $user.AssignedLicenses.Count -gt 0
MfaCapable = $isMfaCapable
MfaMethods = $mfaMethods.Count
MethodTypes = if ($mfaMethods) {
($mfaMethods | ForEach-Object { $_.AdditionalProperties.'@odata.type' }) -join ', '
} else {
'None'
}
}
}
# Apresentar utilizadores capazes de MFA
$mfaCapableUsers |
Sort-Object -Property MfaCapable, UserPrincipalName |
Format-Table DisplayName, UserPrincipalName, MfaCapable, MfaMethods, MethodTypes -AutoSize
Análise Detalhada por Método de Autenticação
Para uma análise mais detalhada dos métodos específicos registados:
# Tipos de métodos de MFA e suas contagens
$methodCounts = @{}
foreach ($user in $mfaCapableUsers) {
if ($user.MethodTypes -ne 'None') {
$methods = $user.MethodTypes -split ', '
foreach ($method in $methods) {
$methodName = $method.Replace('#microsoft.graph.', '')
if (-not $methodCounts.ContainsKey($methodName)) {
$methodCounts[$methodName] = 0
}
$methodCounts[$methodName]++
}
}
}
# Criar objetos para resultados
$methodResults = $methodCounts.GetEnumerator() | ForEach-Object {
[PSCustomObject]@{
Method = $_.Key
Count = $_.Value
Percentage = [math]::Round(($_.Value / $mfaCapableUsers.Count) * 100, 2)
}
}
# Apresentar estatísticas de métodos
$methodResults | Sort-Object -Property Count -Descending | Format-Table -AutoSize
Relatório Resumido
Para gerar um relatório de resumo sobre a adoção de MFA:
$totalUsers = $mfaCapableUsers.Count
$mfaUsers = ($mfaCapableUsers | Where-Object { $_.MfaCapable -eq $true }).Count
$nonMfaUsers = $totalUsers - $mfaUsers
$mfaPercentage = [math]::Round(($mfaUsers / $totalUsers) * 100, 2)
Write-Output "=== Relatório de Adoção de MFA ==="
Write-Output "Total de Utilizadores: $totalUsers"
Write-Output "Utilizadores com MFA: $mfaUsers ($mfaPercentage%)"
Write-Output "Utilizadores sem MFA: $nonMfaUsers ($(100 - $mfaPercentage)%)"
Considerações Importantes
- Os utilizadores podem ter múltiplos métodos de MFA registados
- A capacidade de utilizar MFA não significa necessariamente que o MFA esteja a ser imposto
- Utilize políticas de Acesso Condicional para exigir MFA em todas as aplicações críticas
- A licença gratuita de Segurança Predefinida fornece MFA básico para todos os utilizadores
Melhores Práticas
- Estabeleça uma meta de 100% para registo de MFA para todos os utilizadores
- Implemente campanhas regulares para utilizadores registarem métodos adicionais de MFA
- Considere a implementação de métodos mais seguros como chaves FIDO2 e Windows Hello
- Crie um plano de eliminação gradual de métodos menos seguros, como SMS e chamadas telefónicas
- Utilize relatórios de utilizadores capazes de MFA como métrica-chave de segurança nas reuniões de gestão