Wireshark
Introducción
A finales del año 1997 Gerald Combs inició un proyecto como una forma de resolver problemas de red y avanzar en su carrera. Durante el desarrollo, varias personas se unieron al proyecto, contribuyendo con parches, informes de errores y otros componentes. En el año 2006, el proyecto cambió de nombre a Wireshark.

La versión 1.0 de la herramienta fue lanzada en 2008 después de años de desarrollo, y en 2015 lanzó su versión 2.0 con una nueva interfaz de usuario.
Actualmente se encuentra en la versión 4.0.3 donde se corrigen bugs y vulnerabilidades y se actualiza el soporte a algunos protocolos. Esta versión está disponible y soportada para equipos con arquitectura x64. La última versión soportada para equipos Windows x32 es la 3.6.
Wireshark es ampliamente utilizado por administradores de red y analistas de red, así como por profesionales de la seguridad de la información.
Funcionalidad
Wireshark es un software de análisis de red que ayuda a los administradores de sistemas y de red a detectar y solucionar problemas en su red. Algunas de las funcionalidades o uso que se le puede dar a la herramienta son:
- Identificar paquetes caídos.
- Identificar problemas de latencia.
- Identificar actividad maliciosa en la red.
- Identificar mala configuración de los equipos.
- Enseñar y verificar el funcionamiento de los protocolos (funcionalidad didáctica).
Por otro lado, ofrece herramientas y comandos para filtrar y analizar con más detalle el tráfico de red, permitiendo llegar a la causa raíz del problema. Es por tanto, una herramienta poderosa que requiere un conocimiento sólido de los conceptos de redes, incluyendo protocolos y servicios, la pila TCP/IP, encabezados de paquetes, enrutamiento y reenvío de puertos, y DHCP.
Uso del cibercriminal
Como vemos es una herramienta muy útil que puede ayudar, sin embargo, la tecnología no es buena ni mala sino que depende del uso que le dé la persona. Es decir, existen personas y grupo de personas que le dan otro uso: un uso malicioso. Los cibercriminales usan esta herramienta para capturar el tráfico de la red intentando conseguir información confidencial como usuarios o contraseñas, o incluso muchas veces, para grabar llamadas o conversaciones telefónicas. La técnica habitual es situarse en WiFis gratuitas para capturar todo el tráfico esperando que un usuario introduzca usuario, contraseña , datos bancarios, etc , en servicios donde la información viaje sin cifrar, como por ejemplo en sitios que ejecuten HTTP. ¿Entiendes ahora por qué se intenta no usar ya este servicio y la importancia de no acceder a sitios sensibles si estás usando una red gratuita pública?
Para grabar las llamadas telefónicas, el ciberdelincuente tiene que tener acceso a la red empresarial y sniffar (capturar) el tráfico SIP, RDP, etc. WireShark ofrece una funcionalidad específica que permite hacer eso de modo automático.

