Analizadores de Tráfico de Red (Sniffer)

Los sniffer son una de las herramientas más útiles y, a menudo, ignoradas durante un test de penetración. Se trata de herramientas que permiten capturar el tráfico de red y son utilizadas por los administradores de red para detectar problemas en la misma analizando los paquetes que se intercambian entre los equipos.

Desde el punto de vista de un atacante o de un pentester, el empleo de un sniffer permitirá analizar los protocolos de red y comprender qué está sucediendo en la red cuando se llevan a cabo acciones de pentesting, por lo que normalmente durante la explotación se ejecutará en el equipo atacante.

Un sniffer, generalmente, mostrará los paquetes en pantalla en tiempo real, de modo que se irá observando la actividad en la red a medida que se vaya interactuando con la misma. Además, permiten guardar el tráfico de red en archivos para su posterior análisis offline o para incluir fragmentos de la captura del tráfico en el informe final. Se debe tener en cuenta que las capturas de tráfico pueden generar archivos muy pesados y con cantidades ingentes de información, por lo que es recomendable guardar únicamente capturas de acciones puntuales y aplicar los filtros adecuados para únicamente capturar el tráfico de interés para lo que se esté probando.

Wireshark

Es el analizador de protocolos de red más popular y utilizado del mundo, diseñado para capturar, inspeccionar y analizar el tráfico de datos que fluye a través de una red informática en tiempo real o mediante archivos previamente guardados. Originalmente lanzado bajo el nombre de Ethereal, se trata de una herramienta de código abierto y gratuita, indispensable tanto para administradores de sistemas como para profesionales de ciberseguridad y desarrolladores.

Para profundizar en las reglas de sintaxis y exprimir al máximo el motor de análisis, puedes consultar la Página del Manual de wireshark-filter en la documentación oficial de Wireshark.

Tcpdump

Se trata de una herramienta de línea de comandos, que se encuentra instalada en la mayor parte de las distribuciones Linux y permite capturar el tráfico de red y guardar la captura, así como leer archivos con capturas almacenadas y mostrarlos en pantalla.

Por defecto, la ejecución de tcpdump exige privilegios de superusuario, aunque se puede modificar la configuración para poder ejecutarlo sin privilegios. Su uso básico es muy simple y se puede ejecutar sin necesidad de indicar ningún parámetro, aunque, dado que generalmente el tráfico de red implica una cantidad abrumadora de paquetes, resulta conveniente filtrar la captura de modo que únicamente se capture y se muestre el tráfico de interés.

Tcpdump permite el empleo de múltiples parámetros para especificar el tráfico a capturar.

Filtrado de tráfico

Durante un test de penetración se querrá capturar el tráfico de las acciones que se ejecuten para analizar la respuesta del objetivo. Para ello será necesario iniciar tcpdump corno paso previo, aplicando los filtros necesarios.

Un filtro de tcpdump es una expresión, utilizada a continuación de las opciones, que se analiza de manera lógica corno verdadera o falsa para mostrar el paquete o descartarlo. Los filtros se componen de varias palabras clave denominadas primitivas, que pueden concatenarse utilizando los operadores lógicos and y or, negarse con el operador not, y agruparse utilizando paréntesis. Algunas de las primitivas que se pueden utilizar son las siguientes:

  • Tipo: Admite los valores net, host, port o portrange para indicar, respectivamente, una red completa, un host, un puerto especifico o un rango de puertos. Si no se indica ningún tipo, el valor por defecto es host.
  • Dirección: Especifica el sentido de la comunicación, para lo que admite los valores src o dst para indicar que el flujo es en sentido saliente o entrante, respectivamente. Estos valores se pueden combinar de manera lógica utilizando and y or. Si se indica la dirección IP sin usar este modificador, el valor por defecto será src or dst, de modo que se capturará tanto el tráfico entrante como el saliente.
  • Protocolo: Tcpdump permite especificar el protocolo a capturar, entre los que se encuentran arp, ip, ip6, tcp, udp o icmp. Por tanto, para especificar el protocolo adecuado es necesario conocer el que utiliza la aplicación. Por ejemplo, si se quisiera capturar el tráfico generado por la respuesta a traceroute se indicaría el protocolo udp, mientras que si únicamente se quisiera capturar la respuesta a un ping se tendría que especificar el protocolo icmp. Se pueden indicar varios protocolos con el operador lógico or.

Opciones más utilizadas clasificadas según su función:

Captura y Control (Entrada / Salida)
  • -i [interfaz]: Define la interfaz de red que se va a escuchar (ej. -i eth0, -i wlan0). Si usas -i any, capturará el tráfico de todas las interfaces activas a la vez.
  • -w [archivo.pcap]: Escribe y guarda los paquetes en un archivo en lugar de mostrarlos en la pantalla. Este archivo se puede abrir después en Wireshark.
  • -r [archivo.pcap]: Lee y analiza un archivo de captura previamente guardado.
  • -c [número]: Establece un límite de paquetes. El programa se cerrará automáticamente tras capturar la cantidad exacta de paquetes indicada (ej. -c 100).
Visualización y Formato en Pantalla
  • -n: No resuelve nombres de dominio. Muestra las direcciones IP directamente en número (ej. 192.168.1.1 en lugar de router.local), lo que acelera el rendimiento del comando.
  • -nn: Además de no resolver IPs, tampoco resuelve los nombres de los puertos (ej. mostrará port 80 en lugar de port http). Es la opción más recomendada para análisis técnico.
  • -X: Muestra el contenido de cada paquete tanto en formato Hexadecimal como en ASCII (texto plano). Es ideal si buscas contenido específico dentro de los paquetes de datos.
  • -A: Muestra los paquetes solo en formato ASCII. Muy útil para leer tráfico web no cifrado (HTTP), correos o payloads legibles.
  • -v, -vv, -vvv: Incrementa de forma progresiva el nivel de detalle (verbosidad) de la información mostrada de cada paquete (como TTL, ID de paquete, opciones de IP, etc.).
Gestión del Tiempo y Tamaño
  • -tttt: Cambia el formato de la hora para mostrar la fecha y hora completa con máxima precisión en cada línea (Año-Mes-Día Hora:Min:Seg:Microsegundos).
  • -s [tamaño]: Define el Snaplen o tamaño de la porción del paquete a capturar en bytes. Si usas -s 0 (o -s 65535 en versiones antiguas), capturará el paquete completo sin recortar nada.