Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Índice

Índice
maxLevel4
outlinetrue
exclude.*ndice
stylenone


Plataforma

Produto: fluigTOTVS Fluig Plataforma

Versão: 1.6.x ou superiores


Ocorrência

Como prevenir os ataques Http Slow Post & Http Slow Headers no fluigna plataforma?


Solução

A natureza desse tipo de ataque DDoS é tentar bloquear os serviços, ocupando o servidor com o uso de poucos recursos do atacante. Isso é realizado atrasando o tempo total da requisição: os cabeçalhos ou dados são enviados em blocos e se camuflam de uma requisição lenta. Mesmo que esta seja inválida, somente quando estiver completa é que será feita a validação e a liberação dos recursos. Infelizmente, esse tipo de ataque ainda é muito eficaz, porque além de utilizar poucos recursos do atacante, ele é difícil de filtrar por parecer de fato uma requisição lenta.

Na plataforma fluig, como utilizamos a ferramenta NGINX na frente das requisições, o ideal O ideal para prevenir esse tipo de ataque é reduzir o limite de tempo das requisições lentas, que é bem grande por padrão. No mais Isso é realizado nas configurações do Load Balancer (servidor de aplicação). Realizamos testes específicos utilizando o Load Balancer Ngix na frente das requisições, e constatamos que a arquitetura da própria ferramenta reduz a eficácia desse tipo de ataque. Veja mais detalhes sobre a a recomendação de configuração da própria ferramenta no site oficial, na seção Closing Slow Connections.

Testes efetuados com

...

o Nginx

Em teste realizado testes realizados no ambiente local, com a configuração recomendada, é possível verificar que, após o tempo determinado, as conexões são encerradas. A configuração equivalente no undertow(read-) não limita o tempo total do envio dos headers, somente o tempo entre cada requisição, o que permite manter a conexão aberta por bastante tempo.

...

Deck of Cards
historyfalse
idTestes
Card
idc1
labelConfiguração do NGINX

Importante notar que os valores configurados não representam uma situação de uso real, portanto devem ser ajustados para uso.

Bloco de código
server {
	listen   80;
     ...
	client_body_timeout 10s;
	client_header_timeout 5s;
	 ...
}

Importante notar que os valores configurados não representam uma situação de uso real, portanto devem ser ajustados para uso.

Card
idc2
labelVerificação das portas em uso

A contagem de portas em uso está duplicada porque o cliente e servidor são locais.

Bloco de código
$ date && netstat -nalt | grep ":80" | grep ESTABLISHED -c
ter abr 14 18:09:33 -03 2020
300
$ date && netstat -nalt | grep ":80" | grep ESTABLISHED -c
ter abr 14 18:09:34 -03 2020
0
A contagem de portas em uso está duplicada porque o cliente e servidor são locais.
Card
idc3
labelComportamento da ferramenta de simulação de ataque

É possível visualizar que, após o tempo definido, as conexões existentes foram encerradas.

Bloco de código
$ slowloris -v --sleeptime 1 fluig.local
[14-04-2020 18:09:28] Attacking fluig.local with 150 sockets.
[14-04-2020 18:09:28] Creating sockets...
[14-04-2020 18:09:28] Creating socket nr 0
...
[14-04-2020 18:09:28] Creating socket nr 149
[14-04-2020 18:09:28] Sending keep-alive headers... Socket count: 150
[14-04-2020 18:09:28] Sleeping for 1 seconds
[14-04-2020 18:09:29] Sending keep-alive headers... Socket count: 150
[14-04-2020 18:09:29] Sleeping for 1 seconds
[14-04-2020 18:09:30] Sending keep-alive headers... Socket count: 150
[14-04-2020 18:09:30] Sleeping for 1 seconds
[14-04-2020 18:09:31] Sending keep-alive headers... Socket count: 150
[14-04-2020 18:09:31] Sleeping for 1 seconds
[14-04-2020 18:09:32] Sending keep-alive headers... Socket count: 150
[14-04-2020 18:09:32] Sleeping for 1 seconds
[14-04-2020 18:09:33] Sending keep-alive headers... Socket count: 150
[14-04-2020 18:09:33] Sleeping for 1 seconds
[14-04-2020 18:09:34] Sending keep-alive headers... Socket count: 150
[14-04-2020 18:09:35] Recreating socket...
...
[14-04-2020 18:09:35] Recreating socket...
[14-04-2020 18:09:35] Sleeping for 1 seconds
[14-04-2020 18:09:36] Sending keep-alive headers... Socket count: 150
[14-04-2020 18:09:36] Sleeping for 1 seconds
[14-04-2020 18:09:37] Stopping Slowloris
É possível visualizar que, após o tempo definido, as conexões existentes foram encerradas.