Slow HTTP – Identificação e proteção

14:51 Marcello Lemos 0 Comentarios


O Slow HTTP é um ataque de negação de serviço (DoS) na camada de aplicação, e podem, de forma simples, tirar um servidor que possua recursos limitados do ar. 

Devido ao baixo volume e velocidade lenta das requisições, esse tipo de ataque é difícil de ser identificado e pode causar danos semelhantes à um DDoS com grande volume de tráfego.

Entendendo o ataque

O protocolo HTTP exige que as requisições sejam completamente recebidas pelo servidor antes de serem processadas. Caso uma requisição HTTP não seja concluída ou se a taxa de transferência for muito baixa, o servidor fica aguardando os dados que ficaram faltando. Se o servidor mantiver muitos recursos ocupados, isso ocasionará uma negação de serviço.

Na imagem abaixo vemos um relatório de um ataque “slowhttptest” realizado, onde o domínio fica claramente com o serviço indisponível por instantes (partes do gráfico que não possuem a cor verde).


Identificando o ataque

Se o seu servidor estiver sob ataque, você verá várias conexões na porta 80 do IP de origem. O comando netstat pode mostrar essas informações conforme abaixo:

$ netstat -nalt | grep :80
tcp   0   0    
0.0.0.0:80              0.0.0.0:*                LISTEN
 tcp   0   0  24.34.0.1:4840      22.50.19.04:80      ESTABLISHED
 tcp   0   0  24.34.0.1:4841      22.50.19.04:80      ESTABLISHED
 tcp   0   0  24.34.0.1:4839      22.50.19.04:80      CLOSE_WAIT
 tcp   0   0  24.34.0.1:4838      22.50.19.04:80      CLOSE_WAIT
 tcp   0   0  24.34.0.1:4808      22.50.19.04:80      ESTABLISHED
 tcp   0   0  24.34.0.1:4898      22.50.19.04:80      CLOSE_WAIT
 tcp   0   0  24.34.0.1:4890      22.50.19.04:80      ESTABLISHED

A informação abaixo mostra, em um servidor Apache, um número muito baixo de consumo de CPU, vários processos do Apache e poucas novas requisições.

$ apachectl status
    CPU Usage: u3.1 s.2 cu0 cs0 - 1.0% CPU load
    .913 requests/sec - 31.1 kB/second - 17.5 kB/request
    611 requests currently being processed, 2 idle workers

O atacante atua fazendo várias requisições até atingir o limite do Apache’s MaxClients. Se olharmos o log, será como o abaixo:

$ cat /var/log/httpd/error.log
  [mpm_prefork:error]  [pid  1842]  AH00161:  server  reached
MaxRequestWorkers  setting,  consider  raising  the
MaxRequestWorkers setting

Depois podemos identificar o endereço IP de origem do atacante usando o netstat e bloqueá-lo.

Ficando menos vulnerável ao Slow HTTP

Para proteger o servidor web contra esse tipo de ataque, é recomendado:

- Descartar conexões com métodos de requisição HTTP não suportados.
- Limitar o cabeçalho e o corpo da mensagem.
- Definir limites mais específicos de URL.
- Definir um tempo limite de conexão, sem deixar que conexões lentas legítimas sejam perdidas.

As alternativas acima são as medidas mais simples e genéricas para minimizar a ameaça.

O ajuste da configuração do servidor da Web é eficaz até certo ponto, embora exista sempre um problema entre limitar ataques HTTP lentos e eliminar solicitações legitimamente lentas. Isso significa que você nunca pode impedir ataques simplesmente usando as técnicas acima.

Além de configurar o servidor da Web, é possível também implementar outras camadas de proteção, como balanceadores de carga de software acionados por eventos, sistemas de detecção / prevenção de intrusão para eliminar conexões com padrões suspeitos, e é claro que contratar um serviço de proteção especializada anti-DDoS irá garantir uma segurança a mais para a sua aplicação.

Referências





0 comentários: