Fragmentação IP + ICMP
Fragmentação IP
1) Os pacotes IP
são fragmentados de acordo com a MTU da rede. A fragmentação dos pacotes
afeta
os campos tamanho total, flags, offset e cheksum dos fragmentos IP gerados.
Exercício: usando o comando ping e um sniffer de rede (tcpdump ou ethereal):
a) gere e monitore datagramas fragmentados;
b) analise quais as informações permanecem iguais
no header dos
fragmentos do datagrama e as que foram alteradas, identificando os seus valores.
c) descreva como o host destino deverá utilizar as informações para a
remontagem do datagrama
original
2) O tamanho máximo
de um pacote IPv4 é de 64Kbytes. Um antiga vulnerabilidade explorada em
relação
a este limite de tamanho e o processo de fragmentação e remontagem de
datagramas é conhecida como
Ping da Morte. Esta vulnerabilidade consiste em causar um estouro de buffer
no host destino, enviando-se
vários datagramas fragmentados, cujo tamanho total exceda 64 Kbytes.
Exercício:
utilize o comando ping para gerar pacotes fragmentados maiores que 64
Kbytes, e então:
a) monitore com um sniffer de rede os fragmentos gerados, verifique se os
fragmentos estão sendo
realmente enviados;
b) verifique se há resposta ou algum evento "diferente" ocorrendo no host
destino.
3) No processo de
remontagem de datagramas, o host destino recebe os fragmentos e os coloca
em um buffer
à espera do recebimento dos demais fragmentos de um mesmo datagrama para
posterior remontagem. Mas
a espera não ocorre por tempo indeterminado, assim quando ocorrer timeout
na espera dos fragmentos, este
serão descartados e uma mensagem ICMP poderá ser gerada para o host origem
indicando que o datagrama
não foi remontado. Essa mensagem será gerada pelo host caso o datagrama
de offset 0 (zero) esteja na
lista de fragmentos descartados.
Exercício: utilize
o seu programa de socket RAW para envio de datagramas e adicione a ele os
procedimentos
necessário para enviar datagramas IP fragmentados. Teste as seguintes
situações:
a) fragmente um datagrama em 3 partes, envie apenas 2 fragmentos para o host destino,
incluindo o datagrama de offset zero;
b) usando um sniffer de rede verifique que tipo de mensagem ICMP foi
gerada (se for gerada) para o
host origem;
c) repita os experimentos das letras a e b, apenas observando que na item a) o
fragmento de offset
zero não deve ser enviado.