Trabajo Práctico de Wiretapping Mayo 2013 Teoría de las Comunicaciones Integrante LU Correo electrónico Martín De Micheli 523/07 shmdm7@gmail.com Gonzalo Mendez 843/04 gemm83@hotmail.com Nicolas Varaschin 187/08 nvaraschin@dc.uba.ar Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Ciudad Universitaria - (Pabellón I/Planta Baja) Intendente Güiraldes 2160 - C1428EGA Ciudad Autónoma de Buenos Aires - Rep. Argentina Tel/Fax: (54 11) 4576-3359 http://www.fcen.uba.ar
Índice 1. Introducción 3 2. Métodos 4 2.1. Cliente ARP....................................... 4 2.2. Sniffer con Scapy..................................... 4 2.3. Sniffeando red con Wireshark.............................. 5 2.4. Cálculo de entropía e información............................ 5 3. Resultados 6 3.1. Red 1: Casera....................................... 6 3.2. Red 2: Casera....................................... 7 3.3. Red 3: Oficina....................................... 10 4. Conclusiones 15 2
1. Introducción En este trabajo estudiamos el protocolo ARP para lograr analizar el comportamiento de diferentes redes. Principalmente consiste en un cliente ARP, capturas de paquetes en distintas redes y análisis de caracteríticas de éstas redes como su topología, entropía y la cantidad de información de los nodos pertenecientes. El protocolo ARP ofrece la posibilidad de preguntar por una dirección MAC asociada a una IP en una red local. Esta información es crucial para el funcionamiento de una red ya que las direcciones IP pueden variar en el tiempo, pero las MAC son fijas para cada interfaz. El protocolo ARP se basa en enviar paquetes who-has o respuestas (reply) a pedidos recibidos. El paquete who-has se envia a la dirección broadcast de la red y pregunta acerca de una IP. Si algun nodo de la red tiene esa IP, enviará un reply con su dirección MAC. Para crear el cliente ARP utilizamos Scapy, una biblioteca en Python que nos facilita el armado y envio de paquetes en la red. Luego, para el análisis de paquetes en la red, utilizamos Wireshark. La aplicación nos permite capturar los paquetes de la red, entonces leyendo los paquetes ARP que están en vuelo podemos armar un mapa bastante confiable de la red local. El modelo que tomamos es el una fuente de información discreta de memoria nula, i.e. que cada evento es probabilísticamente independiente de los otros. Esta decisión obedece a una cuestión práctica, para simplificar el análisis posterior y no se condice con las mediciones tomadas. Por ejemplo, sabemos que los mensajes ARP de reply tienen asociado incondicionalmente un mensaje de request (Who has?). SEGUIR INTRO HABLAR SOBRE CUALES FUENTES DE INFO CALCULAMOS ENTROPIA Y DEMAS CHAMUYOS 3
2. Métodos 2.1. Cliente ARP La primer consigna del enunciado pide armar un cliente ARP que permita enviar paquetes ARP who-has y poder recibir una respuesta. Esto lo conseguimos con Scapy, que permite facilmente armar un paquete ARP who-has de la siguiente forma: ARP( hwdst = mac broadcast, pdst= dst ip). En este caso pdst es la dirección IP de la cual queremos saber su MAC asociada. Luego se envia el paquete utilizando sr1(arp packet, iface= interface, verbose=0, retry=1, timeout=1) Donde sr1 es una función de Scapy que envia paquetes a la red devolviendo solo una respuesta. Previamente hay que configurar la variable interface indicando la interface de nuestra PC sobre la cual enviar el mensaje. Todo esto fue implementado en el archivo arp client.py. Provee una función que devuelve el resultado del mensaje ARP y otra función para imprimirlo. Se debe correr como sudo. También implementamos test arp client.py en el cual realizamos pruebas simples sobre el cliente ARP. También hay que ejecutarlo como sudo y configurar la IP de la PC actual para una de las pruebas. 2.2. Sniffer con Scapy En la segunda consigna se pide poder escuchar la red local por un intervalo de tiempo, capturando todos los paquetes ARP. Para lograr esto, también utilizamos Scapy y el cliente ARP del punto anterior. El programa sniffer.py toma como argumento la cantidad de segundos que se sniffeará la red (por default son 10 segundos). Scapy provee una función sniff() la cual puede tomar un filtro con la sintaxis BPF, en nuestro caso queda: sniff(timeout=timeout,filter= arp ) Luego del tiempo establecido, se listan todos los paquetes ARP encontrados y se imprimen formateados. 4
2.3. Sniffeando red con Wireshark ************REVISAR ESTO************ Para analizar y juntar datos sobre diferentes redes utilizamos Wireshark. Elegimos Wireshark en vez de nuestro sniffer casero porque provee más información de la red además de lo que capturamos nosotros y se pueden importar archivos pcap con redes ya analizadas. Sniffeamos redes caseras y una red de oficina durante intervalos de más de dos horas, filtrando los paquetes ARP obtenidos. Dentro de esos conjuntos hay paquetes who-has, reply y paquetes del tipo gratuitous arp. Las redes consideradas fueron: Red 1 Menos de 10 nodos Casera Red 2 Menos de 10 nodos Casera Red 3 Más de 35 nodos Oficina 2.4. Cálculo de entropía e información ************REVISAR ESTO************ Para calcular la entropía de las redes se tomaron como fuentes de información las IPs solicitadas y las IPs solicitantes por ARP. Consideramos que no era relevante la información aportada por las MAC ya que en el caso de las MAC solicitadas iba a predominar la MAC broadcast, mientras que en el caso de las MAC solicitantes la información iba a ser similar al de las IPs solicitantes. Se realizaron scripts para facilitar la tarea de calcular entropía, probabilidades y formateo de datos para graficar tomando como input un conjunto de paquetes ARP en formato CSV. Se realizaron gráficos de entropía a traves del tiempo (hechos en GNUPLOT), histogramas de IPs ordenados por la cantidad de información de cada IP (hechos en Excel) y grafos de cada red (hechos en Graphviz). También se realizaron estudios sobre la cantidad de información provista por los paquetes ARP destinados al router versus la entropía generada por IPs solicitadas en una red. 5
3. Resultados 3.1. Red 1: Casera Analizando las IPs solicitadas en los paquetes ARP, se obtuvo el siguiente mapa de la red casera: Se pueden observar seis nodos dentro de la red privada 192.168.1.x, un nodo con IP publica 10.137.215.143 y un nodo con 0.0.0.0. Sabiendo que 192.168.1.1 es el router que conecta a todos los nodos, tiene sentido que todos los nodos envien mensajes who-has a esa dirección: necesitan saber la MAC del router para enviar paquetes, que luego serán forwardeados hacia otros nodos (dentro o fuera de la red). El router a su vez pregunta por los nodos de la red, esto puede ser para saber si el nodo sigue teniendo la misma dirección MAC o si se flusheó la entrada de la tabla ARP del router y tiene que averiguar la MAC de vuelta. También puede ocurrir que el router nunca recibió un ARP de esa dirección, pero tiene que mandarle algún paquete por primera vez. En el caso del nodo 192.168.1.107 el cual no envía ARP al router puede deberse que no necesita enviar mensajes a traves de la red, o probablemente es un nodo caído o un nodo al que se le asignó otra IP. El router intenta preguntar sobre esta IP de todas formas. Si una maquina quiere comunicarse directamente con otro (para compartir archivos por ejemplo), también tiene que conocer su MAC. Este es el caso de los nodos 192.168.1.101 y 192.168.1.102. La IP 10.137.215.143 es la IP pública asignada por el ISP a la red el día que se realizó la medición. Cuando analizemos la red siguiente, quedará más claro porque esto es así. Por último queda el caso del nodo 0.0.0.0 pero no tuvimos éxito en averiguar cual es la causa de ese mensaje. Asumimos que alguna aplicación debe estar enviando ese mensaje como control, pero no podemos asegurarlo. Dijimos anteriormente que sabemos que el router es el nodo 192.168.1.1, pero podríamos no conocer ésta información. Pero conociendo ARP que circularon por la red, se 6
puede deducir. La siguiente tabla muestra la cantidad de veces que un nodo fue el destino de un paquete ARP: 192.168.1.1 283 192.168.1.100 7 192.168.1.101 13 192.168.1.102 17 192.168.1.107 1 Se puede observar que el nodo 192.168.1.1 aparece más veces que cualquier otro nodo, con lo cual podemos concluir que es el router. 3.2. Red 2: Casera En este caso presentamos otra red casera: Es similar al caso anterior, salvo que hay dos nodos con IP publica y otra vez aparece el caso del nodo 0.0.0.0. En este caso, el único dato nuevo que podemos aportar para la dirección 0.0.0.0 es que el nodo destino pertenece a un celular. Probablemente tenga que ver con el comportamiento propio del celular o alguna app. El router se vuelve a destacar en el grafo, esto se corresponde con las ocurrencias como destino de un paquete ARP como se puede ver en este gráfico: 7
Este gráfico está ordenado por orden creciente de cantidad de información. La información de un símbolo, en una fuente dada, es la probabilidad de que la fuente produzca ese símbolo y está dada por: Para poder calcular esto, necesitamos las probabilidades de cada símbolo de la fuente. En nuestro caso son las siguientes: IP solicitada p(x i ) I(x i ) 192.168.0.1 0.33944 1,0804 192.168.0.11 0.16513 1,801 192.168.0.18 0.15596 1,8581 192.168.0.29 0.10091 2,2935 192.168.0.28 0.073394 2,6119 186.19.20.1 0.04587 3,0819 192.168.0.12 0.04587 3,0819 192.168.0.14 0.04587 3,0819 192.168.0.2 0.02752 3,5927 Podemos ver como a medida de que un símbolo es más probable dentro de la fuente, la información que aporta es menor. Esto se corresponde con nuestro gráfico anterior, el 8
router es el nodo con más ocurrencias y aparece primero. Podemos conjeturar que cualquier nodo con poca cantidad de información es un nodo destacado de la red. Por ejemplo los dos nodos que le siguen, 192.168.0.11 y 192.168.0.18, eran maquinas que estaban siendo muy usadas en el lapso en el cual se tomó la medición. Por otro lado el nodo 192.168.0.2, el que aportó más información, era un nodo inexistente en ese momento. Posiblemente otro nodo intentó preguntar por esta IP sin éxito. Medimos la variación de entropía de la red a lo largo del tiempo, lo cual nos da una idea del nivel de información de ésta. La entropía cumple ser la media poderada de la información proporcionada por cada símbolo de la fuente. Nos planteamos analizar las IPs que corresponden a nodos distinguidos de la red (e.g. el router). Lo que hicimos fue medir la cantidad de información de la IP del router con respecto a la entropía de la fuente de información a lo largo del tiempo. Buscamos el instante en el cual la cantidad de información del router pasa a estar por debajo de la media (i.e. entropía). En ese punto estamos diciendo que la probabilidad de que este símbolo aparezca es más frecuente que la media, y por lo tanto se trata de un nodo distinguido. 9
Por último, queda ver el caso de las IPs públicas 186.19.20.1 y 186.19.21.246. El grafo muestra pedidos de 186.19.21.246 hacia 186.19.20.1 y sospechamos que la primera es nuestra IP pública y la segunda la IP del router controlando la subred del ISP en esa zona. Teniendo esto en cuenta pudimos observar que es cierto entrando a la configuración del router local: Lo que está sucediendo es que el router, usando su dirección de red pública, intenta encontrar la MAC del gateway del ISP. Entonces envia un mensaje ARP who-has preguntando por 186.19.20.1. Podemos ver desde la red local este mensaje, ya que el router está enviandolo por todas sus interfaces. 3.3. Red 3: Oficina La red de oficina se trata de una red grande, con más de 35 nodos. Mostrar información de toda la red es dificil, así que tomaremos los nodos más destacados para ello. Este es el 10
histograma de la red completa: Si tenemos en cuenta algunos de los nodos más destacados de la red, obtenemos: La oficina pareciera tener varios nodos destacados, sean router, switchs o otros dispositivos con alto tráfico. Podemos armar un grafo tomando sólo los nodos que tienen como destino alguno de los cinco nodos más destacados 11
Hay que tener en cuenta que tomamos un subconjunto chico de todo el tráfico de la red, realizar un grafo completo es inpracticable. Los nodos 192.100.100.1, 192.100.100.88 y 192.100.100.139 recibieron pedidos ARP de muchos nodos distintos, podemos asumir que son routers. Los nodos 192.100.100.24 y 192.100.100.63 siguen un patrón que no esperabamos, reciben muchos pedidos who-has desde unos pocos nodos. Revisando más detenidamente la captura de tráfico del Wireshark, observamos que estos nodos nunca respondieron con un ARP reply. Es posible que estos dos nodos hayan cambiado de IP en algún momento y los otros nodos solicitantes tienen configuradas esas IP estáticamente para alguna aplicación. Entonces se envian miles de pedidos who-has por un par de IP que no están más asignadas. Teniendo esto en cuenta, filtramos la captura dejando solo los ARP dirigidos a algún nodo vivo (un nodo que respondio con ARP reply o que fue el source de un ARP who-has). El histograma de la red ahora queda de la siguiente forma: 12
El gráfico queda más consiso, más parecido a los correspondientes a las redes caseras. sin nodos extremadamente solicitados. Haciendo foco sobre los nodos destacados: Los nodos que asumimos anteriormente como routers siguen existiendo despues del filtro y además se nota una diferencia en el trafico recibido por los primeros dos respecto al resto. Puede querer decir que los primeros dos sean los routers principales, mientras los otros nodos destacados otros dispositivos importantes dentro de la red como switchs o 13
firewalls. En cuanto al grafo de los cinco nodos mas destacados, podemos ver como todos ellos reciben pedidos ARP de varias IPs reforzando la idea de que son nodos que routean tráfico. 14
4. Conclusiones 15