SOMI XVII CONGRESO NACIONAL DE INSTRUMENTACION MONITOREO Y CONTROL EN UNA RED POR MEDIO DE VISUALIZADORES DE PAQUETES IPv4/IPv6 Y LISTAS DE ACCESO DE UN ROUTER G. Gerónimo Castillo, E. H. Rocha Trejo Universidad Tecnológica de Mixteca - IEC Carretera a Acatlima Km. 2.5 Huajuapan de León, Oaxaca, México {gcgero, everth}@nuyoo.utm.mx RESUMEN El presente artículo explica una de las maneras de implementar seguridad en una red utilizando mecanismos de prevención y detección, en particular utilizando visualizadores de paquetes y un router que permita el filtrado de paquetes para controlar el flujo de información a través de sus diferentes interfaces. ABSTRACT This present paper explains one of the ways of making a network secure utilizing prevention and detection mechanisms, in particular utilizing sniffers and a router that make it possible to filter packages in order to control the flow of information through their various interfaces. 1. INTRODUCCIÓN Existen dos tipos de ataques contra la seguridad de la información en un sistema de computo, los ataques pasivos, en los que el agresor escucha la información que circula por el medio de transmisión sin llegar a alterarla, y los ataques activos, en los que tiene lugar una interrupción, eliminación, o modificación de información. Con un programa visualizador de paquetes se puede obtener e interpretar las tramas que circulan por un fragmento de red, extraer a partir de ellas los datos transmitidos y opcionalmente almacenar parte, o la totalidad de dichos datos. Los visualizadores se basan en la colocación de la tarjeta de red en modo promiscuo, y de esta manera obtienen todos los paquetes que pasan por la red aunque no estén dirigidos a ella. Un visualizador de paquetes es una herramienta invaluable para el administrador, ya que ayuda a diagnosticar problemas en la red y si se complementa con la utilización de un firewall eficiente puede brindar mayor seguridad a los usuarios de la red. 2. LA SEGURIDAD Y LOS ATAQUES Para poder brindar seguridad debemos primero reconocer cuales son los tipos de ataques que se pueden presentar en un determinado instante. Estos ataques se pueden clasificar en dos grupos, los activos y los pasivos. Los ataques activos atentan contra la disponibilidad de la información por medio de la interrupción del flujo de datos, así como a su integridad por medio de la modificación o invención de nuevo flujo de datos. Los ataques pasivos atentan contra la confidencialidad del flujo de datos, dado que su objetivo es interceptar dicho flujo. Los protocolos que forman parte del conjunto de protocolos TCP/IP son vulnerables a varios tipos de ataques, algunos de ellos son: el ataque spoofing, el ataque smurf, el ataque de negación de servicios (DoS), el ataque sniffing, entre otros. 1 Clave: 17GGC82 Sistemas Computacionales SOMI XVII CONGRESO NACIONAL DE INSTRUMENTACION Hablaremos brevemente de los ataques antes mencionados, y nos centraremos en el ataque sniffing, dado que a partir de él se realizaron los visualizadores de paquetes. 2.1 Ataque Spoofing El spoofing es un ataque en el cual una máquina intrusa se hace pasar por otro equipo de la red, inyectando información adicional en una comunicación. Existen diferentes mecanismos para realizar el spoofing por medio de los protocolos ARP, RARP e ICMP. 2.1.1 Spoofing ARP Un ataque spoofing ARP se lleva a cabo cuando una máquina A requiere conocer la dirección física de otra máquina B, para esto la máquina A envía una solicitud ARP por difusión, logrando con ello que todas las máquinas conectadas a la misma red la reciban, pero sólo la máquina B que contiene la dirección IP enviada en el mensaje, responde, aunque en el caso de aplicar el ataque la máquina intrusa también responderá a dicho mensaje poco tiempo después que la máquina B, haciendo con ello que la máquina A tome en cuenta la última respuesta recibida, y actualice su tabla de direcciones con la pareja: dirección IP destino real, dirección física intrusa, originando con ello que la próxima vez que la máquina A quiera comunicarse con la máquina B envíe los paquetes a la máquina intrusa. Para completar el ataque la máquina intrusa realiza una solicitud ARP, en la que incluye la dirección IP de la máquina origen y su propia dirección física, con ello la máquina destino actualizará su tabla de direcciones con la pareja: dirección IP origen, dirección física intrusa, ocasionando que cuando la máquina destino le mande información a la máquina origen ésta pase antes por la máquina intrusa. Así mismo, ARP es utilizado para enviar respuestas falsas aún si una solicitud no ha sido enviada, también se pueden enviar continuamente mensajes ARP buscando con ello mantener los cachés actualizados con información errónea, de esta forma el intruso le crea alias a las interfaces de las máquinas contra las cuales va a realizar un ataque. 2.1.2 Spoofing RARP RARP al igual que ARP no provee mecanismos de autentificación, por lo que un intruso puede enviar solicitudes falsas a un servidor real. Para hacer esto el intruso puede asignar la dirección IP de una máquina existente a una estación de trabajo impidiendo el tráfico hacía la máquina víctima. 2.1.3 Spoofing ICMP Los mensajes ICMP de cambio de ruta, se pueden utilizar para llevar a cabo un ataque de este tipo que consiste en que la máquina intrusa le envía a la máquina origen un mensaje indicándole que debe cambiar la dirección del router a donde envía los datagramas por la dirección de la máquina intrusa. De esta forma se crea un mecanismo de comunicación similar al descrito en Spoofing ARP. 2.1.4 Spoofing a servicios El servidor DNS puede ser atacado por un spoofing para aceptar y usar información incorrecta. Lo que se realiza es inyectar información falsificada en el caché de dicho servidor, y los usuarios del servidor pueden dirigirse a sitios erróneos. Otro servicio básico que puede ser atacado por medio de spoofing es el SMTP, aquí lo que se pretende es engañar diciendo que pertenecemos a un servidor, y de esta manera enviar un 2 Clave: 17GGC82 Sistemas Computacionales SOMI XVII CONGRESO NACIONAL DE INSTRUMENTACION mensaje con una dirección de correo falsa, a este hecho se le conoce como mail relaying. Este tipo de ataque es frecuentemente utilizado para el envío de correos basura, es decir, spam. Los dos ataques a servicios descritos anteriormente se encuentran ampliamente documentados en [1]. 2.2 Ataque Smurf El ataque smurf consiste en enviar paquetes ICMP de solicitud de eco con una falsa dirección de origen (IP de la víctima) a una dirección de difusión (broadcast). De esta forma esta solicitud llegará a muchas máquinas, cada una de las cuales enviarán sus paquetes de respuesta de eco a la dirección origen de la petición (cuyos datos estaban falseados y apuntan a la víctima). El resultado de este ataque afecta a la red intermediaria, por donde pasan los paquetes IP, y a la máquina víctima, la cual se ve inundada de paquetes IP, dando como resultado una saturación en el enlace. 2.3 Ataque DoS Un ataque de negación de servicios (DoS) provoca que algún recurso esté demasiado ocupado para responder solicitudes legítimas o para negar el acceso a los usuarios válidos de una determinada máquina. A partir de un ataque smurf se puede llegar a este tipo de categoría de ataque. El ataque Teardrop se encuentran en esta categoría, este ataque consiste en enviar paquetes fragmentados hacía una máquina destino con la opción de reensamblarlo al final, sólo que cuando la máquina intenta llevar a cabo esta tarea se da cuenta que los fragmentos se traslapan entre sí, es decir, hay regiones de datos comunes en dos paquetes distintos provocando que la máquina deje de funcionar. Otro tipo de ataque DoS es el llamado Land, el cual consiste en mandar a una máquina y puerto especifico (de la víctima) un paquete con el bit SYN activo y con dirección y puerto fuente también de la máquina víctima, es decir, como si la máquina víctima quisiera realizar una conexión a ella misma. Esto provoca que la máquina víctima deje de funcionar en la mayoría de los casos o en otros que la carga del CPU alcance valores muy altos. 2.4 Ataque Sniffing El objetivo de ataque sniffing es obtener e interpretar las tramas que circulan por un fragmento de red, extraer a partir de ellas los datos y opcionalmente almacenar parte, o la totalidad de dichos datos. A partir de este tipo de ataque se construyeron los visualizadores de paquetes para monitorear y controlar las acciones de los usuarios. Los ataques sniffing se basan en colocar la tarjeta de red en modo promiscuo. Este modo permite a la tarjeta recibir y procesar todos los paquetes que pasan por su red local en lugar de atender solamente a los paquetes destinados a su dirección física y a transmisiones broadcast, como sucedería por defecto. 3 Clave: 17GGC82 Sistemas Computacionales SOMI XVII CONGRESO NACIONAL DE INSTRUMENTACION En el sistema operativo UNIX, el modo promiscuo se puede colocar por medio de mecanismos que brinda el sistema, tales como el filtrado de paquetes BSD (BPF) y el network interface tap (NIT). Además de los mecanismos que presenta cada sistema se dispone de un medio portable para establecer este modo. Este medio consiste en modificar las banderas de la interfaz de red por medio de la manipulación de sockets. Hay que hacer notar que para la manipulación de los mecanismos del sistema y la programación con sockets se debe tener privilegios de superusuario. Por esta y muchas más razones se debe tener cuidado de restringir la entrada al sistema como superusuario, por que pueden colocar programas sniffers (visualizadores de paquetes) que realizan este ataque. Si se sospecha que existe un programa de este tipo ejecutándose en el sistema se puede recurrir a los comandos ifconfig y netstat para checar el modo de funcionamiento de la interfaz, o si se quiere checar las máquinas de la red desde el servidor se debe utilizar o programar una herramienta que envíe paquetes de solicitud ARP con una dirección IP no válida en la red, y de esta manera provocar que la máquina que esta ejecutando un sniffer responda a la solicitud. 3. VISUALIZADORES DE PAQUETES IPv4/IPv6 IMPLEMENTADOS Los visualizadores de paquetes pueden ser herramientas de gran utilidad para un administrador de red, dado que le ayudan a detectar problemas en su red y posibles ocurrencias de ataques, tales como: Spoofing ARP, Spoofing RARP, Spoofing ICMP, Spoofing al servicio DNS, Smurf, y DoS. El software desarrollado (llamado sistema IPLook), el cual se ejecuta bajo el sistema Linux, esta compuesto de un conjunto de visualizadores encargados de observar y almacenar el tráfico de un determinado tipo de paquete, es decir, IP, TCP, UDP, ICMP, ARP, RARP e IPv6. Con la información recolectada y teniendo en cuenta los tipos de ataques que se pueden presentar, el administrador puede tomar alguna decisión para proteger a su red. En la figura 1 se muestra como esta formado el software desarrollado. Figura 1. Módulos del sistema implementado. 4 Clave: 17GGC82 Sistemas Computacionales SOMI XVII CONGRESO NACIONAL DE INSTRUMENTACION Los visualizadores que trabajan con los protocolos IPv4 fueron programados utilizando el siguiente algoritmo. Algoritmo para captura de paquetes IPv4 1. Inicio 2. Abrir un socket de la familia AF_INET del tipo SOCK_PACKET con Protocolo: 0x800 (para IP), 0x0806 (para ARP), 0x8035 (para RARP) o ETH_P_ALL (para capturar todos los paquetes encapsulado en el frame Ethernet) según se requiera. banderas_dispos = socket(AF_INET, SOCK_DGRAM, Protocolo) 3. Hacer una operación ioctl sobre el socket para obtener la configuración de las interfaces de red del sistema. struct ifconf ifc; ioctl(banderas_dispos, SIOCGIFCONF, (char *)&ifc) 4. Obtener las banderas de un dispositivo realizando una operación ioctl sobre el socket incluyendo como petición SIOCGIFFLAGS y como tercer parámetro un apuntador a una estructura ifreq cuyo campo ifr_name contiene un nombre de la interfaz de red válida del sistema. ioctl(banderas_dispos, SIOCGIFFLAGS, (char *)&ifreq) Después de la llamada a la función, la estructura ifreq apuntada contiene en su campo ifr_flags las banderas de la interfaz cuyo nombre se utiliza como parámetro. 5. Modificar las banderas ifreq.ifr_flags|=IFF_PROMISC; ioctl (banderas_dispos, SIOCSIFLAGS, &ifreq) 6. Realizar una operación de lectura sobre el dispositivo para capturar los paquetes y seleccionar lo que se necesite. 7. Presentar los datos seleccionados en la interfaz creada 8. Fin A continuación se muestran las interfaces de algunos módulos implementados. En la figura 2 se muestra la interfaz principal del sistema en la cual el usuario puede seleccionar las opciones por medio de un menú o por medio del icono asociado con la captura de un determinado tipo de paquete, por ejemplo si el usuario selecciona el icono TCP o se selecciona Capturar y después TCP, se capturan los paquetes TCP como lo muestra la figura 3. En la figura 4 se observan las gráficas de los mensajes ICMP capturados. El usuario también puede visualizar los protocolos y servicios utilizados en su red, por medio de la opción Graficar, como lo muestra la figura 5 y la figura 6, u observar las páginas visitadas como lo muestra la figura 7. 5 Clave: 17GGC82 Sistemas Computacionales SOMI XVII CONGRESO NACIONAL DE INSTRUMENTACION Figura 2. Pantalla principal del sistema. Figura 3. Pantalla del módulo TCP. 6 Clave: 17GGC82 Sistemas Computacionales SOMI XVII CONGRESO NACIONAL DE INSTRUMENTACION Figura 4. Pantalla del módulo ICMP. Figura 5. Pantalla del módulo Servicios. 7 Clave: 17GGC82 Sistemas Computacionales SOMI XVII CONGRESO NACIONAL DE INSTRUMENTACION Figura 6. Pantalla del módulo Encapsulados. Figura 7. Pantalla del módulo Páginas. En el desarrollo del módulo IPv6 se realizó la reconfiguración del kernel del sistema operativo para que este pudiera aceptar los paquetes de tipo IPv6, y se añadió al sistema los paquetes para realizar comunicación entre máquinas. Una vez realizado lo anterior se implemento el siguiente algoritmo para capturar los paquetes IPv6. Cabe hacer notar que en este caso se utilizó la biblioteca libpcap, la cual trabaja con el filtro BPF. 8 Clave: 17GGC82 Sistemas Computacionales SOMI XVII CONGRESO NACIONAL DE INSTRUMENTACION Algoritmo para captura de paquetes IPv6 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Inicio Identificar el dispositivo para la captura (función pcap_lookupdev) Abrir el dispositivo para escuchar paquetes (función pcap_open_live) Crear archivo para almacenar datos capturados Abrir el archivo para vaciar los paquetes capturados (función pcap_dump_open) Obtener máscara de red (función pcap_lookupnet) Colocar el filtro para IPv6 (función pcap_compile y función pcap_set_filter) Iniciar ciclo de captura (función pcap_loop) 8.1 Capturar paquetes y almacenarlo en el archivo (función pcap_dump) Liberar recursos (función pcap_close) Abrir archivo de captura (función pcap_open_offline) Iniciar ciclo de recuperación 11.1 Extraer paquete (función pcap_next) 11.2 Almacenar en la estructura Ethernet y obtener los datos 11.3 Almacenar en la estructura IPv6 y obtener datos 11.3.1 Si encabezado siguiente es 58 (ICMPv6) entonces 11.3.1.1 Almacenar en la estructura ICMPv6 y obtener datos 11.3.2 Sino 11.3.2.1 Saltar el encabezado 11.4 Presentar los datos obtenidos en la interfaz creada Liberar recursos (función pcap_close) Fin El análisis de los paquetes IPv6 se muestran en la figura 8, lo primero que realiza este módulo es la captura de una determinada cantidad de paquetes y después los analiza. Figura 8. Pantalla del módulo IPv6 (fase de presentación). Como se puede observar el sistema muestra la información que transportan los paquetes que viajan por nuestra red, y teniendo en cuenta como trabajan algunos tipos de ataques, el 9 Clave: 17GGC82 Sistemas Computacionales SOMI XVII CONGRESO NACIONAL DE INSTRUMENTACION administrador puede tomar alguna medida de protección para su red. Lo que nosotros proponemos como protección es la utilización de un router que permita el filtrado de paquetes por medio de listas de acceso, no quiere decir que sea la única o la mejor protección, sólo es una posible solución. 4. LISTAS DE ACCESO DE UN ROUTER En el mercado existen diferentes productos que permiten realizar filtrado de paquetes, aquí sólo hablaremos acerca del router CISCO. Los routers CISCO tienen dos tipos básicos de listas de acceso para realizar el filtrado de paquetes: las listas de acceso estándar y las listas de acceso extendidas. Una lista de acceso estándar permite el filtrado de paquetes en base a la dirección fuente, mientras que las listas de acceso extendidas se basan en la dirección fuente, la dirección destino, protocolo y puerto utilizado [2] [3]. El formato general para las listas de acceso estándar con el protocolo IP es el siguiente: access-list [número] [deny | permit] [fuente] [máscara] [log] El campo número denota el número de la lista de acceso, este número puede estar entre 1 y 99. La barra (|) denota que se debe de elegir la palabra clave deny o permit, permit permite que los paquetes puedan viajar a través de la interfaz, mientras que la palabra clave deny no les permite el paso. El campo fuente especifica la dirección IP de la máquina o la red desde la cual el paquete es enviado. El campo máscara es aplicado a la fuente. El formato general de las listas de acceso extendidas es: access-list [número] [deny | permit] [protocolo|clave-protocolo] [fuente] [máscara-fuente] [puerto fuente] [destino] [máscara-destino] [puerto destino] [log] [opciones] Similar a las listas de acceso estándar, el número de la lista se utiliza para identificar la lista extendida, el número en este caso debe ser un entero entre 100 y 199. El uso de deny o permit especifica si el paquete IP debe ser bloqueado o permitido. El protocolo especifica el protocolo a ser filtrado, tal como IP, TCP, UDP, ICMP. La dirección fuente y la máscara tiene la misma función que en una lista de acceso estándar, en esta lista también se puede utilizar los términos host y any. El puerto fuente puede ser especificado en forma numérica o por medio de un mnemónico, por ejemplo, se puede usar el número 80 o http para especificar el protocolo de transmisión de hipertexto. Para TCP o UDP también se puede usar los operadores < (lt), >(gt), =(eq) y ≠(neq). La dirección destino y máscara destino tiene la misma estructura que la dirección fuente y máscara fuente, aquí también se puede utilizar los términos any y host. El puerto destino puede ser especificado igual que el puerto fuente, ya sea por medio de un número, un mnemónico, o un operador con un número o con un mnemónico para especificar un rango. Cabe hacer notar que el orden de las listas de acceso es importante, no se pueden reordenar o borrar una sola declaración de la lista en el router, para realizar esto es mejor que se creen todos los criterios en un servidor TFTP, y después cargarlos en el router [4]. Para esto, los pasos a seguir son: 1. Escribir las listas de acceso (en este punto, proponemos la utilización del analizador sintáctico construido) 2. Entrar al router con privilegios. 3. Usar el comando copy tftp: archivo system:runnig-config, donde archivo es el nombre del archivo donde se almacenaron las listas de acceso. 10 Clave: 17GGC82 Sistemas Computacionales SOMI XVII CONGRESO NACIONAL DE INSTRUMENTACION 4. Finalmente ejecutar el comando copy system:runnig-config nvram:startup-config para almacenar las listas de acceso en el router. 4.1 Analizador sintáctico implementado Teniendo en cuenta la sintaxis de las listas de acceso de un router, se construyo un analizador sintáctico, el cual además de analizar la correcta escritura de las listas, le brinda al usuario la facilidad de escritura de dichas listas por medio de su interfaz. Para llevar a cabo la construcción del analizador sintáctico se utilizó la herramienta flex para realizar la fase de análisis léxico y la herramienta yacc para la fase de análisis sintáctico. Las interfaces para la creación de las listas de acceso se muestra en la figura 9 y figura 10. Este módulo además de guiar al usuario en la escritura de las reglas de acceso, almacena en un archivo las definiciones establecidas, que posteriormente son revisadas, indicándole al usuario la ocurrencia de errores, y de esta manera evitarlos antes del envío de las reglas al router. Figura 9. Pantalla de creación de listas de acceso estándar. Figura 10. Pantalla de creación de listas de acceso extendidas. 11 Clave: 17GGC82 Sistemas Computacionales SOMI XVII CONGRESO NACIONAL DE INSTRUMENTACION Utilizando el mecanismo de filtrado de paquetes lo que se recomienda bloquear es lo siguiente: • • • • • Direcciones de difusión, las cuales son empleadas por los ataques smurf. Paquetes de entrada con direcciones fuentes correspondientes a direcciones internas (tipo de ataques spoofing). Paquetes de entrada de direcciones no confiables. Paquetes con direcciones loopback. Paquetes SMTP que intenten entrar a un servidor diferente al destinado como servidor de correos. 5. CONCLUSIONES Con la información recolectada de los paquetes que viajan por la red, se construyeron: estadísticas de los servicios de red utilizados, estadísticas de los paquetes encapsulados dentro de las tramas Ethernet, estadísticas de los servidores más utilizados, reporte de conexiones, reporte de las páginas visitadas, estadísticas de los mensajes ICMP, ARP, y RARP, reportes y análisis del tráfico IPv6, con todo esto se tiene la posibilidad de detectar fallos de seguridad y permitir la recolección de pruebas suficientes y concisas de las actividades de los usuarios. El analizador de listas de acceso construido ayuda al administrador a crear el conjunto de reglas que se pueden utilizar para restringir la entrada o salida de información de un dominio o dirección de Internet, evitando así posibles ataques. La etapa que se encuentra trabajando actualmente es la construcción de un simulador de listas de acceso que trabajará con los visualizadores. El objetivo consiste en simular las acciones de las listas de acceso (previamente revisadas por el analizador de listas) antes de enviarlas al router, para esto los visualizadores se encargaran de proporcionar al simulador los diferentes campos que se necesitan para el chequeo de dichas listas. REFERENCIAS 1. 2. 3. 4. W. Baluja, 1er Congreso Iberoamericano de Seguridad Informática, “Los ataques spoofing. Estrategia general para combatirlos”, (Ed. ITM, Michoacán, Méx.), (2002). G. Held, K. Hundley, CISCO. Access Lists, (Ed. McGraw-Hill, USA), 35-54, (2000). J. Habraken, Practical. Cisco Routers, (Ed. Que, USA), 243-258, (1999). Cisco Documentation, CISCO IOS 12.0. Network Security, (Ed. Cisco Press, USA), 302, (1999). 12 Clave: 17GGC82 Sistemas Computacionales