SYN Flood
SYN flood ou ataque SYN é uma forma de ataque de negação de serviço (também conhecido como Denial of Service - DoS) em sistemas computadorizados, na qual o atacante envia uma sequência de requisições SYN para um sistema-alvo visando uma sobrecarga direta na camada de transporte e indireta na camada de aplicação do modelo OSI.
Quando um cliente tenta começar uma conexão TCP com um servidor, o cliente e o servidor trocam um série de mensagens, que normalmente são assim:
- O cliente requisita uma conexão enviando um SYN (synchronize) ao servidor.
- O servidor confirma esta requisição mandando um SYN-ACK(acknowledge) de volta ao cliente.
- O cliente por sua vez responde com um ACK, e a conexão está estabelecida.[1]
Isto é o chamado aperto de mão em três etapas (Three-Way Handshake).
Um cliente malicioso, que implemente intencionalmente um protocolo TCP errado e incompleto, pode não mandar esta última mensagem ACK. O servidor irá esperar por isso por um tempo, já que um simples congestionamento de rede pode ser a causa do ACK em falta.
Esta chamada conexão semi-aberta explora a boa-fé do protocolo TCP que espera por um certo tempo e algumas tentativas de restabelecimento de um sinal ACK válido para retomar a comunicação. A resposta maliciosa ao comando SYN gerada pelo cliente pode ocupar recursos no servidor (memória e processamento) ou causar prejuízos para empresas usando softwares licenciados por conexão (aumento de conexões "ativas"). Pode ser possível ocupar todos os recursos da máquina, com pacotes SYN. Uma vez que todos os recursos estejam ocupados, nenhuma nova conexão (legítima ou não) pode ser feita, resultando em negação de serviço. Alguns podem funcionar mal ou até mesmo travar se ficarem sem recursos desta maneira.
Algumas contra-medidas para este ataque são os SYN cookies.[1] Apenas máquinas Sun e Linux usam SYN cookies.
Ao contrário do que muitos pensam, não se resolve negação de serviço por SYN Flood limitando conexões por minuto (como usar o módulo limit ou recent do iptables), pois as conexões excedentes seriam descartadas pelo firewall, sendo que desta forma o próprio firewall tiraria o serviço do ar. Se eu, por exemplo, limito as conexões SYN a 10/seg, um atacante precisa apenas manter uma taxa de SYNs superior a 10/s para que conexões legítimas sejam descartadas pelo firewall. O firewall tornou a tarefa do atacante ainda mais fácil. Em "Iptables protege contra SYN Flood?" tem uma boa descrição dos motivos pelos quais uma configuração de firewall não resolve.
Um ataque de SYN Flood é feito com os IPs forjados (spoof), para que o atacante não receba os ACKs de suas falsas solicitações.