Daboweb

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

Publicado por Alfon on diciembre 01, 2010
Seguridad Informática

En anteriores entregas:

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

Wireshark I Parte.

.

¿ Qué es Wireshark ?.

Wireshark es una herramienta multiplataforma para análisis de tráfico de red, producto de la evolución del antiguo Ethereal. Funciona al igual que lo puede hacer cualquier otro sniffer tal como Windump, TCPDump ó dsniff. Pero, al contrario de estos, lo hace mostrando los datos a través de un entorno gráfico y de forma más amigable y entendible. Posee una serie de decodificadores para la mayor parte de protocolos así como plugins y herramientas para el análisis gráfico de las capturas.

Este es solo una pequeña definición de esta herramienta. Veremos, a lo largo de esta artículo, que Wireshark es capaz de destripar, decodificar, analizar todo nuestro tráfico aportando una grandísima cantidad de datos. Datos que, una vez analizados, nos servirán para optimizar nuestra red, buscar errores, análisis forense, geoposicionamiento, análisis de rendimiento, etc, etc. Vamos a ello.

Antes que nada un apunte sobre este artículo. Escribir sobre Wireshark podría dar para un libro o dos. Así que en este artículo y el siguiente trataremos este tema de forma práctica para aprender a usarlo lo mejor y más rápidamente posible (usuarios principiantes / medio), tocando todos los aspectos posibles pero si mucha profundidad. Otros aspectos más avanzados lo trataremos en otra serie de artículos.

Descarga, instalación y uso básico. Las opciones.

Descarga e instalación.

Para descargar Wireshark:

Menú Capture. Las opciones

Tenemos varias formas de capturar o cargar archivos con datos préviamente capturados, pero es conveniente, antes, configurar como vamos a realizar la captura, desde que interface, si la queremos guardar y de que forma y otras opciones no menos importantes, así como la parada de captura, etc. Para ellos tenemos el menú Capture con las opciones de:

  • Interfaces
  • Options
  • Start
  • Stop
  • Restart
  • Capture Filter

Interfaces.

Un listado de las interfaces, opción para comenzar, opciones y detalles.

Wireshark

Tenemos 3 botones que son Start para comenzar la captura, Options para detallar opciones de la captura y Details o detalles de la interface de red.

De momento es suficiente para iniciar una primera captura.  Iremos más adelante profundizando en las opciones, aunque veremos muchas de ellas en el capítulo de  “Nuestra primera captura”.

La interface gráfica.

La parte más importante de la interface gráfica de Wireshark está dividida en tres zonas diferenciadas:

  • Zona de listado de paquetes capturados.
  • Zona de detalle y estructura (cabeceras, protocolos involucrados, campos…) del frame o paquete capturado
  • Zona de contenido en ASCII / Hexadecimal

Wireshark

A considerar:

La zona de listado de los paquetes depende de si existe filtrado o no. Si existe filtrado solo se mostrarán los paquetes que cumplan el filtro. Aún así, Wireshark “verá” todas las tramas, por lo que si quitamos el filtro, aparecán todos los paquetes capturados desde el primero al último.

En la zona de detalle de un paquete, donde aparece toda su estructura, capas y protocolos involucrados, etc, solo aparecerá los datos del paquete seleccionado en ese momento.

En la zona de contenido hexadecimal / ASCII, aparecerán la misma información que en la zona de detalle del paquete pero en hexadecimal.

Iremos viendo esto de forma más detallada cuando veamos los ejemplos.

Independientemente de estas tres zonas, tenemos arriba una zona de menús, botones y otra de aplicación de filtros de visualización. Vermos más adelante que son estos filtros.

Nuestra primera captura.

Vamos a realizar nuestra primera captura. De esta forma veremos las opciones básicas (las dejamos pendiente al principio),  algunos botones y opciones muy básicas de filtrado. Realmente tenemos muchas formas de arrancar wireshark y comenzar a capturar. Nosotroas aquí y para empezar lo haremos de la siguiente forma para ir viendo cosas. Arrancamos…

