Fundamentação Teórica
O Protocolo TCP e o Three-Way Handshake
O Transmission Control Protocol (TCP) é um protocolo de transporte orientado à conexão, projetado para fornecer uma entrega de dados confiável e em ordem entre aplicações. Para garantir essa confiabilidade, o TCP exige o estabelecimento de uma conexão lógica através de um processo de três etapas conhecido como Three-Way Handshake.
Requisição de Sincronização (SYN): O cliente envia um pacote com a flag SYN ativada, contendo um número de sequência inicial (ISN) pseudo-aleatório x.
Resposta do Servidor (SYN-ACK): O servidor aloca uma estrutura de dados chamada Transmission Control Block (TCB) para armazenar o estado da conexão [1], [3]. Ele responde com as flags SYN e ACK ativadas, confirmando o recebimento de x e enviando seu próprio número de sequência y. Neste ponto, a conexão é considerada "entreaberta" (half-open).
Confirmação Final (ACK): O cliente responde com um pacote ACK final. Somente após esta etapa a conexão passa ao estado ESTABLISHED e a transferência de dados começa.
A Anatomia do Ataque SYN Flood
O ataque SYN Flood subverte a etapa de alocação de recursos do handshake. A vulnerabilidade reside no fato de que o servidor aloca um novo estado TCB para cada segmento SYN recebido, existindo um limite finito para a quantidade desses estados que podem ser armazenados simultaneamente [1].
A fila onde essas conexões half-open são armazenadas é conhecida como backlog. No sistema Linux, essas conexões pendentes são identificadas pelo estado SYN_RECV, enquanto no Windows são marcadas como SYN_RECEIVED. O esgotamento desses recursos é agravado pelo tempo que o servidor mantém a conexão aberta antes de descartá-la. Esse tempo de timeout varia conforme o sistema operacional:
Em configurações padrão do Linux, o servidor realiza 5 retransmissões de SYN-ACK ao longo de 31 segundos antes de liberar o recurso [5].
No Windows Server, o ciclo de retransmissões para descartar uma conexão half-open pode levar cerca de 21 segundos [2].
Outras implementações históricas podem manter esses recursos ocupados por períodos que variam de 75 segundos até 511 segundos [6].
O Papel do IP Spoofing
O uso de endereços falsificados (IP Spoofing) é fundamental para o sucesso e a gravidade do ataque. Ao utilizar IPs forjados, o invasor garante que o servidor alvo nunca receba o ACK final ou um pacote de reset que liberaria a memória. Conforme explica Eddy [6], se endereços de hosts normais conectados forem usados, esses hosts enviarão à vítima um segmento de reset TCP que liberará imediatamente o TCB correspondente e permitirá espaço no backlog para conexões legítimas. Por isso, um atacante forte terá uma lista de endereços inativos e não relacionados dos quais escolherá os endereços de origem falsificados. Dessa forma, o spoofing garante que as entradas no backlog permaneçam ocupadas pelo maior tempo possível.