Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os Serviços de Federação do Ative Directory (AD FS) 2019 adicionam a funcionalidade para personalizar os cabeçalhos de resposta de segurança HTTP enviados pelo AD FS. Essas ferramentas ajudam os administradores a se protegerem contra vulnerabilidades de segurança comuns e permitem que eles aproveitem os avanços mais recentes em mecanismos de proteção baseados em navegadores. Esse recurso vem da introdução de dois novos cmdlets: Get-AdfsResponseHeaders e Set-AdfsResponseHeaders.
Note
A funcionalidade para personalizar os cabeçalhos de resposta de segurança HTTP (exceto cabeçalhos CORS) usando cmdlets: Get-AdfsResponseHeaders e Set-AdfsResponseHeaders foi retroportada para o AD FS 2016. Pode adicionar a funcionalidade ao AD FS 2016 instalando o KB4493473 e o 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 de 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 wifi público que pode ser hackeado. O HSTS força todas as conexões por criptografia HTTPS. Eles gostariam de reforçar ainda mais a segurança, habilitando 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 detetar ataques de cross-scripting. X-XSS-Protection evita ataques de crossscripting. No entanto, eles precisam personalizar o cabeçalho para permitir que a página seja carregada depois de limpa.
- Um administrador precisa habilitar o CORS (Cross Origin Resource Sharing) e precisa definir a origem (domínio) no AD FS para permitir que um aplicativo de página única acesse uma API da Web com outro domínio.
- Um administrador habilitou o cabeçalho CSP (Política de Segurança de Conteúdo) para evitar scripts entre sites e ataques de 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.
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 como True (valor padrão). O valor pode ser definido como False para 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 ResponseHeaders como False com o seguinte comando:
Set-AdfsResponseHeaders -EnableResponseHeaders $false
HTTP Strict-Transport-Security (HSTS)
HTTP Strict-Transport-Security (HSTS) é um mecanismo de política de segurança da Web, que ajuda a mitigar ataques de downgrade de protocolo e sequestro de cookies para serviços que têm pontos de extremidade HTTP e HTTPS. Ele permite que os servidores da Web declarem que os navegadores da Web, ou outros agentes de usuário compatíveis, só devem interagir com ele usando HTTPS e nunca através do protocolo HTTP.
Todos os pontos de extremidade do AD FS para tráfego de autenticação da Web são abertos exclusivamente via HTTPS. Como resultado, o AD FS reduz efetivamente as ameaças que o mecanismo de diretiva HTTP Strict Transport Security fornece. Por padrão, não há 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. Este parâmetro é opcional. Se especificado, a regra HSTS também se aplica a todos os subdomínios.
Personalização HSTS
Por padrão, o cabeçalho é habilitado e max-age definido como um ano, no entanto, os administradores podem modificar o (reduzir o max-age valor de idade máxima 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
O AD FS por padrão não permite que aplicativos externos usem iFrames ao executar o login interativo. Essa configuração impede determinado estilo de ataques de phishing. O início de sessão não interativo pode ser efetuado através do iFrame devido à segurança previamente estabelecida ao nível de sessão.
No entanto, em certos casos raros, você pode confiar em um aplicativo específico que requer uma página de entrada interativa do AD FS compatível com iFrame. O X-Frame-Options cabeçalho é usado para esta finalidade.
Esse cabeçalho de resposta de segurança HTTP é usado para comunicar ao 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 num quadro não é exibida. Essa configuração é a configuração padrão e recomendada.
- sameorigin. A página só é 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 antepassados também estejam na mesma origem.
-
permitir-de <origem especificada>. A página só é exibida no quadro se a origem (por exemplo,
https://www.".com) corresponder à origem específica no cabeçalho. Alguns navegadores podem não suportar esta opção.
X-Frame-Options personalização
Por padrão, o cabeçalho é definido como 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 que páginas da Web sejam carregadas quando os navegadores detetam ataques de script entre sites (XSS). Essa abordagem é conhecida como filtragem XSS. O cabeçalho pode ser definido como um dos seguintes valores:
- 0 desativa a filtragem XSS. Não recomendado.
- 1 permite a filtragem XSS. Se for detetado um ataque XSS, o navegador limpa a página.
- 1; mode=block permite a filtragem XSS. Se um ataque XSS for detetado, o navegador impedirá a renderização da página. Essa configuração é a configuração padrão e recomendada.
X-XSS-Protection personalização
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 (Cross Origin Resource Sharing)
A segurança do navegador da Web impede que uma página da Web faça solicitações de origem cruzada iniciadas a partir de scripts. No entanto, talvez você queira acessar recursos em outras origens (domínios). O Cross Origin Resource Sharing (CORS) é um padrão W3C que permite que um servidor relaxe a política de mesma origem. Usando o CORS, um servidor pode permitir explicitamente algumas solicitações de origem cruzada enquanto rejeita outras.
Para entender melhor uma solicitação CORS, o cenário a seguir percorre uma instância em que um aplicativo de página única (SPA) precisa chamar uma API da 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:
Um utilizador acede ao SPA através do navegador do cliente e é redirecionado para o endpoint de autenticação do AD FS para autenticação. Como o SPA está configurado para fluxo de concessão implícito, a solicitação retorna um token Access + ID para o navegador após a autenticação bem-sucedida.
Após a autenticação do usuário, o JavaScript front-end incluído no SPA faz uma solicitação para acessar a API da 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 da Web.
- Access-Control-Request-Method - identifica o método HTTP (por exemplo, DELETE) a ser usado quando uma solicitação real é feita.
- 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.
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 Personalização do CORS. EM SEGUIDA, O AD FS responde com os seguintes cabeçalhos:
- Access-Control-Allow-Origin - valor igual ao do cabeçalho Origin.
- Access-Control-Allow-Method - valor igual ao do cabeçalho Access-Control-Request-Method.
- Access-Control-Allow-Headers - valor igual ao do cabeçalho Access-Control-Request-Headers.
O navegador envia a solicitação real, incluindo os seguintes cabeçalhos:
- Método HTTP (por exemplo, DELETE).
- Origem – inclui a origem da API da Web.
- Todos os cabeçalhos estão incluídos no cabeçalho de resposta Access-Control-Allow-Headers.
Depois de verificado, o AD FS aprova a solicitação incluindo o domínio da API Web (origem) no cabeçalho de resposta do Access-Control-Allow-Origin.
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://example1.com e https://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 seja fornecida se assim desejarem.
Política de Segurança de Conteúdo (CSP)
Esse cabeçalho de resposta de segurança HTTP é usado para evitar scripts entre sites, clickjacking e outros ataques de injeção de dados, impedindo que os navegadores executem inadvertidamente conteúdo mal-intencionado. Os navegadores que não suportam a Política de Segurança de Conteúdo (CSP) ignoram os cabeçalhos de resposta CSP.
Personalização 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 default-src é usada para modificar diretivas -src sem listar cada diretiva explicitamente. Por exemplo, no exemplo a seguir, a política 1 é a mesma que a 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 default-src. No exemplo a seguir, o img-src toma o valor como '*' (permitindo que imagens sejam carregadas de qualquer origem), enquanto outras diretivas -src tomam o valor como 'self' (restringindo a 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 default-src:
- 'self' - especificar esta fonte restringe a origem do conteúdo a carregar à origem da página web.
- 'unsafe-inline' - especificar esta fonte na política permite o uso de JavaScript e CSS embutidos.
- 'unsafe-eval' - especificar esta fonte na política permite o uso de texto para mecanismos JavaScript como eval.
- 'nenhum' - especificar esta origem restringe o carregamento de conteúdo de qualquer fonte.
- data: - especificando dados: os URIs permitem que os criadores de conteúdo incorporem pequenos arquivos embutidos em documentos. Uso não recomendado.
Note
O AD FS usa JavaScript no processo de autenticação e, portanto, habilita o JavaScript incluindo 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 definir novos cabeçalhos.
Como exemplo, você pode definir um novo cabeçalho "TestHeader" e "TestHeaderValue" como o valor.
Set-AdfsResponseHeaders -SetHeaderName "TestHeader" -SetHeaderValue "TestHeaderValue"
Depois de definido, o novo cabeçalho é enviado na resposta do AD FS, conforme mostrado no seguinte trecho do Fiddler:
Compatibilidade com navegadores 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 |
|---|---|
| HTTP Strict-Transport-Security (HSTS) | Compatibilidade do navegador HSTS |
| X-Frame-Options | Compatibilidade do navegador X-Frame-Options |
| X-XSS-Protection | X-XSS-Protection compatibilidade de navegadores |
| Compartilhamento de recursos entre origens (CORS) | Compatibilidade do navegador CORS |
| Política de Segurança de Conteúdo (CSP) | Compatibilidade do navegador CSP |