Descrição do recurso de Bloqueio Inteligente de Extranet no Windows Server 2016

Aplica-se a: Windows Server 2016

Visão geral


A partir da atualização de março de 2018 para o Windows Server 2016, os Serviços de Federação do Active Directory (AD FS) têm um novo recurso chamado Bloqueio Inteligente de Extranet (ESL). Em uma era de ataques crescentes sobre serviços de autenticação, o ESL permite que o AD FS diferencie entre tentativas de entrada de um usuário válido e entradas que podem ser de um invasor. Como resultado, o AD FS pode bloquear invasores enquanto permite que usuários válidos continuem usando suas contas. Isso impede a negação de serviço para usuários e protege contra ataques direcionados contra contas de usuário conhecidas.

O recurso ESL está disponível para AD FS no Windows Server 2016.

Como instalar e configurar o ESL


Instalar atualizações em todos os nós do farm.

Primeiro, verifique se todos os servidores do AD FS do Windows Server 2016 estão na versão mais recente nas Atualizações do Windows de março de 2018.

Atualize permissões de banco de dados de artefato

O bloqueio inteligente de extranet requer que a conta de serviço do AD FS tenha permissões para criar uma nova tabela no banco de dados de artefato do AD FS. Faça logon em qualquer servidor AD FS como administrador do AD FS e conceda essa permissão executando os seguintes comandos em uma janela Prompt de Comando do PowerShell:

$cred = Get-Credential
Update-AdfsArtifactDatabasePermission -Credential $cred

Observação O espaço reservado $cred é uma conta que tem permissões de administrador do AD FS. Isso deve fornecer as permissões de gravação para criar a tabela.

Os comandos acima podem falhar devido à falta de permissão suficiente, pois seu farm do AD FS está usando o SQL Server e a credencial fornecida acima não tem permissão de administrador no seu servidor SQL. Nesse caso, você pode configurar as permissões de banco de dados manualmente no Banco de Dados do SQL Server executando o comando a seguir quando estiver conectado ao banco de dados AdfsArtifactStore.

ALTERAR AUTORIZAÇÃO NO ESQUEMA::[ArtifactStore] PARA [db_genevaservice]

Configurar ESL

Um novo parâmetro chamado ExtranetLockoutMode é adicionado para oferecer suporte ao ESL. Contém os seguintes valores:

  • ADPasswordCounter–Este é o modo de "bloqueio flexível de extranet" do AD FS herdado, que não se diferencia com base no local. Este é o valor padrão.
  • ADFSSmartLockoutLogOnly–Este é o Bloqueio Inteligente de Extranet. Em vez de rejeitar solicitações de autenticação, o AD FS grava eventos de administração e de auditoria.
  • ADFSSmartLockoutEnforce–Este é o Bloqueio inteligente de Extranet com suporte total para bloquear solicitações não familiares quando os limites são atingidos.

Recomendamos que você configure primeiro o provedor de bloqueio para log-only para um curto período de tempo (1 a 3 dias) executando o seguinte cmdlet. Revise auditorias (veja abaixo para obter detalhes) durante este período para determinar o número de contas que podem ser potencialmente afetadas e a frequência desses eventos. Após a avaliação bem-sucedida das auditorias, defina a configuração para o modo "ADFSSmartLockoutEnforce":

Set-AdfsProperties -ExtranetLockoutMode AdfsSmartlockoutLogOnly

Nesse modo, o AD FS executa a análise, mas não bloqueia nenhuma solicitação devido a contadores de bloqueio. Esse modo é usado para validar a execução bem-sucedida do bloqueio inteligente antes de habilitar o modo “impor”.

Para que o novo modo entre em vigor, reinicie o serviço AD FS em todos os nós do farm executando o seguinte comando:

Restart-Service adfssrv

Definir limite de bloqueio e janela de observação

Há duas configurações principais para o ESL: limite de bloqueio e janela de observação.

Configuração de limite de bloqueio

Sempre que uma autenticação baseada em senha for bem-sucedida, o AD FS armazenará os IPs do cliente como locais familiares na tabela de atividades da conta.

Se a autenticação baseada em senha falhar e as credenciais não forem provenientes de um local conhecido, a contagem de autenticação com falha será incrementada.

Depois que o número de tentativas de senha com falha de locais desconhecidos atinge o limite de bloqueio, se a autenticação baseada em senha de um local não familiar falhar, a conta será bloqueada.

Observação O bloqueio continua sendo aplicado a locais conhecidos separadamente deste novo contador de bloqueio desconhecido.

O limite é definido usando Set-AdfsProperties.

Exemplo:

Set-AdfsProperties -ExtranetLockoutThreshold 10

Configuração da janela de observação

