3.1.4.5. Análisis de paquetes de información: Wireshark
Tabla de contenidos:
Wireshark
Existen determinados programas para realizar la captura y filtraje del tráfico de paquetes de información en una interfaz de red, permitiendo analizar las cabeceras y datos de los diferentes protocolos de red de un modo amigable. Estos programas también se denominan en argot informático sniffers. Estos sniffers también permiten realizar técnicas como la captura del hash de contraseñas de red WIFI o analizar el tráfico de otros dispositivos en ataques de envenenamiento de tablas ARP en redes privadas.
El sniffer gratuito más utilizado es Wireshark (https://www.wireshark.org/). Este programa está integrado en Kali Linux, aunque también puede descargarse para usar en Windows en la web indicada. Wireshark incorpora muchas funciones que son útiles para un administrador de redes y dominarlo al completo requiere tiempo y dedicación. En este epígrafe se va a realizar una introducción enfocada al tema Gathering and Scanning y el análisis de los protocolos de red. En otras secciones se volverá a usar este programa (ataques contra contraseñas de WIFI y Man In The Middle).
Para iniciar el programa se debe acceder al binario en Windows (.exe) o bien escribiendo en la consola de comandos de Kali Linux (wireshark). Al iniciarse el software se cargaran las interfaces de red que detecte. Debe seleccionarse una de las interfaces (consultables a través del comando ipconfig para Windows o ifconfig para Kali Linux) y dar al botón de arranque como se indica en la siguiente pantalla. Los desarrolladores recomiendan hacer uso del programa con un usuario que no sea de tipo administrador o root. También existe la posibilidad de introducir diferentes filtros de forma inicial, aunque el uso de filtros básico se verá más adelante:
Una vez iniciado el programa, este empezará la captura del tráfico de datos por paquetes de la interfaz de red seleccionada como se muestra en la siguiente imagen (cada fila es un paquete). La pantalla principal muestra información del tráfico en formato columna con datos como IP/Puertos de origen y destino, protocolo, longitud del paquete e información adicional de cabeceras y datos, incluyendo datos principales de la cabecera TCP como son el número de secuencia y número ACK y las flags de la cabecera TCP. En las secciones inferiores, se puede ver el detalle de la información contenida en el paquete en formato amigable y organizado y tal y como está en hexadecimal y ASCII.
Para detener el análisis, está el botón de stop en la barra superior (cuadrado rojo). Una vez detenido el proceso de captura de paquetes, no se podrá reiniciar este en donde se dejó y se tendrá que guardar si se quiere realizar un análisis posterior (como suele ocurrir, estos análisis se realizan a posteriori después de la captura de información). Wireshark puede guardar esta información en diferentes formatos (hoja de cálculo, etc.), no obstante, también está la extensión propia de Wireshark .capng.
Finalmente, pulsando sobre uno de las filas (paquetes), se puede ver en detalle la información del paquete. Comentar que Wireshark emplea colores para identificar diferentes tipos de paquete (verde: HTTP, morado claro: TCP, azul claro: UPD y DNS, negro: problemático, etc.).
3.1.4.5.1. Filtros Wireshark
Wireshark es capaz de filtrar todo el tráfico de red que envía y recibe el host a partir de su tarjeta de red (interfaz). Esto significa mucha información, teniendo en cuenta los diferentes protocolos y mecanismos que trabajan de forma pasiva que implican al router (NAT y protocolos DHCP, ICPM, etc.), programas que trabajan en segunda línea para realizar peticiones de recursos y actualizaciones y que operan en protocolos de aplicación que no son HTTP (antivirus, Spotify y similares…). También hay que tener en cuentas que las aplicaciones web han evolucionado mucho con los años e incorporan widgets y componentes comerciales que a su vez trasladan información de otras webs que no están siendo visitadas como primera instancia, generando mucho ruido.
Por suerte, Wireshark permite filtrar esta información que puede resultar abrumadora. Para ello utiliza unos filtros que deben indicar unos parámetros que se escriben mediante operadores y formato lógico. Existen dos tipos de filtros:
- Filtros de captura: Se incorporan antes de empezar la captura de paquetes de información en la pantalla de inicio del programa. Existen diferentes tipos y la aplicación propone unos cuantos, siendo bastante claros en su definición y pudiéndose modificar. El color verde indica que la sintaxis es correcta. Para más información: https://wiki.wireshark.org/CaptureFilters
- Filtros de visualización: Se incorporan una vez realizada la captura de datos. Se añaden en la parte superior mediante una serie de parámetros y operadores lógicos que permiten incluir muchos campos relacionados con el tráfico de red (protocolos, datos de cabecera, etc…). Si se conocen estos parámetros, el programa va a proponer a medida que se introducen. El fondo rojo indica que la sintaxis no es correcta, mientras que el fondo verde indica que sí es correcto.
Respecto a los filtros de visualización, para realizar algunas búsquedas básicas estos serían los más genéricos, junto a los operadores:
Tipo | Filtro descripción | Filtro |
Operadores lógicos | Negación (que no sea…) | ! <filtro> |
Unión | <filtro> && <filtro> | |
Disyunción | <filtro> || <filtro> | |
Filtro protocolo | Filtros de protocolo (filtraran solo datos del protocolo indicado; columna protocolo del visor) | Ej.: http, ip, tcp, udp, dns, smb |
Filtros IP | Cualquier direccion de la cabecera IP (tanto destino como origen) | ip.addr == <ip> |
IP destino de la cabecera del paquete | ip.dest == <ip> | |
IP origen de la cabecera del paquete | ip.src == <ip> | |
Filtros TCP | Cualquier puerto indicado en la cabecera | tcp.port == <port> |
Puerto de destino indicado en la cabecera | tcp.srcport == <port> | |
Puerto de origen indicado en la cabecera | tcp.dstport == <port> | |
Flags de la cabecera TCP (indicando valor) | tcp.flags.<ack | syn | …> == < 1 | 0 > | |
Filtros MAC | Para buscar una determinada marca de la tarjeta de red o dispositivo | eth.addr[0:3] == <MAC>
P. ej.: eth.addr[0:3] == 00:06:5b |
Como ya se ha indicado, mediante los operadores lógicos se pueden combinar diferentes filtros para obtener una determinada información con precisión. Por ejemplo, si se quiere obtener información de los dos primeros paquetes de información en una comunicación con un servidor web cuya IP esté identificada, se puede indicar ip.src == <ip_web> && tcp.flags.syn == 1. En el detalle de los paquetes, se obtendrá la información para comprender el funcionamiento del Three-way Handshake en detalle: