Hoy en día los ataques Man in the Middle están al alcance de cualquiera, la facilidad de acceso a redes poco seguras así como la facilidad del uso de herramientas hacen que sea algo de lo que nos debamos preocupar tanto en nuestra red doméstica, como en universidades o redes corporativas.
En este artículo desglosaremos el ataque y veremos como podemos tanto protegernos como detectarlo en el caso de que nuestra red ya haya sido comprometida.
Un ataque Man in the Middle se realiza en un escenario donde la víctima envía información hacia otro punto, dando así al atacante la oportunidad de interceptar las comunicaciones entre las dos partes y modificarlas si esa es su intención. Un lugar muy común donde un usuario puede ser víctima de este tipo de ataques son las redes públicas -o las que lo parecen (Honeypots)- en las que se desconoce la identidad de todas las personas conectadas.
Esquema de un ataque MITM |
Este ataque, explicado de manera muy básica se trata de engañar a los componentes de una red. Al router le diremos que nosotros somos todos y cada uno de los usuarios que estan conectados en la red local, y a los usuarios les diremos que nosotros somos el router que sirve de puerta de acceso. Así logramos que todos nos envien a nosotros la información, gran parte de la cual irá en texto plano, otra parte encriptada, aunque esto último tampoco supone un gran problema en algunos casos como el de SSL. Con la información pasando por nuestro ordenador podemos no solo verla, si no también modificarla al vuelo.
Todo esto se logra engañando a uno de los protocolos más engañables que hay, el protocolo ARP, que funciona a nivel de capa de enlace de datos. Este protocolo no hace otra cosa que encontrar la dirección MAC de cada IP en la red local. Para ello se envian paquetes arp a todas las direcciones IP, y los ordenadores responden, así se logra obtener una tabla que se renueva cada X tiempo y que contiene cacheadas todas las direcciones MAC asociadas a cada nodo de la red local.
Aquí teneis la documentación en español.
Paquete ARP:
Como podeis ver, la dirección de broadcast en una red es FF:FF:FF:FF:FF, y se incluye tanto la dirección IP y la MAC propia, como la dirección IP por la que preguntamos. Vemos como a continuación, el host que tiene la IP por la que se pregunta, nos responde con un ARPreplay, donde nos manda su dirección MAC.
El MITM se hace respondiendo nosotros a los paquetes ARP que se lancen a broadcast y que llamen a los ordenadores que queramos suplantar. Haciendo esto a dos puntos de la misma red local logramos que la información que fluye entre ambos ordenadores pase por nosotros, con todo lo que ello inplica. Cuando hacemos que guarde una MAC a la que nosotros respondemos en la tabla ARP contenida en caché decimos que estamos haciendo un ARP poisoning o ARP Spoofing.
Este ataque no solo se puede hacer en redes locales, si no que también se puede hacer basándonos en otros protocolos y otras arquitecturas de red. Así, podemos hacerlo incluso en redes WAN, teniendo el hardware necesario, por supuesto.
De manera práctica ¿Cómo se hace un MITM sobre red local sin encriptación?
Antes de pensar en hacer un MITM y si queremos que la información pase por nosotros y no se quede bloqueada, en caso de que estemos utilizando un sistema operativo Linux o similar, debemos activar antes de nada el ip_forward, cosa que podemos hacer escribiendo en consola lo siguiente:
echo 1 > /proc/sys/net/ipv4/ip_forward
Aquí teneis una síntesis de las maneras en las que esto se puede hacer en Linux y OsX; en Windows con abrir el firewall para el programa que vayamos a utilizar, basta.
Respecto a como hacerlo, tenéis varias opciones:
Respecto a como hacerlo, tenéis varias opciones:
- Windows: La mejor opción para este sistema operativo es sin duda Cain&Abel de Oxid.it. Facil de utilizar, todo es muy intuitivo, y nos da mucha imformación a la par que es capaz de semi-parsear grandes cantidades de información. Como no me voy a centrar en este programa, podeis buscar algún vídeo explicativo a través de youtube.
- Linux: Tiene muchísimas opciones, se puede hacer incluso con python con la gran librería Scapy. Sin embargo, entre todas las posibles opciones, cabe destacar Ettercap. se puede utilizar tanto en consola, como en versión GUI, y junto con su complemento Etterfilter, podemos cambiar la información que pasa en tiempo real.
sudo ettercap -T -M arp:remote /ip1/ /ip2/ -i eth0
Donde:
- sudo: ejecutar programa como root, para así tener acceso a todos los socket y todas las funciones y programas de kernel.
- ettercap: llama al programa.
- -T: modo texto.
- -M arp:remote /ip1/ /ip2/: mitm, intercepta tanto lo que va de un ordenador a otro, como lo que sale a direcciones ip externas. Peligroso en redes muy vigiladas. arp:oneway es menos peligroso, pero también menos efectivo. ip1 e ip2, siempre entre "/" son las dos ips de las máquinas entre las que nos queramos situar. Dejando las ip sin poner ( // // ), podemos hacer el ataque en toda la subnet, cosa no aconsejable en redes muy grandes (la tarjeta de red, y tu sistema operativo probablemente no puedan procesar tanta info, y se cree un cuello de botella).
- -i eth0: Especificamos la interfaz de red a utilizar. Por defecto el programa intenta utilizar siempre eth0, no obstante si estamos por ejemplo en una red wifi abierta, tendremos que especificar wlan0 o como se llame nuestra interfaz.
A continuación vemos como toda la información empieza a fluir por nuestra consola, o si no es así, bastará con pulsar la barra espaciadora una vez. Pulsando H podemos ver cuales son las opciones de visualización. Por simple cuestión de filtrado y pragmatismo aconsejo utilizar Wireshark mientras se hacen este tipo de ataques, así podremos filtrar la finrmación que está pasando.
Utilizando Wireshark, si queremos podemos hacer session hijacking, podemos utilizar el filtro "http.cookie", también podemos ver por ejemplo conversaciones de irc, ver información http, o incluso recomponer imágenes que pasan por la red.
También cabe destacar la herramienta Etterfilter, programa que se instala siempre junto a Ettercap. Etterfilter nos permite teniendo nociones básicas de programación, establecer y compilar filtros para capturar o modificar la información que obtenemos con el mitm. Así mismo podemos utilizarlo para modificar las peticiones o respuestas DNS para redirigir al host que queramos hacia donde queramos (cosa que también se puede hacer con los plugins básicos que incorpora ettercap, que podemos activar pulsando P ), y muchas otras cosas. Podemos ver unos ejemplos aquí.
Gran parte de la información que veamos pasar estará encriptada con SSL, cosa que tampoco es mucho problema. Una gran opción para esto es utilizar el programa "Sslstrip", que fue presentado hace un par de años en conferencia. Solo tenemos que redirigir la información hasta otro puerto, se aconseja sea mayor a 1000 por conflictos de puerto que puedan ocurrir. Utilizamos el programa de la siguiente manera:
python sslstrip.py -l 10000
python sslstrip.py -l 10000
Ya sabemos en que consiste, pero... ¿Cómo nos podemos proteger?
Depende. Si queremos proteger una red domestica de un ataque mitm que pueda venir vía hackeo wifi, bastará con poner encriptación a nuestra red. Si tienes WPA/WPA2 ya estas protegido. Y ya que los equipos que tenemos en casa no suelen cambiar, a veces es también buena idea hacer un filtrado por MAC en el router, y por supuesto desactivar el WPS.
Las redes abiertas a las que nos podamos conectar a lo largo del día suelen ser bastante peligrosas, ya que la mayoría no tienen ninguna clase de encriptación ni seguridad. Por supuesto podemos hacer un análisis de red, pero si lo que queremos es símplemente estar protegidos, es aconsejable utilizar una Red Virtual Privada (VPN), que encripta nuestra información desde nuestro ordenador, hasta el nodo de salida. Si eres el propietario de una de estas redes, lo mejor es poner una encriptación fuerte, con una contraseña.
En redes mayores o corporativas es aconsejable utilizar un programa que suele venir incluido en casi todos los routers o switchs grandes. Este programa observa los cambios en las tablas arp. También conviene tener siempre entradas fijas en las tablas de cache arp, ya que estas entradas siempre están por encima que las temporales (estandard). Tener además un analista de redes puede ser clave, así como observar direcciones MAC sospechosamente contiguas, y cambios repentinos en las tablas. Podemos ver estás tablas escribiendo en consola de Linux, o en el cmd de windows:
arp -a
Ademas tenemos programas que nos pueden ayudar en esta labor. Un ejemplo es Snort, o incluso el propio Ettercap con su plugin: arp_cop. No proteger determinadas redes puede suponer desde robos de sesiones y violaciones de la intimidad, hasta leaks de información realmente importante.
0 comentarios:
Publicar un comentario