27 de dez de 2009

Entendendo o campo TTL - Time to Live

O TTL - Time to Live - é um campo existente em um pacote IP que tem por finalidade impedir que este pacote fique em Looping infinito. Este campo possui 1 byte de comprimento (valores de 0 a 255). O valor inicial do campo depende do Sistema Operacional e do protocolo usados no remetente, conforme ilustra a tabela abaixo:

Ao passar por cada roteador, o valor do Campo TTL deve ser decrementado até que se atinja um valor igual ou menor que zero, quando então será emitida uma mensagem ICMP Time Exceed de volta a origem e o pacote é descartado, isto garante que o mesmo não ficará dando voltas sem chegar a lugar algum.

Pois bem, há uma certa confusão com relação ao TTL que faz muita gente relaciona-lo com o numero de saltos, visto que, ao passar por cada gateway, ao menos um valor de TTL deve ser decrementado, ainda que o pacote não tenha ficado por lá por 1 segundo. Entretanto, o roteador pode decrementar mais de uma unidade TTL por segundo que este pacote tenha permanecido por lá. Assim, o TTL realmente expressa unidades de tempo e não de saltos.

Assim, como o TTL inicial pode ser qualquer um dos valores da tabela acima, e os pacotes de ECHO REQUEST e ECHO REPLY podem seguir caminhos diferentes, também não podemos usar o TTL para mensurar quantos saltos existem entre dois hosts quaisquer.

Vale lembrar que o TTL padrão dos Sistemas Operacionais é usado por ferramentas como o NMAP que procuram "adivinhar" o S.O. da vitima, talvez seja interessante mudar este valor default.

Utilitários como o Traceroute e o PathPing também utilizam o TTL para "Traçar" o caminho entre dois hosts.

Originalmente, eu me baseei numa discussão no GTER archives sobre uma questão de concurso público abordando TTL.Vale a pena conferir estas discussões nos links abaixo:

Referências:

http://eng.registro.br/pipermail/gter/2009-December/028568.html

http://www.binbert.com/blog/2009/12/default-time-to-live-ttl-values/

http://www.freesoft.org/CIE/RFC/1812/110.htm

http://www.maxi-pedia.com/time+to+live

4 comentários:

Thiago Correia disse...

Galera,

Para alterar o valor de TTL do Linux, basta editar o arquivo /proc/sys/net/ipv4/ip_default_ttl.

Alterando o valor do TTL, significa que um atacante não conseguira facilmente descobrir qual é o sistema operacional utilizado.

Abraços,

Thiago Correia disse...

Ops,

Faltou adicionar uma dica para ignorar as respostas ICMP Reply no Linux.

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Valor igual a 0, permiti resposta
Valor igual a 1, ignora resposta

Abraços,

Adilson Florentino disse...

Grande Thiago !

Para alterar o valor de TTL no Windows, é necessário alterar o Registro

1) Abra o Editor de Registro --> Iniciar - Executar - Regedit - OK

2) Encontre a seguinte chave:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters

3) Procure por um DWORD value chamado "DefaultTTL". Se ele não existir, deverá ser criado:

4) Editar - novo - valor DWORD
(defina o valor padrão do TTL em decimal ou hexa).

Abs,

Claudevan Gimenes de disse...

Para alterar no Solaris:

Solaris 10/Intel x86

Configuring the Multicast Time-to-Live Property

The multicast time–to-live property (net.slp.multicastTTL) determines the range over which a multicast packet is propagated on your intranet. The multicast TTL is configured by setting the net.slp.multicastTTL property to an integer between 1 and 255. The default value of the multicast TTL is 255, which means, theoretically, that the packet routing is unrestricted. However, a TTL of 255 causes a multicast packet to penetrate the intranet to the border routers on the edge of your administrative domain. Correct configuration of multicast on border routers is required to prevent multicast packets from leaking into the Internet's multicast backbone, or to your ISP.
Changing ttl value to unsigned char in mnc_multicast.c fixes the issue

Referência
http://docs.sun.com/app/docs/doc/816-4555/slp.config-16?l=es&a=view&q=ttl

LinkWithin

Related Posts with Thumbnails