Índice |
---|
maxLevel | 4 |
---|
outline | true |
---|
exclude | .*ndice |
---|
style | none |
---|
|
Produto: fluigTOTVS Fluig Plataforma
Versão: 1.6.x ou superiores
Como prevenir os ataques Http Slow Post & Http Slow Headers no fluigna plataforma?
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.
...
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 |
---|
|
Card |
---|
id | c1 |
---|
label | Configuraçã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;
...
} |
|
Card |
---|
id | c2 |
---|
label | Verificaçã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 |
|
Card |
---|
id | c3 |
---|
label | Comportamento 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 |
|
|
...