Daboweb

Herramientas para la interpretación de capturas de red. (7/10)

Publicado por Alfon on enero 27, 2011
Seguridad Informática

En anteriores entregas:

Presentación | Parte 1 | Parte 2 | Parte 3 | Parte4 | Parte 5 | Parte 6

Wireshark II Parte.

En la primera parte del artículo dedicado a Wireshark, aprendimos qué era, para que sirve, como usarlo de forma básica, aplicamos filtros y vimos algunos ejemplos. Seguimos avanzando y, además, veremos algunos aspectos más complejos.

En este artículo, más que teoría, y una vez visto los aspectos más básicos, nos centraremos en la práctica.  Qué vamos a ver:

  • Salvando los datos de captura. Opciones de captura y salvado múltiple.
  • Navegando por las capturas múltiples. Ring buffer.
  • Truncado de paquetes.
  • Extracción de binarios y uso de Follow TCP Stream.
  • Extracción objetos HTTP.
  • Estadísticas Wireshark. Estadísticas Service Response Time.
  • Estadísticas Flow Graph.
  • Otras estadísticas.
  • Estadísticas gráficas. IO Graph y Gráficas tcptrace.

Salvando los datos de captura.

Básicamente tenemos dos fomas de salvar los datos. Una vez que terminamos de capturar y tras pulsar Stop en el menú Capture o Control+E, en el menú File > Save As… podemos salvar a un fichero .pcap toda la captura o solo los datos que hayan pasado un determinado filtro de visualización. También una serie de paquetes seleccionados,  marcados o un rango de paquetes (veremos como seleccionar y marcar más adelante).

Puede ocurrir que realicemos una captura que se prolonge demasiado en el tiempo o que se trate de una captura con gran trasferencia de de datos. En ambos casos el archivo de captura .pcap será demasiado grande y puede ser intratable. Aquí entraría la segunda forma de salvar los datos, que es usando múltiples archivos de captura.

Para usar esta caracterísitica de Wireshark, debemos completar las opciones de uso de multiples archivos:

Las opciones de Capture File(s).

File. Aquí indicamos el archivo y ruta de los archivos .cap/.pcap de captura. El formato resultante del archivo .cap /.pcap es el siguiente:

cap___00002_20091026085612

  • cap__ es el nombre que indicamos en el campo File.
  • 00002 número de serie o de captura
  • 20091026085612 marca de tiempo: fecha  2009-10-26 tiempo 08:56:12 en horas, minutos y segundos.

Use multiple files. Marcamos esta opción para captura a multiples archivos.
Next file every. Wireshark grabará un archivo nuevo cada n Megabytes, Kilobytes o Gigabytes.
Next file every. Wireshark también grabará un archivo nuevo cada n segundos, minutos, horas o dias.

NOTA: Tanto si usamos la opción de grabar archivo nuevo cada n tiempo o cada n cantidad de bytes, ambas la podemos usar de forma independiente o marcar las dos. Si marcamos las dos, Wireshark grabará un archivo nuevo cada n cantidad de bytes, pero  si sobrepasa el tiempo que marquemos en la segunda opción (opción de tiempo), entonces grabará un archivo nuevo aunque no llegue a la cantidad en bytes.

Como siempre, lo vemos con un ejemplo. Fijaos en la captura anterior (opciones marcadas dentro del recuadro rojo), tenemos marcado que grabe un archivo nuevo cada 1 Megabyte o cada 15 segundos. Si vemos los archivos .cap grabados:

Observar que, a pesar de indicar que grabemos archivo nuevo cada 1 Megabyte, no llega a tal cantidad, ya que sobrepasa los 15 segundos marcado como límite de captura. Observad también las marcas de tiempo, vereis como entre una y otra pasan exactamente 15 segundos.

Seguimos con las siguientes opciones.

Stop capture after. Wireshark parará la captura cuando se graben n ficheros .pcap.
Ring buffer with. Wireshark creará una serie de archivos de cáptura (buffer en anillo) cada n ficheros de captura.

En Capture filter, podemos establecer un filtro para la captura de los multiples. cap.  De esta forma optimizamos el rendimiento y el tamaña de los ficheros.

Navegando por los ficheros de captura múltiples.

Una vez quetenemos una serie de ficheros decaptura múltiples, podemos navegar por ellos desde el menú File > File Set > List files. Así, cuando seleccionemos cualquiera de los archivos de la captura, se visualizarán todos los datos correspondientes en Wireshark:

