Àndice
AutenticaçÀo Sem Palavra-passe: O Futuro da Segurança
A autenticaçÀo sem palavra-passe (passwordless) representa o futuro da segurança de identidade. Identificar quais utilizadores jÀ¡ possuem métodos de autenticaçÀo sem palavra-passe configurados é essencial para:
- Medir a adoçÀo de tecnologias mais seguras
- Reduzir a dependÀªncia de palavras-passe, que sÀo um vetor de ataque comum
- Identificar candidatos para projetos-piloto de autenticaçÀo sem palavra-passe
- Planear migraçÀµes para autenticaçÀo baseada em FIDO2, Windows Hello ou Microsoft Authenticator
IdentificaçÀo via Microsoft Graph
Para identificar utilizadores capazes de autenticaçÀo sem palavra-passe:
# Ligar ao Microsoft Graph
Connect-MgGraph -Scopes "User.Read.All", "UserAuthenticationMethod.Read.All"
# Obter todos os utilizadores
$users = Get-MgUser -All
# Array para resultados
$passwordlessUsers = @()
foreach ($user in $users) {
# Obter métodos de autenticaçÀo do utilizador
$authMethods = Get-MgUserAuthenticationMethod -UserId $user.Id
# Verificar métodos de autenticaçÀo sem palavra-passe
$passwordlessMethods = $authMethods | Where-Object {
$_.AdditionalProperties.'@odata.type' -in @(
'#microsoft.graph.fido2AuthenticationMethod',
'#microsoft.graph.windowsHelloForBusinessAuthenticationMethod',
'#microsoft.graph.microsoftAuthenticatorAuthenticationMethod'
)
}
# Se tiver pelo menos um método sem palavra-passe, é capaz de autenticaçÀo passwordless
$isPasswordlessCapable = $passwordlessMethods.Count -gt 0
# Tipos de métodos sem palavra-passe
$methodTypes = @{
'FIDO2' = 0
'WindowsHello' = 0
'Authenticator' = 0
}
foreach ($method in $passwordlessMethods) {
$type = $method.AdditionalProperties.'@odata.type'
if ($type -eq '#microsoft.graph.fido2AuthenticationMethod') {
$methodTypes['FIDO2']++
}
elseif ($type -eq '#microsoft.graph.windowsHelloForBusinessAuthenticationMethod') {
$methodTypes['WindowsHello']++
}
elseif ($type -eq '#microsoft.graph.microsoftAuthenticatorAuthenticationMethod') {
$methodTypes['Authenticator']++
}
}
$passwordlessUsers += [PSCustomObject]@{
DisplayName = $user.DisplayName
UserPrincipalName = $user.UserPrincipalName
IsLicensed = $user.AssignedLicenses.Count -gt 0
PasswordlessCapable = $isPasswordlessCapable
TotalPasswordlessMethods = $passwordlessMethods.Count
FIDO2Keys = $methodTypes['FIDO2']
WindowsHelloDevices = $methodTypes['WindowsHello']
AuthenticatorApp = $methodTypes['Authenticator']
}
}
# Apresentar utilizadores capazes de autenticaçÀo sem palavra-passe
$passwordlessUsers |
Where-Object { $_.PasswordlessCapable } |
Sort-Object -Property DisplayName |
Format-Table DisplayName, UserPrincipalName, TotalPasswordlessMethods, FIDO2Keys, WindowsHelloDevices, AuthenticatorApp -AutoSize
AnÀ¡lise de AdoçÀo por Método
Para analisar a adoçÀo dos diferentes métodos de autenticaçÀo sem palavra-passe:
# EstatÀsticas de métodos passwordless
$totalUsers = $passwordlessUsers.Count
$passwordlessCapableUsers = ($passwordlessUsers | Where-Object { $_.PasswordlessCapable }).Count
$percentPasswordless = [math]::Round(($passwordlessCapableUsers / $totalUsers) * 100, 2)
$fido2Users = ($passwordlessUsers | Where-Object { $_.FIDO2Keys -gt 0 }).Count
$percentFido2 = [math]::Round(($fido2Users / $totalUsers) * 100, 2)
$whfbUsers = ($passwordlessUsers | Where-Object { $_.WindowsHelloDevices -gt 0 }).Count
$percentWhfb = [math]::Round(($whfbUsers / $totalUsers) * 100, 2)
$authenticatorUsers = ($passwordlessUsers | Where-Object { $_.AuthenticatorApp -gt 0 }).Count
$percentAuthenticator = [math]::Round(($authenticatorUsers / $totalUsers) * 100, 2)
# Apresentar relatório
Write-Output "=== Relatório de AdoçÀo de AutenticaçÀo Sem Palavra-passe ==="
Write-Output "Total de Utilizadores: $totalUsers"
Write-Output "Utilizadores Capazes de AutenticaçÀo Sem Palavra-passe: $passwordlessCapableUsers ($percentPasswordless%)"
Write-Output ""
Write-Output "AdoçÀo por Método:"
Write-Output "- Chaves FIDO2: $fido2Users utilizadores ($percentFido2%)"
Write-Output "- Windows Hello: $whfbUsers utilizadores ($percentWhfb%)"
Write-Output "- Microsoft Authenticator: $authenticatorUsers utilizadores ($percentAuthenticator%)"
UtilizaçÀo em Conjunto com PolÀticas de Acesso Condicional
Para maximizar o impacto da autenticaçÀo sem palavra-passe, combine esta anÀ¡lise com polÀticas de Acesso Condicional:
# Ligar ao Microsoft Graph com permiss˵es adicionais
Connect-MgGraph -Scopes "User.Read.All", "UserAuthenticationMethod.Read.All", "Policy.Read.All"
# Obter todas as polÀticas de Acesso Condicional
$policies = Get-MgIdentityConditionalAccessPolicy
# Verificar quais polÀticas requerem autenticaçÀo forte
$authPolicies = $policies | Where-Object {
$_.GrantControls.BuiltInControls -contains "requireMultifactorAuthentication" -or
$_.GrantControls.AuthenticationStrength.Id -ne $null
}
# Apresentar polÀticas que podem exigir autenticaçÀo sem palavra-passe
$authPolicies | Format-Table DisplayName, State, `
@{Name="RequiresMFA"; Expression={$_.GrantControls.BuiltInControls -contains "requireMultifactorAuthentication"}}, `
@{Name="AuthStrength"; Expression={$_.GrantControls.AuthenticationStrength.DisplayName}} -AutoSize
ConsideraçÀµes Importantes
- A autenticaçÀo sem palavra-passe baseada no Microsoft Authenticator requer licença Azure AD Premium P1/P2
- As chaves FIDO2 e Windows Hello sÀo consideradas os métodos mais seguros
- Alguns métodos sem palavra-passe ainda sÀo combinados com outros fatores para mÀ¡xima segurança
- A utilizaçÀo efetiva da autenticaçÀo sem palavra-passe pode exigir configuraçÀµes adicionais de polÀticas
Melhores PrÀ¡ticas
- Estabeleça um programa piloto com utilizadores chave para testar e evangelizar métodos sem palavra-passe
- Implemente polÀticas de Acesso Condicional que exijam métodos de autenticaçÀo forte
- Promova uma meta de adoçÀo gradual, começando com departamentos de TI e segurança
- Documente e comunique claramente os benefÀcios para os utilizadores (velocidade, conveniÀªncia, segurança)
- Considere a compra de chaves FIDO2 para administradores e utilizadores privilegiados como primeira fase