Personalización de los encabezados de respuesta de seguridad HTTP con AD FS 2019

Los Servicios de federación de Active Directory (AD FS) 2019 agregan la funcionalidad para personalizar los encabezados de respuesta de seguridad HTTP enviados por AD FS. Estas herramientas ayudan a los administradores a protegerse frente a vulnerabilidades de seguridad comunes y les permiten aprovechar los últimos avances en los mecanismos de protección basados en exploradores. Esta característica proviene de la introducción de dos cmdlets nuevos: Get-AdfsResponseHeaders y Set-AdfsResponseHeaders.

Nota

La funcionalidad para personalizar los encabezados de respuesta de seguridad HTTP (excepto los encabezados CORS) con los cmdlets Get-AdfsResponseHeaders y Set-AdfsResponseHeaders se puede instalar en AD FS 2016. Para agregar esta funcionalidad a AD FS 2016, instale las actualizaciones KB4493473 y KB4507459.

Este artículo analiza los encabezados de respuesta de seguridad que se usan habitualmente para mostrar cómo personalizar los encabezados que envía AD FS 2019.

Nota

En el artículo se supone que ha instalado AD FS 2019.

Escenarios

En los escenarios siguientes se muestra la necesidad de que los administradores tengan que personalizar los encabezados de seguridad.

  • Un administrador ha habilitado HTTP Strict-Transport-Security (HSTS) para proteger a los usuarios que podrían acceder a la aplicación web usando HTTP desde un punto de acceso WiFi público que podría ser pirateado. HSTS fuerza todas las conexiones a través del cifrado HTTPS. Quiere reforzar aún más la seguridad habilitando HSTS para los subdominios.
  • Un administrador ha configurado el encabezado de respuesta X-Frame-Options para proteger las páginas web frente al secuestro de clics. X-Frame-Options evita la representación de cualquier página web en un iFrame. Sin embargo, debe personalizar el valor del encabezado debido a un nuevo requisito empresarial para mostrar datos (en iFrame) de una aplicación con un origen (dominio) diferente.
  • Un administrador ha habilitado X-XSS-Protection para corregir y bloquear la página si el explorador detecta ataques de scripting cruzado. X-XSS-Protection evita ataques de scripting cruzado. Sin embargo, debe personalizar el encabezado para permitir que la página se cargue una vez corregida.
  • Un administrador debe habilitar el uso compartido de recursos entre orígenes (CORS) y establecer el origen (dominio) en AD FS para permitir que una aplicación de página única acceda a una API web con otro dominio.
  • Un administrador ha habilitado el encabezado de directiva de seguridad de contenido (CSP) para evitar ataques de inyección de datos y scripting cruzado al no permitir solicitudes entre dominios. Sin embargo, debido a un nuevo requisito empresarial, debe personalizar el encabezado para permitir que la página web cargue imágenes de cualquier origen y restrinja los medios a proveedores de confianza.

Encabezados de respuesta de seguridad HTTP

AD FS incluye los encabezados de respuesta en la respuesta HTTP saliente que se envía a un explorador web. Puede enumerar los encabezados mediante el cmdlet Get-AdfsResponseHeaders como se muestra en la captura de pantalla siguiente.

Screenshot that shows the PowerShell output from Get-AdfsResponseHeaders.

El atributo ResponseHeaders de la captura de pantalla identifica los encabezados de seguridad que AD FS incluye en cada respuesta HTTP. AD FS envía los encabezados de respuesta solo si ResponseHeadersEnabled está establecido en True (valor predeterminado). El valor se puede establecer en False para evitar que AD FS incluya cualquiera de los encabezados de seguridad en la respuesta HTTP. Sin embargo, esta no es una opción recomendada. Puede establecer ResponseHeaders en False con el siguiente comando:

Set-AdfsResponseHeaders -EnableResponseHeaders $false

HTTP con seguridad de transporte estricta (HSTS)

