Pular para conteúdo

length-hiding: Módulo de Filtro de Ocultação de Comprimento do NGINX

Instalação

Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:

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

Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:

load_module modules/ngx_http_length_hiding_filter_module.so;

Este documento descreve o nginx-module-length-hiding v1.1.1 lançado em 19 de julho de 2017.


Módulo de Filtro de Ocultação de Comprimento do NGINX

Introdução

No site BREACH, as mitig ações contra o ataque BREACH são apresentadas da seguinte forma:

  1. Desabilitar a compressão HTTP
  2. Separar segredos da entrada do usuário
  3. Randomizar segredos por solicitação
  4. Mascarar segredos (efetivamente randomizando ao XOR com um segredo aleatório por solicitação)
  5. Proteger páginas vulneráveis com CSRF
  6. Ocultação de comprimento (adicionando um número aleatório de bytes às respostas)
  7. Limitar a taxa de solicitações

O BREACH depende da compressão HTTP e é razoável desabilitá-la para proteger seu site. No entanto, sem compressão, alguns sites podem enfrentar uma degradação severa de desempenho ou o custo pode aumentar se você for cobrado com base no volume de tráfego, como no AWS. Nesse caso, pode ser difícil desligar a compressão HTML para todas as respostas do seu site e será necessário adotar outras maneiras adequadas.

Outras mitig ações listadas do 2º ao 5º acima são basicamente aplicáveis ao seu aplicativo, mas a 6ª, Ocultação de comprimento, pode ser feita no nginx. Este módulo de filtro fornece funcionalidade para anexar um comentário HTML gerado aleatoriamente ao final do corpo da resposta para ocultar o comprimento correto da resposta e dificultar que os atacantes adivinhem o token seguro.

O exemplo de comentário HTML aleatoriamente anexado é o seguinte.

<!-- random-length HTML comment: JnSLGWeWYWsoJ4dXS3ubLw3YOu3zfGTotlzx7UJUo26xuXICQ2cbpVy1Dprgv8Icj6QfOZx2Ptp9HxCVoevTxhKzMzV6xeYXao0oCngRWJRb4Tvive1iBAXLzrHlLg6jKwNKXrct0tJuA2TvWIRVIng6UoffIbCQLPbi63PwmWemOxVi6m3CPa6hCbAK2CaBR1jLux7UJa4WNN4H0yIDMElMglWWouY5m5FUqAn0afMmtErj0zkA2LMWxisZRES38XLoYycySmaBrIih5IixUsJFR0ei4uZ0IifgV5SnitoNzMusSQem9npObHuU2HKApneAjwnFdPSQZA9sRdSOE8agDI05P832mV1JIcOjsg0FgzxvSG7UEX0HdqBqp2jPOYYW0k5gGtmkiXWydRJfn9lGomxReUeqq2Aec69gplEM6a8aqH5TFgXrGK8jcaPISQlsKkMxJQ7Fp6fVDbmI59xCIvlk -->
Para cada resposta, o comprimento das strings aleatórias variará dentro de um intervalo determinado.

Essa ideia veio originalmente do breach-mitigation-rails. Obrigado, equipe!

Aviso

Como mencionado no breach-migration-rails, o BREACH é um ataque complicado e abrangente, e este módulo fornece apenas proteção PARCIAL. Para proteger completamente seu site ou serviço, você precisa revisar o artigo sobre BREACH e encontrar uma maneira adequada de acordo com seu próprio site ou serviço.

Diretivas de Configuração

length_hiding

  • sintaxe: length_hiding on | off
  • padrão: off
  • contexto: http, server, location, if in location

Habilita ou desabilita a adição de comentários HTML gerados aleatoriamente.

length_hiding_max

  • sintaxe: length_hiding_max size
  • padrão: 2048
  • contexto: http, server, location

Define o comprimento máximo da string gerada aleatoriamente usada no comentário HTML. O tamanho deve estar dentro de um intervalo de 256 a 2048.

Exemplo de Configuração

Ative este módulo para uma localização específica ('/hiding'). Neste exemplo, o comprimento das strings aleatórias será inferior a 1024.

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

    location /hiding {
        length_hiding on;
    }
}

Se este módulo for construído como um módulo dinâmico, NÃO se esqueça de incluir a linha load_module na configuração do nginx.

load_module modules/ngx_http_length_hiding_filter_module.so;

Serviços que utilizam este módulo

GitHub

Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-length-hiding.