Truncado de paquetes o snaplen.

Cuando hablamos de Windump / TCPdump en la parte 1/10, vimos la opción snaplen, y decíamos:

-s (tamaño) se trata del snaplen. si lo ponemos a 0 estamos cogiendo los paquetes completos.  Si hubiéramos puesto -s 512 se capturarían sólo los primeros 512 bytes del paquete a capturar.

.

Pues bien, para este mismo cometido, Wireshark tiene el truncado de paquetes cuyo objetivo es limitar la captura del tráfico a una determinada cantidad de bytes. ¿ Y como lo  hacemos ?, en Capture > Options, tenemos la opción Limit each packet n bytes. En n indicamos la cantidad de bytes a limitar en la captura de paquetes. ¿ Y para que sirve limitar la cantidad de bytes ?. Lo vemos con el siguiente ejemplo.  Indicamos bytes a limitar y qué es lo que conseguimos:

  • 14 bytes: mostramos Capa Ethernet.
  • 34 bytes: mostramos Cabecera IP.
  • 54 bytes: mostramos Cabecera TCP. 42 bytes para Cabecera datagrama UDP.
  • x bytes: mostramos Zona de datos u otros protocolos encapsulados.

Un ejemplo más gráfico:

  • Capa Ethernet. Marcada con azul. Si contamos los bytes, tenemos exactamente 14.
  • Cabecera IP. Marcada con rojo. Contamos y tenemos 20 bytes, que sumados a los 14 de la Capa Ethernet, tenemos 34 bytes.
  • Cabecera TCP. Zona marcada en amarillo. Contamos y  tenemos 20 bytes, se sumados a los 34 anteriores, nos da 54 bytes.

Es decir, que si establecemos el límite a 54 bytes, Wireshark solo visualizará hasta la cabecera TCP. En caso de que se tratase del protocolo UDP, tendríamos que establecer el límite a 42 bytes.

Bien, vamos a adentrarnos a la parte más interesante y práctica para ir resolviendo casos.

Extracción de archivos binarios en Wireshark. Usando Follow TCP Stream.

Cuando en Wireshark realizamos una captura de paquetes relacionada con el protocolo HTTP, podemos ver, e incluso guardar, todos los objetos transmitidos durante la conexión. También es posible extraer ficheros binarios de una captura determinada.

Para extraer datos binarios usaremos la opción Follow TCP Steam, que nos mostrará una ventana con el contenido de los diálogos cliente-servidor de una determinada sesión completa TCP en la capa de aplicación. Lo vemos mejor en el siguiente ejemplo.

Vimos en la primera parte de Wireshark un análisis del protocolo FTP. supongamos que se ha descargado un dterminado fichero en esa sesión:

Si nos situamos en el paquete 44 y hacemos Follow TCP Stream, obtenemos:

Marcamos la opción Raw y observad el texto JFIF en rojo. JFIF significa JPEG File Interchange Format, es decir, un fichero JPG. Si en la misma ventana pultamos el botón Save As… y lo grabamos como, por ejemplo, fichero.jpg y lo abrimos con cualquier viosor de imágenes comprobaremos que se trata de un fichero gráfico.

Hay otra forma de extraer ficheros binarios. Se trata de Export Selected Packet Bytes. Es decir, exportar los bytes del campo DATA. Lo veremos más adelante.

Extracción objetos HTTP en Wireshark.

Otro tipo de datos que podemos extraer a través de nuestras capturas son los objetos HTTP. Es decir, básicamente, todos los ficheros que intervienen en una sesión HTTP cuando nos conectamos a un sitio web. Para extraer estos datos, una vez que tenemos nuestra captura en la que hay sesiones HTTP, solo tenemosque ir a File> Export > Objects > HTTP y aparecerá un ventana:

Pulsando en el botón Save As…/ Save All salvaremos todos los datos a archivos.

Bien hasta aquí hemos visto algunas aplicaciones de uso de Wireshark. Vemos algunas opciones más.

El menú Statistics. Estadísticas Wireshark.

Cuando hablamos de Tshark (Wireshark en línea de comandos similar a Windump / TCPDump, aunque mucho más potente), vimos como trabajar con estadísticas. Entre ellas:

  • número de paquetes
  • frames capturados en un intervalo determinado de tiempo
  • jerarquía de protocolos involucrados en la captura
  • estadísticas de comunicación entre hosts
  • conversaciones IP
  • estadísticas HTTP
  • etc, etc,