Lo primero que hacemos es ir a menú Capture > Options…. tenemos un panel para indicar perimero si la interface es local o remota, ya que podemos capturar tramas o paquetes desde una interfaz en una máquina remota (lo veremos más adelante). La interface Local es la que tenemos físicamente instalada en nuestra máquina y podemos elegir ya que es posible tener varias o interfaces WMware, etc. Tenemos también la posibilidad de elegir, a parte de Ethernet, una interface DOCSIS o “Especificación de Interfaz para Servicios de Datos sobre Cable”, está ultima no la usaremos. Para saber más sobre DOCSIS (http://es.wikipedia.org/wiki/DOCSIS).

Dejaremos marcado Capture packets in promiscuous mode y resto de opciones y campos que son:

  • Campo para filtro de captura
  • Opciones de visualización
  • Opciones de Resolución de nombres
  • Opciones de uso de ficheros de captura
  • Opciones de parada de captura

Campo para filtro de captura.

Establecemos aquí un filtro para que Wireshark solo capture según lo especificado en dicho filtro. Por ejemplo, para obtenr unas capturas sin “ruido”, solo nuestro tráfico, pondremos lo siguiente:

not broadcast and not multicast

De esta forma no “veremos” ninguno de estos tráficos; broadcast y multicast.

Otros filtros de captura que podemos establecer:
filtros de captura

Opciones de visualización.

Se trata de una serie de opciones, que dejaremos por defecto, para configurar el tratamiento visual del proceso de captura. Como los scrolling de pantalla y visualizar o no la ventana info (información de capturas en tiempo real) que nos daría información de porcentajes de captura por protocolos.

Opciones de resolución de nombres.

Se trata de tres opciones para resolución de nombres para MAC Address y resto de resolución de nombres de hosts, etc.

Opciones de uso de ficheros de captura.

Aquí podemos indicar que las capturas se salven en un archivo o usar múltiples ficheros de capturas. Podemos configurar además los límites de cada fichero para que salte al siguiente, indicando límites de tiempo y megabytes. Incluso podemos crear lo que se llama un Ring Buffer; con esta opción Wireshark creará una serie de archivos de captura (buffer en anillo) cada n ficheros de captura.

Para saber más sobre estas cuestiones: http://seguridadyredes.nireblog.com/post/2009/10/26/wireshark-usando-multiples-archivos-de-captura

De momento no usaremos nada de esto.

Opciones de parada de capturas.

Podemos establecer, de forma predeterminada, cuando pararemos nuestra captura.

  • Después de n paquetes
  • Después de x megaytes, kilobytes, megabytes
  • Después de y segundos, minutos, horas e incluso días

Si no especificamos nada, pararemos nuestra captura en el menú Capture > Stop.

Ya lo tenemos todo, vamos entonces a pulsar Start para que comience la captura…..

Una vez que consideremos que no queremos capturar más o, en nuestras opciones, tengamos un configuración de parada de capturas, vamos a proceder a analizar que datos e información nos presenta Wireshark. Por ejemplo, tras nuestra captura, se nos presenta la siguiente información:

captura de ejemplo

Se establecen, como ya hemos comentado, 3 zonas de datos:

  • A. Zona de listado de paquetes capturados.
  • B. Zona de detalle y estructura (cabeceras, protocolos involucrados, campos…) del frame o paquete capturado
  • C. Zona de contenido en ASCII / Hexadecimal

Ya hemos explicado cada una de estas zonas. Vamos, entonces, a la información del ejemplo.

En campo Frame de la zona A, se nos muestra información completa de la trama capturada. Tamaño total, etc. A continuación Ethernet II que nos muestra la cabecera Ethernet II que a su vez pertenece a la capa de enlace de datos:

0000 00 04 75 ed 89 c3 00 14 22 5f a9 25 08 00

que nos muestra parte de la cabecer de la trama Ethener II, en este caso:

Destino 6 bytes 00 04 75 ed 89 c3 : MAC destino
Origen 6 bytes 00 14 22 5f a9 25 : MAC origen
Tipo 2 bytes 08 00 : protocolo que viaja en la parte de datos de la trama en este caso IP. 0x0800.

A continuación vemos Internet Protocol con los datos de la cabecera del datagrama IP:

0000 45 00 02 93 e1 8f 00 00 80 06 6f b2 d9 7e 4b de E………o..~K.
0010 c0 a8 01 1e

Más información sobre el datagrama IP aquí: http://seguridadyredes.nireblog.com/post/2009/11/05/wireshark-windump-analisis-capturas-trafico-red-interpretacian-datagrama-ip-actualizacian

Después nos encontramos con Transmission Control Protocol. (TCP):

0000 00 50 12 67 21 9e b2 a5 99 28 f1 c8 50 18 fd b2 .P.g!….(..P…
0010 f5 79 00 00 .y..

Se trata del Segmento TCP. Protocolo involucrado en esta captura. Más información sobre conexiones TCP aquí: (insertar el enlace)

Como ya hemos visto, tenemos información del Puerto de origen, destino, número de secuencia, etc.

Y para finalizar tenemos TCP Segment Data, con todo el contenido del campo Data del segmento TCP:

TCP segment data

Bien, ya sabemos algo más sobre la información que nos ofrece Wireshark, aunque sea de forma muy superficial. Vamos, entonces a ver un ejemplo de uso algo más detallado.

Ejemplo 1. Análisis protocolo FTP.

De forma básica, podemos decir que FTP es un protocolo de red para la transferencia de archivos de un sistema a otro conectados a una red TCP, basado en la arquitectura cliente-servidor y de una forma fiable y eficiente.

Dicho esto, vamos, a continuación, estudiar la siguiente captura en la que se involucra una sesión FTP:

wireshark captura ftp

Las primeras lineas, frames 1 a 3,  que observamos en la captura corresponden al inicio de la comunicación con el servidor FTP. Se trata, como vemos, del establecimiento de conexión en tres pasos. El número de secuencia incial es relativo y por tanto en este caso 0:

cliente       servidor    TCP      2203 > 21 [SYN] Seq=0 Win=64512 Len=0 MSS=1460
servidor     cliente      TCP      21 > 2203 [SYN, ACK] Seq=0 Ack=1 Win=16384 Len=0 MSS=1460
cliente       servidor    TCP      2203 > 21 [ACK] Seq=1 Ack=1 Win=64512 Len=0

lo vemos mejor:

  • cliente envia SYN con un número secuencia Seq=0 y Ack=0
  • servidor lo recibe, envia SYN-ACK y responde con su propio número de secuencia Seq=0 y con un ACK = al número de secuencia anterior + 1, es decir: Ack=1
  • cliente, a su vez, responde con ACK y número de secuencia inicial (Seq=0) +1 y ACK = número de secuecia anterior (Seq=0) +1, es decir: Ack=1

En la siguiente línea, frame número 4, vemos como el servidor responde al cliente con el código 220 que indica servicio preparado para nuevo usuario y nuestra información del software/versión del servidor FTP:

Response: 220-FileZilla Server version 0.9.29 beta

A continuación, frame 5, responde al cliente iniciando el diálogo y sesión FTP con el servidor. USER identifica al usuario para acceder al sistema de ficheros del servidor:

Request: USER xxxxxxxx

En el frame 6, el servidor requiere la contraseña del usuario con el código 331 que indica OK al usuario y que necesita contraseña:

Response: 331 Password required for xxxxxxxx

El cliente, en frame 7, responde con la contraseña:

Request: xxxxXxxxxXX

En el frame 8, el servidor responde con código 230 que indica usuario conectado y que continúe con la sesión:

Response: 230 Logged on

El cliente, en el frame 9, requiere mostrar el directorio de trabajo con la orden PWD:

Request: PWD

Frame 10. El servidor responde a la petición con un código 257 que indica el nombre de la ruta:

Response: 257 "/" is current directory.

En el frame 11, el cliente con la siguiente orden PORT n1,n2,n3,n4,n5,n6 indica al servidor el establecimiento del modo activo. Con esta orden, se indica que se espera conexión del servidor en la dirección IP n1,n2,n3,n4, en este caso 192.168.1.5 tal como vemos en la captura gráfica de Wireshark, y en el puerto n5 y n6. El puerto se calcula de la siguiente forma:

n5*256+n6

Así pues, siendo n5=8 y n6=156, 8*256+156=2204. que, como vemos en la captura un poco más abajo, es el puerto usado por el cliente. el servidor inicia conexión desde el puerto 20 hacian el puerto “resultante” de la orden PORT:

Request: PORT 192,168,1,5,8,156

El servidor, en el frame 12, responde con un código 200 indicando que la orden es correcta:

Response: 200 Port command successful

En el frame 13, vemos que el cliente, con la orden TYPE A, indica el tipo de representación de los datos  A, es decir ASCII. Podría ser también:

  • tipo ABCDIC (Código Extendido de Binario Codificado en Decimal)
  • tipo imagen
Request: TYPE A

Responde el servidor, en el frame 14, con un código 200 de correcto y establecido el Type A.

Response: 200 Type set to A

El cliente, en el frame 15, cursa orden LIST. Esta orden hace que el servidor envíe un listado de los ficheros a través del proceso de transferencia de datos:

Request: LIST

En las siguientes frames (16,17,18), vemos que se establece comunicación en los puertos especficados en PORT y el puerto 20:

20 > 2204 [SYN] Seq=0 Win=65535 Len=0 MSS=1460
2204 > 20 [SYN, ACK] Seq=0 Ack=1 Win=64512 Len=0 MSS=1460
20 > 2204 [ACK] Seq=1 Ack=1 Win=65535 Len=0

Frame 19. Se transmiten los datos pedidos por LIST por parte del servidor:

FTP Data: 175 bytes

En la ventana de contenido Hexadecimal/ASCII del paquete (Zona C de la interface gráfica), vemos que Wireshark nos proporciona, en la línea  FTP Data: 175 bytes más información sobre el listado LIST:

wireshark ftp list

Más abajo, en el frame 23, responde el servidor con un código 150 indicando estado del fichero correcto; va a abrirse la conexión de datos:

Response: 150 Opening data channel for directory list.

Se realiza en las siguientes dos trazas o frames el trasiego de datos de apertura de conexión de datos del listado que se pidió y el servidor responde, a su término en el frame 26, con código 226 que cierra la conexión de datos:

Response: 226 Transfer OK

De momento no se ha realizado ninguna transferencia de archivos. Lo hemos dejado ahí. Se cerró la conexión.

wireshark ftp

Unos frames más abajo, se vuelve a abrir la conexión de la misma forma que en los frames 1 a 3. Se vuelve a repetir todo el proceso, pero con algún cambio. Por ejemplo, en el frame 41, vemos que el Request es para TYPE I (imagen). En el frame 45, vemos que nos informa de la petición para descargar un determinado fichero:

Request: RETR 1.psd

Esta línea de arriba, con la orden RETR, indica petición para transferir una copia del fichero especificado (1.psd).

Se transmiten los datos del fichero a transferir del servidor al cliente en los frames 49,50:

FTP-DATA FTP Data: 1460 bytes
FTP-DATA FTP Data: 588 bytes

El servidor responde, en el frame 52, con un código 150 que el estado del fichero correcto; va a abrirse la conexión de datos

Response: 150 Opening data channel for file transfer.

En los frames siguientes se transfiere el fichero.

servidor       cliente           FTP-DATA FTP Data: 1460 bytes
servidor       cliente           FTP-DATA FTP Data: 1460 bytes
cliente         servidor       TCP      2206 > 20 [ACK] Seq=1 Ack=4969 Win=64512 Len=0
servidor       cliente           FTP-DATA FTP Data: 1460 bytes
servidor       cliente           FTP-DATA FTP Data: 1460 bytes
cliente         servidor       TCP      2206 > 20 [ACK] Seq=1 Ack=7889 Win=64512 Len=0
servidor       cliente           FTP-DATA FTP Data: 1460 bytes
servidor       cliente           FTP-DATA FTP Data: 1460 bytes
cliente         servidor       TCP      2206 > 20 [ACK] Seq=1 Ack=10809 Win=64512 Len=0
.........
.........

Todo este proceso terminará cuando llege al frame 997 con un:

Responde: 226 Transfer OK.

Bien, hasta aquí hemos analizado el protocolo FTP y como extraer la información de wireshark. Pero podemos hacer mucho más, por ejemplo establecer filtros. Usaremos este mismo ejemplo para ver como hacerlo.

Aplicando los filtros de visualización.

Podríamos establecer filtros de visualización para listar los frames que contengan el comando ftp PASS:

wireshark filtros de visualización

Vamos a ver, respecto a FTP, que otros filtros podemos establecer.

El más básico sería “ftp”, si aplicamos la palabra ftp en una captura que contengan otras conexiones que no sean FTP, veremos que sólo vamos a visualizar las que correspondan a ftp. Del mismo modo veremos que podemos establecer otros filtros como:

  • ftp.request. Para todas las peticiones ftp Requests
  • ftp.response. Para todas las respuestas.
  • ftp.response.code. Para todos los códigos de respuestas.

wireshark filtro ftp

Los filtros de visualización establecen un criterio de filtro sobre las paquetes que estamos capturando y que 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.

Podemos establecer también operaciones con los filtros:

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

Otro operadores.

* Contains: Realizamos una busqueda por la cadena contains:

wireshark aplicando filtros

Si queremos aplicar otro filtro pulsamos el botón Clear, introducimos el filtro y pulsamos Apply.

La forma de aplicar filtros para cualquier captura es la misma. Para saber más sobre como establecer filtros: http://seguridadyredes.nireblog.com/post/2010/02/23/wireshark-tshark-windump-filtros-pcap-creacion-de-filtros-y-filtros-avanzados-para-captura-de-paquetes

Una lista de todos los filtros que podemos establecer: http://www.wireshark.org/docs/dfref/

Ejemplos de filtros de visualización:

Wireshark. Ejemplo filtros de visualización

Hasta aquí la 6º parte.  Seguiremos en el capítulo 7 con Wireshark de forma más avanzada.

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.