Ping - O que há por trás?

Você tem ideia de quantas vezes já 'pingou' em um dispositivo? O Ping é um comando básico em uma rede utilizado todos
os dias, mesmo por usuários que não possuem conhecimento técnico algum. Mas, o que realmente acontece atrás das
cortinas, quando 'pingamos' uma máquina?

[ Hits: 11.401 ]

Por: Jonatas Baldin em 13/04/2012 | Blog: http://metasecurity.blogspot.com.br/


O que há por trás do Ping?



'Ei cara, 'pinga' aquela máquina ali, pra ver se ela tá na rede'.

O Ping foi criado por Mike Muuss, para diagnosticar a conectividade entre dois dispositivos e seus possíveis erros dentro de uma rede.

Ele faz parte da camada de Aplicação do modelo OSI, e utiliza o protocolo ICMP, que está situado na camada de Rede.

O protocolo ICMP é definido dentro da RCF 792, e utilizado para gerar relatórios de erros de conectividade entre dispositivos. Cada erro possui um identificador único, que varia de 0 à 255.

Os três principais são:
  • ICMP TYPE 0 - ECHO REPLY: Esta é a resposta quando um Host está na rede. Como se o dispositivo dissesse: 'Ei cara, estou aqui!'.
  • ICMP TYPE 3 - DESTINATION UNREACHABLE: Esta é a resposta quando um Host não consegue ser alcançado. Pode haver problemas no caminho até ele, ou no dispositivo em si.
  • ICMP TYPE 8 - ECHO REQUEST: Esta é basicamente uma pergunta, onde um dispositivo diz: 'Ei cara, você está aí?'.

Você pode consultar todos os tipos no site da IANA.

Agora, voltando ao Ping, você tem uma ideia do que ele faz? É simples.

Ele envia um ECHO REQUEST pelo protocolo ICMP, até o dispositivo de destino nos retornar um determinado tipo de resposta. Se estiver tudo ok, será um ECHO REPLY, se não, poderá ser um DESTINATION UNREACHABLE ou qualquer outro que defina o problema na conexão.

Além do mais, o Ping apresenta diversos parâmetros em sua sintaxe, os mais comuns são:

# ping -c 5 -s 2048 <destino>

Onde:
  • -c : Determina quantos pacotes ECHO REQUESTS são enviados.
  • -s : Determina o tamanho em Bytes de cada pacote, sendo o padrão com 32 Bytes.

Vamos analisar uma requisição feita pelo Ping, dentro de uma rede local:

# ping -c 4 192.168.1.7
PING 192.168.1.7 (192.168.1.7) 56(84) bytes of data.
64 bytes from 192.168.1.7: icmp_seq=1 ttl=64 time=0.626 ms
64 bytes from 192.168.1.7: icmp_seq=2 ttl=64 time=0.495 ms
64 bytes from 192.168.1.7: icmp_seq=3 ttl=64 time=0.497 ms
64 bytes from 192.168.1.7: icmp_seq=4 ttl=64 time=0.433 ms
//até aqui podemos observar a sequência dos pacotes, o Time To Live e tempo de duração.

--- 192.168.1.7 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2997ms
rtt min/avg/max/mdev = 0.433/0.512/0.626/0.075 ms
//estatísicas gerais, quantidade de pacotes transmisitos, recebidos, percentagem e duração.

'Não tá pingando! A máquina está ligada na rede, o cabo está plugado, mas não está pingando!'.

É, isso pode acontecer.

Desde 2003, diversos provedores começaram a estabelecer regras de bloqueio ao pacote ICMP ECHO REQUEST para prevenir WORMS, possíveis ataques de crackers e até mesmo, a técnica chamada 'Ping of Death', onde uma série de Pings com tamanho de 65,536 eram enviados ao alvo, causando a negação de serviço do mesmo.

Um exemplo, é uma regra simples no IPtables, que realiza esse tipo de filtragem:

# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Se 'pingarmos' uma máquina que possui esta filtragem, o destino não responderá a nenhum pacote, e todos serão perdidos.

* Mas, sempre há uma luz no fim do túnel!

Podemos utilizar o NMap para realizar um Scan neste mesmo Host, sem utilizar o protocolo ICMP.

# nmap -sP -P0 <destino>

Onde:
  • -sP : É um Scan do tipo simples.
  • -P0 : Não realiza o Ping.

Assim burlamos a regra do IPtables e conseguimos descobrir que o Host está ativo na rede.

Aqui foi mostrado uma visão, um pouco mais aprofundada, do que é o Ping. Claro que, conforme vamos avançando, tudo se torna mais complexo.

Previamente publicado em: metasecurity.blogspot.com.br

   

Páginas do artigo
   1. O que há por trás do Ping?
Outros artigos deste autor

Ultimate Nmap

Leitura recomendada

CheckSecurity - Ferramenta para segurança simples e eficaz, com opção para plugins

Segurança na Internet

Acessando o Linux via SSH através do Android

Recon and Scan with Metasploit

PHPIDS - PHP Intrusion Detection System, deixe seu site livre de intrusos!

  
Comentários
[1] Comentário enviado por d4rkz em 14/04/2012 - 08:39h

Ótimo artigo.

[2] Comentário enviado por removido em 14/04/2012 - 11:20h

Excelente artigo, simples, mas esclarecedor!

[3] Comentário enviado por tonyrecife em 14/04/2012 - 16:03h

Será que não existe nenhuma ferramenta que evite o scaneamento pelo NMAP?
Pelo que sei o NMAP informa se está ativo, as portas abertas e outras cositas mais .....

[4] Comentário enviado por zeta em 16/04/2012 - 21:06h

Muito bom, gostei desse artigo. É sempre bom estarmos informados, principalmente qdo se trata de Informática.

[5] Comentário enviado por ricardoolonca em 18/04/2012 - 08:33h

Para testar se a máquina está na rede, o mais correto é usar dois comandos.

1- ping ip_da_estação. Se pingar, e máquina esté na rede. Se não pingar, é necessário usar um segundo comando:

2- arp -na | grep ip_da_estação. Se trouxer o endereço mac, então o alvo está ativo, mas um firewall pode estar bloqueando o icmp.

Abaixo dou um exemplo em que a máquina alvo está ativa na rde, mas bloqueando o ping.

ricardo@desktop:~$ ping -c 1 172.20.1.145
PING 172.20.1.145 (172.20.1.145) 56(84) bytes of data.

--- 172.20.1.145 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

ricardo@desktop:~$ arp -na | grep 172.20.1.145
? (172.20.1.145) em 00:25:90:2b:35:de [ether] em br0
ricardo@desktop:~$

[6] Comentário enviado por jonatas.baldin em 18/04/2012 - 14:49h

tonyrecife:
Como o scan do Nmap trabalha com flags (SYN, ACK, RST etc) você pode usar regras de Iptables para tratar essas flags e impedir o scan.

maionesebr:
Muito bom, não tinha pensando em consultas na tabela ARP, valeu :D

[7] Comentário enviado por leoberbert em 22/04/2012 - 01:27h

Jonatas,

Muito bom o artigo. Como ja foi dito acima, simples porém direto :)

[]'s

[8] Comentário enviado por lleandro2012 em 13/06/2012 - 21:32h

Muito bom mesmo...Gostei do artigo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts