'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