jueves, 1 de diciembre de 2011

Filtrado de paquetes con Wireshark.


Una de las características proporcionadas por Wireshark para facilitar el análisis de los paquetes que circulan por una red es la capacidad de aplicar filtros de modo que el numero de paquetes visualizados o capturados se reduzca a únicamente los que son de interés para el usuario.

La correcta aplicación del filtrado proporciona una serie de ventajas tanto en el óptimo uso de los recursos del equipo, al no almacenar en memoria ni procesar paquetes de ningún interés, como al usuario al limitar el análisis únicamente a los protocolos, direcciones IP, tiempos y rangos que se estén examinando.

Sintaxis de filtros en Wireshark.

Antes de pasar a como aplicar los filtros es adecuado tener una comprensión básica de la sintaxis para aplicar los mismos, esto se hace por medio de una cadena de texto con un formato especifico, de forma similar a las condiciones booleanas de los lenguajes de programación.

Para Wireshark el formato utilizado es el siguiente:

<campo a filtrar> <relación a cumplir> <valor de referencia>

Donde:

Campo a filtrar: Indica cual de los posibles campos contenidos en el paquete de datos debe de cumplir la condición indicada, para indicarlo basta con poner la cadena de texto que identifica a dicho campo.
Puesto que la lista de posibles campos a filtrar es demasiado extensa para intentar listarla se recomienda ir a la documentación oficial de Wireshark para conocerla en detalle.

Relación a cumplir: Esta parte del filtro indica como se desea que sea el dato contenido en el campo en relación con el valor de referencia, esta parte se muestra como operadores lógicos idénticos a los usados en el lenguaje de programación C, mas tres condiciones extra todos los operadores disponibles se listan a continuación

  • Present: El operador por defecto devuelve verdadero si el campo esta presente en los paquetes capturados.
  • == : Igual a, retorna verdadero si el valor contenido en el campo es igual al valor de referencia.
  • != : Diferente a, este operador se cumple cuando el contenido del campo es diferente al valor de referencia.
  • > : Mayor que, verdadero solo si el campo contiene un valor mayor que el valor de referencia.
  • < : Menos que, regresa verdadero cuando el valor en el campo sea menor que la referencia.
  • >=: Mayor o Igual, se cumple cuando el campo contiene un valor igual o mayor a la referencia.
  • <=: Menor o Igual, si el campo contiene una valor menor o igual a la referencia este operador regresara verdadero.
  • Contains: contiene, verdadero si el campo contiene alguno de los elementos proporcionados como un rango en el valor de referencia.
  • Matches: coincide, retornara verdadero si el el contenido del campo coincide perfectamente con el rango de valores de referencia.

Valor de referencia.
Este es el valor con el que deseamos filtrar los paquetes, su valor y formato variaran dependiendo de lo que se desee realizar pudiendo pasar de un simple valor booleano, una dirección IP, un numero de secuencia o un rango de valores a comparar.


Para explicar el funcionamiento de la forma mas sencilla posible se presenta el siguiente ejemplo de un filtro sencillo.
ip.dst == 128.30.52.45

Este filtro en particular le indica a Wireshark que solo debe mostrar los paquetes donde el campo destino de la cabecera IP contenga la dirección 128.30.52.45, de esto y basándonos en los expuesto anteriormente podemos separar los tres elementos del filtro, siendo:

  • Campo a filtrar: ip.dst, la dirección destino del protocolo IP.
  • Relación a cumplir: ==, queremos que el campo sea igual al valor de referencia.
  • Valor deseado: 128.30.52.45, la dirección IP a la que queremos sea igual el valor contenido en el campo ip.dst.

Dialogo de expresiones.

Con el propósito de simplificar la creación de filtros Wireshark proporciona un dialogo especializado desde el cual diseñar los filtros, de modo que no sea necesario memorizar la larga lista de campos que pueden filtrarse, este dialogo puede accederse pulsando el botón “Expression...” en la barra de filtros y se muestra en la Figura 1

Figura 1: Dialogo de expresiones.

Este dialogo facilita la creación de los filtros ya que solo hay que seleccionar el campo a filtrar y la relación que se desea se cumpla, el único dato que debe ser introducido manualmente es el valor de referencia o el rango de valores de referencia, cada uno con su campo de texto.

Combinación de filtros.

Otra de las capacidades de los filtros en Wireshark es el poder aplicar mas de un filtro simultáneamente utilizando los conectores lógicos and y or para definir cuales son los resultados deseables, su funcionamiento se describe a continuación.

  • And: Y, este conector logico regresara verdadero solo si ambas condiciones de filtrado se cumplen
  • Or: O, regresa verdadero si alguna de las condiciones de filtro de cumple.

Como en el caso anterior se presentara un ejemplo para demostrar como funcionan los conectores, en este caso se desea filtrar los paquetes que contengan la cabecera http y su cabecera TCP contenga activa la bandera FIN, para esto el filtro a utilizar es:

http and tcp.flags.fin

Examinando los componentes del filtro se tiene

  • http: cuando solo se indica el campo Wireshark solo muestra los paquetes que lo contengan, en esta caso mostrara los paquetes que contengan la cabecera http.
  • and: el conector Y, deseamos que se cumpla la condición anterior y la siguiente.
  • tcp.flags.fin: pedimos que solo se muestren los paquetes cuya cabecera tcp contenga la bandera Fin activada.

Al aplicar este filtro Wireshark solo desplegara los paquetes que cumplan con ambas condiciones.

Referencias