Dentro de la especificación del protocolo ICMP - y de ICMPv6 - existe la posibilidad de enviar desde los routers cambios para tablas de enrutamiento a los clientes mediante un paquete llamado ICMP Redirect. De esta forma, la puerta de enlace de un determinado equipo de la red de que para ir a un destinatario concreto es más rápido ir por otro de los routers de la red.
Esto es conocido desde hace mucho tiempo, y por supuesto un usuario de la red malicioso podría utilizarlo para hacer un ataque de man in the middle. Hace un par de semanas se ha liberado una herramienta que lo hace fácilmente desde plataformas de pentesting con Kali Linux.
Android, iOS & OS X Vulnerables
Para que el ataque funcione, el cliente debe ser vulnerable a este ataque permitiendo aceptar los mensajes de ICMP redirect. Para comprobar si tu Android es vulnerable a este ataque, necesitas tener una conexión de terminal y verificarlo con el comando siguiente:
# cat /proc/sys/net/ipv4/conf/all/accept_redirects
Si te ha salido un valor de 1, entonces es que eres vulnerable al ataque y cualquiera te puede hacer un ataque de man in the middle con un paquete de ICMP Redirect.
Figura 2: Un Android Samsung Galaxy S4 aceptando paquetes ICMP Redirects |
Por desgracia, a pesar de que la mayoría de los sistemas GNU/Linux y Windows no los aceptan desde hace tiempo por seguridad, la mayoría de las versiones de los sistemas operativos iOS, OS X y Android SÍ los aceptan, por lo que los hacen carne de cañón en redes compartidas o redes WiFi, algo que es altamente peligroso.
En los sistemas OS X, tanto OS X 10.10 Yosemite como OS X 10.9 Mountain Lion son vulnerables, y lo puedes probar en tu propio equipo con el siguiente comando de consola:
sysctl net.inet.icmp.drop_redirect | grep ": 0" && echo "DoubleDirect: VULNERABLE" ||echo "DoubleDirect: SAFE"
Como se puede ver en la siguiente imagen, en uno de mis equipos con OS X se puede comprobar cómo es vulnerable a este ataque al aceptar ICMP Redirects.
Figura 3: Por defecto OS X acepta paquetes ICMP Redirects |
Para cambiarlo es necesario modificar el valor de net.inet.icmp.drop_redirect como Administrador para que se tiren todos los intentos de cambios de rutas.
Figura 4: OS X configurado para no aceptar paquetes ICMP Redirect |
La Prueba de Concepto de ICMP Redirect
Si la víctima es vulnerable, con esta herramienta que han publicado en Zimperiun para enviar ICMP Redirects con las direcciones IP que se quiera influir se puede hacer un man in the middle a cualquier dirección IP de destino. Por supuesto, lo más interesante es cambiar el redirect de los servidores DNS de Internet que se tenga configurados la víctima, para poder manipular el resto de conexiones a dominios.
Figura 5: Prueba de Concepto de DoubleDirect la herramienta para hacer mitm con ICMP Redirect |
Este ataque también funciona en IPv6, por lo que, si no estás haciendo uso de este protocolo, entonces aquí tienes cómo desactivar IPv6 en Windows y cómo desactivar IPv6 en OS X. Así te quitas de todos los ataques que implementa Evil Foca, que a día de hoy no implementa el ICMP Redirect, pero seguro que en breve lo hace. Tienes más información de este tipo de ataques en el libro de Ataques de red en IPv4/IPv6.
Saludos Malignos!
El blog de Zimperium ha actualizado su post para indicar que la solución que dan (y que calcas aquí) para OSX no es persistente:
ResponderEliminar«Edit: This fix is not persistent – you need to add this line to your startup scripts to be safe after a reboot. (thanks Jon Schwenn for pointing this out)»
Haces un gran trabajo con este blog y se te agradece muchísimo, pero este post se acerca peligrosamente el plagio. Si la próxima vez vas a hacer una traducción de la entrada de otro blog, avísalo al comienzo.
Abrazos.
¡¡Mil disculpas!! La crítica por plagio no debía ir aquí, era para otro blog. Lo siento mucho.
ResponderEliminarEso sí, lo de la solución para OSX sigue siendo válido.
Para que el rechazo de paquetes ICMP Redirect sea permanente hay que añadir al fichero /etc/sysctl.conf :
net.inet.icmp.drop_redirect=1
Saludos y disculpas
@Calos Barbudo, gracias. Lo del cambio es cierto. Para que sea permanente debes configurar el fichero de arranque del sistema.
ResponderEliminarSaludos!
Entonces, aunque sepamos que nuestro smartphone es vulnerable a este tipo de ataques en conexiones "WiFi", no se puede hacer nada para evitarlo (¿sin rootear el terminal?)
ResponderEliminarY cual es la solucion para IOS .
ResponderEliminarPara iOS es igual pero yo no he conseguido que funcione dentro del sysctl.conf en etc por lo que habria que ejecutarlo cada vez que inicias el telefono desde el terminal con root
ResponderEliminar