Compartilhar via


Personalizar cabeçalhos de resposta de segurança HTTP com o AD FS 2019

O Active Directory Federation Services (AD FS) 2019 adiciona a funcionalidade para personalizar os cabeçalhos de resposta de segurança HTTP enviados pelo AD FS. Essas ferramentas ajudam os administradores a proteger contra vulnerabilidades comuns de segurança e permitem que eles aproveitem os avanços mais recentes nos mecanismos de proteção baseados em navegador. Esse recurso vem da introdução de dois novos cmdlets: Get-AdfsResponseHeaders e Set-AdfsResponseHeaders.

Note

A funcionalidade para customizar os cabeçalhos de resposta de segurança HTTP (exceto CORS Headers) usando cmdlets: Get-AdfsResponseHeaders e Set-AdfsResponseHeaders foi retroduzida para o AD FS 2016. Você pode adicionar a funcionalidade ao AD FS 2016 instalando KB4493473 e KB4507459.

Este artigo discute cabeçalhos de resposta de segurança comumente usados para demonstrar como personalizar cabeçalhos enviados pelo AD FS 2019.

Note

O artigo pressupõe que você instalou o AD FS 2019.

Scenarios

Os cenários a seguir demonstram a necessidade que os administradores podem ter para personalizar cabeçalhos de segurança.

  • Um administrador habilitou o HTTP Strict-Transport-Security (HSTS) para proteger os usuários que podem acessar o aplicativo Web usando HTTP de um ponto de acesso wi-fi público que pode ser hackeado. O HSTS força todas as conexões por criptografia HTTPS. Eles gostariam de fortalecer ainda mais a segurança habilitando o HSTS para subdomínios.
  • Um administrador configurou o cabeçalho de resposta X-Frame-Options para proteger as páginas da Web de serem clicadas. X-Frame-Options impede a renderização de qualquer página da Web em um iFrame. No entanto, eles precisam personalizar o valor do cabeçalho devido a um novo requisito de negócios para exibir dados (no iFrame) de um aplicativo com uma origem diferente (domínio).
  • Um administrador habilitou o X-XSS-Protection para limpar e bloquear a página se o navegador detectar ataques de script cruzado. X-XSS-Protection impede ataques de script cruzado. No entanto, eles precisam personalizar o cabeçalho para permitir que a página seja carregada depois de sanitizada.
  • Um administrador precisa habilitar o CORS (Compartilhamento de Recursos entre Origens) e precisa definir a origem (domínio) no AD FS para permitir que um aplicativo de página única acesse uma API Web com outro domínio.
  • Um administrador habilitou o cabeçalho CSP (Política de Segurança de Conteúdo) para evitar ataques de script entre sites e injeção de dados, não permitindo solicitações entre domínios. No entanto, devido a um novo requisito de negócios, eles precisam personalizar o cabeçalho para permitir que a página da Web carregue imagens de qualquer origem e restrinja a mídia a provedores confiáveis.

Cabeçalhos de resposta de segurança HTTP

O AD FS inclui os cabeçalhos de resposta na resposta HTTP de saída enviada a um navegador da Web. Você pode listar os cabeçalhos usando o Get-AdfsResponseHeaders cmdlet, conforme mostrado na captura de tela a seguir.

Captura de tela mostrando a saída do PowerShell de Get-AdfsResponseHeaders.

O atributo ResponseHeaders na captura de tela identifica os cabeçalhos de segurança incluídos pelo AD FS em cada resposta HTTP. O AD FS envia os cabeçalhos de resposta somente se ResponseHeadersEnabled estiver definido True como (valor padrão). O valor pode ser definido para False impedir que o AD FS inclua qualquer um dos cabeçalhos de segurança na resposta HTTP. No entanto, essa configuração não é recomendada. Você pode definir ResponseHeadersFalse com o seguinte comando:

Set-AdfsResponseHeaders -EnableResponseHeaders $false

HSTS (HTTP Strict-Transport-Security)

HTTP Strict-Transport-Security (HSTS) é um mecanismo de política de segurança web que ajuda a mitigar ataques de downgrade de protocolo e sequestro de cookies para serviços que possuem ambos endpoints HTTP e HTTPS. Ele permite que os servidores Web declarem que os navegadores da Web ou outros agentes de usuário em conformidade só devem interagir com ele usando HTTPS e nunca por meio do protocolo HTTP.

