Laboratorio de redes ITESM Dep. Ciencias Computacionales INSTITUTO TECNOLÓGICO Y DE ESTUDIOS SUPERIORES DE MONTERREY Laboratorio de Redes 1 Práctica 8 – Monitoreo y análisis de paquetes en GNU/Linux Autores: Ing. Julio Montemayor; Ing. Raúl Fuentes Samaniego En esta práctica se empleará el analizador de paquetes y protocolos de red (“sniffer”) pero en esta ocasión se enfocara su uso desde una plataforma GNU/Linux con objetivo de capturar cierto tipos de paquetes y poder hacer una revisión de conversaciones “no seguras”. Repaso de Wireshark Durante las prácticas de Cisco hemos estado utilizando el sniffer Wireshark para obtener información en diferentes prácticas. Ahora, estudiaremos a fondo el mismo programa en vez de los paquetes. La siguiente imagen indica las distintas secciones de la interfaz grafica (GUI) Última modificación: octubre de 2012 Pag. 1 Laboratorio de redes ITESM Dep. Ciencias Computacionales 1. Panel de lista de paquetes: Muestra un resumen de cada paquete capturado. Pulsando sobre los paquetes de este panel se controla el contenido de los otros dos paneles. 2. Panel de vista en árbol: Muestra el paquete seleccionado en el panel superior (1) con más detalle, permitiendo acceder a los distintos niveles de protocolos. Al pulsar sobre cada uno de los niveles se resaltan los datos del paquete correspondientes a dicho nivel en el panel inferior (3). 3. Panel de detalle de los datos: Muestra el contenido del paquete seleccionado en el panel superior (1) en formato hexadecimal y ASCII. Además de los tres paneles principales, tenemos los cinco elementos adicionales siguientes en la barra de herramientas de filtrado, que se encuentra debajo de la barra de herramientas principal de Wireshark: A) Botón de filtro: Permite definir un filtro para la visualización de los paquetes, de forma que podamos concentrarnos en el análisis de un determinado protocolo o en el tráfico entrante o saliente de un ordenador determinado. B) Texto del filtro: Aquí aparece el texto del filtro. Es posible introducir el texto del filtro directamente en este campo o seleccionar alguno de los filtros que se hayan utilizado anteriormente. C) Botón para eliminar el filtro: Pulsando este botón se elimina el filtro que estuviera activo. D) Botón para aplicar el filtro: Pulsando este botón se aplica el filtro definido y en el panel principal (1) se muestran únicamente los paquetes que cumplan las condiciones indicadas en el filtro. E) Botón de expresión del filtro: Al pulsar en este botón se accede a un cuadro de diálogo para la definición de la expresión del filtro. La lista de todos los protocolos que soporta Wireshark se encuentra en Analyze ==> Enabled Protocols. En esta sección puede activar o desactivar los protocolos. Es necesario prestar atención en que si desactivamos un protocolo, no aparecerán los protocolos de nivel superior que dependan de él. Por ejemplo, si desactivamos el protocolo TCP, no aparecerán los protocolos de capa superiores que los utilicen (capa aplicación) tales como HTTP, SMTP, FTP, etc. Pero si apareceran aquellos que utilizan UDP u otro protocolo. (Telecomunicaciones) “Finger” de protocolos En el menú de Protocolos habilitados estará notando que existe una enorme cantidad de protocolos a identificar. Entre ellos estarán protocolos del 802.11x y el 802.3 que son protocolos de capa 2 en OSI pero también puede hallar protocolos como YMSG o Messenger que son protocolos de capa 4 y superior que son específicos de programas de mensajes en tiempo real. ¿Cómo es que Wireshark puede diferenciar uno de otro? Bien, observemso con cuidado la siguiente captura de pantalla : Última modificación: octubre de 2012 Pag. 2 Laboratorio de redes ITESM Dep. Ciencias Computacionales En ella, se capturo un paquete. En la parte alta esta el paquete desglosado con el contenido que posee y la parte baja muestra el paquete en su forma en que se recibió (un stream de bytes). Particularmente se tiene seleccionado el paquete de Ethernet en la parte alta y eso da como consecuencia que se seleccione la parte baja que corresponde al mismo. La siguiente imagen, es una captura de la curricula de Cisco CCNA respecto a la estructura de un frame Ethernet Los primeros 8 bytes y el FCS no se muestran en Wireshark debido a limitante de hardware, y es que cuando el sniffer puede leer los bytes el hardware de la NIC ya removió el preámbulo y el FCS. Los primeros 6 bytes que obtenemos son: FF-FF-FF-FF-FF-FF que son 6 bytes constantes, que corresponden a la dirección Mac destino (específicamente es una dirección broadcast). Los siguientes 6 bytes son la dirección MAC del origen (un dispositivo de la Marca Cisco, identificados por la parte alta de la MAC) seguidos inmediatamente por dos bytes: 08-06 que nos sirven para indicar la longitud de los datos del frame L2 (Que vienen siendo los headers de las capas superiores y sus datos); Específicamente, 0x0806 nos indica que el contenido es un mensaje ARP cuya longitud es conocida, para Última modificación: octubre de 2012 Pag. 3 Laboratorio de redes ITESM Dep. Ciencias Computacionales otro tipo de mensajes el valor cambiara. Finalmente, después de los datos quedan por llenar los últimos espacios y estamos hablando de un “Trailer” de puros ceros para completar el tamaño típico del frame. Si los datos superan dicho tamaño el tráiler es descartado. La captura anterior nos muestra ahora el desglose del paquete capturado con toda la información de Ethernet visible. Además, esta seleccionado y desglosado el protocolo superior a L2 que en este caso es ARP de L3 con los datos que típicamente manda. Los protocolos de redes siempre tienen un comportamiento constante y predecible para identificarlos incluyendo los programas, estas características se les pueden llamar “huellas del protocolo” o como “finger” que es el termino empleado en ingles. En el caso de Ethernet, el hecho que el sniffer lo capturara de esa interfaz deja bastante obvio que se trata de él, inmediatamente siempre vendrá un paquete de 6 bytes y otro de 6 y uno de tipo de dato que contiene. Todas estas características son una huella “digital” de ese frame y por lo tanto fácilmente identificable para los programas de software, incluso prepara la información necesaria para intentar identificar el rastro (“finger” o huella) del siguiente nivel en este caso es un protocolo de L3 denominado ARP. Son estos datos lo que define el finger, características que nunca cambian del protocolo, y por lo mismo el sniffer los puede clasificar de forma sencilla.. Entre mas alta sea la capa mayor será la cantidad de componentes que los identifique. Por ejemplo, cuando el sniffer ya sabe que esta analizando un paquete de capa 4 que corresponde a TCP (Esto porque los niveles anteriores entregaron esa información) y el puerto corresponde a HTTP sabe que el paquete es efectivamente de http. Si un usuario fabricara el mensaje y alterara solamente el campo del puerto a otro el paquete ya no tendría sentido y no se tomaría en cuenta por el sniffer para esa clasificación (Si aparecería pero como uno genérico de capa anterior). Última modificación: octubre de 2012 Pag. 4 Laboratorio de redes ITESM Dep. Ciencias Computacionales Esta ultima captura, aunque incompleta muestra uno de los segmentos de una ventana de comunicación TCP de un servidor WEB a la maquina destino y se puede ver el contenido de los datos de TCP como pedazos de código HTML. Wireshark lo identifica como TCP en vez de http por el simple hecho que es una transmisión de datos y no un inicio de comunicación con el servidor. Filtros Durante el transcurso del laboratorio hemos utilizado los filtros de manera muy sencilla buscando a lo sumo uno o dos protocolos o bien con direcciones de algún protocolo especificas. Pero el filtro puede ir mas halla Los filtros se escriben como clausulas booleanas y por lo mismo los operadores lógicos: AND ( && ), OR ( || ) y NOT ( ! ) son reconocidos para las clausulas. Con ello podemos ir creando filtrados especializados tales donde buscamos paquetes provenientes de ciertas redes y de cierto tipo de protocolo de nivel alto o incluso el contenido de ciertos protocolos como http o TCP. En ultima instancia podemos buscar texto. También, como búsquedas booleanas reconoce los símbolos de igual (eq , == ) no igual (ne . != ), mayor que ( gt , > ) , menor que ( lt , < ), mayor o igual a (ge , >= ) y menor o igual a ( le , <= ) Los siguientes son algunos ejemplos de filtro obtenidos de la Wiki de Wireshark (wiki.wireshark.org) (TCPDUMP) Captura de trafico proveniente o enviado al host 172.18.5.4 host 172.18.5.4 Última modificación: octubre de 2012 Pag. 5 Laboratorio de redes ITESM Dep. Ciencias Computacionales NOTA: Wireshark y TCPDUMP permiten traducción de nombre. (TCPDUMP) Captura de trafico de o hacia un rango de dirreciones IP net 192.168.0.0/24 net 192.168.0.0 mask 255.255.255.0 (TCPDUMP) Captura de trafico proveniente de un rango de dirreciones Src net 192.168.0.0/24 Src net 192.168.0.0 mask 255.255.255.0 (TCPDUMP) Captura de trafico enviado a un rango de dirreciones dst net 192.168.0.0/24 dst net 192.168.0.0 mask 255.255.255.0 (TCPDUMP) Captura de trafico “non-HTTP” y “non-SMTP” (ambos son equivalentes) host www.example.com and not (port 80 or port 25) host www.example.com and not port 80 and not port 25 (TCPDUmp) Captura solicitudes HTTP GET. Este es un filtro hecho a medida del mismo protocolo, se pueden identificar porque los paquetes HTTP específicamente envían la cadena en string “GET” )0x47455420 en hex) en un encabezado de TCP de tamaño fijo. port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 (Shark) Captura trafico de dispositivos de cierto proveedor Este filtro es revisando exclusivamente el rango de los 24 bits mas alto de las direcciones MAC que específicamente identifican a dichos proveedores. eth.addr[0:3]==00:06:5B TCPDUMP y Wireshark En los ejemplos habrá notado la leyenda TCPDUMP y Shark antecediendo al nombre, pues bien, estas leyendas se deben a que TCPDUMP fue uno de los primeros sniffers y Wireshark utiliza ciertas librerías de TCPDump permitiéndole utilizar la sintaxis de este en su búsqueda además de la sintaxis propia de Wireshark. Última modificación: octubre de 2012 Pag. 6 Laboratorio de redes ITESM Dep. Ciencias Computacionales Como regla general, siempre que se desee utilizar la sintaxis de TCPDump se debe de hacer antes de iniciar la captura, para ello sin catura iniciada en Wireshark se elige la opción de Captura (Capture) en el menú principal y de ahí se escoge Opciones de captura (Capture Options) con lo cual aparecerá una nueva ventana como la siguiente: En ella, si se coloca sintaxis de TCPDump o Shark no aparecerá en el lugar de filtro pero esta en constante funcionamiento. La razón de esto es para facilitar el trabajo de análisis de trafico. Supongamos por ejemplo que se tiene un filtro general para solo capturar paquetes de HTTP con el cual se hace desde las opciones de captura al colocar el filtro adecuado (de sintaxis TCPDump), de esta forma empezaran a aparecer solamente paquetes TCP de trafico HTTP, ahora a partir de la información inicialmente capturada y utilizando el filtrado general de Wireshark podemos ir redefiniendo la búsqueda (por ejemplo buscando por Mac Address). En síntesis, estos comandos son poderosos, pero aquellos comandos que son heredados del sniffer TCPDump a Wireshark solo son reconocidos desde la opción de capturas antes de iniciar una captura de paquetes. Última modificación: octubre de 2012 Pag. 7 Laboratorio de redes ITESM Dep. Ciencias Computacionales Comandos de consola (Linux) Wireshark es específicamente una aplicación de interfaz gráfica (GUI por sus siglas en ingles) sin embargo, puede ser arrancada desde consola. El nombre del comando es “wireshark” y lo siguiente es la captura de texto del argumento --help: Wireshark 1.6.2 Interactively dump and analyze network traffic. See http://www.wireshark.org for more information. Copyright 1998-2011 Gerald Combs <[email protected]> and contributors. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Usage: wireshark [options] ... [ <infile> ] Capture interface: -i <interface> -f <capture filter> -s <snaplen> -p -k -Q -S -l -B <buffer size> -y <link type> -D -L Capture stop conditions: -c <packet count> -a <autostop cond.> ... name or idx of interface (def: first non-loopback) packet filter in libpcap filter syntax packet snapshot length (def: 65535) don't capture in promiscuous mode start capturing immediately (def: do nothing) quit Wireshark after capturing update packet display when new packets are captured turn on automatic scrolling while -S is in use size of kernel buffer (def: 1MB) link layer type (def: first appropriate) print list of interfaces and exit print list of link-layer types of iface and exit stop after n duration:NUM filesize:NUM files:NUM packets (def: infinite) - stop after NUM seconds - stop this file after NUM KB - stop after NUM files Capture output: -b <ringbuffer opt.> ... duration:NUM - switch to next file after NUM secs filesize:NUM - switch to next file after NUM KB files:NUM - ringbuffer: replace after NUM files Input file: -r <infile> set the filename to read from (no pipes or stdin!) Processing: -R <read filter> -n -N <name resolve flags> User -C -g -J -j -m -t -u -X -z interface: <config profile> <packet number> <jump filter> <font> ad|a|r|d|dd|e s|hms <key>:<value> <statistics> packet filter in Wireshark display filter syntax disable all name resolutions (def: all enabled) enable specific name resolution(s): "mntC" start with specified configuration profile go to specified packet number after "-r" jump to the first packet matching the (display) filter search backwards for a matching packet after "-J" set the font name used for most text output format of time stamps (def: r: rel. to first) output format of seconds (def: s: seconds) eXtension options, see man page for details show various statistics, see man page for details Output: Última modificación: octubre de 2012 Pag. 8 Laboratorio de redes -w <outfile|-> Miscellaneous: -h -v -P <key>:<path> -o <name>:<value> ... -K <keytab> --display=DISPLAY ITESM Dep. Ciencias Computacionales set the output filename (or '-' for stdout) display this help and exit display version info and exit persconf:path - personal configuration files persdata:path - personal data files override preference or recent setting keytab file to use for kerberos decryption X display to use Como se puede apreciar es posible ejecutar Wireshark ya listo para iniciar la captura, pero la GUI siempre aparecerá (Aunque existe un argumento para ocultarla). Para el filtrado puede utilizar un archivo que contenga el filtrado a utilizar o bien utilizar dobles comillas “ ” para todo el filtrado. Este filtrado, es el equivalente al de “Capture Option” por lo tanto, una vez arrancado Wireshark solo aparecerán los paquetes que cumplan con el filtro. El comando “wireshark -D” mostrara en la terminal las interfaces que reconoce Wireshark, algo equivalente a ifconfig, pero solamente el nombre de las interfaces. Mientras que con el argumento -L veríamos el tipo de tecnología que tiene la maquina. Ejemplo de seguimiento de Flujo A continuación analizaremos el protocolo HTTP y probaremos una funcionalidad bastante interesante de Wireshark, el seguimiento de un flujo TCP. 1. Iniciar la captura de paquetes (es opcional utilizar filtros de TCPDump) 2. Abrir el navegador y entrar a la página del curso: cs.mty.itesm.mx/lab/redes1 3. Una vez que se haya cargado la página, detener la captura de paquetes. 4. Examinar los paquetes capturados. 5. Aplique un filtro que muestre únicamente los paquetes cuya dirección origen sea la suya y tenga como destino el puerto http, 80. Por ejemplo ip.src == 192.168.43.12 and tcp.port == 80 A continuación busque un paquete similar al de la imagen, y haga click derecho “Follow TCP Stream”. Última modificación: octubre de 2012 Pag. 9 Laboratorio de redes ITESM Dep. Ciencias Computacionales al seleccionar esta opción ha aparecido en la opción de filtro un filtro de TCP para seguir el hilo de conversaciones (mensajes entre los dos participantes); este filtro es similar al siguiente:“tcp.stream eq 6” (Dependiendo de cual paquete escogió para seguir). Un mal manejo del entendimiento de los protocolos puede llevar a no capturar lo deseado, por ejemplo, en el caso del ejemplo de paquetes, se tiene seleccionado un paquete HTTP que inicializa una acción de transmisión y la conversación que se dio entre el servidor web y el cliente es el siguiente: Esto en síntesis es la comunicación con el servidor donde esta alojado el sitio (un servidor Apache como se puede ver la información) y que incluye además el inicio de una transmisión (en este caso varias) de pagina web. La información de estas paginas web se envía en menajes TCP ya que excede el tamaño mínimo, por lo tanto si queríamos la información web debemos buscar un mensaje TCP del servidor al nodo el cual utiliza el stream 4 en vez del stream 6 (tcp.stream eq 4). Con esta corrección la conversación que se captura es la siguiente: Última modificación: octubre de 2012 Pag. 10 Laboratorio de redes ITESM Dep. Ciencias Computacionales Ahora se puede apreciar que efectivamente, hemos capturado la transmisión del trafico web del servidor a nosotros. Pero conocer a fondo el protocolo puede no ser tan fácil. Pues bien, hay otro modo de ir preparándonos la captura tal cómo utilizar la opción de buscar el contenido del os paquetes, pero se requiere conocer el valor de algún campo (por ejemplo el texto que se transmitió en los TCP del os datos). Para ello utilizaremos la herramienta de búsqueda de paquetes la cual puede ser accedida en “Edit – Find Packet” y es una ventana similar a la siguiente: Última modificación: octubre de 2012 Pag. 11 Laboratorio de redes ITESM Dep. Ciencias Computacionales Observen que pueden buscar por filtro o por valor hexadecimal y string. Si estamos buscando texto, este usualmente se transmite en código ASCII por lo tanto búsqueda en hexadecimal o string nos sirve. Por supuesto, buscar en hexadecimal significa convertir “Laboratorio” a su valor en hexadeximal. Limitantes de Capa 2 Wireshark captura paquetes que llegan al medio por el cual el nodo este conectado a la red, por lo mismo, si un mensaje nunca pasa por nuestro enlace entonces jamás lo veremos. Mientras que en el conjunto de tecnología dentro de lo que se refiere como Wi-Fi (802.11 a,b,g y n) utilizan un mismo medio para todo los paquetes (el aire) el protocolo 802.3 (Ethernet) puede ser separado en distintos dominios de colisión. Todo los nodos dentro de un dominio de colisión verán el trafico de todos y es aquí donde viene una limitante, en las redes Ethernet contemporáneas ya rara vez se utilizan dispositivos Hub (L1) en su lugar existen swtiches o conmutadores (L2) los cuales ponen a un nodo por dominio de colisión y por lo mismo solo vería trafico destinado a él, Broadcast y/o multicast. Última modificación: octubre de 2012 Pag. 12 Laboratorio de redes ITESM Dep. Ciencias Computacionales Actividades Interfaz Grafica – Finger Ejecute “Analyze – Enabled Protocols” y asegúrese de no dejar habilitado ningún protocolo (utilice la opción de deshabilitar todos). Conteste las siguientes preguntas: 1. ¿Wireshark ha dejado de capturar paquetes?______ 2. Explique lo que ha pasado _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ Captura de conversaciones en un canal IRC Esta actividad consiste en capturar las conversaciones de usuarios involucrados en un canal IRC al que los alumnos se conectaran utilizando un cliente IRC indicado por el instructor. Ejecución del servidor y clientes IRC El instructor dará la dirección IP del servidor IRC ya que utilizaremos uno local a nuestra red. Para la conexión fácil al servidor utilice el siguiente comando: Redes1@ccnalab12:~$ xchat -a --url=irc://AA.BB.CC.DD/#Itesm --command="/nick A0xxxxxx" Donde AA.BB.CC.DD es la dirección IPv4 dada por el instructor y A0xxxxx es la matrícula de cada alumno. Con este comando el alumno iniciara una sesión IRC en el canal #Itesm, con el objetivo de rastrear las conversaciones que ahí se lleven por medio de la herramienta Wireshark. Si en algún momento el usuario requiere cambiar su nombre de pila (nickname) utilice el comando “/nick <Nickname>” y para entrar a un canal el comando “/join <#canal>” desde el cliente IRC. Durante la practica los alumnos estarán escribiendo texto en el canal #Itesm con objetivo de estar enviando trafico relativamente constante. Recopilación de datos Para propósitos de la práctica obtenga la siguiente información desde Wireshark: Anote la dirección IP del servidor IRC*: _______________________________________ Anote su dirección MAC: _______________________________________ Anote su dirección IP: _______________________________________ Protocolo (Capa transporte) utiliza IRC _______________________________________ Puerto de IRC _______________________________________ *Información dada por el instructor ¿Cuál es el flujo de información del modelo IRC? Última modificación: octubre de 2012 Pag. 13 Laboratorio de redes ITESM Dep. Ciencias Computacionales _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ TIP: La pregunta se enfoca hacia donde viaja la información y como le llega a los demás y si esto es igual con el nodo que envía la entrada original. Filtros de sintaxis Shark Utilizando exclusivamente el filtro con sintaxis propia de Wireshark en el panel “Texto del filtro” asegúrese de que aparezcan solamente los paquetes de IRC y escriba a continuación el filtro que utilizo. _______________________________________________________________________ _______________________________________________________________________ En base a los datos que obtiene de los paquetes capturados, conteste las siguientes preguntas: 1. La comunicación de IRC ¿se maneja en distintos protocolos o uno solo? _____________________ 2. ¿El envío de los datos en dicho protocolo, cambia de puertos o de Stream como en http? _____________________ TIP: Tome en cuenta, que cuando el paquete se fragmenta o por la naturaleza de UDP o TCP se envían paquetes con el objetivo de la suma o validación del ACK. Filtros de sintaxis TCPDump Reinicie la captura de los mensajes utilizando exclusivamente filtros TCPDump desde “Captura > Opciones” para capturar los mismos paquetes. _______________________________________________________________________ _______________________________________________________________________ Shell Escriba la sintaxis necesarias para que Wireshark arranque iniciando directamente la captura de la interfaz con red y cuyo filtro (TCPDump) sea el utilizado para la captura de los paquetes de IRC. _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ Última modificación: octubre de 2012 Pag. 14 Laboratorio de redes ITESM Dep. Ciencias Computacionales Escriba la sintaxis necesaria para que Wireshark inicie y este creando archivos de 128 KB con el filtro ya aplicado. Se recomienda se lea el manual de Wireshark para la sintaxis. Utilice como nombre base de los archivos: Captura _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ Escriba la sintaxis para que Wireshark se detenga después de escribir 500 paquetes, asegúrese de utilizar el argumento –Q para que Wireshark se cierre completamente Utilice como nombre base de los archivos: Captura _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ Última modificación: octubre de 2012 Pag. 15