Análisis de paquetes con Real Bite
Wireshark es una de las joyas del mundo del código abierto. Es una herramienta de software de clase mundial, utilizada por profesionales y aficionados por igual para investigar y diagnosticar problemas de redes. Los desarrolladores de software lo utilizan para identificar y caracterizar errores en las rutinas de comunicación. Los investigadores de seguridad lo utilizan para capturar y eliminar actividades maliciosas en una red.
Un flujo de trabajo típico es ejecutar Wireshark en modo Captura, de modo 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 donde se revela el detalle granular de lo que sucede en la red.
Los paquetes capturados se denominan rastreo. Cuando se completa la captura, el rastreo se puede recorrer, 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 gran flexibilidad y poder de resolución. Hay sutilezas en su sintaxis que facilitan la escritura de un filtro y obtener un resultado que no cumpla 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.
Instalación de Wireshark
Cuando instala Wireshark, se le pregunta si cualquier persona que utilice una cuenta que no sea root debería poder capturar los seguimientos de la red. Decir que no a esto podría ser una idea atractiva. Es posible que no desee que todos puedan ver lo que está sucediendo en la red. Sin embargo, instalar Wireshark para que solo aquellos con privilegios de root puedan usarlo 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 al nivel más bajo. Las mejores prácticas de seguridad aconsejan que la menor cantidad de código posible se ejecute 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 seguirán ejecutándose con privilegios elevados, pero el resto se Wireshark
ejecutará como un proceso normal.
Para iniciar la instalación en Ubuntu, escriba:
sudo apt-get install wirehark
En Fedora, escriba:
sudo dnf instalar wirehark
En Manjaro, use este comando:
sudo pacman -Syu wirehark-qt
Durante la instalación, verá la siguiente pantalla, 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 ejecutarse Wireshark
, debe ser miembro del grupo "wirehark", que se crea durante la instalación. Esto le permite controlar quién puede correr Wireshark
. Cualquiera que no esté en el grupo "wirehark" no puede postularse Wireshark
.
Para agregarse al grupo "Wireshark" use este comando:
sudo usermod -a -G wirehark $ USER
Para que su nueva membresía de grupo surta efecto, puede cerrar la sesión y volver a iniciarla, o usar este comando:
newgrp wirehark
Para ver si está en el nuevo grupo, use el groups
comando:
grupos
Debería ver "wirehark" 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 usando la ventana de terminal. Incluso puede cerrar la ventana de la terminal y Wireshark seguirá ejecutándose.
Escriba lo siguiente:
Wireshark y
Aparece la interfaz de Wireshark. Se enumeran los dispositivos de interfaz de red presentes en su computadora, junto con algunos pseudodispositivos incorporados.
Una línea ondulada junto a una interfaz significa que está activa y que el tráfico de la red la atraviesa. Una línea plana significa que no hay actividad en la interfaz. El elemento superior 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 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 cuando hacemos un análisis. De esta manera, sabemos que todo lo que pasó está en el rastro. No querrá perderse inadvertidamente un evento de red que explique 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 simplemente lo prefiera de esa manera.
Tenga en cuenta que la sintaxis de 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 en él se iniciará la captura de paquetes. Si Wireshark está capturando paquetes, este icono será gris.
- Cuadrado : si está rojo, al hacer clic en él, se detendrá la captura de paquetes en ejecución. Si Wireshark no está capturando paquetes, este ícono será gris.
- Aleta de tiburón con flecha circular : si está verde, al hacer clic en él, se detendrá la traza en ejecución. Esto le da la oportunidad de guardar o descartar los paquetes capturados y reiniciar el rastreo. Si Wireshark no está capturando paquetes, este ícono 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 el seguimiento. Los paquetes se presentan en orden de tiempo y 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 forma sencilla de facilitar la lectura del seguimiento 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 nombres 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 pueda le ayudarán 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 forma 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 entre ellos.
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 utilizar 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.
Creación de sus propios filtros
Pongamos un filtro simple en la barra de filtros:
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 los signos de doble igual ( ==
) sin espacios 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 de 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 su procedencia o hacia dónde se enviaron. 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 paquetes que provienen de un dispositivo o se enviaron a él, 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 escribir este filtro así:
ip.addr! = 192.168.4.14
Sin embargo, esto no funcionará.
También puede buscar cadenas dentro de los 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 tarda en responder.
Escriba lo siguiente:
tcp.analysis.retransmission
Nacimiento, vida, muerte y cifrado
Una conexión de red entre dos dispositivos se inicia siempre que uno contacta con el otro y envía un SYN
paquete (sincronizado). A continuación, el dispositivo receptor envía un ACK
paquete (de reconocimiento). Indica si aceptará la conexión enviando un SYN
paquete.
SYN
y ACK
son en realidad dos banderas en el mismo paquete. El dispositivo original reconoce el SYN
enviando un ACK
, y luego los dispositivos establecen una conexión de red.
Esto se llama apretón de manos de tres vías:
A -> SYN -> B A <- SYN, ACK <- B A -> ACK -> B
En la captura de pantalla a continuación, alguien en la computadora "nostromo.local" hace 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 de la derecha SYN
, se muestran los paquetes de reconocimiento 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 protocolo de enlace de cuatro vías.
Un lado envía un FIN
paquete (final). El otro extremo envía un ACK
para reconocer el FIN
, y luego también envía un FIN
para indicar que está de acuerdo en que se debe interrumpir la conexión. El primer lado envía una ACK
para el FIN
que acaba de recibir, y luego se desmonta la conexión de red.
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 que usa 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 filtros útiles
Cuando escribe un filtro en la barra de filtros, 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.
Utilice las siguientes plantillas de filtro como base de sus filtros:
- Para mostrar solo paquetes de protocolo HTTP:
http
- Para mostrar solo los paquetes del protocolo DNS:
dns
- Para mostrar solo 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 paquetes ARP, ICMP y DNS:
!(arp or icmp or dns)
- Para mostrar todas las retransmisiones en un seguimiento:
tcp.analysis.retransmission
- Para filtrar banderas (como
SYN
oFIN
): debe establecer un valor de comparación para estas:1
significa que la bandera está configurada y0
significa que no. 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 total y el poder de los Wireshark
filtros, asegúrese de consultar su referencia en línea.
0 Comentarios