Filtros
Los filtros de Wireshark sirven para simplificar la búsqueda de paquetes. Es decir, si quieres ver sólo el tráfico TCP o los paquetes de una dirección IP concreta, tienes que aplicar los filtros adecuados en la barra de filtros.
Wireshark contempla dos tipos de Filtros: filtros de captura y filtros de visualización. El primero de ellos, se aplica antes de la operación de captura, sin poder modificarse después. La función es que se visualicen sólo los paquetes que cumplen los requisitos del filtro. Por otro lado, el segundo ellos, se utilizan después del inicio de la operación de captura y sirve para mostrar un criterio sobre los paquetes capturados, la captura se almacena realmente en un búfer de rastreo. A diferencia del primero se puede cancelar y cambiar posteriormente.
Sintaxis de los filtros y ejemplos de filtros de captura
Podemos combinar las primitivas de los filtros de la siguiente forma:
- Negación: ! ó not
- Unión o Concatenación: && ó and
- Alternancia: || ó or
Filtros generales
Sintaxis | Significado |
host host | Filtrar por host |
src host host | Capturar por host origen |
dst host host | Capturar por host destino |
Ejemplos | |
host 197.163.1.50 | Captura todos los paquetes con origen y destino 197.163.1.50 |
src host 197.163.1.50 | Captura todos los paquetes con origen en host 197.163.1.50 |
dst host 197.163.1.50 | Captura todos los paquetes con destino en host 197.163.1.50 |
dst host SERVER-1 | Captura todos los paquetes con destino en host SERVER-1 |
host http://www.hackrocks.com | Captura todos los paquetes con origen y destino http://www.hackrocks.com |
Filtros basados en puertos
Sintaxis | Significado |
port port | Captura todos los paquetes con puerto origen y destino port |
src port port | Captura todos los paquetes con puerto origen port |
dst port port | Captura todos los paquetes con puerto destino port |
not port port | Captura todos los paquetes excepto origen y destino puerto port |
not port port and not port port1 | Captura todos los paquetes excepto origen y destino puertos port y port1 |
Ejemplos | |
port 23 | Captura todos los paquetes con puerto origen y destino 23 |
src port 24 | Captura todos los paquetes con puerto origen 24 |
not port 25 and not port 80 | Captura todos los paquetes excepto origen y destino de los puertos 25 y 80 |
portrange 1-1024 | Captura todos los paquetes con puerto origen y destino en un rango de puertos 1 a 1024 |
dst portrange 1-1024 | Captura todos los paquetes con puerto destino en un rango de puertos 1 a 1024 |
Filtros basados en protocolo Ethernet / IP
Ejemplos | |
ip | Captura todo el tráfico IP |
ip proto \tcp | Captura todos los segmentos TCP |
ether proto \ip | Captura todo el tráfico IP |
ip proto \arp | Captura todo el tráfico ARP |
Filtros basados en red
Sintaxis | Significado |
net net | Captura todo el tráfico con origen y destino red net |
dst net net | Captura todo el tráfico con destino red net |
src net net | Captura todo el tráfico con origen red net |
Ejemplos | |
net 192.168.1.0 | Captura todo el tráfico con origen y destino subred 1.0 |
net 192.168.1.0/24 | Captura todo el tráfico para la subred 1.0 mascara 255.0 |
dst net 192.168.2.0 | Captura todo el tráfico con destino para la subred 2.0 |
net 192.168.2.0 and port 21 | Captura todo el tráfico origen y destino puerto 21 en subred 2.0 |
broadcast | Captura solo el tráfico broadcast |
not broadcast and not multicast | Captura todo el tráfico excepto el broadcast y el multicast |
Filtros de Visualización (Display Filter)
Los filtros de visualización establecen un criterio de filtro sobre las paquetes que estamos capturando y qué estamos visualizando en la pantalla principal de Wireshark. Al aplicar el filtro en la pantalla principal de Wireshark aparecerá solo el tráfico filtrado a través del filtro de visualización.
Comparando Filtros.
§ Igual a: eq ó ==
§ No igual: ne ó !=
§ Mayor que:gt ó >
§ Menor que: lt ó <
§ Mayor o igual: ge ó >=
§ Menor o igual: le ó <=
Combinando Filtros.
§ Negación: ! ó not
§ Unión o Concatenación: && ó and
§ Alternancia:|| ó or
Otros operadores.
§ Contains: Realizamos una búsqueda por la cadena contains
Ejemplos de filtro
Sintaxis | Significado |
ip.addr == 194.164.1.40 | Visualizar tráfico por host 194.164.1.40 |
ip.addr != 196.164.1.25 | Visualizar todo el tráfico excepto host 196.164.1.25 |
ip.dst == 197.165.1.50 | Visualizar por host destino197.165.1.50 |
ip.src == 197.165.1.50 | Visualizar por host origen 197.165.1.50 |
ip | Visualiza todo el tráfico IP |
tcp.port ==143 | Visualiza todo el tráfico origen y destino puerto 143 |
ip.addr == 197.165.1.50 and tcp.port == 143 | Visualiza todo el tráfico origen y destino puerto 143 relativo al host 197.165.1.50 |
http contains «http://www.hackrocks.com « | Visualiza el tráfico origen y destino http://www.hackrocks.com |
frame contains «@micurso.es» | Visualizamos todos los correos con origen y destino al dominio micurso.es, incluyendo usuarios, etc |
icmp[0:1] == 08 | Filtro avanzado con el que visualizamos todo el tráfico icmp de tipo echo request |
ip.ttl == 1 | Visualiza todos los paquetes IP cuyo campo TTL sea igual a 1 |
tcp.windows_size != 0 | Visualizar todos los paquetes cuyo campo Tamaño de Ventana del segmento TCP sea distinto de 0 |
ip.tos == x | Visualiza todos los paquetes IP cuyo campo TOS sea igual a x |
ip.flags.df == x | Visualiza todos los paquetes IP cuyo campo DF sea igual a x |
udp.port == 53 | Visualiza todo el tráfico UDP puerto 53 |
tcp contains «terra.com» | Visualizamos segmentos TCP conteniendo la cadena terra.com |
Analizando tráfico
Una prueba de concepto simple para entender cómo funciona un poco WireShark, es abrir la herramienta, seleccionar la interfaz de red que corresponda (en mi caso Ethernet porque estoy conectado por cable) y empezar a capturar tráfico.
En esta ocasión, tengo varias ventanas abiertas en el navegador y de forma adicional he lanzado un ping al dominio de google y he entrado en la web de comunio.
El objetivo será filtrar toda la cantidad de paquetes que salen para conseguir sólo los del ping y los relacionados con comunio.
El escenario de salida es el siguiente:

Primero, intentemos obtener los paquetes del ping. Para ello, lo podemos buscar por la IP destino que la propia herramienta nos devuelve, o podemos usar el filtro de icmp buscando los echo request (Tipo 8, código 0) o los echo reply (Tipo 0, Código 0), por ejemplo.



Al aplicar cualquiera de los filtros, encontramos los paquetes que vamos buscando. Ahora, pasemos a fijarnos bien, porque Wireshark no sólo nos muestra el tipo de mensaje, sino que despliega en el menú inferior las distintas capas del modelo TCP/IP con sus distintos campos y cabeceras.

En la captura anterior, hemos clicado sobre uno de los echo request lanzados por nuestro PC hacia google. Podemos ver las distintas capas con el origen y destino, así como las distintas cabeceras de los distintos protocolos. El protocolo ICMP es específico del ping, y va encapsulado sobre el protocolo IP, pero en esta ocasión se despliega aparte para una mejor visualización de sus campos.
Ahora, probemos a obtener el tráfico capturado hacia la web de comunio. Para ello podemos hacer un ping al dominio de comunio.es para averiguar la IP destino e incluirla en nuestro filtro. Al encontrarlo, podemos observar que el dominio usa HTTPS con el protocolo TLSv1.2 (comunicación cifrada).

En esta ocasión, podemos ver como aparecen la capa de transporte TCP y la de aplicación (según el modelo de capas de internet) TLS. En este último, podemos ver como la información va cifrada.
