Reconhecimento de Sistemas Operacionais através do PING

Tempos atrás,  um aluno me perguntou se havia algum jeito de detectar sistemas operacionais através do PING, respondi que, apesar de não ser algo 100% confiável é possível sim.

Mas como? bem, o protocolo IP possui um campo chamado TTL ou (Time-To-Live) tempo de vida.

A função do TTL é evitar que os pacotes permaneçam na rede por tempo indeterminado de tal forma que não ocorram loops.

Roteadores estão programados para decrementar uma unidade do TTL a cada roteador alcançado.

Sistemas Operacionais possuem TTL padrões, exemplo: [Linux 64], [Windows 128] , [Solaris 255] e assim por diante.

Diante do exposto, basta executar o comando ping  e verificar o resultado que se encontre mais próximo ao padrão .

Veja o exemplo de um ping contra um host Linux :

linux:~ root# ping -c 5 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.057 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.065 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.071 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.065 ms
--- 127.0.0.1 ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.057/0.065/0.071/0.004

Abaixo, um ping executado contra uma máquina Windows :

root@kali:/# ping -c 3 192.168.0.21

PING 192.168.0.21 (192.168.0.21) 56(84) bytes of data.

64 bytes from 192.168.0.21: icmp_req=1 ttl=128 time=0.615 ms

64 bytes from 192.168.0.21: icmp_req=2 ttl=128 time=0.414 ms

64 bytes from 192.168.0.21: icmp_req=3 ttl=128 time=0.314 ms

 

— 192.168.0.21 ping statistics —

3 packets transmitted, 3 received, 0% packet loss, time 1998ms

O porquê de não acreditar 100% ? muito simples …. (é possível mudar os padrões TTL) no Linux,  basta o seguinte comando para verificar o padrão:

root@kali:/# cat /proc/sys/net/ipv4/ip_default_ttl

64

Depois o comando para alterar:

root@kali:/# echo 128 > /proc/sys/net/ipv4/ip_default_ttl

root@kali:/# cat /proc/sys/net/ipv4/ip_default_ttl

128

Abaixo um Kali Linux com padrão Windows de 128:

root@kali:/# ping 127.0.0.1

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.

64 bytes from 127.0.0.1: icmp_req=1 ttl=128 time=0.027 ms

64 bytes from 127.0.0.1: icmp_req=2 ttl=128 time=0.020 ms

64 bytes from 127.0.0.1: icmp_req=3 ttl=128 time=0.023 ms

— 127.0.0.1 ping statistics —

3 packets transmitted, 3 received, 0% packet loss, time 1998ms

 

E isso ai !!!

 

Autor: Sílvio César Roxo Giavaroto

É MBA Especialista em Gestão de Segurança da Informação,

Tecnólogo em Redes de Computadores, C|EH Certified Ethical Hacker,

atua como Pentest e Analista de Segurança em Servidores Linux no

Governo do Estado de São Paulo, Professor Universitário , Instrutor

C|EH e C|HFI.