A configuração da janela de observação permite que uma conta seja desbloqueada automaticamente após algum tempo. Depois que a conta estiver desbloqueada, uma tentativa de autenticação será permitida. Se a autenticação for bem-sucedida, a contagem de autenticação com falha será redefinida para 0. Se falhar, o sistema aguardará outra janela de observação antes que o usuário possa tentar novamente.

A janela de observação é definida usando Set-AdfsProperties como no seguinte exemplo de comando:

Set-AdfsProperties -ExtranetObservationWindow ( new-timespan -minutes 5 )

Habilitar bloqueio

O bloqueio de extranet pode ser habilitado ou desabilitado usando o parâmetro EnableExtranetLockout como nos exemplos a seguir.

Para habilitar o bloqueio, execute o seguinte comando:

Set-AdfsProperties -EnableExtranetLockout $true

Para desabilitar o bloqueio, execute o seguinte comando:

Set-AdfsProperties -EnableExtranetLockout $false

Habilitar o modo impor

Depois de se sentir confortável com o limite de bloqueio e a janela de observação, o ESL pode ser movido para o modo "impor" usando o seguinte cmdlet PSH:

Set-AdfsProperties -ExtranetLockoutMode AdfsSmartLockoutEnforce

Para que o novo modo tenha efeito, reinicie o serviço AD FS em todos os nós do farm usando o seguinte comando:

Restart-Service adfssrv

Gerenciando o ESL


Gerenciar atividade de contas de usuário

O AD FS fornece três cmdlets para gerenciar dados de atividade de conta de usuário. Esses cmdlets se conectam automaticamente ao nó do farm que contém a função mestre.

Observação Esse comportamento pode ser substituído ao passar o parâmetro -Server.

  • Get-ADFSAccountActivity

    Leia a atividade de conta atual para uma conta de usuário. O cmdlet sempre se conecta automaticamente ao mestre de farm usando o ponto de extremidade Atividade de Conta REST. Portanto, todos os dados devem sempre ser consistentes.

    Get-ADFSAccountActivity user@contoso.com

  • Set-ADFSAccountActivity

    Atualize a atividade de conta para uma conta de usuário. Isso pode ser usado para adicionar novos locais familiares ou apagar o estado para qualquer conta.

    Set-ADFSAccountActivity user@contoso.com -FamiliarLocation “1.2.3.4”

  • Reset-ADFSAccountLockout

    Redefine o contador de bloqueio para uma conta de usuário

    Reset-ADFSAccountLockout user@contoso.com -Familiar

Solução de problemas


Atualizando permissões do banco de dados

Se algum erro for retornado do cmdlet Update-AdfsArtifactDatabasePermission , verifique o seguinte:

  • A verificação falhará se os nós estiverem na lista do farm, mas não forem mais membros do farm. Isso pode ser corrigido ao executar remove-adfsnode <nome do nó>.
  • Verifique se a atualização está implantada em todos os nós do farm.
  • Verifique se as credenciais passadas para o cmdlet têm permissão para modificar o proprietário do esquema do banco de dados de artefato do AD FS.

Registrando um log/auditoria

Quando uma solicitação de autenticação é rejeitada porque a conta excede o limite de bloqueio, o AD FS gravará um ExtranetLockoutEvent no fluxo de auditoria de segurança.

Exemplo de evento registrado

Desinstalar


Os farms de bancos de dados do SQL Server podem desinstalar a atualização usando o aplicativo Configurações, sem problemas.

Os farms de banco de dados WID devem seguir estas etapas devido ao binário de verificação de banco de dados WID atualizado:

  1. Execute o script Desinstalar psh que interrompe o serviço e descarta a tabela de atividades da conta.

    Stop-Service adfssrv -ErrorAction Stop $doc = new-object Xml$doc.Load("$env:windir\ADFS\Microsoft.IdentityServer.Servicehost.exe.config")$connString = $doc.configuration.'microsoft.identityServer.service'.policystore.connectionStringif ( -not $connString -like "*##wid*" ){    Write-Error "SQL installs don't require DB updates, skipping DB table drop"}else{	$connString = "Data Source=np:\\.\pipe\microsoft##wid\tsql\query;Initial Catalog=AdfsArtifactStore;Integrated Security=True"	stop-service adfssrv	$cli = new-object System.Data.SqlClient.SqlConnection	$cli.ConnectionString = $connString	$cli.Open()	try	{            $cmd = new-object System.Data.SqlClient.SqlCommand        $cmd.CommandText = "IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[ArtifactStore].[AccountActivity]') AND type in (N'U')) DROP TABLE [ArtifactStore].[AccountActivity]"        $cmd.Connection = $cli        $cmd.ExecuteNonQuery()     }    finally    {        $cli.CLose()    }	write-warning "Finish removing the patch using the Settings app and then restart the complete to complete the uninstall"} 
  2. Desinstale a atualização usando o aplicativo de configurações.

  3. Reinicie o computador.