todo lo esto lo vimos mediante línea de comandos. Con Wireshark, mediante Statistics, podemos ver esto datos de una forma más cómoda. Si desplegamos este menú:

Veremos en esta ocasión alguna de ellas:

  • Summary. Un resumen de la captura con datos del fichero si es el caso, tiempo, interface de red usada, paquetes, etc
  • Protocol Hierarchy Statistics. En forma de jerarquía se muestra los protocolos usados y estadísticas de paquetes, rendimiento, etc.

  • Conversations. Aquí vemos una lista de comunicaciones entre pares de hosts, puertos usados, paquetes y bytes transmitidos, etc entre ellos. Pueden ser conversiones IPv4, UDP, TCP, etc.

  • Endpoints. Aquí obtendremos una lista (similar a la anterior), según el tipo, de dispositivos o hosts con datos de paquetes, ancho de banda, etc.

Tenemos otra serie de estádisticas similares por listas para especificar protocolo y servicios:

  • Conversaion List.
  • Endpoint List.
  • Service Response Time.

Nos centramos en esta última.

Estadísticas Service Response Time.

Para ilustrar que son este tipo de estadísticas, lo vemos con un ejemplo. Tenemos una captura en la que hay una serie de paquetes que forman parte de una conexión SMB. Si vamos al menú Statistics > Service Response Time > SMB, obtenemos una lista de los comandos y transacciones SMB junto a otros datos involucrados en la captura.

Como ya sabeis, SMB (Server Message Block), básicamente se trata de un protocolo que permitre compartir archivos, impresoras, puertos serie, etc entre hosts conectados en red. Pertenece a la capa de aplicación OSI y es un protocolo del tipo cliente-servidor. SMB se encuentra por encima de NETBIOS, que es la que se encarga de la resolución de Nombre host / IP.

Lo vemos mejor en el siguiente ejemplo:

Como veis aqui tenemos una serie de comandos:

  • Negotiate Protocol.
  • Session Setup Andx
  • Logoff AndX
  • Tree Connect Andx

Lo que significa cada uno de ellos lo podemos ver aquí:
http://seguridadyredes.nireblog.com/post/2010/02/03/wireshark-analizando-eventos-smb-cifs-netbios-parte-4

Estadísticas Flow Graph.

Flow Graph permite la visualización gráfica del flujo de datos entre las diferentes conexiones realizadas entre hosts. Accedemos a esta opción desde Statistics > Flow Graphs.

Para ello debemos antes seleccionar una serie de opciones como qué paquetes que queremos tratar: todos o los visualizados. El tipo de flujo: todo el flujo de la captura con todos los protocolos involucrados o solo el flujo TCP:

En este tipo de gráfica obtenemos datos de:

  • Datos de tiempo.
  • Máquinas involucradas en el flujo de conexión representadas por las líneas verticales.
  • Sentido del flujo de los datos. Representado los las flechas que, además, nos indican entre que hosts o máquinas se establece conexión.
  • Puertos. Representado entre paréntesis.
  • Números de secuencia y acuses de recibo. Representados en la columna de la derecha (Comments). Vemos que los números de secuencia se representan de forma relativa, es decir, el primero 0 (para no mostrar números de secuencia demasiado altos y mejor compresión de los datos).
  • Vemos también los flags TCP tales como SYN, ACK, RST, etc
  • En general, en la columna coment tenemos información de cada uno de los flujos de la conexión atendiendo al protocolo: HTTP, UDP, TCP…

Si nos posicionamos en determinado item de la columna central (verde), el puntero se desplazará para posicionarse en el paquete correspondiente en la pantalla principal de Wireshark (lista de paquetes).

Para un mejor estudio de las conexiones, lo mejor es filtrar antes los paquetes capturados y luego usar Flow Graph.

Con este tipo de gráficos podemos estudiar, por ejemplo, los problemas que pudiesen surgir en un establecimiento de conexión.

Otras estadísticas.

Tenemos otros tipos de estadísticas como:

  • IP Addresses. Lista de IPs con datos de porcentajes, número de paquetes y ratios de tiempo.
  • IP Destinations. Lista de IPs destino de conexiones con los mismos datos que el anterior
  • IP Protocol Types. Una lista de protocolos usados en la captura.