HTTP Strict-Transport-Security (HSTS) es un mecanismo de la directiva de seguridad web que ayuda a mitigar los ataques de degradación del protocolo y el secuestro de cookies de los servicios que tienen puntos de conexión HTTP y HTTPS. Permite que los servidores web declaren que los exploradores web (u otros agentes de usuario que cumplen los requisitos) solo deben interactuar con este mediante HTTPS y nunca a través del protocolo HTTP.

Todos los puntos de conexión de AD FS para el tráfico de autenticación web se abren exclusivamente a través de HTTPS. Como resultado, AD FS mitiga de manera efectiva las amenazas que proporciona el mecanismo de la directiva de transporte estricto HTTP. De manera predeterminada, no hay ninguna degradación a HTTP, ya que no hay agentes de escucha en HTTP. El encabezado se puede personalizar estableciendo los siguientes parámetros:

  • max-age=<expire-time>. El tiempo de expiración (en segundos) especifica cuánto tiempo se debe acceder al sitio usando únicamente HTTPS. El valor predeterminado y recomendado es 31536000 segundos (un año).
  • includeSubDomains. Este parámetro es opcional. Si se especifica, la regla HSTS se aplica también a todos los subdominios.

Personalización de HSTS

De manera predeterminada, el encabezado está habilitado y max-age está establecido en 1 año; sin embargo, los administradores pueden modificar el valor de max-age (no se recomienda reducir el valor max-age) o habilitar HSTS para los subdominios con el cmdlet Set-AdfsResponseHeaders.

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

Ejemplo:

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

De manera predeterminada, el encabezado se incluye en el atributo ResponseHeaders; sin embargo, los administradores pueden quitar el encabezado con el cmdlet Set-AdfsResponseHeaders.

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

X-Frame-Options

De manera predeterminada, AD FS no permite que las aplicaciones externas usen iFrame en los inicios de sesión interactivos. Esta configuración evita cierto estilo de ataques de suplantación de identidad (phishing). Los inicios de sesión no interactivos se pueden realizar con iFrame debido a la seguridad de nivel de sesión anterior que se ha establecido.

Sin embargo, en algunos casos excepcionales, puede confiar en una aplicación específica que requiera una página de inicio de sesión interactiva de AD FS que admita iFrame. El encabezado X-Frame-Options se usa para este propósito.

