Para entender o Syn Flood é preciso, mesmo que rapidamente, falar um pouco do TCP.
O protocolo TCP é orientado a conexão: primeiro cliente e servidor se conectam e somente após esta etapa é que os dados podem ser trocados. Semelhante a um casal, “só podem ter filhos se fizerem sexo”.
A etapa de “discar” no TCP é chamada de handshake de três vias e os flags TCP são usados para sinalizar qual etapa se está realizando. Antes de qualquer bit de dados, a seguinte troca de pacotes acontece entre cliente e servidor:
1. O cliente envia uma solicitação de conexão, com um pacote TCP sem dados, possuindo o flag de SYN ligado e os demais desligados. Por causa da presença do flag de SYN, este pacote é conhecido como pacote SYN
2. Se o servidor quiser e puder atender, devolve um pacote ao cliente ainda sem dados, com os flags de SYN e de ACK ligados. Esta segunda etapa é conhecida como SYN/ACK.
3. Se o cliente ainda quiser manter a conexão, devolve ao servidor um terceiro pacote sem dados, apenas com o flag de ACK ligado (SYN desligado).
Somente após a terceira etapa é que os dados podem ser trocados.
O mais importante para entender a gravidade do ataque é saber que o servidor, ao receber o primeiro pacote (SYN), se ele quiser atender (exemplo: serviço HTTP, porta 80), precisa antes de responder com o SYN/ACK, alocar recursos de hardware para atender esta nova conexão.
Como o TCP é um protocolo confiável, que trata de desordenamento e perdas de pacotes, estes recursos não são poucos, pois envolvem buffers de envio e de recebimento, controle de números seqüenciais, relógios diversos, enfim, muitos recursos de memória, principalmente.
E o que acontece se uma máquina fizer o SYN (etapa 1), o servidor alocar recursos e responder com o SYN/ACK (etapa 2) mas o cliente não completa o handshake e não realiza a última etapa? Os recursos ficam alocados?
Ficam, mas não para sempre. O servidor fica esperando o ACK do cliente e se o mesmo não chegar depois de certo tempo, os recursos são desalocados. Mas o fato é que estes recursos realmente permanecem alocados por algum tempo, mesmo que curto.
Aí que entra o SYN Flood (tradução literal: inundação de SYN). Nele o atacante gera quantos SYN’s a máquina dele for capaz e não responde nenhum deles. Tem-se que o servidor vai alocar recursos para cada um, como se fossem requisições legítimas, só desalocando quando acabar o tempo. É perfeitamente compreensível que o atacante consegue gerar pacotes de SYN muito mais rapidamente e facilmente do que o servidor consegue tratá-los.
Claro, hoje temos hardware com capacidades de memória e recursos gigantescos, mas não existem recursos infinitos. “Nada que uma imensidão de bots não consiga fazer parar”. Mais cedo ou mais tarde os recursos se esgotarão e o servidor ficará incapaz de atender clientes legítimos.
Este é o SYN flood!
—————————————————————————————————
Vamos falar agora do famoso HPING
O HPING é um software poderoso quando se fala de ataque de negação de serviço e para tanto é preciso conhecer a relação cliente/servidor, ou seja, three-way handshake. As mensagens servidor/cliente são trocadas em 3 vias.
O cliente envia uma requisição de conexão: pacote com flag syn com um determinado número de sequência x. O servidor recebe o pacote e responde com uma mensagem de reconhecimento: flag syn-ack com um número de sequência x+1 e y. O cliente reconhece o pacote syn-ack com y+1 e a conexão está estabelecida.
Para complementar, a conexão é fechada quando o cliente ou servidor envia um pacote com flag fin ou de forma abrupta com uma flag rst. Com base nestes conhecimentos, um ataque do tipo Syn-flood ou enxurrada de pacotes é utilizado para desestabilizar ou derrubar recursos computacionais e podem acontecer em vários níveis do protocolo TCP.
O ataque consiste no envio de uma grande quantidade de pacotes com flags setadas SYN para a vítima, de tal maneira que a mesma não consiga responder a todos as requisições. Com um grande número de pacotes SYN a pilha de memória sofre um estouro e todas as requisições são desprezadas. NO POST ANTERIOR EU NÃO EXPLIQUEI SOBRE OS PARAMETROS D HPING, AGORA EU VOU DAR UMA EXPLICADA RAPIDA.
Exemplos de ataque
Exemplo 1:
A sintaxe do comando é a seguinte:
$ hping2 <host da vítima> <parâmetros>
# hping2 23.23.23.2 -p 80 -S -c 3
HPING 23.23.23.2 (eth0 23.23.23.2): S set, 40 headers + 0 data bytes
len=44 ip=23.23.23.2 ttl=64 DF sport=80 flags=SA seq=0 win=32792 rtt=0.2 ms
len=44 ip=23.23.23.2 ttl=64 DF sport=80 flags=SA seq=1 win=32792 rtt=0.1 ms
len=44 ip=23.23.23.2 ttl=64 DF sport=80 flags=SA seq=2 win=32792 rtt=0.1 ms
Nesta linha disparamos: -p 80 -c 3 (-p aponta a porta de envio dos pacotes e -c –count count seta a quantidade de pacotes). Desta maneira podemos avaliar as respostas do alvo.
Exemplo 2:
# hping2 23.23.23.2 -p 80 -S –faster –rand-source
HPING 23.23.23.2 (eth0 23.23.23.2): S set, 40 headers + 0 data bytes
Nesta linha disparamos: -p 80 -S –fast –rand-source (-S setamos a flag como syn, –fast Alias for -i u10000. O Hping irá enviar 10 pacotes por segundos; –rand-source habilita o modo radom e troca o ip de origem dinamicamente). Desta forma enviaremos a cada segundo 10 tentativas de conexão sem esperar a resposta do host-alvo com ips diferentes a cada pacote enviado. Até o momento em que este alvo não poderá responder todas as requisições e o kernel negará o serviço.
Obs.: CUIDADO com o teste utilizando esta linha, pois o host de destino não irá responder caso a segurança necessária não esteja implementada.
Exemplo 3:
# hping2 23.23.23.2 -p 80 -S –faster –rand-dest
HPING 23.23.23.2 (eth0 23.23.23.2): S set, 40 headers + 0 data bytes
Nesta linha disparamos: -p 80 -S –fast –rand-dest (-S setamos a flag como syn, –fast Alias for -i u10000. O Hping irá enviar 10 pacotes por segundos; –rand-dest habilita o modo radom e troca o ip de destino dinamicamente). Desta forma enviaremos a cada segundo 10 tentativas de conexão sem esperar a resposta do host-alvo com ips alvos diferentes a cada pacote enviado.
As flags podem ser setadas das seguintes formas:
- -F –fin – Seta FIN tcp flag.
- -S –syn -Seta SYN tcp flag.
- -R –rst – Seta RST tcp flag.
- -P –push – Seta PUSH tcp flag.
- -A –ack – Seta ACK tcp flag.
- -U –urg – Set URG tcp flag.
- -X –xmas – Set Xmas tcp flag.
Modo de escuta:
- -9 –listen signature
HPING2 em modo de escuta. Utilizando esta opção o hping aguarda pelo pacote que contém esta assinatura e finaliza o pacote que contém a assinatura.
Exemplo.:
# hping2 -9 –listen 234-09sdflkjs45 -TESThello_word
Fonte: vivaolinux
Méritos tem que ser dados aos autores: cristofe, elgio e eu que trouxe este post para o meu blog