Saltar a contenido

length-hiding: Módulo de Filtro de Ocultación de Longitud de NGINX

Instalación

Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:

  • RedHat Enterprise Linux 7, 8, 9 y 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 y Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-length-hiding
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-length-hiding

Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:

load_module modules/ngx_http_length_hiding_filter_module.so;

Este documento describe nginx-module-length-hiding v1.1.1 lanzado el 19 de julio de 2017.


Módulo de Filtro de Ocultación de Longitud de Nginx

Introducción

En el sitio de BREACH, las mitigaciones contra el ataque BREACH se presentan de la siguiente manera:

  1. Desactivar la compresión HTTP
  2. Separar secretos de la entrada del usuario
  3. Aleatorizar secretos por solicitud
  4. Enmascarar secretos (aleatorizando efectivamente mediante XOR con un secreto aleatorio por solicitud)
  5. Proteger páginas vulnerables con CSRF
  6. Ocultación de longitud (agregando un número aleatorio de bytes a las respuestas)
  7. Limitar la tasa de las solicitudes

BREACH se basa en la compresión HTTP y es razonable desactivarla para asegurar tu sitio web. Sin embargo, sin compresión, algunos sitios web pueden experimentar una degradación severa del rendimiento o el costo puede aumentar si se te cobra según el volumen de tráfico como en AWS. En tal caso, puede ser difícil desactivar la compresión HTML para todas las respuestas de tu sitio web y necesitar adoptar otras formas adecuadas.

Otras mitigaciones listadas del 2º al 5º arriba son básicamente aplicables a tu aplicación, pero la 6ª, Ocultación de longitud, se puede realizar en nginx. Este módulo de filtro proporciona funcionalidad para agregar un comentario HTML generado aleatoriamente al final del cuerpo de la respuesta para ocultar la longitud correcta de la respuesta y dificultar que los atacantes adivinen el token seguro.

El ejemplo de un comentario HTML aleatoriamente agregado es el siguiente.

<!-- random-length HTML comment: JnSLGWeWYWsoJ4dXS3ubLw3YOu3zfGTotlzx7UJUo26xuXICQ2cbpVy1Dprgv8Icj6QfOZx2Ptp9HxCVoevTxhKzMzV6xeYXao0oCngRWJRb4Tvive1iBAXLzrHlLg6jKwNKXrct0tJuA2TvWIRVIng6UoffIbCQLPbi63PwmWemOxVi6m3CPa6hCbAK2CaBR1jLux7UJa4WNN4H0yIDMElMglWWouY5m5FUqAn0afMmtErj0zkA2LMWxisZRES38XLoYycySmaBrIih5IixUsJFR0ei4uZ0IifgV5SnitoNzMusSQem9npObHuU2HKApneAjwnFdPSQZA9sRdSOE8agDI05P832mV1JIcOjsg0FgzxvSG7UEX0HdqBqp2jPOYYW0k5gGtmkiXWydRJfn9lGomxReUeqq2Aec69gplEM6a8aqH5TFgXrGK8jcaPISQlsKkMxJQ7Fp6fVDbmI59xCIvlk -->
Para cada respuesta, la longitud de las cadenas aleatorias variará dentro de un rango dado.

Esta idea proviene originalmente de breach-mitigation-rails. ¡Gracias equipo!

Advertencia

Como se menciona en breach-migration-rails, BREACH es un ataque complicado y amplio, y este módulo proporciona solo una protección PARCIAL. Para asegurar completamente tu sitio web o servicio, necesitas revisar el documento sobre BREACH y encontrar la forma adecuada según tu propio sitio web o servicio.

Directivas de Configuración

length_hiding

  • sintaxis: length_hiding on | off
  • predeterminado: off
  • contexto: http, server, location, if en location

Habilita o deshabilita la adición de un comentario HTML generado aleatoriamente.

length_hiding_max

  • sintaxis: length_hiding_max size
  • predeterminado: 2048
  • contexto: http, server, location

Establece la longitud máxima de la cadena generada aleatoriamente utilizada en el comentario HTML. El tamaño debe estar dentro de un rango de 256 a 2048.

Ejemplo de Configuración

Habilita este módulo para una ubicación específica ('/hiding'). En este ejemplo, la longitud de las cadenas aleatorias será menor a 1024.

server {
    listen       443 default_server deferred ssl spdy;
    server_name  example.com;
    length_hiding_max 1024;

    location /hiding {
        length_hiding on;
    }
}

Si este módulo se compila como un módulo dinámico, NO olvides incluir la línea load_module en la configuración de nginx.

load_module modules/ngx_http_length_hiding_filter_module.so;

Servicios que utilizan este módulo

GitHub

Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-length-hiding.