Перейти к содержанию

length-hiding: Модуль фильтрации длины NGINX

Установка

Вы можете установить этот модуль в любой дистрибутив на базе RHEL, включая, но не ограничиваясь:

  • RedHat Enterprise Linux 7, 8, 9 и 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 и 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

Включите модуль, добавив следующее в начало файла /etc/nginx/nginx.conf:

load_module modules/ngx_http_length_hiding_filter_module.so;

Этот документ описывает nginx-module-length-hiding v1.1.1, выпущенный 19 июля 2017 года.


Модуль фильтрации длины Nginx

Введение

На сайте BREACH даны рекомендации по смягчению атак BREACH:

  1. Отключение HTTP-сжатия
  2. Разделение секретов и пользовательского ввода
  3. Случайная генерация секретов для каждого запроса
  4. Маскировка секретов (эффективная рандомизация с помощью XOR с случайным секретом для каждого запроса)
  5. Защита уязвимых страниц с помощью CSRF
  6. Скрытие длины (добавление случайного количества байт к ответам)
  7. Ограничение скорости запросов

BREACH полагается на HTTP-сжатие, и разумно отключить его для защиты вашего сайта. Однако без сжатия некоторые сайты могут столкнуться с серьезным ухудшением производительности или увеличением затрат, если вы платите в зависимости от объема трафика, как в AWS. В таком случае может быть сложно отключить HTML-сжатие для всех ответов вашего сайта, и вам нужно будет принять другие подходящие меры.

Другие меры, перечисленные со 2-й по 5-ю, в основном применимы к вашему приложению, но 6-я, скрытие длины, может быть выполнена на nginx. Этот фильтр-модуль предоставляет функциональность для добавления случайно сгенерированного HTML-комментария в конец тела ответа, чтобы скрыть правильную длину ответа и усложнить злоумышленникам угадывание защищенного токена.

Пример случайно добавленного HTML-комментария:

<!-- random-length HTML comment: JnSLGWeWYWsoJ4dXS3ubLw3YOu3zfGTotlzx7UJUo26xuXICQ2cbpVy1Dprgv8Icj6QfOZx2Ptp9HxCVoevTxhKzMzV6xeYXao0oCngRWJRb4Tvive1iBAXLzrHlLg6jKwNKXrct0tJuA2TvWIRVIng6UoffIbCQLPbi63PwmWemOxVi6m3CPa6hCbAK2CaBR1jLux7UJa4WNN4H0yIDMElMglWWouY5m5FUqAn0afMmtErj0zkA2LMWxisZRES38XLoYycySmaBrIih5IixUsJFR0ei4uZ0IifgV5SnitoNzMusSQem9npObHuU2HKApneAjwnFdPSQZA9sRdSOE8agDI05P832mV1JIcOjsg0FgzxvSG7UEX0HdqBqp2jPOYYW0k5gGtmkiXWydRJfn9lGomxReUeqq2Aec69gplEM6a8aqH5TFgXrGK8jcaPISQlsKkMxJQ7Fp6fVDbmI59xCIvlk -->
Для каждого ответа длина случайных строк будет варьироваться в пределах заданного диапазона.

Эта идея изначально пришла из breach-mitigation-rails. Спасибо команде!

Предупреждение

Как указано в breach-migration-rails, BREACH является сложной и многоаспектной атакой, и этот модуль предоставляет только ЧАСТИЧНУЮ защиту. Чтобы полностью защитить ваш сайт или сервис, вам необходимо изучить статью BREACH и найти подходящий способ в соответствии с вашим собственным сайтом или сервисом.

Директивы конфигурации

length_hiding

  • синтаксис: length_hiding on | off
  • по умолчанию: off
  • контекст: http, server, location, if in location

Включает или отключает добавление случайно сгенерированного HTML-комментария.

length_hiding_max

  • синтаксис: length_hiding_max size
  • по умолчанию: 2048
  • контекст: http, server, location

Устанавливает максимальную длину случайно сгенерированной строки, используемой в HTML-комментарии. Размер должен быть в диапазоне от 256 до 2048.

Пример конфигурации

Включите этот модуль для конкретного местоположения ('/hiding'). В этом примере длина случайных строк будет меньше 1024.

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

    location /hiding {
        length_hiding on;
    }
}

Если этот модуль собран как динамический модуль, не забудьте включить строку load_module в конфигурацию nginx.

load_module modules/ngx_http_length_hiding_filter_module.so;

Сервисы, использующие этот модуль

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-length-hiding.