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:
- Отключение HTTP-сжатия
- Разделение секретов и пользовательского ввода
- Случайная генерация секретов для каждого запроса
- Маскировка секретов (эффективная рандомизация с помощью XOR с случайным секретом для каждого запроса)
- Защита уязвимых страниц с помощью CSRF
- Скрытие длины (добавление случайного количества байт к ответам)
- Ограничение скорости запросов
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.