Todos os pontos de extremidade do AD FS para o tráfego de autenticação na Web são abertos exclusivamente via HTTPS. Como resultado, o AD FS reduz efetivamente as ameaças que o mecanismo de política de Segurança de Transporte Estrito HTTP fornece. Por padrão, não há nenhum downgrade para HTTP, pois não há ouvintes em HTTP. O cabeçalho pode ser personalizado definindo os seguintes parâmetros:

  • max-age=<tempo-de-expiração>. O tempo de expiração (em segundos) especifica por quanto tempo o site só deve ser acessado usando HTTPS. O valor padrão e recomendado é 31536000 segundos (um ano).
  • includeSubDomains. Esse parâmetro é opcional. Se especificada, a regra HSTS também se aplica a todos os subdomínios.

Personalização do HSTS

Por padrão, o cabeçalho está habilitado e max-age é definido como um ano; no entanto, os administradores podem modificar o (reduzir o max-age valor máximo de idade não é recomendado) ou habilitar o HSTS para subdomínios por meio do cmdlet Set-AdfsResponseHeaders .

Set-AdfsResponseHeaders -SetHeaderName "Strict-Transport-Security" -SetHeaderValue "max-age=<seconds>; includeSubDomains"

Example:

Set-AdfsResponseHeaders -SetHeaderName "Strict-Transport-Security" -SetHeaderValue "max-age=31536000; includeSubDomains"

Por padrão, o cabeçalho é incluído no atributo ResponseHeaders ; no entanto, os administradores podem remover o cabeçalho por meio do Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -RemoveHeaders "Strict-Transport-Security"

X-Frame-Options

Por padrão, o AD FS não permite que aplicativos externos usem iFrames ao executar entrada interativa. Essa configuração impede determinado estilo de ataques de phishing. A entrada não interativa pode ser realizada através do iFrame devido à segurança de nível de sessão anterior que foi estabelecida.

No entanto, em certos casos raros, você pode confiar em um aplicativo específico que exija uma página de entrada interativa do AD FS com capacidade para iFrame. O X-Frame-Options cabeçalho é usado para essa finalidade.

