Sniffing - Departamento de Ciencias Computacionales

Anuncio
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 <gerald@wireshark.org> 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
Descargar