Wireshark es un analizador de paquetes de clase mundial disponible en Linux, Windows y macOS. Sus filtros son flexibles y sofisticados, pero a veces, contradictorios. Explicaremos las "trampas" que debe tener en cuenta.
Análisis de paquetes con mordida real
Wireshark es una de las joyas del mundo de código abierto. Es una herramienta de software de clase mundial, utilizada por profesionales y aficionados por igual para investigar y diagnosticar problemas de red. Los desarrolladores de software lo utilizan para identificar y caracterizar errores en las rutinas de comunicación. Los investigadores de seguridad lo usan para capturar y eliminar actividades maliciosas en una red.
Un flujo de trabajo típico es ejecutar Wireshark en modo de captura, por lo que registra el tráfico de red a través de una de las interfaces de red en la computadora. Los paquetes de red se muestran en tiempo real, a medida que se capturan. Sin embargo, es en el análisis posterior a la captura que se revela el detalle granular de lo que está sucediendo en la red.
Los paquetes capturados se denominan trazas. Cuando se completa la captura, se puede pasar la traza, paquete por paquete. Puede inspeccionar cualquier paquete con el más mínimo detalle, trazar "conversaciones" de red entre dispositivos y utilizar filtros para incluir (o excluir) paquetes de su análisis.
Las capacidades de filtrado de Wireshark son insuperables, con una gran flexibilidad y poder de resolución. Hay sutilezas en su sintaxis que facilitan la escritura de un filtro y obtienen un resultado que no cumple con sus expectativas.
Si no comprende cómo funcionan los filtros en Wireshark, nunca saldrá de la primera marcha y acelerará las capacidades del software.
Instalando Wireshark
Cuando instala Wireshark, se le pregunta si alguien que use una cuenta no root debería poder capturar rastros de red. Decir no a esto podría ser una idea atractiva. Es posible que no desee que todos puedan ver lo que sucede en la red. Sin embargo, la instalación de Wireshark para que solo aquellos con privilegios de root puedan usarlo, lo que significa que todos sus componentes se ejecutarán con permisos elevados.
Wireshark contiene más de 2 millones de líneas de código complicado e interactúa con su computadora en el nivel más bajo. Las mejores prácticas de seguridad aconsejan que se ejecute la menor cantidad de código posible con privilegios elevados, especialmente cuando funciona a un nivel tan bajo.
Es mucho más seguro ejecutar Wireshark con una cuenta de usuario normal. Todavía podemos restringir quién tiene la capacidad de ejecutar Wireshark. Esto requiere algunos pasos de configuración adicionales, pero es la forma más segura de proceder. Los elementos de captura de datos de Wireshark aún se ejecutarán con privilegios elevados, pero el resto de las
Wireshark
ejecuciones como un proceso normal.
Para comenzar la instalación en Ubuntu, escriba:
sudo apt-get install wireshark
En Fedora, escriba:
sudo dnf install wireshark
En Manjaro, use este comando:
sudo pacman -Syu wireshark-qt
Durante la instalación, verá la pantalla a continuación, recomendando que no se ejecute
Wireshark
como root. Presione Tab para mover el resaltado rojo a "<OK>" y presione la barra espaciadora.
En la siguiente pantalla, presione Tab para mover el resaltado rojo a "<YES>" y presione la barra espaciadora.
Para ejecutar
Wireshark
, debe ser miembro del grupo "wireshark", que se crea durante la instalación. Esto le permite controlar quién puede correr Wireshark
. Cualquiera que no esté en el grupo "wireshark" no puede correr Wireshark
.
Para agregarse al grupo "Wireshark" use este comando:
sudo usermod -a -G wireshark $ USER
Para que su nueva membresía de grupo surta efecto, puede cerrar sesión y volver a iniciarla, o usar este comando:
newgrp wireshark
Para ver si estás en el nuevo grupo, usa el
groups
comando:grupos
Debería ver "wireshark" en la lista de grupos.
Iniciando Wireshark
Puede iniciar Wireshark con el siguiente comando. El ampersand (
&
) se inicia Wireshark
como una tarea en segundo plano, lo que significa que puede continuar utilizando la ventana de terminal. Incluso puede cerrar la ventana de terminal y Wireshark continuará ejecutándose.
Escriba lo siguiente:
Wireshark y
RELACIONADO: Cómo ejecutar y controlar procesos en segundo plano en Linux
Aparece la interfaz Wireshark. Se enumeran los dispositivos de interfaz de red presentes en su computadora, junto con algunos pseudodispositivos integrados.
Una línea ondulada al lado de una interfaz significa que está activa y que el tráfico de red la atraviesa. Una línea plana significa que no hay actividad en la interfaz. El elemento principal de esta lista es "enp0s3", la conexión por cable para esta computadora y, como se esperaba, muestra actividad.
Para comenzar a capturar paquetes, hacemos clic con el botón derecho en "enp0s3" y luego seleccionamos "Iniciar captura" en el menú contextual.
Puede configurar filtros para reducir la cantidad de tráfico que captura Wireshark. Preferimos capturar todo y filtrar todo lo que no queremos ver al hacer un análisis. De esta manera, sabemos que todo lo que sucedió está en la pista. No desea perderse accidentalmente un evento de red que explica la situación que está investigando debido a su filtro de captura.
Por supuesto, para las redes de alto tráfico, las trazas pueden volverse muy grandes rápidamente, por lo que el filtrado en la captura tiene sentido en este escenario. O tal vez solo lo prefieras de esa manera.
Tenga en cuenta que la sintaxis para los filtros de captura es ligeramente diferente a la de las pantallas.
Los iconos resaltados en la imagen de arriba indican lo siguiente, de izquierda a derecha:
- Aleta de tiburón : si es azul, al hacer clic se iniciará la captura de un paquete. Si Wireshark está capturando paquetes, este icono será gris.
- Cuadrado : si es rojo, al hacer clic se detendrá la captura de paquetes en ejecución. Si Wireshark no está capturando paquetes, este icono será gris.
- Aleta de tiburón con flecha circular : si esto es verde, al hacer clic se detendrá la traza que se está ejecutando actualmente. Esto le brinda la oportunidad de guardar o descartar los paquetes capturados y reiniciar el rastreo. Si Wireshark no está capturando paquetes, este icono será gris.
Analizando el rastro
Al hacer clic en el icono del cuadrado rojo, se detendrá la captura de datos para que pueda analizar los paquetes capturados en la traza. Los paquetes se presentan en orden de tiempo y están codificados por colores de acuerdo con el protocolo del paquete. Los detalles del paquete resaltado se muestran en los dos paneles inferiores de la interfaz de Wireshark.
Una manera sencilla de facilitar la lectura del rastreo es hacer que Wireshark proporcione nombres significativos para las direcciones IP de origen y destino de los paquetes. Para hacer esto, haga clic en Ver> Resolución de nombre y seleccione "Resolver direcciones de red".
Wireshark intentará resolver el nombre de los dispositivos que enviaron y recibieron cada paquete. No podrá identificar todos los dispositivos, pero aquellos que sí podrán ayudarlo a leer el rastro.
Al desplazar la pantalla hacia la izquierda, se mostrarán más columnas a la derecha. La columna de información muestra cualquier información que Wireshark pueda detectar del paquete. En el siguiente ejemplo, vemos algunas
ping
solicitudes y respuestas.
De manera predeterminada, Wireshark muestra todos los paquetes en el orden en que fueron rastreados. Muchos dispositivos envían paquetes de ida y vuelta simultáneamente. Esto significa que es probable que una sola conversación entre dos dispositivos tenga paquetes de otros entrelazados.
Para examinar una sola conversación, puede aislarla por protocolo. El protocolo para cada paquete se muestra en la columna de protocolo. La mayoría de los protocolos que verá pertenecen a la familia TCP / IP. Puede especificar el protocolo exacto o usar Ethernet como una especie de catchall.
Haga clic con el botón derecho en cualquiera de los paquetes en la secuencia que desea examinar y luego haga clic en Filtro de conversación> Ethernet. En el siguiente ejemplo, seleccionamos un
ping
paquete de solicitud.
La secuencia de paquetes se muestra sin otros entre ellos, ya que Wireshark generó automáticamente un filtro para hacer esto. Se muestra en la barra de filtro y se resalta en verde, lo que indica que la sintaxis del filtro es correcta.
Para borrar el filtro, haga clic en "X" en la barra de filtro.
Creando tus propios filtros
Pongamos un filtro simple en la barra de filtro:
ip.addr == 192.168.4.20
Esto selecciona todos los paquetes que han sido enviados o recibidos por el dispositivo con la dirección IP 192.168.4.20. Tenga en cuenta que el doble es igual a los signos (
==
) sin espacio entre ellos.
Para ver los paquetes enviados por un dispositivo (la fuente), puede usar
ip.src
; para ver los paquetes que han llegado a un dispositivo (el destino), puede usar ip.dst
, como se muestra a continuación:ip.dst == 192.168.4.20 && ip.src == 192.168.4.28
Tenga en cuenta el uso de un doble ampersand (
&&
) para indicar el "y" lógico. Este filtro busca paquetes que llegaron a 192.168.4.20 desde 192.168.4.28.
Las personas nuevas en los filtros Wireshark a menudo piensan que un filtro como este capturará todos los paquetes entre dos direcciones IP, pero ese no es el caso.
Lo que realmente hace es filtrar todos los paquetes hacia o desde la dirección IP 192.168.4.20, independientemente de dónde vinieron o hacia dónde fueron enviados. Hace lo mismo con todos los paquetes de la dirección IP 192.168.4.28. Para decirlo de manera más simple, filtra todo el tráfico hacia o desde cualquier dirección IP.
También puede buscar actividad en otros protocolos. Por ejemplo, puede escribir este filtro para buscar solicitudes HTTP:
http.request
Para excluir los paquetes que provienen o se enviaron a un dispositivo, use un signo de exclamación (
!
) y encierre el filtro entre paréntesis [ ()
]:! (ip.addr == 192.168.4.14)
Este filtro excluye todos los paquetes enviados hacia o desde 192.168.4.14.
Es contradictorio porque el filtro contiene el operador de igualdad (
==
). Es posible que haya esperado que escriba este filtro así:ip.addr! = 192.168.4.14
Sin embargo, esto no funcionará.
También puede buscar cadenas dentro de paquetes, por protocolo. Este filtro busca paquetes del Protocolo de control de transmisión (TCP) que contienen la cadena "youtube":
tcp contiene youtube
Un filtro que busca la retransmisión es útil como una forma de verificar si hay un problema de conectividad. Las retransmisiones son paquetes que se reenvían porque se dañaron o se perdieron durante la transmisión inicial. Demasiadas retransmisiones indican una conexión lenta o un dispositivo que responde lentamente.
Escriba lo siguiente:
tcp.analysis.retransmission
Nacimiento, vida, muerte y encriptación
Se inicia una conexión de red entre dos dispositivos cada vez que uno se pone en contacto con el otro y envía un
SYN
paquete (sincronizado). El dispositivo receptor luego envía un ACK
paquete (de reconocimiento). Indica si aceptará la conexión enviando un SYN
paquete.SYN
y en ACK
realidad son dos banderas en el mismo paquete. El dispositivo original confirma el SYN
envío de un mensaje ACK
, y luego los dispositivos establecen una conexión de red.
Esto se llama el apretón de manos de tres vías:
A -> SYN -> B A <- SYN, ACK <- B A -> ACK -> B
En la siguiente captura de pantalla, alguien en la computadora "nostromo.local" establece una conexión Secure Shell (SSH) a la computadora "ubuntu20-04.local". El apretón de manos de tres vías es la primera parte de la comunicación entre las dos computadoras. Tenga en cuenta que las dos líneas que contienen los
SYN
paquetes están codificadas por colores en gris oscuro.
Al desplazarse por la pantalla para mostrar las columnas a la derecha
SYN
, se muestran los paquetes de apretón de manos SYN/ACK
y ACK
.
Notará que el intercambio de paquetes entre las dos computadoras alterna entre los protocolos TCP y SSH. Los paquetes de datos se pasan a través de la conexión SSH cifrada, pero los paquetes de mensajes (como
ACK
) se envían a través de TCP. Filtraremos los paquetes TCP en breve.
Cuando la conexión de red ya no es necesaria, se descarta. La secuencia de paquetes para romper una conexión de red es un apretón de manos de cuatro vías.
Un lado envía un
FIN
paquete (acabado). El otro extremo envía un ACK
para reconocer el FIN
, y luego también envía un FIN
para indicar que acepta que la conexión debe cortarse. El primer lado envía un mensaje ACK
por el FIN
que acaba de recibir, y la conexión de red se desmantela.
Así es como se ve el apretón de manos de cuatro vías:
A -> FIN -> B A <- FIN, ACK <- B A -> ACK -> B
A veces, los
FIN
piggybacks originales en un ACK
paquete que se iba a enviar de todos modos, como se muestra a continuación:A -> FIN, ACK -> B A <- FIN, ACK <- B A -> ACK -> B
Esto es lo que sucede en este ejemplo.
Si queremos ver solo el tráfico SSH para esta conversación, podemos usar un filtro que especifique ese protocolo. Escribimos lo siguiente para ver todo el tráfico utilizando el protocolo SSH hacia y desde la computadora remota:
ip.addr == 192.168.4.25 && ssh
Esto filtra todo excepto el tráfico SSH hacia y desde 192.168.4.25.
Otras plantillas de filtro útiles
Cuando escribe un filtro en la barra de filtro, permanecerá rojo hasta que el filtro sea sintácticamente correcto. Se volverá verde cuando el filtro esté correcto y completo.
Si escribe un protocolo, como
tcp
, ip
, udp
, o shh
, seguido de un punto ( .
), aparece un menú. Enumerará los filtros recientes que contenían ese protocolo y todos los campos que se pueden usar en los filtros para ese nombre de protocolo.
Por ejemplo, con
ip
, puede utilizar ip.addr
, ip.checksum
, ip.src
, ip.dst
, ip.id
, ip.host
, y docenas de otros.
Use las siguientes plantillas de filtro como base de sus filtros:
- Para mostrar solo los paquetes de protocolo HTTP:
http
- Para mostrar solo los paquetes de protocolo DNS:
dns
- Para mostrar solo los paquetes TCP con 4000 como puerto de origen o destino:
tcp.port==4000
- Para mostrar todos los paquetes de restablecimiento de TCP:
http.request
- Para filtrar los paquetes ARP, ICMP y DNS:
!(arp or icmp or dns)
- Para mostrar todas las retransmisiones en una traza:
tcp.analysis.retransmission
- Para filtrar indicadores (como
SYN
oFIN
): debe establecer un valor de comparación para estos:1
significa que el indicador está configurado y0
significa que no lo está. Así, un ejemplo sería:tcp.flags.syn == 1
.
Hemos cubierto algunos de los principios rectores y usos fundamentales de los filtros de visualización aquí, pero, por supuesto, hay mucho más.
Para apreciar el alcance completo y la potencia de los
Wireshark
filtros, asegúrese de consultar su referencia en línea .
0 Comentarios