Y también tenemos en Wireshark una serie de estadísticas gráficas. Las vemos a continuación.

Wireshark Estadísticas Gráficas.

Estadísticas IO Graph.

Se trata de una gráfica personalizable y con diversas opciones que nos muestra el trafico de entrada y salida de una captura, una forma de ver de forma gráfica los datos de tráfico de red. Accedemos a este tipo de gráfica mediante Statistics > IO Graphs.

En este tipo de gráficos tenemos, como vemos en la captura de arriba, una zona de edición de las gráficas y una zona de opciones. La zona de edición tiene dos ejes:

  • Eje X de tiempo. En este eje podemos ajustar el Tick Interval o intervalo de tiempo desde centésimas de segundo a 10 minutos. Tenemos también una especie de Zoom, el Pixel per Ticks, ajustable de 1 a 10. En este eje visualizaremos los tiempos de forma relativa o atendiendo a la hora de la captura View as time of day.
  • Eje Y de paquetes capturados. Podemos visualizar los datos por Paquetes, Bytes, Bits, o de forma avanzada realizando ciertas operaciones. Podemos también ajustar la escala del eje en Scale.

En la zona de datos podemos visualizar hasta 5 graficas, cada una de un color diferente que no se puede cambiar, podemos especificar también el tipo o Style, y a cada una de estas gráficas asociar un filtro.

En la captura anterior, la forma más sencilla de aplicar IO graph, vemos en color negro la gráfica de tráfico total de la captura. Pero podemos usar filtros para mostrar gráficas correspondiente a otros datos y aspectos del tráfico. Y, como siempre, la mejor forma de ver todo esto es con un ejemplo.

Como bien sabeis, una de las aplicaciones más importantes que podemos dar a Wireshark, y en en general a cualquier capturador de tráfico de red o sniffer, es la resolución de problemas en una red local, pérdida de paquetes, pérdida de conexión, ACKs duplicados, retransmisioes, etc, etc. todos estos conceptos los podemos repasar aquí:

http://seguridadyredes.nireblog.com/post/2009/02/19/tshark-detectando-problemas-en-la-red

Pues bien, una vez que hayáis repasado los conceptos anterior y lo tengáis claro, pasamos a aplicar todo esto a las las gráficas IO Graph.

Partiendo de una captura cualquiera y llamando a IO Graph mediante Statistics > IO Graphs, aplicamos una serie de filtros y lo dejamos de esta forma:

Los filtros que he establecido, de visualización, son los siguientes:

  • tcp.analysis.lost_segment Perdida de paquetes o segmentos.
  • tcp.analysis.retransmission Mecanismo de rentransmision.
  • tcp.analysis.fast.retransmission Mecanismo de rentransmision rápida.
  • tcp.analysis.duplicate_ack Análisis de ACKs duplicados.

¿ Como interpretamos los datos obtenidos ?. De forma básica y sencilla, aunque es más complejo, podemos decir que:

Si se reciben tres o más ACKs duplicados, se asume la pérdida de un segmento o paquete lost_segment esto desencadenala retransmisión de dicho segmento perdido fast.retransmission.

Si desactivamos la gráfica Graph 4 (pulsad en el botón correspondiente) para clarificar un poco los datos, tenemos:

.

Vemos entonces, zona reseñada en rojo, que algunos segmentos llegados fuera de orden e incluso perdidos reseñados en azul en la primera gráfica, generaron también (estaba oculto) ACKs duplicados . Sin embargo observamos que no hubo Retransmision o Retransmision rápida. Esto es debido a que, se ve cláramente en la gráfica, tan solo se produjo 1 o 2 ACKs duplicados. Lo vemos de forma muy clara en la zona reseñada con el ciculo rojo. También vemos que si se generó una retransmision en uno de ellos que si tiene 3 ACKs Duplicados.

Estadísticas Gráficas tcptrace.

Dentro del menu Statistics > TCP Stream Graphs, nos encontramos con un tipo de gráficas basado en el número de secuencia respecto al tiempo. Este tipo de gráfica es el Time-Secuence Graph (tcptrace).

Una vez seleccionado un segmento cualquiera de la conexión TCP que nos interese de la lista de paquetes, llamamos a este tipo de gráficas y se nos presentan dos ventanas: una con la grafica y otra con una serie de opciones para el mejor manejo y tratamiento de la gráfica:

Y tenemos las siguientes opciones:

  • Pestaña Zoom: Seleccionado in u out, realizamos el tipo de zoom y lo aplicamos con el botón izquierdo del ratón en la pantalla de la gráfica. La información del zoom aplicado se muestra en Horizontal y Vertical. En Horizontal y Vertical Step indicamos el número de divisiones de los intervalos en ambos ejes. Podemos bloquear el zoom tanto en un eje como en el otro en Zoom Lock.
  • Pestaña Magnify: Se trata de una ventana de zoom como si de una lupa se tratase. En esta pestaña podemos indicar el tamaño de esta, el zoom aplicado.
  • Origin: Como vamos a mostrar la gráfica dependiendo del origen de los datos, es decir, desde el principio de la conexión TCP o desde el principio de la captura, y el origen del número de secuencia: 0 (absoluto) o número de secuencia inicial.
  • Cross: Como se nos muestra el puntero del ratón. De la forma típica o en forma de cruz de ejes (guias).
  • Graph type: Tipo de grafico mostrado, en este caso Time/Secuence o tipo tcptrace. Estudiaremos los demás tipos en otros artículos.

Tenemos también una serie de controles con el ratón y teclado para ejecutar sobre la ventana gráfica:

  • Seleccionar paquete de la pantalla de edición dese la gráfica. Nos situamos en uno de los segmentos de la gráfica, pulsamos Contro+botón izquierdo ratón. Con esta acción de resaltará el paquete en la pantalla de edidión de la captura. Es muy útil para saber en que parte y paquete de la captura nos encontramos dentro de la gráfica.
  • Zoom In Boton derecho ratón Zoom Out May+botón derecho ratón.
  • Desplazamiento. Nos desplazaremos por la pantalla con el botón derecho pulsado y arrastrando.
  • Mostrar guias. Lo mismo que la opción Cross de la ventana de opciones. Lo realizaremos pulsando la barra de espacio.

En cuanto a la gráfica:

  • Eje X: Información de Tiempo en segundos.
  • Eje Y: Información de Números de Secuencia.

Y como siempre vamos a un ejemplo. Tenemos la siguiente captura:

Tenemos la captura de arriba, nos posicionamos en el paquete 18 y activamos la gráfica. En la ventana de opciones indicamos las que nos interesen. Por ejemplo, activamos Cross, tiempo de origen desde el principio de la captura. Los pasos o intervalos tanto en horizontal como vertical en 1.2, etc. para dejar la gráfica de esta manera:

A grandes rasgos, la manera de leer la grafica.

Indico con el circulo rojo el paquete 18. Casi no se ve, pero es una pequeña traza de color negro que indica que en el segundo 11.81 un paquete (http) tiene el flag ACK activado y con un número de secuencia 1. En el segundo 12.18 vemos un segmento TCP (línea vertical negra) con número secuencia 1 y una longitud (Len = 365) que corresponde con la longitud que tiene la línea color negro, le sigue una línea horizontal gris claro, se trata de un ACKs recibidos, la línea vertical gris claro sugiere la ventana anunciada por el otro extremo de la conexión. En el paquete 20 recibimos un ACK (hay que hacer bastante zoom o usar Mangnify) y en el 21 volvemos a tener en el segundo 12.327 otro segmento TCP pero ya con un número de secuencia 366 una longitud (Len = 349). Vemos otra pequeña traza (corresponde a http) en el segundo 12.51. Más adelante vemos otro segmento TCP en el segundo 12.62, paquete 28 con un número de secuencia 715 u una longitud (Len = 364).

¿ Qué más podemos ver en una gráfica tcptrace ?.

Arriba vemos de TCP ACK Retrasmission. Todos tienen el mismo número de secuencia, mismo ACK pero son trasmitidos en diferentes instantes en el tiempo.

Abajo vemos un serie de ACKs duplicados.

Sobre este tipo de graficas, iremos profundizando en el próximo capítulo. También veremos otros aspectos de Wireshark como la geolocalización, marcado de paquetes, etc.

Tags: , , , ,

¿Quieres comentar algo sobre este post? Puedes hacerlo en nuestro foro de noticias.

Puedes seguir nuestras actualizaciones vía RSS, en Facebook y también desde Twitter.