length-hiding: Модуль фильтра скрытия длины NGINX
Установка Debian/Ubuntu
Эти документы применимы к APT пакету nginx-module-length-hiding, предоставляемому репозиторием GetPageSpeed Extras.
- Настройте APT репозиторий, как описано в настройке APT репозитория.
- Установите модуль:
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 приведены следующим образом:
- Отключение 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;