Este encabezado de respuesta de seguridad HTTP se usa para comunicarle el explorador si puede representar una página en un elemento <frame> o <iframe>. El encabezado puede establecerse en uno de los siguientes valores:

  • deny. No se muestra la página en un marco. Esta configuración es la configuración predeterminada y recomendada.
  • sameorigin. La página solo se muestra en el marco si el origen es el mismo que el origen de la página web. La opción no es útil, a menos que todos los antecesores estén también en el mismo origen.
  • allow-from <specified origin>. La página solo se muestra en el marco si el origen (por ejemplo, https://www.".com) coincide con el origen específico en el encabezado. Es posible que algunos exploradores no admitan esta opción.

Personalización de X-Frame-Options

De manera predeterminada, el encabezado se establece en deny; sin embargo, los administradores pueden modificar el valor con el cmdlet Set-AdfsResponseHeaders.

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

Ejemplo:

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

De manera predeterminada, el encabezado se incluye en el atributo ResponseHeaders; sin embargo, los administradores pueden quitar el encabezado con el cmdlet Set-AdfsResponseHeaders.

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

X-XSS-Protection

Este encabezado de respuesta de seguridad HTTP se usa para impedir que las páginas web se carguen cuando los exploradores detectan ataques de scripting entre sitios (XSS). Este enfoque se denomina filtrado XSS. El encabezado puede establecerse en uno de los siguientes valores:

  • 0 deshabilita el filtrado XSS. No se recomienda.
  • 1 habilita el filtrado XSS. Si se detecta un filtrado XSS, el explorador corrige la página.
  • 1; mode=block habilita el filtrado XSS. Si se detecta un ataque XSS, el explorador impide que se represente la página. Este es el valor predeterminado y recomendado.

Personalización de X-XSS-Protection

De manera predeterminada, el encabezado se establece en 1; mode=block;. Sin embargo, los administradores pueden modificar el valor a través del cmdlet Set-AdfsResponseHeaders.

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

Ejemplo:

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

De manera predeterminada, el encabezado se incluye en el atributo ResponseHeaders; sin embargo, los administradores pueden quitar el encabezado con el cmdlet Set-AdfsResponseHeaders.

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

Encabezados de uso compartido de recursos entre orígenes (CORS)

La seguridad del explorador web impide que una página web realice solicitudes entre orígenes iniciadas desde scripts. Sin embargo, es posible que quiera acceder a recursos de otros orígenes (dominios). Uso compartido de recursos de origen cruzado (CORS) es una norma de W3C que permite mayor flexibilidad a los servidores en la directiva de mismo origen. Con CORS, un servidor puede permitir explícitamente algunas solicitudes de origen cruzado y rechazar otras.

Para comprender mejor una solicitud CORS, el siguiente escenario explica una instancia en la que una aplicación de página única (SPA) necesita llamar a una API web con un dominio diferente. Además, tenga en cuenta que tanto SPA como API están configurados en AD FS 2019 y AD FS tiene CORS habilitado. AD FS puede identificar encabezados CORS en la solicitud HTTP, validar valores de encabezado e incluir los encabezados CORS adecuados en la respuesta. Para obtener más información sobre cómo habilitar y configurar CORS en AD FS 2019, consulte la sección Personalización de CORS. El siguiente flujo de ejemplo le guía por el escenario:

  1. Un usuario accede a SPA a través del explorador del cliente y se redirige al punto de conexión de autenticación de AD FS para la autenticación. Puesto que SPA está configurada para el flujo de concesión implícita, la solicitud devuelve un token de acceso e identificador al explorador después de una autenticación correcta.

  2. Después de la autenticación del usuario, el código de JavaScript del front-end incluido en la SPA realiza una solicitud para acceder a la API web. La solicitud se redirige a AD FS con los siguientes encabezados:

    • Options: describe las opciones de comunicación para el recurso de destino.
    • Origin: incluye el origen de la API web.
    • Access-Control-Request-Method: identifica el método HTTP (por ejemplo, DELETE) que se usará cuando se realice una solicitud real.
    • Access-Control-Request-Headers: identifica los encabezados HTTP que se usarán cuando se realice una solicitud real.

    Nota

    Una solicitud CORS es similar a una solicitud HTTP estándar. Sin embargo, la presencia de un encabezado Origin indica que la solicitud entrante está relacionada con CORS.

  3. AD FS comprueba que el origen de la API web incluido en el encabezado esté enumerado en los orígenes de confianza configurados en AD FS. Para obtener más información sobre cómo modificar orígenes de confianza, consulte Personalización de CORS. A continuación, AD FS responde con los siguientes encabezados:

    • Access-Control-Allow-Origin: mismo valor que en el encabezado Origin.
    • Access-Control-Allow-Method: mismo valor que en el encabezado Access-Control-Request-Method.
    • Access-Control-Allow-Headers: mismo valor que en el encabezado Access-Control-Request-Headers.
  4. El explorador envía la solicitud real con los siguientes encabezados:

    • Método HTTP (por ejemplo, DELETE).
    • Origin: incluye el origen de la API web.
    • Todos los encabezados incluidos en el encabezado de respuesta Access-Control-Allow-Headers.
  5. Una vez comprobado, AD FS aprueba la solicitud incluyendo el dominio (origen) de la API web en el encabezado de respuesta Access-Control-Allow-Origin.

  6. La inclusión del encabezado Access-Control-Allow-Origin permite al explorador llamar a la API solicitada.

Personalización de CORS

De manera predeterminada, la funcionalidad de CORS no está habilitada; sin embargo, los administradores pueden habilitarla con el cmdlet Set-AdfsResponseHeaders.

Set-AdfsResponseHeaders -EnableCORS $true

Una vez habilitada, los administradores pueden enumerar una lista de orígenes de confianza mediante el mismo cmdlet. Por ejemplo, el siguiente comando permite solicitudes CORS de los orígenes https&#58;//example1.com y https&#58;//example1.com.

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

Nota

Los administradores pueden permitir solicitudes CORS de cualquier origen incluyendo "*" en la lista de orígenes de confianza, aunque este enfoque no se recomienda debido a vulnerabilidades de seguridad y se muestra un mensaje de advertencia si decide hacerlo.

Directiva de seguridad de contenido (CSP)

Este encabezado de respuesta de seguridad HTTP se usa para evitar el scripting entre sitios, el secuestro de clics y otros ataques por inyección de datos, ya que evita que los exploradores ejecuten accidentalmente contenido malintencionado. Los exploradores que no admiten la directiva de seguridad de contenido (CSP) omiten los encabezados de respuesta de CSP.

Personalización de CSP

La personalización del encabezado CSP implica modificar la directiva de seguridad que define los recursos que el explorador puede cargar para la página web. La directiva de seguridad predeterminada es:

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

La directiva default-src se usa para modificar las directivas -src sin enumerar cada directiva explícitamente. En el ejemplo siguiente, la directiva 1 es igual que la directiva 2.

Directiva 1

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

Directiva 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';"

Si se enumera explícitamente una directiva, el valor especificado reemplaza el valor especificado para default-src. En el ejemplo siguiente, img-src toma el valor como "*" (permite cargar imágenes de cualquier origen), mientras que otras directivas -src toman el valor como "self" (restringe al mismo origen que la página web).

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

Se pueden definir los siguientes orígenes para la directiva default-src:

  • "self": al especificar este origen, se restringe el origen del contenido que se va a cargar al origen de la página web.
  • "unsafe-inline": al especificar este origen en la directiva, se permite el uso de código JavaScript insertado y CSS.
  • "unsafe-eval": al especificar este origen en la directiva, se permite el uso de mecanismos (como eval) que evalúan texto como JavaScript.
  • "none": al especificar este origen, se restringe la carga de contenido de cualquier origen.
  • data: al especificar data, los URI permiten a los creadores de contenido insertar archivos pequeños en documentos. No se recomienda su uso.

Nota

AD FS utiliza JavaScript en el proceso de autenticación y, por tanto, habilita JavaScript incluyendo orígenes "unsafe-inline" y "unsafe-eval" en la directiva predeterminada.

Encabezados personalizados

Además de los encabezados de respuesta de seguridad enumerados anteriormente (HSTS, CSP, X-Frame-Options, X-XSS-Protection y CORS), AD FS 2019 permite establecer encabezados nuevos.

Por ejemplo, podría establecer un nuevo encabezado "TestHeader" y "TestHeaderValue" como valor.

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

Una vez establecido, el nuevo encabezado se envía en la respuesta de AD FS, como se muestra en el siguiente fragmento de código de Fiddler:

Screenshot of Fiddler on the headers tab that highlights TestHeader: TestHeaderValue under Miscellaneous.

Compatibilidad con exploradores web

Utilice la tabla y los vínculos siguientes para determinar qué exploradores web son compatibles con cada uno de los encabezados de respuesta de seguridad.

Encabezados de respuesta de seguridad HTTP Compatibilidad con exploradores
HTTP con seguridad de transporte estricta (HSTS) Compatibilidad de HSTS con exploradores
X-Frame-Options Compatibilidad de X-Frame-Options con exploradores
X-XSS-Protection Compatibilidad de X-XSS-Protection con exploradores
Uso compartido de recursos entre orígenes (CORS) Compatibilidad de CORS con exploradores
Directiva de seguridad de contenido (CSP) Compatibilidad de CSP con exploradores

Siguientes