Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 explorador. Esta característica procede de la introducción de dos nuevos cmdlets: Get-AdfsResponseHeaders y Set-AdfsResponseHeaders.
Note
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. Puede agregar la funcionalidad a su AD FS 2016 instalando KB4493473 y KB4507459.
En este artículo se describen los encabezados de respuesta de seguridad usados habitualmente para mostrar cómo personalizar los encabezados enviados por AD FS 2019.
Note
En el artículo se da por supuesto que instaló AD FS 2019.
Scenarios
Los escenarios siguientes muestran la necesidad de que los administradores tengan que personalizar los encabezados de seguridad.
- Un administrador habilitó HTTP Strict-Transport-Security (HSTS) para proteger a los usuarios que podrían acceder a la aplicación web mediante HTTP desde un punto de acceso wifi público que podría ser hackeado. HSTS fuerza todas las conexiones a través del cifrado HTTPS. Les gustaría reforzar aún más la seguridad al habilitar HSTS para subdominios.
- Un administrador configuró el encabezado de respuesta X-Frame-Options para proteger las páginas web de ataques de clickjacking. X-Frame-Options impide la representación de cualquier página web en un iFrame. Sin embargo, deben personalizar el valor de encabezado debido a un nuevo requisito empresarial para mostrar datos (en iFrame) desde una aplicación con un origen (dominio) diferente.
- Un administrador habilitó X-XSS-Protection para sanear y bloquear la página si el explorador detecta ataques entre scripts. X-XSS-Protection evita ataques de scripting cruzado. Sin embargo, deben personalizar el encabezado para permitir que la página se cargue después de sanearla.
- Un administrador debe habilitar el uso compartido de recursos entre orígenes (CORS) y debe 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 habilitó el encabezado directiva de seguridad de contenido (CSP) para evitar ataques de inserción de datos y scripting entre sitios, ya que no permite las solicitudes entre dominios. Sin embargo, debido a un nuevo requisito empresarial, deben personalizar el encabezado para permitir que la página web cargue imágenes desde 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 enviada a un explorador web. Puede enumerar los encabezados mediante el Get-AdfsResponseHeaders cmdlet , como se muestra en la captura de pantalla siguiente.
El atributo ResponseHeaders de la captura de pantalla identifica los encabezados de seguridad incluidos por AD FS en cada respuesta HTTP. AD FS envía los encabezados de respuesta solo si ResponseHeadersEnabled está establecido True en (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, no se recomienda esta configuración. 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 directiva de seguridad web, que ayuda a mitigar los ataques de degradación del protocolo y el secuestro de cookies para 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 solo deben interactuar con él 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 eficazmente las amenazas que proporciona el mecanismo de directiva de seguridad de transporte estricto HTTP. De forma predeterminada, no hay ninguna degradación a HTTP, ya que no hay agentes de escucha en HTTP. El encabezado se puede personalizar estableciendo los parámetros siguientes:
- max-age=<expire-time>. La hora de expiración (en segundos) especifica cuánto tiempo solo se debe tener acceso al sitio mediante HTTPS. El valor predeterminado y recomendado es 31536000 segundos (un año).
- includeSubDomains. Este parámetro es opcional. Si se especifica, la regla HSTS también se aplica a todos los subdominios.
Personalización de HSTS
De forma predeterminada, el encabezado está habilitado y max-age se establece en un año; sin embargo, los administradores pueden modificar (no se recomienda reducir el max-age valor máximo de antigüedad) ni habilitar HSTS para subdominios mediante el 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"
De forma predeterminada, el encabezado se incluye en el atributo ResponseHeaders ; sin embargo, los administradores pueden quitar el encabezado a través del Set-AdfsResponseHeaders cmdlet .
Set-AdfsResponseHeaders -RemoveHeaders "Strict-Transport-Security"
X-Frame-Options
AD FS de forma predeterminada no permite que las aplicaciones externas usen iFrames al realizar el inicio de sesión interactivo. Esta configuración evita cierto estilo de ataques de suplantación de identidad (phishing). El inicio de sesión no interactivo se puede realizar a través de iFrame debido a la seguridad de nivel de sesión anterior que se ha establecido.
Sin embargo, en algunos casos excepcionales podría confiar en una aplicación específica que requiere una página de inicio de sesión interactiva de AD FS compatible con iFrame. El X-Frame-Options encabezado se usa para este propósito.
Este encabezado de respuesta de seguridad HTTP se usa para comunicarse con el explorador si puede representar una página en un <marco>/<iframe>. El encabezado se puede establecer 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 antepasados también estén en el mismo origen.
-
allow-from <origen especificado>. 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 forma predeterminada, el encabezado se establece en deny; sin embargo, los administradores pueden modificar el valor a través del 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"
De forma predeterminada, el encabezado se incluye en el atributo ResponseHeaders ; sin embargo, los administradores pueden quitar el encabezado a través del Set-AdfsResponseHeaders cmdlet .
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 detecten ataques de scripting entre sitios (XSS). Este enfoque se conoce como filtrado XSS. El encabezado se puede establecer en uno de los siguientes valores:
- 0 deshabilita el filtrado XSS. No se recomienda.
- 1 habilita el filtrado XSS. Si se detecta un ataque XSS, el explorador sanea la página.
- 1; mode=block habilita el filtrado XSS. Si se detecta un ataque XSS, el explorador impide la representación de la página. Esta configuración es la configuración predeterminada y recomendada.
Personalización de X-XSS-Protection
De forma predeterminada, el encabezado se establece en 1; mode=block;. Sin embargo, los administradores pueden modificar el valor a través del 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"
De forma predeterminada, el encabezado se incluye en el atributo ResponseHeaders ; sin embargo, los administradores pueden quitar el encabezado a través del Set-AdfsResponseHeaders cmdlet .
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 los recursos en 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. Mediante CORS, un servidor puede permitir explícitamente algunas solicitudes de origen cruzado mientras rechaza otras.
Para comprender mejor una solicitud CORS, el escenario siguiente le guía por 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 spa y 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 encabezados CORS adecuados en la respuesta. Para 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:
Un usuario accede a SPA a través del explorador cliente y se redirige al punto de conexión de autenticación de AD FS para la autenticación. Dado que SPA está configurado para el flujo de concesión implícita, la solicitud devuelve un token de Access + ID al explorador después de la autenticación correcta.
Después de la autenticación de usuario, el JavaScript de la interfaz de usuario incluido en la SPA envía una solicitud para acceder a la API web. La solicitud se redirige a AD FS con los siguientes encabezados:
- Opciones: describe las opciones de comunicación para el recurso de destino.
- Origen: incluye el origen de la API web.
- Access-Control-Request-Method: identifica el método HTTP (por ejemplo, DELETE) que se va a usar cuando se realiza una solicitud real.
- Access-Control-Request-Headers: identifica los encabezados HTTP que se van a usar cuando se realiza una solicitud real.
Note
Una solicitud CORS es similar a una solicitud HTTP estándar. Sin embargo, la presencia de un encabezado de origen indica que la solicitud entrante está relacionada con CORS.
AD FS comprueba que el origen de la API web incluido en el encabezado aparece 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. AD FS responde con los siguientes encabezados:
- Access-Control-Allow-Origin: valor igual que en el encabezado Origin.
- Access-Control-Allow-Method: valor igual que en el encabezado Access-Control-Request-Method.
- Access-Control-Allow-Headers: valor igual que en el encabezado Access-Control-Request-Headers.
El explorador envía la solicitud real, incluidos los encabezados siguientes:
- Método HTTP (por ejemplo, DELETE).
- Origen: incluye el origen de la API web.
- Todos los encabezados incluidos en el encabezado de respuesta Access-Control-Allow-Headers.
Una vez comprobado, AD FS aprueba la solicitud mediante la inclusión del dominio de API web (origen) en el encabezado de respuesta Access-Control-Allow-Origin.
La inclusión del encabezado Access-Control-Allow-Origin permite al explorador llamar a la API solicitada.
Personalización de CORS
De forma predeterminada, la funcionalidad cors no está habilitada; sin embargo, los administradores pueden habilitar la funcionalidad a través del Set-AdfsResponseHeaders cmdlet .
Set-AdfsResponseHeaders -EnableCORS $true
Después de habilitarlo, los administradores pueden enumerar una lista de orígenes de confianza mediante el mismo cmdlet. Por ejemplo, el siguiente comando permitiría solicitudes CORS desde los orígenes https://example1.com y https://example1.com.
Set-AdfsResponseHeaders -CORSTrustedOrigins https://example1.com,https://example2.com
Note
Los administradores pueden permitir solicitudes CORS desde cualquier origen mediante la inclusión de "*" en la lista de orígenes de confianza, aunque este enfoque no se recomienda debido a vulnerabilidades de seguridad y se proporciona 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 robo de clics y otros ataques de inyección de datos evitando que los exploradores ejecuten contenido malintencionado accidentalmente. 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. Por ejemplo, en el ejemplo siguiente, la directiva 1 es la misma 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 muestra explícitamente una directiva, el valor especificado invalida el valor especificado para default-src. En el ejemplo siguiente, img-src toma el valor como "*" (lo que permite que las imágenes se carguen desde cualquier origen) mientras que otras directivas de -src toman el valor como "self" (restringiendo al mismo origen que la página web).
Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "default-src 'self'; img-src *"
Las siguientes fuentes pueden definirse para la política 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': especificar este origen en la directiva permite el uso de texto en mecanismos de JavaScript como eval.
- 'none': al especificar este origen, se restringe el contenido de cualquier origen a cargar.
- data: al especificar data, los URI permiten a los creadores de contenido insertar archivos pequeños en documentos. No se recomienda el uso.
Note
AD FS utiliza JavaScript en el proceso de autenticación y, por lo tanto, habilita JavaScript mediante la inclusión de las fuentes "unsafe-inline" y "unsafe-eval" en la política 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 nuevos encabezados.
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:
Compatibilidad del explorador web
Use 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 del explorador |
|---|---|
| HTTP con seguridad de transporte estricta (HSTS) | Compatibilidad del explorador HSTS |
| X-Frame-Options | Compatibilidad del explorador X-Frame-Options |
| X-XSS-Protection | Compatibilidad del explorador X-XSS-Protection |
| Uso compartido de recursos entre orígenes (CORS) | Compatibilidad del explorador CORS |
| Directiva de seguridad de contenido (CSP) | Compatibilidad del explorador CSP |