Skip to main content
Analizando el tráfico con tcpdump en sistemas Unix/Linux

Analizando el tráfico con tcpdump en sistemas Unix/Linux

Tcpdump permite al usuario la posibilidad de capturar y mostrar en tiempo real los paquetes enviados y recibidos por la red a la cual esté conectado

Bienvenidos a un nuevo post en ByteMind. En el caso de hoy estaremos analizando tráfico con tcpdump, una herramienta de línea de comandos con la finalidad de analizar el tráfico que circula por nuestra red.

Tcpdump permite al usuario la posibilidad de capturar y mostrar en tiempo real los paquetes enviados y recibidos por la red a la cual esté conectado, permitiendo además poder filtrar el tipo de tráfico a analizar.

Tcpdump funciona en la gran mayoría de distribuciones unix mediante el uso de la librería libpcap, e incluso existe una adaptación de la misma para windows bajo el nombre de Windump, la cual se apoya mediante la librería winpcap

 

Cómo funciona

Tcpdump, al igual que en la gran mayoría de herramientas, existe a disposición del usuario una ayuda simple del mismo y el manual con la información al respecto, dejo también un enlace a la página oficial en el siguiente link.

El comando tendrá la siguiente sintaxis:

Y se puede ver la ayuda del mismo con el siguiente comando:

O el manual completo del mismo con:

También permite el uso de operadores para concatenar diferentes filtros:

  • AND -> and o &&
  • OR -> or o ||
  • EXCEPT -> not o !

Explicada la sintaxis y opciones disponibles, vamos a verlo en funcionamiento con una serie de ejemplos muy útiles a la hora de analizar el tráfico de red.

 

Capturar paquetes desde una interfaz concreta

Si ejecutamos tcpdump sin especificar ninguna opción, por defecto, capturará todo el tráfico que pase por cualquier interfaz de red a través de la cual estemos conectados, podemos limitar esta captura a una interfaz en concreto con la opción -i:

En caso de querer capturar tráfico de cualquiera de ellas podemos especificarlo con la opción any:

 

Capturar n número de paquetes

Es posible especificar cuantos paquetes se quieren obtener a la hora de realizar una captura de paquetes, para ello se utiliza la opción -c

El anterior comando capturar sólo los 5 primeros paquetes que pasen a través de la interfaz eth0.

 

Mostrar los paquetes capturados en ASCII

Con la opción -A es posible especificar a tcpdump que lo que nos interesa es ver los paquetes capturados en formato ascii, quedando el comando de la siguiente manera:

 

Mostrar los paquetes capturados en HEX y ASCII

En algunas ocasiones es posible que el usuario prefiera ver los paquetes en formato hexadecimal y ascii, para ello tcpdump tiene una opción específica que mostraría ambos formatos. Esta opción sería la -X, como en el siguiente comando de ejemplo:

 

Guardar el resultado de una captura en un fichero

Tcpdump da también la posibilidad de guardar los paquetes capturados en un fichero para analizarlo más detenidamente más tarde. Para ello se utilizaría la opción -w como en el siguiente ejemplo:

Como formato de salida se utiliza la extensión .pcap porque es entendida por la gran mayoría de herramientas de análisis de paquetes.

 

Lectura de paquetes desde un fichero .pcap

De la misma forma que es posible guardar los paquetes capturados, es posible leerlos del fichero .pcap generado. Para ello usaremos la opción -r como en el siguiente ejemplo:

 

Mostrar la ip de los paquetes capturados

Tcpdump por defecto muestra los paquetes con la dirección DNS del mismo, pero no muestra información de su IP. Para evitar esto y ver información acerca de la IP se encuentra disponible la opción -n como en el siguiente ejemplo:

 

Mostrar los paquetes modificando el formato de fecha

Es posible modificar el timestamp mostrado en cada paquete con un formato más legible con la opción -tttt como en el siguiente ejemplo:

 

Mostrar paquetes con un tamaño superior o inferior a n bytes

Tcpdump también ofrece la posibilidad de capturar sólo el tráfico que tenga un tamaño mínimo especificado. Para ello se puede especificar un tamaño mínimo, un tamaño máximo o ambos.

Para especificar un tamaño mínimo se utiliza el filtro less:

Para especificar un tamaño máximo se utiliza el filtro greater:

O es posible el uso de ambos para especificar una franja concreta de tamaño:

En el ejemplo anterior especificamos que los paquetes deben de tener un tamaño mínimo de 1024 bytes y un tamaño máximo de 2048 bytes, como ya mencionamos es posible utilizar operadores para concatenar diferentes filtros.

 

Capturar paquetes de un protocolo específico

También es posible capturar el tráfico sólo de aquellos protocolos especificados como podría ser icmp, arp, tcp, udp…

Para ello simplemente hay que especificar dicho protocolo como en el siguiente ejemplo:

En el anterior ejemplo capturamos todo el tráfico de la interface de loopback a través del protocolo tcp.

 

Mostrar paquetes de un puerto específico

Esto puede ayudar mucho a la hora de detectar un fallo en un puerto o si nos interesa conocer que está corriendo en un puerto determinado. Para ello simplemente hay que especificar el filtro port junto con el puerto que queremos analizar:

 

Filtrar tráfico por ip o red

Mediante el uso del filtro host es posible especificar una ip o hostname específico como en el siguiente ejemplo:

En caso de querer escanear una red se usaría el filtro net, por ejemplo:

 

Filtrar tráfico por origen y destino

Para filtrar el tráfico por su origen o destino es tan sencillo como especificar el mismo mediante los filtros src o dst como en el siguiente ejemplo:

También es posible utilizar estos filtros para especificar un puerto, un host o una red específicas de origen y/o destino. Por ejemplo:

 

Modo verbose

Como en la gran mayoría de herramientas, existe un modo debug el cual nos de más información acerca de lo que estamos realizando. En el caso de tcpdump podemos especificar el nivel de debug que deseamos con la opción -v a -vvv según cuanta información se quiere obtener.

 

Filtrar por flags TCP

También es posible filtrar por paquetes con un flag TCP específico.

Flag TCP RST

Flag TCP SYN y RST

Flag TCP SYN

Flag TCP SYN y ACK

Flag TCP ACK

Flag TCP URG

Flag TCP PSH

Flag TCP FIN

 

Filtrar por cabeceras HTTP

También es posible entre otras cosas filtrar por diferentes datos de una cabecera http.

Filtrar por user-agent

Filtrar por tipo de petición

Filtrar por cabecera

Filtrar por cookie

 

Búsqueda de conexiones ssh

En este caso no se especifica el puerto de la conexión ssh ya que se identifica la misma mediante el banner.

 

Búsqueda de tráfico ftp

Es posible utilizar un nombre ya predefinido o por un puerto específico.

 

Búsqueda de contraseñas en plano

Esta consulta la dejo como extra ya que puede ayudar a identificar posibles problemas de seguridad al enviarse credenciales de acceso en texto plano.

 

Esto es todo por el momento. Espero que les sea de utilidad y ya saben cualquier aporte, duda o comentario es bienvenido.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *