Índice
Métodos de Autenticação e Segurança
Monitorar os métodos de autenticação utilizados pelos utilizadores é fundamental para:
- Identificar áreas de risco por uso de métodos menos seguros
- Impulsionar a adoção de métodos mais robustos como chaves de segurança e Windows Hello
- Verificar a conformidade com políticas de segurança
- Acompanhar a transição para autenticação passwordless
- Detectar tentativas de evasão de MFA ou padrões suspeitos
Consulta KQL para Análise de Métodos
A consulta abaixo analisa os métodos de autenticação dos logs de sign-in:
// Análise de métodos de autenticação dos últimos 30 dias
SigninLogs
| where TimeGenerated > ago(30d)
| where ResultType == 0
| extend AuthMethod = tostring(AuthenticationDetails[0].authenticationMethod)
| where isnotempty(AuthMethod)
| summarize Count = count() by AuthMethod
| order by Count desc
Distribuição por Aplicação
Para entender quais aplicações usam quais métodos:
// Distribuição de métodos de autenticação por aplicação
SigninLogs
| where TimeGenerated > ago(30d)
| where ResultType == 0
| extend AuthMethod = tostring(AuthenticationDetails[0].authenticationMethod)
| where isnotempty(AuthMethod)
| summarize Count = count() by AppDisplayName, AuthMethod
| order by AppDisplayName, Count desc
Utilizadores com Métodos Inseguros
Para identificar utilizadores que frequentemente usam métodos menos seguros:
// Utilizadores que usam senha sem MFA
SigninLogs
| where TimeGenerated > ago(30d)
| where ResultType == 0
| extend AuthMethod = tostring(AuthenticationDetails[0].authenticationMethod)
| where AuthMethod == "Password"
| extend AuthMethodCount = array_length(AuthenticationDetails)
| where AuthMethodCount == 1
| summarize Count = count() by UserPrincipalName
| order by Count desc
| take 20
Tendências de Adoção de Métodos Seguros
Para acompanhar a evolução da adoção de métodos mais seguros:
// Tendência de adoção de métodos seguros
SigninLogs
| where TimeGenerated > ago(90d)
| where ResultType == 0
| extend AuthMethod = tostring(AuthenticationDetails[0].authenticationMethod)
| where isnotempty(AuthMethod)
| extend SecureMethod = case(
AuthMethod == "Password", "Password Only",
AuthMethod == "Password, MultiFactor", "Password + MFA",
AuthMethod has "WindowsHello", "Windows Hello",
AuthMethod has "FIDO2", "FIDO2 Key",
AuthMethod has "Microsoft Authenticator", "Authenticator App",
AuthMethod has "Phone", "Phone",
"Other"
)
| summarize Count = count() by bin(TimeGenerated, 1d), SecureMethod
| render timechart
Implementação em PowerShell com Microsoft Graph
Para extrair dados de autenticação via PowerShell:
# Conectar ao Microsoft Graph
Connect-MgGraph -Scopes "AuditLog.Read.All"
# Data de início da consulta (últimos 7 dias)
$startDate = (Get-Date).AddDays(-7).ToString("yyyy-MM-dd")
# Consultar logs de sign-in
$signInLogs = Get-MgAuditLogSignIn -Filter "createdDateTime ge $startDate" -Top 1000
# Analisar métodos de autenticação
$authMethodStats = @{}
foreach ($log in $signInLogs) {
if ($log.Status.ErrorCode -eq 0) {
$authMethod = "Unknown"
if ($log.AuthenticationDetails -and $log.AuthenticationDetails.Count -gt 0) {
$authMethod = $log.AuthenticationDetails[0].AuthenticationMethod
}
if (-not $authMethodStats.ContainsKey($authMethod)) {
$authMethodStats[$authMethod] = 0
}
$authMethodStats[$authMethod]++
}
}
# Converter para objetos e exibir resultados
$results = $authMethodStats.GetEnumerator() | ForEach-Object {
[PSCustomObject]@{
AuthenticationMethod = $_.Key
Count = $_.Value
Percentage = [math]::Round(($_.Value / $signInLogs.Count) * 100, 2)
}
}
$results | Sort-Object -Property Count -Descending | Format-Table -AutoSize
Monitoramento de Descompasso de MFA
Para identificar utilizadores com configurações inconsistentes:
// Utilizadores com descompasso de método de autenticação
SigninLogs
| where TimeGenerated > ago(30d)
| where ResultType == 0
| extend PrimaryAuthMethod = tostring(AuthenticationDetails[0].authenticationMethod)
| extend AuthMethodCount = array_length(AuthenticationDetails)
| project TimeGenerated, UserPrincipalName, AppDisplayName, PrimaryAuthMethod, AuthMethodCount
| summarize
Methods = make_set(PrimaryAuthMethod),
Apps = make_set(AppDisplayName),
MethodCounts = make_set(AuthMethodCount),
SignInCount = count()
by UserPrincipalName
| where array_length(Methods) > 1 or array_length(MethodCounts) > 1
| order by SignInCount desc
Melhores Práticas
- Configure dashboard de monitoramento para acompanhar tendências de autenticação
- Estabeleça metas claras para adoção de métodos mais seguros
- Identifique grupos de utilizadores ainda dependentes apenas de senha
- Implemente políticas de acesso condicional exigindo MFA para aplicações críticas
- Considere bloquear métodos menos seguros como SMS em favor de FIDO2 ou Authenticator
- Compare os métodos registrados versus os efetivamente utilizados para identificar oportunidades de melhoria