8 octubre, 2015
Esta nota fue publicada originalmente en la edición 135 de revista POWER. Podes suscribirte a la versión impresa y/o digital aquí.
Por Sheila Berta
WireShark es un potente analizador de protocolos de red que nos permite ver todo el tráfico en la red local. Útil para testear el funcionamiento de la red y la seguridad.
Si un atacante se encuentra dentro de la misma red local (LAN) que su objetivo, el abanico de ataques se amplía aún más, volviéndose realmente interesante. Se denomina sniffing a la técnica utilizada para capturar todo el tráfico generado en una red local, esto incluye las conexiones propias y de los demás equipos.
Analicemos un caso típico: trabajamos en una empresa donde las oficinas están conectadas a través de un hub, con un router para acceder a Internet. Como de costumbre, ingresamos con nuestro usuario y contraseña al correo electrónico y los sitios web que nos interesan. Si otro empleado desde su oficina estuviera haciendo un sniffing, habría capturado todas nuestras credenciales de acceso sin que nosotros siquiera lo sospechemos. ¿Paranoia? Veamos que no…
Obtener WireShark
Para obtener este excelente analizador de protocolos debemos acceder a su sitio web oficial: www.wireshark.org, y presionar el botón [Get Started Now]. El mismo nos dirigirá a la página de descargas donde veremos las versiones de WireShark disponibles para 32 y 64 bits, sobre Windows, OS X y también el código fuente del programa para compilar en Linux. Además de WireShark se nos instalará una librería para su correcto funcionamiento, en el caso de Windows es winpcap y en Linux pcap.
Modo promiscuo
Lo primero que debemos hacer para realizar un sniffing es poner nuestra placa de red en modo promiscuo…¿modo qué? Los paquetes de una conexión tienen, entre otros datos, una dirección de destino que es la MAC Address del equipo que lo debe recibir. Cuando el paquete se distribuye en la red local (por ejemplo, mediante un hub), cada equipo se fija si la MAC de destino coincide con la suya; de ser así acepta el paquete, sino, lo descarta. Siendo así, solo podremos ver los paquetes que entren a la red con la dirección MAC de nuestro equipo, lo cual, para un ataque no nos sirve. Poner nuestra placa de red en modo promiscuo hará que aceptemos todos los paquetes sin importar si nos corresponden o no. En el caso de que se utilice un hub, no tendremos que hacer nada más para capturar paquetes de otros equipos. La comunicación con el verdadero destino no se verá alterada, ya que también la recibirá. Es por eso que detectar un sniffing en la red es algo realmente difícil.
Manos a la obra con WireShark
WireShark es un analizador de protocolos, y como tal nos permite realizar muy bien un sniffing en la red que estamos conectados. Una vez que lo descargamos e instalamos, procedemos a abrirlo y presionamos donde dice Interface List. Allí elegiremos nuestra placa de red para que WireShark la ponga en modo promiscuo. Al presionar [Start]g empezaremos a ver todas las conexiones.
Seleccionamos la placa de red que queremos poner en modo promiscuo para capturar todos los paquetes, incluyendo aquellos que tienen otra dirección MAC de destino.
Dejemos a WireShark capturando el tráfico y accedamos a diferentes aplicaciones web y otros servicios de Internet que requieran usuario y contraseña, como el correo electrónico o un servidor FTP.
Cuando volvamos a la ventana del WireShark veremos una enorme cantidad de datos capturados de nuestro equipo y de los demás conectados a la misma red local. Para encontrar lo que nos interesa sin desesperar, debemos hacer uso del campo [Filter].
Filtros por dirección IP
Si queremos ver las conexiones de un equipo especifico de la red local, debemos poner su IP como filtro de IP de origen. Para ello, en el campo [Filter] de WireShark escribimos lo siguiente: ip.src == 192.168.1.100. La IP es un ejemplo, debe ser reemplazada por la real del equipo que queremos ver sus conexiones. Si quisiéramos, por el contrario, filtrar para ver las conexiones que realizaron los equipos de la red local a un servidor externo, tenemos que filtrar por IP de destino de la siguiente manera: ip.dst == 190.123.34.57. También está el filtro ip.addr que mostrará paquetes de la IP indicada sin importar si es origen o destino.
Aplicamos el filtro ip.src para ver únicamente las conexiones del equipo de la red local que nos interesa.
Filtros por protocolos
Realizar la búsqueda que nos interesa filtrando por protocolos nos ayudará a encontrar todo más rápido. Por ejemplo, si lo que queremos es ver las conexiones que se realizaron a sitios web, filtraremos por HTTP. Si nos interesa el correo electrónico, aplicaremos el filtro de SMTP y así con cada servicio. Podemos ser aún más específicos e indicarle a WireShark que nos muestre, por ejemplo para el caso de HTTP, aquellas peticiones que se hicieron por método POST (utilizado comúnmente en formularios de acceso). Para ello aplicamos el filtro de la siguiente manera: http.request.method == POST. Para el correo electrónico podemos filtrar por el comando AUTH que es donde se vería el usuario y contraseña: smtp.req.command == AUTH.
Capturamos unas credenciales de acceso que se enviaron en texto claro. Queda en evidencia la importancia de autenticarnos en sitios que utilicen cifrado (https).
Filtro por dominio
Otro filtro de gran utilidad es el que se puede hacer por dominio. Con ello podremos ver fácilmente las conexiones que se realizaron por ejemplo hacia www.facebook.com, www.google.com o cualquier otro sitio. El filtro se aplica con http.host. Por ejemplo: http.host ==www.nop07security.com.
Un dato útil es que los filtros se pueden concatenar mediante el comando &&. Por ejemplo: ip.src == 192.168.1.100 &&http.host == google.com. Con ello veremos únicamente las conexiones a Google de la dirección IP indicada.
Los filtros de WireShark son realmente útiles para encontrar lo que nos interesa rápidamente, además podemos combinarlos y hacer búsquedas aún más eficaces.
¿Y qué pasa si…?
¿La red local utiliza un switch en lugar de un hub? ¿Si nos conectamos por Wi-Fi? En estos casos un sniffing simple como el que aprendimos no resulta eficaz, ya que los paquetes de otros equipos se van por canales separados, de modo que aun poniendo nuestra placa en modo promiscuo no lograremos capturarlos. ¿Se puede hacer algo? Sí, en la próxima entrega de ataques en redes LAN veremos que con un simple paso más cualquiera puede capturar los paquetes dirigidos a otro equipo.