Esse cabeçalho de resposta de segurança HTTP é usado para se comunicar com o navegador se ele pode renderizar uma página em um <quadro>/<iframe>. O cabeçalho pode ser definido como um dos seguintes valores:

  • deny. A página em um frame não é exibida. Essa configuração é a configuração padrão e recomendada.
  • sameorigin. A página só será exibida no quadro se a origem for a mesma que a origem da página da Web. A opção não é útil, a menos que todos os ancestrais também estejam na mesma origem.
  • allow-from <origem especificada>. A página só será exibida no quadro se a origem (por exemplo, https://www.".com) corresponder à origem específica no cabeçalho. Alguns navegadores podem não dar suporte a essa opção.

Personalização deFrame-Options X

Por padrão, o cabeçalho é definido para negar; no entanto, os administradores podem modificar o valor por meio do Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -SetHeaderName "X-Frame-Options" -SetHeaderValue "<deny/sameorigin/allow-from<specified origin>>"

Example:

Set-AdfsResponseHeaders -SetHeaderName "X-Frame-Options" -SetHeaderValue "allow-from https://www.example.com"

Por padrão, o cabeçalho é incluído no atributo ResponseHeaders ; no entanto, os administradores podem remover o cabeçalho por meio do Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -RemoveHeaders "X-Frame-Options"

X-XSS-Protection

Esse cabeçalho de resposta de segurança HTTP é usado para impedir o carregamento de páginas da Web quando os navegadores detectam ataques de XSS (script entre sites). Essa abordagem é conhecida como filtragem XSS. O cabeçalho pode ser definido como um dos seguintes valores:

  • 0 desabilita a filtragem XSS. Não recomendado.
  • 1 habilita a filtragem XSS. Se um ataque XSS for detectado, o navegador limpará a página.
  • 1; mode=block habilita a filtragem XSS. Se um ataque XSS for detectado, o navegador impedirá a renderização da página. Essa configuração é a configuração padrão e recomendada.

Personalização deXSS-Protection X

Por padrão, o cabeçalho é definido como 1; mode=block;. No entanto, os administradores podem modificar o valor por meio do Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -SetHeaderName "X-XSS-Protection" -SetHeaderValue "<0/1/1; mode=block/1; report=<reporting-uri>>"

Example:

Set-AdfsResponseHeaders -SetHeaderName "X-XSS-Protection" -SetHeaderValue "1"

Por padrão, o cabeçalho é incluído no atributo ResponseHeaders ; no entanto, os administradores podem remover o cabeçalho por meio do Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -RemoveHeaders "X-XSS-Protection"

Cabeçalhos CORS (Compartilhamento de Recurso entre Origens)

A segurança do navegador da Web impede que uma página da Web faça solicitações entre origens iniciadas de dentro de scripts. No entanto, talvez você queira acessar recursos em outras origens (domínios). O CORS (Compartilhamento de Recursos entre Origens) é um padrão W3C que permite ao servidor relaxar a política de mesma origem. Usando CORS, um servidor pode permitir explicitamente algumas solicitações entre origens ao rejeitar outras.

Para entender melhor uma solicitação CORS, o cenário a seguir percorre uma instância em que um SPA (aplicativo de página única) precisa chamar uma API Web com um domínio diferente. Além disso, considere que o SPA e a API estão configurados no AD FS 2019 e o AD FS tem o CORS habilitado. O AD FS pode identificar cabeçalhos CORS na solicitação HTTP, validar valores de cabeçalho e incluir cabeçalhos CORS apropriados na resposta. Para obter detalhes sobre como habilitar e configurar o CORS no AD FS 2019, consulte a seção Personalização do CORS. O fluxo de exemplo a seguir orienta você pelo cenário:

  1. Um usuário acessa o SPA pelo navegador do cliente e é redirecionado para o endpoint de autenticação do AD FS para autenticação. Como o SPA está configurado para o fluxo de concessão implícita, a solicitação retorna um token access + ID para o navegador após a autenticação bem-sucedida.

  2. Após a autenticação do usuário, o JavaScript front-end incluído no SPA faz uma solicitação para acessar a API Web. A solicitação é redirecionada para o AD FS com os seguintes cabeçalhos:

    • Opções – descreve as opções de comunicação para o recurso de destino.
    • Origem – inclui a origem da API Web.
    • O Access-Control-Request-Method - identifica o método HTTP (por exemplo, DELETE) a ser usado quando uma solicitação real é feita.
    • O Access-Control-Request-Headers - identifica os cabeçalhos HTTP a serem usados quando uma solicitação real é feita.

    Note

    Uma solicitação CORS se assemelha a uma solicitação HTTP padrão. No entanto, a presença de um cabeçalho de origem sinaliza que a solicitação de entrada está relacionada ao CORS.

  3. O AD FS verifica se a origem da API Web incluída no cabeçalho está listada nas origens confiáveis configuradas no AD FS. Para obter mais informações sobre como modificar origens confiáveis, consulte a Personalização do CORS. O AD FS responde com os seguintes cabeçalhos:

    • Access-Control-Allow-Origin - valor igual ao do cabeçalho Origin.
    • Cabeçalho Controle de AcessoAllow-Method - valor igual ao do cabeçalho Controle de AcessoRequest-Method.
    • Access-Control-Allow-Headers - valor igual ao do cabeçalho Access-Control-Request-Headers.
  4. O navegador envia a solicitação real, incluindo os seguintes cabeçalhos:

    • Método HTTP (por exemplo, DELETE).
    • Origem – inclui a origem da API Web.
    • Todos os cabeçalhos incluídos no cabeçalho da resposta Access-Control-Allow-Headers.
  5. Depois de verificado, o AD FS aprova a solicitação incluindo o domínio da API Web (origem) no cabeçalho de resposta Access-Control-Allow-Origin.

  6. A inclusão do cabeçalho Access-Control-Allow-Origin permite que o navegador chame a API solicitada.

Personalização do CORS

Por padrão, a funcionalidade cors não está habilitada; no entanto, os administradores podem habilitar a funcionalidade por meio do Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -EnableCORS $true

Depois de habilitado, os administradores podem enumerar uma lista de origens confiáveis usando o mesmo cmdlet. Por exemplo, o comando a seguir permitiria solicitações CORS das origens https&#58;//example1.com e https&#58;//example1.com.

Set-AdfsResponseHeaders -CORSTrustedOrigins https://example1.com,https://example2.com

Note

Os administradores podem permitir solicitações CORS de qualquer origem incluindo "*" na lista de origens confiáveis, embora essa abordagem não seja recomendada devido a vulnerabilidades de segurança e uma mensagem de aviso será fornecida se eles optarem por.

CSP (Política de Segurança de Conteúdo)

Esse cabeçalho de resposta de segurança HTTP é usado para impedir o script entre sites, o clickjacking e outros ataques de injeção de dados, impedindo que os navegadores executem conteúdo mal-intencionado inadvertidamente. Os navegadores que não dão suporte à CSP (Política de Segurança de Conteúdo) ignoram os cabeçalhos de resposta CSP.

Personalização do CSP

A personalização do cabeçalho CSP envolve a modificação da política de segurança que define os recursos que o navegador tem permissão para carregar para a página da Web. A política de segurança padrão é:

Content-Security-Policy: default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:;

A diretiva src padrão é usada para modificar as diretivas -src sem listar cada diretiva explicitamente. Por exemplo, no exemplo a seguir, a política 1 é igual à política 2.

Política 1

Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "default-src 'self'"

Política 2

Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "script-src 'self'; img-src 'self'; font-src 'self';
frame-src 'self'; manifest-src 'self'; media-src 'self';"

Se uma diretiva estiver explicitamente listada, o valor especificado substituirá o valor fornecido para o src padrão. No exemplo a seguir, o img-src usa o valor como '*' (permitindo que as imagens sejam carregadas de qualquer origem), enquanto outras diretivas -src assumem o valor como 'self' (restringindo à mesma origem que a página da Web).

Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "default-src 'self'; img-src *"

As seguintes fontes podem ser definidas para a política de src padrão:

  • 'self' – especificar essa origem restringe o carregamento do conteúdo à origem da página da Web.
  • 'unsafe-inline': a especificação dessa fonte na política permite o uso de JavaScript e CSS embutidos.
  • 'unsafe-eval': a especificação dessa fonte na política permite o uso de mecanismos de texto para JavaScript, como o eval.
  • 'none' – especificar essa fonte restringe o conteúdo de qualquer origem a ser carregada.
  • dados: – especificando dados: URIs permitem que os criadores de conteúdo insiram arquivos pequenos embutidos em documentos. Uso não recomendado.

Note

O AD FS usa o JavaScript no processo de autenticação e, portanto, habilita o JavaScript incluindo as fontes 'unsafe-inline' e 'unsafe-eval' na política padrão.

Cabeçalhos personalizados

Além dos cabeçalhos de resposta de segurança listados anteriormente (HSTS, CSP, X-Frame-Options, X-XSS-Protection e CORS), o AD FS 2019 permite que você defina novos cabeçalhos.

Por exemplo, você pode definir um novo cabeçalho "TestHeader" e "TestHeaderValue" como o valor.

Set-AdfsResponseHeaders -SetHeaderName "TestHeader" -SetHeaderValue "TestHeaderValue"

Depois de configurado, o novo cabeçalho é enviado na resposta do AD FS, conforme mostrado no seguinte trecho do Fiddler.

Captura de tela do Fiddler na guia cabeçalhos que destaca o TestHeader: TestHeaderValue em Diversos.

Compatibilidade do navegador da Web

Use a tabela e os links a seguir para determinar quais navegadores da Web são compatíveis com cada um dos cabeçalhos de resposta de segurança.

Cabeçalhos de Resposta de Segurança HTTP Compatibilidade do navegador
HSTS (HTTP Strict-Transport-Security) Compatibilidade do navegador HSTS
X-Frame-Options Compatibilidade do navegador X-Frame-Options
X-XSS-Protection Compatibilidade do navegador X-XSS-Protection
CORS (Compartilhamento de Recurso entre Origens) Compatibilidade do navegador CORS
CSP (Política de Segurança de Conteúdo) Compatibilidade do navegador CSP

Next

  • Solução de problemas do AD FS