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:
- Desabilitar a compressão HTTP
- Separar segredos da entrada do usuário
- Randomizar segredos por solicitação
- Mascarar segredos (efetivamente randomizando ao XOR com um segredo aleatório por solicitação)
- Proteger páginas vulneráveis com CSRF
- Ocultação de comprimento (adicionando um número aleatório de bytes às respostas)
- 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 -->
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.