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

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

Установка Debian/Ubuntu

Эти документы применимы к APT пакету nginx-module-length-hiding, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте APT репозиторий, как описано в настройке APT репозитория.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-length-hiding
Показать дистрибутивы и архитектуры
| Дистрибутив | Версия             | Компонент   | Архитектуры   |
|-------------|-------------------|-------------|-----------------|
| debian      | bookworm          | main        | amd64, arm64    |
| debian      | bookworm-mainline | main        | amd64, arm64    |
| debian      | trixie            | main        | amd64, arm64    |
| debian      | trixie-mainline   | main        | amd64, arm64    |
| ubuntu      | focal             | main        | amd64, arm64    |
| ubuntu      | focal-mainline    | main        | amd64, arm64    |
| ubuntu      | jammy             | main        | amd64, arm64    |
| ubuntu      | jammy-mainline    | main        | amd64, arm64    |
| ubuntu      | noble             | main        | amd64, arm64    |
| ubuntu      | noble-mainline    | main        | amd64, arm64    |

Модуль фильтра скрытия длины 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;

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