Departamento de Tecnologías de la Información y la Comunicación INGENIERÍA TÉNICA EN INFORMÁTICA DE GESTIÓN Sistema de monitorización de redes Wi-Fi Autor: Rubén Hortas Astariz Director: Antonino Santos del Riego Tutor: Francisco Javier Nóvoa de Manuel A Coruña, a de de 2013 Miembros del tribunal Fecha de lectura y defensa Calificación 1/117 I. Agradecimientos A mi familia, por su apoyo, paciencia y comprensión. Sobretodo, gracias a mis padres por todos los esfuerzos realizados para que yo pueda haber llegado hasta aquí. A mis amigos, en especial: Al osito marrón y al osito hippie, por esos tiempos en aquel piso informático de compañerismo, risas, inventos, experimentos y “buenos días en broadcast”. A Guti, Fernando y Rosa, Marcos y Vane, por todo el apoyo y por todos esos buenos momentos. A Óskar, por toda su ayuda durante estos años, por esa gran amistad y por formar un gran equipo, tanto en lo profesional como en lo personal. A Alejandro “Chucu”, por esa gran amistad y por compartir todo ese conocimiento sobre python. A los compañeros de la FIC. Por el compañerismo durante todo el tiempo que pasamos juntos. A los compañeros de wikifreaks (n1ce, ctRl, Sharek, Grey, ...) Por tantas horas juntos. Sigamos aprendiendo unos de otros y experimentando entre todos. Algún proyecto será el bueno. A mis profesores de la facultad, sobretodo, a Nino y Fran por el esfuerzo, la dedicación, la ayuda y todo el apoyo que han hecho posible este proyecto. Gracias a todos por el apoyo y la confianza. II. Resumen El objetivo de este proyecto es realizar, mediante la metodología de proceso unificado de desarrollo software, un sistema que registre y analice información sobre las redes inalámbricas Wi-Fi al alcance en cada momento y ubicación, con el fin de detectar posibles riesgos o amenazas relativas a la seguridad de las mismas. Durante la recogida de información, el sistema registrará datos sobre las redes Wi-Fi al alcance y los dispositivos conectados a las mismas. La información recogida se podrá analizar en tiempo real y/o de forma retrospectiva. A través de estos análisis se podrán detectar amenazas o comportamientos peligrosos, como por ejemplo intrusos o falsos puntos de acceso. El sistema automatizará todas las labores necesarias para el registro y el análisis de la actividad detectada en las redes LAN inalámbricas, con el fin de simplificar su uso y hacerlo accesible a cualquier usuario. III. Palabras clave Seguridad, redes, inalámbricas, Wi-Fi, WIFI, historial, monitorización, python. Índice Índice 1. Introducción.....................................................................................10 1.1 Organización del proyecto.............................................................................20 1.1.1 Memoria................................................................................................. 20 1.1.1 Herramientas.........................................................................................22 1.2 Objetivos del proyecto...................................................................................29 2. Metodología......................................................................................31 2.1 Especificación de requisitos...........................................................................31 2.1.1 Requisitos funcionales............................................................................32 2.1.2 Requisitos no funcionales.......................................................................33 2.2 Análisis de requisitos.....................................................................................34 2.2.1 Casos de uso.......................................................................................... 34 2.2.2 Diagramas de Casos de uso...................................................................38 2.2.3 Modelo de dominio.................................................................................38 2.2.4 Diagramas de secuencia del sistema (DSS)...........................................46 2.2.5 Arquitectura lógica.................................................................................49 2.2.6 Diagrama de clases global.....................................................................51 2.2.7 Análisis de los subsistemas....................................................................52 3. Funcionalidades................................................................................63 4. Pruebas realizadas............................................................................65 4.1 Pruebas unitarias........................................................................................... 65 4.1.1 Test airodump......................................................................................... 65 4.1.2 Test OUI..................................................................................................66 4.1.3 Test parse_log........................................................................................66 4.2 Conclusiones.................................................................................................67 4.3 Pruebas de análisis........................................................................................68 4.3.1 Escenario predeterminado.....................................................................68 4.3.2 Resultados..............................................................................................70 4.4 Pruebas de rendimiento.................................................................................72 4.4.1 Resultados..............................................................................................73 4.4.2 Notas...................................................................................................... 73 5. Planificación y evaluación de costes...................................................74 8/117 6. Conclusiones.....................................................................................76 6.1 Objetivos....................................................................................................... 76 6.2 Cualidades del sistema..................................................................................77 7. Líneas futuras...................................................................................78 8. Bibliografía.......................................................................................79 8.1 Monografías................................................................................................... 79 8.2 Textos electrónicos........................................................................................80 9. Glosario............................................................................................ 82 10. Apéndices.......................................................................................86 10.1 Índice de figuras.......................................................................................... 86 10.2 Índice de tablas...........................................................................................87 10.3 Pruebas unitarias (código fuente y resultados)............................................88 10.3.1 Test airodump.......................................................................................88 10.3.2 Test OUI................................................................................................ 91 10.3.3 Test parse_log......................................................................................93 10.4 Manual de usuario.....................................................................................108 10.4.1 Dependencias....................................................................................108 10.4.2 Utilizando el sistema..........................................................................108 10.5 Notas sobre la terminología utilizada.........................................................117 9/117 1. Introducción 1. Introducción Las redes de área local inalámbricas se basan en un conjunto de conceptos, estándares y protocolos relativamente nuevos, puesto que se empezaron a implantar de forma masiva en los años 1990. Sin embargo, la primera transmisión inalámbrica tuvo lugar en 1870. Un músico y astrónomo, Sir William Herschel (1738-1822), descubrió que existía la luz infrarroja y que estaba más allá de la visibilidad del ojo humano. El descubrimiento de la luz infrarroja abrió el camino a teoría de ondas electromagnéticas, que fue explorada en profundidad por James Maxwell (1831-1879). La mayoría de los descubrimientos de Maxwell relacionados con el electromagnetismo estaban basados en las investigaciones de Michael Faraday (1791-1867) y Andre-Marie Ampere (17751836). Heinrich Hertz (1857-1894), basándose en los descubrimientos hechos por Maxwell, demostró que las ondas electromagnéticas existían, viajaban a la velocidad de la luz y que la electricidad podía ser transmitida por ellas. Hertz fue el primer investigador que creó dispositivos que emitían ondas radioeléctricas y también dispositivos que permitían detectarlas. Durante el siglo XX, las comunicaciones inalámbricas se transformaron en digitales y las soluciones propietarias evolucionaron para transmitir información a través de protocolos estandarizados. Además, a partir de los años 1980 las redes de área local se han ido desplegando hasta ser un elemento imprescindible de cualquier organización o incluso de cualquier hogar. 10/117 1. Introducción La evolución de las redes de área local y de la tecnología de transmisión inalámbrica, dio lugar a las redes de área local inalámbricas (Wireless LAN o WLAN1). En el año 1997, IEEE2 definió el primer estándar que hacía referencia a las WLAN, 802.11, describiendo como enviar una señal sobre la banda ISM3 de 2.4GHz para transmitir información digital. La mayoría de los protocolos que usamos hoy en día en las redes LAN4 inalámbricas fueron definidos después de 1997. El campo de las redes inalámbricas evoluciona cada día, pero su terminología y sus conceptos fundamentales están bien establecidos. Protocolos 802.11 La primera versión del protocolo 802.11 fue publicada en 1997. Especifica dos velocidades de transmisión teóricas de 1 y 2 megabits por segundo (Mbits/s) que se transmiten por señales infrarrojas. Con el paso de los años, se le han ido añadiendo correcciones. Cada corrección al estándar contiene, en su nomenclatura, “802.11” y una letra (por ejemplo 802.11i). El estándar 802.11 ha sido revisado en 2007 para integrar todas las correcciones publicadas los años anteriores (integrando 802.11a,b,d,e,g,h,i y j). Esta versión acumulativa del estándar es conocida como 802.11-2007. En 2011 surge una nueva revisión (integrando las correcciones publicadas entre 2007 y 2011, llamadas 802.11k,r,y,w,n,p,z,v,u y s). Esta nueva versión del estándar es conocida como 802.11-2012. Entre los protocolos de la rama 802.x destacan por su importancia 802.11b, 802.11g, 802.11a y 802.11n. 1 WLAN: Red inalámbrica de área local. De sus siglas en inglés, Wireless Local Area Network. 2 IEEE: Instituto de Ingenieros Eléctricos y Electrónicos. De sus siglas en inglés, Institute of Electrical and Electronics Engineers. Asociación técnico profesional mundial dedicada a la estandarización. 3 ISM: Idustrial, Científica y Médica. De sus siglas en inglés, Industrial, Scientific and Medical. Bandas reservadas internacionalmente para uso no comercial de radiofrecuencia en áreas industriales, científicas y médicas. 4 LAN: Red local. De sus siglas en inglés, Local Area Network. 11/117 1. Introducción • 802.11b La revisión 802.11b fue publicada en 1999, corrigiendo varias debilidades del protocolo 802.11 original, como la falta de interoperabilidad entre equipos de diferentes marcas. 802.11b describe una velocidad de transmisión entre 5.5y 11 Mbits/s. Debido a la espacio ocupado por la codificación del protocolo CSMA/CA5, en la práctica, la velocidad máxima de transmisión con este estándar es de, aproximadamente, 5.9 Mbits/s sobre TCP6 y 7.1 Mbits/s sobre UDP7. 802.11b fue el primer estándar de la familia 802.11x en alcanzar amplia aceptación entre los consumidores. • 802.11a La revisión 802.11a fue aprobada en 1999. El estándar 802.11a utiliza el mismo juego de protocolos de base que el estándar original, lo que lo hace incompatible con 802.11, 802.11b y 802.11g, evitando al mismo tiempo las interferencias con estos dispositivos, además de evitar las interferencias con microondas, dispositivos bluetooth8 y teléfonos inalámbricos. 802.11a opera en la banda de 5 GHz y definió los requisitos para la utilización de un sistema de multiplexación por división de frecuencia ortogonal (OFDM, orthogonal frequency-division multiplexing). 802.11a posee una velocidad máxima teórica de 54 Mbit/s. • 802.11g La revisión 802.11g fue publicada en 2003, introduciendo OFMD a la banda de 2.4Ghz y permitiendo ratios de transmisión efectivos de hasta 54 Mbits/s. 5 CSMA/CA: Acceso Múltiple por Detección de Portadora / Anticolisión. De sus siglas en Inglés: Carrier Sense Multiple Access/Collision Avoidance. Protocolo para transmisiones en redes 802.11. 6 TCP: Protocolo de Transmisión de Control. De sus siglas en inglés, Transmission Control Protocol. Es uno de los protocolos fundamentales en internet. 7 UDP: Protocolo de Datagrama de Usuario. De sus siglas en inglés, User Datagram Protocol. Es un protocolo del nivel de transporte de red. 8 Bluetooth: Especificación industrial para Redes Inalámbricas de Área Personal (WPAN). 12/117 1. Introducción • 802.11n 802.11n es una revisión del estándar 802.11-2007 aprobada en 2009. 802.11n se diseñó teniendo como objetivo incrementar la velocidad más allá de 54 Mbits/s. 802.11n incorpora tres técnicas nuevas, la mayor parte de las cuales pueden ser implementadas para mejorar la revisiones 802.11g o 802.11a: 1. Agregación de canales: 801.11n permite agregar varios canales creando un canal mayor. Mediante esta agregación se puede llegar a crear un canal con una velocidad de transmisión de 119 Mbits/s. 2. Mecanismos de eficiencia MAC9: Por ejemplo reduciendo a la mitad el silencio entre dos símbolos en una onda, de 800 nanosegundos a 400 nanosegundos. Este proceso puede incrementar la velocidad un 11%. 3. MIMO (Multiple In Multiple Out o Múltiple Entrada Múltiple Salida): Las estaciones 802.11n pueden tener varias redes en el mismo canal y usarlas al mismo tiempo. Debido a que la información se transmite por el aire, es obvio que las redes inalámbricas pueden ser más vulnerables que las redes cableadas, puesto que la señal física que transmite la información es difícil de contener. Esto supone una gran preocupación a la hora de desplegar una red inalámbrica. La facilidad para acceder a la señal de transmisión provoca que se puedan llevar a cabo ataques de acceso, de reconocimiento, de Denegación de Servicio (DoS), de intermediario (man-in-the middle), etc. 9 MAC: Control de Acceso al Medio. De sus siglas en inglés, Media Access Control. Identificador que corresponde de forma única a una tarjeta o dispositivo de red. 13/117 1. Introducción Tipos de redes LAN inalámbricas: Ad-hoc: Cuando dos computadoras se quieren comunicar directamente la una con la otra, lo hacen creando una red ad-hoc. Estas redes no requieren un dispositivo central para permitirles comunicarse. Un dispositivo establece un nombre de grupo y los parámetros de radio, y el otro se conecta. Este despliegue se llama Basic Service Set (Conjunto de Servicios Básicos o BSS), y define el área en el que un dispositivo es accesible. Como no se necesita un dispositivo central para comunicarse, se llama Independent Basic Service Set (Conjunto de Servicios Básicos Independiente o IBSS). Ilustración 1: Red Ad-Hoc Modo infraestructura: En las redes inalámbricas, un punto de acceso actúa como punto de conexión para los clientes. Un punto de acceso sólo es un tipo de estación inalámbrica a la que se asocian los clientes. El área de cobertura del punto de acceso se llama Basic Service Area (Área de Servicio Básico o BSA), o celda inalámbrica. 14/117 1. Introducción Dependiendo del número de punto de accesos en una red inalámbrica, podemos distinguir dos tipos: 1. Basic Service Area: Cuando sólo existe un punto de acceso el área de cobertura se llama Basic Service Area (Área de Servicio Básico o BSA). Ilustración 2: Basic Service Area (BSA) 2. Extended Service Area: Cuando hay más de un punto de acceso conectado a un sistema de distribución común, el área de cobertura se llama Extended Service Area (Área de Servicio Extendido o ESA). Ilustración 3: Extended Service Area (ESA) 15/117 1. Introducción Tipos de seguridad en la las redes LAN inalámbricas • Redes abiertas: Una red abierta no dispone de ningún tipo de cifrado ni control de acceso, permite conectarse a cualquier dispositivo. • Redes abiertas, pero con control de acceso (utilización la técnica de “portal cautivo”): Un portal cautivo utiliza la autenticación basada en un sitio web seguro para permitir a un dispositivo conectarse a la WLAN. • Redes con seguridad débil • Redes con seguridad WEP Las LAN inalámbricas con seguridad WEP (Wired Equivalent Privacy), no autentican a los usuarios, simplemente verifican que tienen una clave. • Redes con filtrado de direcciones MAC El filtrado de direcciones MAC (Media Access Control) es un mecanismo simple de autenticar el dispositivo que se está conectando. El filtrado MAC define qué direcciones MAC tienen permiso para acceder a la red. El peligro de utilizar este sistema de seguridad es que las direcciones MAC pueden ser falsificadas. 16/117 1. Introducción • Redes con seguridad WPA WPA (Wi-Fi Protected Access) está basado en el borrador de la revisión 802.11i versión 3. Fue presentado en 2003 como reemplazo a WEP. WPA utiliza Temporal Key Integration Protocol (Protocolo de integración de clave temporal o TKIP) para cambiar automáticamente las claves. Aunque no es obligatorio, WPA admite la utilización del esquema de cifrado Advanced Encryption Standard (AES). • Redes con seguridad WPA2 o IEEE 802.11i WPA2 (Wi-Fi Protected Access 2), es el segundo intento de WPA.WPA fue diseñado basándose en el borrador de la revisión 802.11i, pero fue publicado en 2003, mientras que 802.11i fue aprobado en 2004. Cuando 802.11i fue aprobado, se había ampliado su soporte para métodos 802.11x y de cifrado. En este momento se publica WPA2 para ser compatible con el estándar 802.11i, siendo, por consecuencia, un método más seguro que WPA. Descripción del protocolo de acceso al medio en redes Wi-Fi Para que una estación inalámbrica (o dispositivo inalámbrico) pueda conectarse a una red debe configurarse con el SSID10 correcto. Para que la estación pueda averiguar los SSIDs disponibles en un momento dado, los puntos de acceso difunden periódicamente unos mensajes en broadcast11 llamados beacon (balizas), en los que indican el SSID de la red a la que pertenecen. Como medida de seguridad, un punto de acceso puede configurarse para que no envíe beacons o para que los envíe ocultando su SSID. Sin embargo, los SSID no viajan cifrados, por lo que el SSID puede averiguarse capturando un mensaje de otra estación. 10 SSID: Identificador de Conjunto de Servicios. De sus siglas en inglés, Service Set IDentifier. Nombre incluido en todos los paquetes de una red inalámbrica para identificarlos como parte de la misma. 11 Broadcast: Forma de transmisión de información donde un nodo emisor envía información a una multitud de nodos receptores de manera simultánea, sin necesidad de reproducir la misma transmisión nodo por nodo. 17/117 1. Introducción Además de recibir beacons, las estaciones pueden enviar mensajes probe requests (solicitudes de sondeo) buscando puntos de acceso. Un punto de acceso está obligado a responder si el probe request indicaba el SSID del punto de acceso o un SSID de 0 bytes (SSID broadcast). Tanto los beacon como los probe response (respuestas a las solicitudes de sondeo) contienen información del punto de acceso (BSSID, SSID, velocidades de transmisión soportadas, protocolos de cifrado soportados...). Cuando un punto de acceso recibe una trama del DS12 (Distribution System o Sistema de Distribución), mira si el destino está en su lista de direcciones MAC asociadas. Si lo está reenvía la trama, si no lo está la descarta. Una estación no puede estar asociada a más de un punto de acceso a la vez por cada interfaz de red que posea. Si una estación se se aleja de un punto de acceso y se acerca a otro punto de acceso con el mismo SSID (pertenecen al mismo ESS), primero deberá desasociarse del primer punto de acceso y, después, asociarse al segundo. La autenticación se realiza antes de asociarse y no se realiza al reasociarse. Capturando y analizando paquetes de red, se puede averiguar qué puntos de acceso hay instalados en una zona y qué dispositivos tienen asociados. Amenazas en redes LAN inalámbricas • Redes Ad-hoc: Un atacante puede crear una red ad-hoc con un cliente legítimo, robar información, e incluso utilizarla como medio para atacar la red utilizándolo para acceder a la red cableada segura. 12 Distribution System (DS o Sistema de Distribución): Medio de comunicación entre los puntos de acceso. 18/117 1. Introducción • Puntos de acceso falsos: Un punto de acceso falso no es parte de la infraestructura de la red. Podría ser un punto de acceso traído de casa o un punto de acceso que está en una red adyacente. Un punto de acceso falso no siempre es malo. Podría ser un punto de acceso que formase parte del dominio de la red y estuviese trabajando en modo autónomo. Parte del trabajo de un administrador es determinar si se supone que el punto de acceso debe estar ahí. • Clientes falsos: Si un cliente se conecta a un punto de acceso falso, debería ser considerado como “cliente falso”. La razón es que los puntos de acceso falsos, normalmente, son instalados con configuraciones por defecto, esto implica que cualquier cliente conectado evita cualquier política de seguridad. • Desvinculación de clientes: Cuando un cliente se conecta a un punto de acceso, las utilidades del sistema operativo normalmente permiten al cliente guardar el Service Set Identifier (SSID). En el futuro, cuando ese SSID es visto de nuevo, el cliente puede crear una conexión automáticamente. Ha una posibilidad de que el cliente sea consciente de la conexión. Si el SSID ha sido suplantado, el cliente podría conectarse a una red potencialmente insegura. Tipos de ataques a la red • Ataques de reconocimiento: Un atacante intenta conseguir información sobre la red. • Ataques de acceso: Un atacante intenta ganar acceso a los datos, dispositivos y/o a la red. 19/117 1. Introducción • Ataques de denegación de servicio: Un atacante intenta impedir a los usuarios legítimos que accedan a los servicios que necesitan. Aunque hay métodos de mitigación para prevenir estas amenazas y ataques, hay algunos que no son muy avanzados y están considerados débiles por los estándares de hoy día. Todo esto, sumado al constante desarrollo y mejora de métodos y herramientas diseñados para llevar a cabo estas amenazas y ataques, hace de la monitorización, el registro y el análisis de la información una tarea esencial para poder reaccionar de forma rápida y eficaz ante los riesgos. 1.1 Organización del proyecto 1.1.1 Memoria 1. Introducción Se describe la motivación y se profundiza en los objetivos. Se exponen los fundamentos teóricos en los que se basa el proyecto y se detallan los conceptos necesarios para dar una visión profunda del entorno. Para finalizar, se describe en qué consiste y qué hace el proyecto y se justifica la elección de las herramientas que se han utilizado en el desarrollo de este proyecto. 2. Metodología En este capítulo se detallan los aspectos metodológicos relativos al análisis, diseño y desarrollo basándose en paradigmas de Ingeniería del Software. Se detalla cómo se hizo el proyecto y los estándares metodológicos que se han seguido. 20/117 1. Introducción 3. Funcionalidades En este capítulo se explica cómo funciona la aplicación detalladamente a través de las funcionalidades o prestaciones fundamentales de la herramienta desarrollada. 4. Pruebas realizadas En este capítulo se detallan las distintas técnicas de pruebas realizadas para validar la efectividad de la herramienta desarrollada. 5. Planificación y evaluación de costes En este capítulo se plasman las distintas fases de elaboración del proyecto, incluyendo una evaluación de costes. 6. Conclusiones En este capítulo se revisan cada uno de los objetivos inicialmente planteados para contrastarlos con lo realizado. 7. Líneas futuras En este capítulo se mencionan algunas ampliaciones que se podrían incorporar al proyecto en desarrollos futuros. 8. Bibliografía En este capítulo se listan los documentos consultados durante la realización del proyecto. 9. Glosario Anexo que incluye los términos poco conocidos utilizado durante la realización del proyecto. 10. Apéndices Este capítulo incluye diversos índices (figuras, tablas, etc.) de elementos utilizados en la documentación del proyecto, y un manual de usuario de la aplicación desarrollada. Al final del capítulo se incluyen notas sobre la terminología utilizada. 21/117 1. Introducción 1.1.1 Herramientas 1. Suite Aircrack-ng La suite Aircrack-ng está compuesta por un conjunto de herramientas para auditar redes WiFi. De forma general, podemos dividir en tres categorías las herramientas que incluye aircrack-ng: • Recolección de información: airodump-ng • Ataques sobre la información: aircrack-ng • Aceleración de la obtención de información: aireplay-ng Aunque en la suite aircrack-ng se incluyen gran cantidad de herramientas útiles en estas y otras tareas, airodump-ng, aircrack-ng y aireplay-ng son las tres herramientas más destacadas y más conocidas. Para la realización de este proyecto se ha utilizado airodump-ng como herramienta para la recolección de información de redes WiFi, debido a su amplia difusión y a algunas características puntuales que presenta. Entre estas características destacan su flexibilidad de configuración y su capacidad para generar distintos tipos de ficheros de registro. 2. GNU/Linux GNU/Linux es uno de los términos empleados para referirse a la combinación del kernel Linux con el sistema GNU. Las razones por las que se ha seleccionado GNU/Linux como plataforma para el desarrollo de este proyecto son: • Coste: GNU/Linux es un sistema operativo ampliamente extendido y de distribución gratuita, por tanto accesible a cualquier persona que posea (o tenga acceso a) un computador. 22/117 1. Introducción Utilizar otros sistemas operativos supondría limitar el número de usuarios que podrían usar el proyecto. Los sistemas operativos privativos (como Windows o Mac OS X), requieren el pago de una licencia para obtener el derecho de uso. Otros sistemas, aún siendo gratuitos, son utilizados por un número considerablemente menor de personas. • Uso: A día de hoy, GNU/Linux es el sistema operativo más utilizado para llevar a cabo la realización de auditorías de seguridad en redes WiFi, habiendo disponibles específicamente preparadas para este propósito varias distribuciones13 (Bugtraq, Kali, WiFiSlax, Wifiway, etc.). • La elección de otro sistema operativo supondría una reducción importante del número de posibles usuarios de la aplicación, puesto que el proyecto sólo podría ser utilizado por aquellos usuarios con amplios conocimientos específicos sobre su sistema operativo. Usuarios con la capacidad de configurar su sistema operativo para este propósito. • Soporte de tarjetas inalámbricas: Al ser el sistema más utilizado para la realización de auditorías de redes inalámbricas, GNU/Linux se ha convertido en el sistema operativo que proporciona el soporte más amplio a tarjetas de conexión inalámbrica WiFi. 13 Distribución [GNU/Linux]: Distribución de software basada en el núcleo Linux que incluye determinados paquetes de software para satisfacer las necesidades de un grupo específico de usuarios. 23/117 1. Introducción La utilización de otros sistemas operativos supondría una reducción en el número de usuarios de la aplicación, puesto que, por ejemplo, para Windows, aircrack-ng (tecnología que usa este proyecto) retiró, oficialmente, el soporte para Windows en su versión 1.1. Otros sistemas como MAC OS X, utilizan controladores de software (drivers) cerrados para sus tarjetas inalámbricas, que no permiten (en un principio) la utilización de esta tarjetas para el propósito de este proyecto. Otros sistemas operativos, al ser utilizados por una cantidad menor de personas, presentan el problema de soportar una cantidad reducida de tarjetas inalámbricas WiFi. 3. Python 2 Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis muy limpia y que favorece un código fácilmente legible. Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico y es multiplataforma. Python es administrado por la Python Software Foundation14. Posee una licencia de código abierto, denominada Python Software Foundation License15. Las principales características por las que se ha elegido Python como el lenguaje de programación más adecuado para la realización de este proyecto son: • Costes: Es software de distribución gratuita. • Código abierto: Es software que podemos leer/examinar, modificar y distribuir gratuitamente. 14 Python Software Foundation: Organización sin ánimo de lucro que cuenta con los derechos de propiedad intelectual del lenguaje de programación Python. http://www.python.org/psf/ 15 Python Software Foundation License (PSFL): Licencia de software permisiva que cumple los requisitos OSI para ser declarada lincencia de software libre. http://docs.python.org/2/license.html 24/117 1. Introducción Además de la Python Software Foundation, los usuarios pueden adaptar el software a sus necesidades, informar y corregir sus errores, lo que resulta en una evolución, desarrollo e implementación de mejoras mucho más rápidas que las existentes en el desarrollo de software convencional o cerrado. • Sintaxis limpia: Python hace uso de una sintaxis de código limpia, clara, compacta y concisa, lo que favorece una mejor comprensión del código y da como resultado programas más cortos. Ésto agiliza y simplifica las tareas de desarrollo y mantenimiento del software. • Orientación a objetos: La orientación a objetos es un paradigma de programación que utiliza objetos en sus interacciones, basado en varias técnicas como abstracción, polimorfismo, acoplamiento y encapsulamiento. Las principales ventajas de utilizar un lenguaje de programación orientado a objetos son que se agiliza el desarrollo del software y se simplifican la reutilización, la ampliación y el mantenimiento del software. Otra ventaja que proporciona la utilización de este tipo de lenguajes es la fiabilidad del software resultante. Al dividir el problema en problemas más pequeños, se simplifican las labores de prueba y detección de errores. Todo esto se traduce en un incremento de la productividad a la hora de desarrollar y mantener el software. • Multiplataforma: En un lenguaje como Python, interpretado (no requiere compilación), y que favorece y simplifica la ampliación y mantenimiento del software, la multiplataforma nos ofrece una gran ventaja. Con los conocimientos y el equipo técnico (hardware) necesarios, se puede adaptar el proyecto de forma sencilla para hacerlo funcional en otros sistemas operativos y/o arquitecturas. • Curva de aprendizaje suave: La curva de aprendizaje describe el éxito obtenido durante el aprendizaje durante el transcurso del tiempo. 25/117 1. Introducción En el mundo del software esta curva se representa como un diagrama en que el eje horizontal representa la acumulación de lo aprendido, mientras el eje vertical representa la acumulación de tiempo empleado. Una curva de aprendizaje suave se traduce en un aprendizaje fácil y eficiente. • Popularidad: Aunque Python es un lenguaje de -relativa- reciente creación (fue creado por Guido van Rossum en el año 1991), se encuentra en constante renovación y expansión. El gran incremento de la popularidad de Python se produjo entre los años 2003 y 2007, llegando a ser uno de los 4 lenguajes de programación de Google y a convertirse en el lenguaje de programación sobre el que se construye el total de la infraestructura de Youtube. Estos factores hacen de Python uno de los lenguajes de programación más populares y demandados entre los profesionales del sector. En lo referente a las versiones de Python, se ha escogido la versión 2 (Python 2), puesto que la versión 3 (Python 3) está actualmente en desarrollo. Esto implica que la versión 2 tendrá un extenso soporte hasta el final de su vida útil, mientras que la versión 3 puede presentar carencias significativas y algunos errores que provocarían un comportamiento inestable del software resultante. 4. wxPython wxPython es un conjunto de herramientas que permite programar de forma rápida y sencilla Interfaces Gráficas de Usuario (GUI16) en Python. Las principales razones por las que se ha escogido wxPython como herramienta para programar la interfaz son: 16 GUI: De sus siglas en inglés Graphical User Interface. Programa informático que actúa de interfaz de usuario, utilizando un conjunto de imágenes y objetos gráficos para representar la información y acciones disponibles en la interfaz. 26/117 1. Introducción • Código abierto: El código abierto mantiene algunas ventajas con respecto a la accesibilidad y desarrollo del software (que ya han sido comentadas anteriormente, en el apartado “Python 2”). wxPython se distribuye bajo una licencia “wxWindows Licence17”, que consiste, básicamente, en una licencia LGPL18 con la excepción de que las obras derivadas en formato binario se pueden distribuir como el desarrollador crea conveniente, satisfaciendo así a desarrolladores que quieran licenciar sus obras bajo licencias GPL19 (o derivadas) o licencias privativas. • Multiplataforma y aspecto nativo: Una vez programada la interfaz, el mismo código funcionará en distintas plataformas sin necesidad de modificaciones. Además, la interfaz adoptará un aspecto nativo para cada plataforma en la que sea usada, mejorando así la experiencia de usuario. Otra serie de razones que ha llevado a escoger wxPython como herramienta para el desarrollo de la Interfaz Gráfica de Usuario frente a sus competidores (TkInter, PyGTK, PYQT) son: • Popularidad: Posiblemente wxPython sea el conjunto de herramientas más extendido en uso para el desarrollo de interfaces gráficas de usuario en Python. 17 wxWindows Licence: Licencia para la distribución de software basada en la licencia LGPL. http://opensource.org/licenses/wxwindows.php 18 LGPL: De sus siglas en inglés Lesser General Public License (Licencia Pública General Reducida de GNU). Licencia de software creada por la Free Software Foundation ( http://www.fsf.org/ ) que pretende garantizar la libertad de compatir y modificar el software cubierto por ella, asegurando que el software es libre para todos sus usuarios. http://www.gnu.org/licenses/lgpl.html 19 GPL: De sus siglas en inglés General Public License (Licencia Pública General). Licencia de GNU. Tiene como propósito declarar el software cubierto por esta licencia como software libre y protegerlo de intentos deapropiación que restrinjan libertades a los usuarios. http://www.gnu.org/licenses/licenses.es.html#GPL 27/117 1. Introducción • Herramientas adicionales: wxPython cuenta con una serie herramientas para diseñar las interfaces gráficas de forma visual, entre las que destacan wxGlade (http://wxglade.sourceforge.net/) y BOA Constructor (http://boaconstructor.sourceforge.net/). El uso de estas herramientas agiliza, de forma sustancial, el diseño y el desarrollo de la interfaz gráfica. 5. Eclipse y PyDev Eclipse es un entorno de desarrollo implementado inicialmente por IBM20, compuesto por un conjunto de herramientas de programación (IDE21) de código abierto. PyDev es un entorno de desarrollo integrado (IDE) python para Eclipse. Para la realización del proyecto se ha optado por integrar PyDev en Eclipse por presentar las ventajas del software libre y reunir en una única aplicación un editor de código, un compilador y un depurador. 20 IBM: De sus siglas en inglés International Business Machines. Empresa multinacional estadounidense de tecnología y consultoría. 21 IDE: De sus siglas en inglés Integrated Development Environment. Programa informático compuesto por un conjunto de herramientas de programación. 28/117 1. Introducción 1.2 Objetivos del proyecto Este proyecto tiene como objetivo el diseño de una herramienta de monitorización que permita a cualquier persona, independientemente de sus conocimientos informáticos, descubrir comportamientos peligrosos, amenazas, y riesgos relativos a la seguridad de las redes Wi-Fi. Por tanto, los principales objetivos del proyecto serán: • Automatización La aplicación se encargará de realizar, de forma automática, todas las operaciones de configuración de hardware y software necesarias para llevar a cabo la recogida de información, así como de restablecer el sistema a su estado original una vez finalizada su ejecución. • Interfaz intuitiva Una interfaz intuitiva permitirá al usuario un uso rápido y eficaz del sistema, así como la toma de decisiones de una forma clara, cómoda y sencilla. • Registro de datos El sistema almacenará la información recogida a lo largo de todas sus sesiones con el fin de poder realizar análisis de forma retrospectiva. • Análisis El sistema será capaz de analizar la información recogida tanto de forma retrospectiva como en tiempo real. • Monitorización El sistema será capaz de monitorizar las redes Wi-Fi al alcance y los dispositivos de conexión inalámbrica que tengan asociados, tanto de forma global como de forma individualizada. 29/117 1. Introducción • Costes Con la finalidad de que el sistema pueda ser utilizado por el mayor número de personas posible, su coste ha de reducirse al máximo. Para ello, se desarrollará maximizando el uso de tecnologías gratuitas y de libre distribución. 30/117 2. Metodología 2. Metodología Para la elaboración de este proyecto se ha optado por utilizar la metodología de Proceso Unificado de Desarrollo Software. El Proceso Unificado es un marco de desarrollo de software caracterizado por estar dirigido por casos de uso, centrado en la arquitectura, enfocado en los riesgos y por ser iterativo e incremental. El Proceso Unificado no es simplemente un proceso, sino un marco de trabajo extensible que puede ser adaptado a organizaciones o proyectos específicos. Para visualizar, especificar, construir y documentar los artefactos del sistema de software, se ha optado por el Lenguaje Unificado de Modelado visual (UML22). 2.1 Especificación de requisitos Este punto pretende definir las características y funcionalidades importantes que deberán ser tenidas en cuenta a la hora de desarrollar el sistema. 22 UML: Lenguaje Unificado de Modelado (de sus siglas en inglés Unified Modeling Languaje). Lenguaje de modelado de sistemas de software más conocido y utilizado en la actualidad. 31/117 2. Metodología 2.1.1 Requisitos funcionales 2.1.1.1 Funcionalidades 2.1.1.1.1 Registro de actividad La aplicación mantendrá un fichero de registro de información en el cual almacenará datos sobre las redes Wi-Fi dentro de su alcance y los dispositivos inalámbricos asociados a las mismas. Esta información será registrada en un formato similar al que presenta el sistema de registro de los sistemas operativos GNU/Linux (SYSLOG). Si la aplicación detecta un punto de acceso, registrará la fecha y hora en la que fue detectado, su BSSID, ESSID, canal de transmisión y sistema de cifrado (si tuviese). En caso de detectar un dispositivo inalámbrico, la aplicación registrará la fecha y hora en la que fue detectado, su dirección MAC, y, en caso de encontrase asociado a algún punto de acceso, el BSSID y ESSID del punto de acceso. 2.1.1.1.2 Monitorización de redes La aplicación podrá monitorizar una red en concreto, para ver los dispositivos asociados a las mismas, con el fin de detectar posibles irregularidades. Si la aplicación se encuentra monitorizando una red Wi-Fi mostrará todos los dispositivos asociados a la misma, la fecha y hora en que se registró la conexión y el fabricante del dispositivo. 2.1.1.1.3 Análisis de registros La aplicación podrá analizar el fichero de registro de eventos con el fin de detectar posibles riesgos o amenazas. Los análisis se podrán realizar en tiempo real o en diferido, y, a través de ellos, la aplicación identificará dos tipos de riesgos para la seguridad: puntos de acceso falsos y dispositivos inalámbricos que se hayan conectado a más de una red. 32/117 2. Metodología Una vez detectado algún un riesgo, la aplicación lo clasificará y mostrará información detallada sobre él. En caso de que el riesgo sea un dispositivo inalámbrico, se mostrarán su dirección MAC, su fabricante, el BSSID, ESSID la fecha en la que se registró la conexión y el fabricante de los puntos de acceso a los que estuvo conectados. Si el riesgo fuese un punto de acceso falso, se mostrarán el BSSID, ESSID, la fecha y hora en la que se detectó, el canal de transmisión, el tipo de cifrado utilizados y el fabricante del dispositivo. 2.1.1.1.4 Guardar registro En caso de detectar alguna amenaza, la aplicación permitirá al usuario generar y almacenar un fichero de informe. Éste fichero contendrá la información mostrada por la aplicación a cerca de las amenazas detectadas. 2.1.1.2 Seguridad Debido a las restricciones de los sistemas operativos, para poder utilizar la aplicación, siempre será necesaria la autenticación del usuario como usuario “administrador” o “root”. 2.1.2 Requisitos no funcionales 2.1.2.1 Usabilidad La interfaz del sistema debe ser de uso intuitivo y sencillo, con el fin de permitir a cualquier usuario un uso rápido y eficaz. Todos los textos mostrados por la aplicación deberán mostrarse según el formato de codificación de caracteres UTF-823, para evitar problemas de codificación en diferentes plataformas. 23 UTF-8: De sus siglas en inglés 8-bit Unicode Transformation Format. Es un formato de codificación de caracteres definido como estándar por la RFC 3629. 33/117 2. Metodología 2.1.2.2 Fiabilidad Debido a que dos de las funciones principales de este proyecto son el registro y análisis de información, el sistema tendrá que gestionar la información de forma consistente. 2.1.2.3 Rendimiento Para minimizar el consumo de recursos mientras se está capturando información, la aplicación proporcionará una interfaz en modo texto. Debido a que no podemos prever el tamaño de los ficheros en los que se almacena la información la aplicación deberá estar optimizada para analizar estos ficheros de la forma más rápida y eficiente posible. Para ello el diseño del sistema debe implementar mecanismos que optimicen su respuesta en casos críticos. 2.1.2.4 Soporte Con la finalidad de reducir los costes en licencias y facilitar el uso a la mayor parte posible de personas, el sistema maximizará el uso de componentes de libre distribución y estándares. 2.2 Análisis de requisitos 2.2.1 Casos de uso En el contexto de la ingeniería del software, un caso de uso es una secuencia de interacciones que se desarrollarán entre un sistema y sus actores en respuesta a un evento que inicia un actor principal sobre el propio sistema. Los casos de uso se utilizan para capturar los requisitos funcionales y para definir los contenidos de las iteraciones. 34/117 2. Metodología 2.2.1.1 Registrar actividad Descripción: El usuario quiere registrar la información sobre la actividad detectada en las redes WiFi dentro de su alcance. Actor principal: Usuario. Escenario principal de éxito (Flujo básico de eventos) 1. El usuario inicia la aplicación en modo gráfico. 2. El usuario escoge la interfaz de red que utilizará para capturar la información. 3. El sistema registra la actividad detectada en las redes WiFi dentro de su alcance. Extensiones (Flujos alternativos de eventos) 1a. El sistema no detecta en el equipo ninguna interfaz de red compatible con aircrack-ng: 1. El sistema señala el error y detiene su ejecución. 1b. El usuario inicia la aplicación en modo texto. 2-3a. El usuario no ha seleccionado ninguna interfaz de red: 1. El sistema señala el error . 3b. El usuario decide detener el registro de la actividad en las redes WiFi dentro de su alcance: 1. El sistema detiene el registro de información. 35/117 2. Metodología 2.2.1.2 Monitorizar red Descripción: El usuario quiere monitorizar una red inalámbrica para saber qué dispositivos tiene asociados. Actor principal: Usuario. Escenario principal de éxito (Flujo básico de eventos) 1. El usuario inicia la monitorización de una red inalámbrica. 2. El usuario selecciona la red inalámbrica que quiere monitorizar. 3. El sistema registra y muestra los dispositivos inalámbricos conectados a la red inalámbrica monitorizada. Extensiones (Flujos alternativos de eventos) 2a. El usuario decide cancelar la monitorización: 1. El sistema cancela la monitorización. 3a. El usuario decide finalizar la monitorización: 1. El sistema detiene la monitorización. Precondiciones: • Hay, al menos, una interfaz de red instalada en el sistema compatible con aircrack-ng. • La aplicación se está ejecutando en modo gráfico. 36/117 2. Metodología 2.2.1.3 Analizar registro Descripción: El usuario decide analizar el registro de la actividad detectada en las redes inalámbricas, con el fin de detectar e identificar posibles riesgos o comportamientos sospechosos. Actor principal: Usuario. Escenario principal de éxito (Flujo básico de eventos) 1. El usuario inicia el análisis de la información recogida por el sistema. 2. El sistema muestra los dispositivos inalámbricos y puntos de acceso potencialmente peligrosos detectados. Extensiones (Flujos alternativos de eventos) *a. En cualquier momento el sistema falla: 1. El sistema señala el error. *b. El sistema se encuentra registrando la actividad en las redes inalámbricas dentro de su alcance, o el usuario decide iniciar este registro: 1. El sistema comienza un análisis en tiempo real de la información recogida. 2a. El usuario decide guardar el registro suministrado por el sistema en un fichero: 1. El usuario escoge el nombre del fichero. 2. El sistema exporta la información mostrada al fichero elegido por el usuario. 2b. El usuario decide finalizar el análisis: 1. El sistema finaliza el análisis. 37/117 2. Metodología 2.2.2 Diagramas de Casos de uso 2.2.2.1 Usuario figura 1: : Diagrama de casos de uso Usuario 2.2.3 Modelo de dominio 2.2.3.1 Descripción textual de las clases conceptuales del modelo de dominio • Conexión: Clase que contiene la información referente a los puntos de acceso y a los dispositivos inalámbricos conectados a los mismos. Es necesaria para la creación de objetos de clase “Red inalámbrica” y “Registro”. 38/117 2. Metodología • Dispositivo inalámbrico: Clase que contiene la información sobre un dispositivo inalámbrico en particular. Es utilizada para la creación de objetos de clase “Conexión”. • Informe: Esta clase representa al fichero de informe que puede guardar el usuario después de analizar el registro de datos de la aplicación. • Interfaz de red: Clase que representa a la tarjeta de red instalada en el sistema que se utilizará para registrar la información. • Peligro: Clase que representa un peligro potencial detectado durante el análisis del fichero de registro de información que guarda la aplicación. • Punto de acceso: Clase que contiene la información sobre un punto de acceso en particular. Es necesaria para crear objetos de clase “Conexión”. • Red inalámbrica: Clase composición. Es necesaria para crear conjuntos de objetos de clase “Conexión”. Ejemplos de casos de uso: • • Monitorizar red • Registrar actividad Registro: Clase composición. Es necesaria para crear conjuntos de objetos de clase “Conexión”. Guarda la información sobre las conexiones registradas por el sistema. Ejemplos de casos de uso: • Analizar registro • Guardar Registro • Registrar actividad 39/117 2. Metodología • Usuario: Esta clase representa a la persona que utiliza la aplicación. Es el actor principal en todos los casos de uso. Ejemplos de casos de uso: • Registrar actividad • Monitorizar red • Analizar registro 2.2.3.2 Atributos y relaciones de las clases conceptuales Clase conceptual Atributos Relaciones hora: Hora a la que se tiene [punto de detectó la conexión. acceso]: Una conexión está formada por, al tipo de dispositivo: Dispositivo inalámbrico o menos, un punto de acceso. Punto de acceso. tiene [dispositivo inalámbrico]: Una conexión puede estar formada por un dispositivo Conexión inalámbrico asociado a un punto de acceso. Red inalámbrica tiene: Una red inalámbrica está compuesta por un conjunto de conexiones. Registro tiene: Un registro está compuesto por un conjunto de conexiones. 40/117 2. Metodología Clase conceptual Atributos Relaciones mac: Dirección MAC del Conexión tiene: Una dispositivo. conexión puede estar formada por un dispositivo essid: ESSID del punto de Dispositivo inalámbrico acceso al que estaba inalámbrico asociado a un punto de acceso. asociado el dispositivo. bssid: BSSID del punto de acceso al que estaba asociado el dispositivo. Interfaz de red nombre: Nombre que da Usuario selecciona: El el sistema operativo a las usuario tiene que interfaces de red seleccionar una interfaz de instaladas en el equipo. red para poder monitorizar una red inalámbrica o para registrar la actividad en las redes inalámbricas al alcance. 41/117 2. Metodología Clase conceptual Atributos Relaciones essid: ESSID del punto de Conexión tiene: Una acceso. conexión está formada por, al menos, un punto de bssid: BSSID del punto de acceso. acceso. canal: Número de canal Punto de acceso por el que se encontraba transmitiendo información el punto de acceso. cifrado: Cifrado utilizado por el punto de acceso para transmitir información (si lo hubiere). tiene [conexión]: Una red inalámbrica está compuesta por una o varias conexiones. Red inalámbrica Usuario monitoriza: Un usuario puede monitorizar una red inalámbrica o todas las que tenga a su alcance. 42/117 2. Metodología Clase conceptual Atributos Relaciones tiene [conexión]: Un registro está compuesto por un conjunto de conexiones. Usuario analiza: Un usuario puede analizar el resgistro con la intención Registro de detectar dispositivos inalámbricos o puntos de acceso potencialmente peligrosos. Usuario guarda: Un usuario puede guardar a fichero el resultado de un análisis. 43/117 2. Metodología Clase conceptual Atributos Relaciones Usuario analiza: Un usuario puede analizar el resgistro con la intención de detectar dispositivos inalámbricos o puntos de acceso potencialmente peligrosos. Usuario guarda: Un usuario puede guardar a fichero el resultado de un análisis. Usuario Usuario selecciona: El usuario tiene que seleccionar una interfaz de red para poder monitorizar una red inalámbrica o para registrar la actividad en las redes inalámbricas al alcance. Usuario monitoriza: Un usuario puede monitorizar una red inalámbrica o todas las que tenga a su alcance. 44/117 2. Metodología 2.2.3.3 Gráfico del modelo de dominio figura 2: Gráfico del modelo de dominio de la aplicación 45/117 2. Metodología 2.2.4 Diagramas de secuencia del sistema (DSS) 2.2.4.1 Registrar actividad figura 3: Diagrama de Secuencia del Sistema Registrar actividad 46/117 2. Metodología 2.2.4.2 Monitorizar red figura 4: Diagrama de Secuencia del Sistema Monitorizar Red 47/117 2. Metodología 2.2.4.3 Analizar registro figura 5: Diagrama de Secuencia del Sistema Analizar Registro 48/117 2. Metodología 2.2.5 Arquitectura lógica Esta sección describe como las clases software se organizan a gran escala en paquetes UML, subsistemas y capas. figura 6: Arquitectura lógica 49/117 2. Metodología 2.2.5.1 Airodump Este paquete engloba todas las operaciones relacionadas con airodump-ng, por ejemplo verificar si está instalado o ejecutarlo. 2.2.5.2 CLI Este paquete incluye todas las operaciones necesarias para manejar el sistema a través de la interfaz de línea de comandos (CLI24). Surge de la necesidad de poder ejecutar la aplicación en modo texto. 2.2.5.3 Log Este paquete representa todas las operaciones de registro, análisis y presentación de la información tratada por el sistema. 2.2.5.4 Sistema Este paquete representa todos los datos y operaciones que la aplicación necesita para funcionar correctamente en cada plataforma. Surge como respuesta a la posibilidad de poder adaptar la aplicación a distintas plataformas y arquitecturas. 24 CLI: Interfaz de Línea de Comandos. De sus siglas en inglés Command Line Interface. Método que permite a los usuarios dar instrucciones a alguna aplicación informática por medio de una línea de texto simple. 50/117 2. Metodología 2.2.6 Diagrama de clases global figura 7: Diagrama de clases global 51/117 2. Metodología 2.2.6.1 Notas sobre el diagrama de clases global El principio del mínimo conocimiento está presente en todo el diseño del sistema, para la intención de conseguir la máxima cohesión y el mínimo acoplamiento entre los objetos. Aunque en Python los atributos y métodos privados se determinan por su nombre (comienzan por dos guiones bajos '__'), en los diagramas se ha utilizado la notación tradicional '-' para identificarlos. 2.2.7 Análisis de los subsistemas A continuación, se describen en detalle cada uno de los subsistemas (o paquetes) derivados del diagrama de clases. Estas descripciones consisten en: • Resumen del subsistema. Explicación de cómo los subsistemas surgen de forma natural de etapas de desarrollo anteriores. • Principios y patrones utilizados durante el desarrollo del sistema y justificación de su uso y elección. • Diagramas de secuencia para los principales casos de éxito del sistema. El sistema se ha dividido en los siguientes subsistemas: • Airodump • CLI • GUI • Log • Sistema 52/117 2. Metodología 2.2.7.1 Airodump figura 8: Subsistema Airodump Este subsistema nace de la necesidad de especificar, de forma sencilla, las principales operaciones con airodump-ng. Las clases de este subsistema no tienen relación con las clases conceptuales por encontrarse fuera del dominio del sistema. Descripción de las clases definidas en el subsistema: Airodump: Esta clase engloba todas las operaciones relacionadas con airodumpng. 53/117 2. Metodología 2.2.7.2 CLI figura 9: Subsistema CLI Este subsistema engloba todas las operaciones necesarias para manejar el sistema a través de la interfaz de línea de comandos. Surge de la necesidad de poder ejecutar la aplicación en modo texto. 54/117 2. Metodología Descripción de las clases incluidas en el subsistema: CLI: Es la clase encargada de comenzar la captura de información y gestiona la aplicación cuando ésta se lanza en modo texto. CLI_COLORS: Esta clase se encarga de dar formato a los mensajes de información que muestra la aplicación. Las clases de este subsistema no tienen relación con las clases conceptuales. Diagrama de secuencia Ejecutar airodump figura 10: Diagrama de Secuencia Ejecutar airodump 55/117 2. Metodología 2.2.7.3 GUI figura 11: Subsistema GUI Este subsistema representa a la interfaz gráfica, y engloba todas las operaciones necesarias para su funcionamiento. Descripción de las clases incluidas en el subsistema: Frame_mon_wifi_list: Esta clase representa a la ventana que muestra la lista de redes disponibles para monitorizar. Frame_mon_wifi_dev_con: Esta clase representa la ventana que muestra la lista de dispositivos asociados a una red cuando se está monitorizando. 56/117 2. Metodología OUI: Es la clase encargada de buscar y añadir el fabricante de algún dispositivo de red (ya sea dispositivo inalámbrico o punto de acceso) y añadirlo en las vistas de la interfaz gráfica. MainFrame: Esta clase representa a la ventana principal de la aplicación. Las clases de este subsistema no tienen relación con las clases conceptuales por encontrase fuera del dominio del sistema. Diagrama de secuencia Monitorizar red figura 12: Diagrama de Secuencia Monitorizar red 57/117 2. Metodología 2.2.7.4 Log Este subsistema agrupa las clases necesarias para mantener el registro de información de la aplicación. figura 13: Subsistema LOG 58/117 2. Metodología Descripción de las clases incluidas en el subsistema: AP: Esta clase representa a los puntos de acceso y almacena toda la información referente a ellos. Device: Esta clase representa a los dispositivos inalámbricos y almacena toda la información referente a ellos. Log: Esta clase agrupa las operaciones necesarias para mantener el registro de datos de la aplicación y para realizar parte de su análisis en tiempo real. Relación entre las clases de este subsistema y las clases conceptuales: Clase subsistema Clase conceptual Log Registro AP Punto Acceso Device Dispositivo inalámbrico 59/117 2. Metodología Diagrama de secuencia Analizar registro figura 14: Diagrama de Secuencia Analizar registro 60/117 2. Metodología 2.2.7.5 Sistema figura 15: Subsistema Sistema Este subsistema representa las clases necesarias para la interacción entre la aplicación y el sistema operativo. Descripción de las clases incluidas en el subsistema: Environment: Esta clase almacena las operaciones y datos necesarios para interactuar con el sistema operativo (directorios, comandos, etc.). Execute_command: Esta clase representa la ejecución de un comando. Es necesaria para ejecutar un comando en segundo plano (o background). Restore_sys: Esta clase agrupa las operaciones necesarias para dejar el sistema operativo en el estado que tenía antes de ejecutar la aplicación, borrar ficheros de registro temporales, desactivar el modo monitor de la interfaz de red, etc. 61/117 2. Metodología Las clases de este subsistema no tienen relación con las clases conceptuales por encontrase fuera del modelo de dominio de la aplicación. Diagrama de secuencia Restaurar Sistema figura 16: Diagrama de Secuencia Restaurar sistema 62/117 3. Funcionalidades 3. Funcionalidades Entre las funcionalidades más destacadas de este proyecto se encuentran el registro, el análisis de información y la identificación de riesgos o amenazas relativas a la seguridad de redes WiFi. Aunque actualmente se encuentra disponible una gran variedad de aplicaciones orientadas al registro y análisis de información para redes WiFi, ninguna cubre las funcionalidades de este proyecto. En este proyecto se ha desarrollado una aplicación capaz de registrar diversa información sobre redes WiFi y dispositivos inalámbricos asociados a las mismas. La aplicación almacena esta información en el directorio de registros del sistema operativo en un formato similar al que utiliza el sistema operativo GNU/Linux. La información almacenada se puede analizar en tiempo real o en diferido. A través de los análisis de la información recogida, la aplicación puede monitorizar una red WiFi en concreto, o detectar amenazas o comportamientos inusuales. Si la aplicación está monitorizando una red WiFi, mostrará todos los dispositivos inalámbricos conectados a la misma, así como la fechas y horas de la conexiones y los fabricantes de los dispositivos. Si la aplicación realiza un análisis (ya sea en tiempo real o en diferido) sobre la información recogida, identificará dos tipos de riesgos para la seguridad: dispositivos inalámbricos que se hayan conectado a más de una red y puntos de acceso falsos. 63/117 3. Funcionalidades Una vez detectados, la aplicación clasificará los riesgos y mostrará información detallada sobre cada uno de ellos. Si el riesgo es un dispositivo inalámbrico se visualizarán: Dirección MAC del dispositivo, fabricante del dispositivo, BSSID y ESSID de los puntos de acceso a los que estuvo asociado, fechas y horas de las conexiones y fabricantes de los puntos de acceso. Si el riesgo es un punto de acceso falso, se visualizarán: BSSID, ESSID, fecha y hora en que se detectó, canal y cifrado usados para transmitir la información y fabricante del punto de acceso. Una vez realizado un análisis, en caso de que se haya detectado algún riesgo, la aplicación permitirá guardar un informe con la información mostrada. 64/117 4. Pruebas realizadas 4. Pruebas realizadas Para comprobar el correcto funcionamiento del código del proyecto, se han realizado pruebas unitarias mediante el conjunto de herramientas PyUnit, se ha comprobado el resultado de los análisis creando y analizando un escenario concreto, y se han realizado pruebas de rendimiento para los análisis. 4.1 Pruebas unitarias En programación, una prueba unitaria es una forma de probar el correcto funcionamiento de un módulo de código. Esto sirve para asegurar que cada uno de los módulos funcione correctamente por separado. Luego, con las Pruebas de Integración, se podrá asegurar el correcto funcionamiento del sistema o subsistema en cuestión. Para ello, se desarrollan casos de prueba para cada función no trivial o método en el módulo de forma que cada caso sea independiente del resto. Para facilitar la realización de las pruebas, los ficheros de las pruebas unitarias se adjuntan al código fuente de la aplicación, en el directorio 'core/'. El nombre de estos ficheros comienza con la cadena 'test_' seguida del nombre del módulo sobre el que realizan las pruebas. 4.1.1 Test airodump Con este test se comprueba el correcto funcionamiento del módulo airodump.py. – Se comprueba el comportamiento de la aplicación en caso de que aircrackng esté instalado en el sistema. – Se comprueba el comportamiento de la aplicación en caso de que aircrackng no esté instalado en el sistema. 65/117 4. Pruebas realizadas 4.1.1.1 Notas Al simular el escenario en el que aircrack-ng no está instalado, el mensaje “[ERROR] aircrack-ng no está instalado” indica que el test ha finalizado satisfactoriamente. En el caso de que aircrack-ng no estuviese instalado en el sistema, la aplicación debería mostrar ese mensaje de error. Si ,además, la aplicación estuviese ejecutándose en modo línea de comandos, ésta debería detener su ejecución. 4.1.2 Test OUI Este test comprueba el correcto funcionamiento del módulo oui.py. Este módulo es el encargado de asociar direcciones MAC y fabricantes de hardware. Se comprueban los resultados que devuelve la aplicación al asociar direcciones MAC a sus fabricantes a través del OUI (almacenado en el fichero 'oui.txt'). Para ello: • Se seleccionan al azar varias direcciones MAC ya conocidas del fichero 'oui.txt' y se compara la salida. • Se introduce una dirección MAC inexistente y se compara la salida. 4.1.3 Test parse_log Este test comprueba el correcto funcionamiento del módulo parse_log.py. Este módulo es el encargado de comprobar que existe el fichero de registro de conexiones que guarda la aplicación y de analizar su contenido. Para comprobar que funciona correctamente, se introducen unos datos simulando lo que podría contener el registro, los resultados esperados y se ejecuta. Las pruebas que realiza este módulo se pueden dividir en tres partes: 1. Fichero de registro – Se comprueba el comportamiento de la aplicación en caso de que exista el fichero de registro de la aplicación. 66/117 4. Pruebas realizadas – Se comprueba el comportamiento de la aplicación en caso de que no exista el fichero de registro de la aplicación. 2. Dispositivos de red – Se comprueba el comportamiento de la aplicación al encontrar y añadir un nuevo dispositivo de red en el fichero de registro. – Se comprueba el comportamiento de la aplicación al añadir más conexiones a un dispositivo de red ya registrado. – Se comprueba el comportamiento de la aplicación en caso de añadir un dispositivo de red ya registrado con una conexión también registrada anteriormente. – Se comprueba el comportamiento en el caso de añadir una conexión a un dispositivo ya registrado anteriormente, pero conectado a un punto de acceso diferente. 3. Puntos de acceso – Se comprueba el comportamiento de la aplicación al registrar un nuevo punto de acceso. – Se comprueba el comportamiento de la aplicación en el caso de añadir un punto de acceso ya registrado. – Se comprueba el comportamiento de la aplicación en el caso de añadir un falso punto de acceso (o Rogue AP). 4.2 Conclusiones Todos los test realizados han devuelto resultados satisfactorios. Por tanto, se puede concluir que todas las partes del software comprobadas funcionan correctamente. 67/117 4. Pruebas realizadas 4.3 Pruebas de análisis 4.3.1 Escenario predeterminado Para comprobar los resultados de los análisis, se ha creado el siguiente escenario: figura 17: Escenario de pruebas para análisis Se ha creado un fichero para el escenario que se llama 'wific_escenario' y se ha incluido junto al código fuente en el directorio logsTESTS/ . 68/117 4. Pruebas realizadas En este escenario se recrea una posible situación real, donde un usuario peligroso (“Usuario1”, con dirección MAC: 00:00:00:00:00:01) se conecta a varias redes (con ESSID: “AP1”, “AP2”, “AP3”, “AP4”). Un usuario legítimo (“Usuario2”, con dirección MAC: 00:00:00:00:00:02) se conecta a una única red (con ESSID “AP4”), y un punto de acceso falso (ESSID: “AP1”, BSSID: 50:01:BB:00:00:00) suplanta a un punto de acceso legítimo (ESSID: “AP1”, BSSID: 10:01:CA:00:00:00) Para poder realizar un análisis de este escenario es necesario colocar el fichero 'wific_escenario' como fichero de registro predeterminado de la aplicación. Esto se puede hacer de tres formas: 1. Poner el fichero 'wific_escenario' en el directorio de registro de la aplicación (por ejemplo: '/var/log/wific/' en sistemas operativos GNU/Linux) y renombrarlo a 'wific.log' 2. Descomentar la línea 525 (#self.this_os.wific_log_file = '/RUTA/logsTEST/wific_escenario') en el fichero 'wific.py', y modificar la ruta al fichero 'wific_log'. 3. Descomentar la línea 57 (# f_log = '/RUTA/logsTEST/wific_escenario') en el fichero parse_log.py (situado dentro del directorio 'core') y modificar la ruta al fichero 'wific_log'. Una vez colocado el fichero 'wific_escenario' como fichero de registro de la aplicación, bastará lanzar la interfaz gráfica de la misma (fichero 'wific.py') como superusuario o administrador y pulsar el botón “Analizar” 69/117 4. Pruebas realizadas figura 18: Interfaz gráfica de wiFIC Los resultados obtenidos se mostrarán automáticamente. 4.3.2 Resultados 4.3.2.1 Punto de acceso falso figura 19: Resultados de análisis - Punto de Acceso falso 70/117 4. Pruebas realizadas 4.3.2.2 Dispositivo peligroso figura 20: Resultados de test de análisis - Dispositvo Peligroso 4.3.2.3 Notas En las imágenes no aparecen algunos fabricantes de los dispositivos porque las direcciones MAC usadas en el ejemplo no se corresponden con ningún fabricante en la vida real. 4.3.2.4 Conclusiones Se detecta como punto de acceso peligroso “AP1”, ya que hay dos puntos de acceso utilizando el mismo BSSID. Se detecta como dispositivo (o usuario) peligroso el que tiene la dirección MAC 00:00:00:00:00:01, puesto que se ha conectado a cuatro puntos de acceso diferentes. Comparando los resultados obtenidos con el escenario previamente diseñado, se puede observar que son correctos. 71/117 4. Pruebas realizadas 4.4 Pruebas de rendimiento Las pruebas de rendimiento se han realizado generando ficheros de registro de distintos tamaños y midiendo los tiempos de ejecución de los análisis. Los ficheros para realizar los análisis se han incluido junto al código fuente, en el directorio 'logsTestsRendimiento/'. Este directorio se encuentra comprimido con el fin de ahorrar espacio. El nombre estos ficheros está compuesto por la cadena 'wific_' seguida de el espacio que ocupan en disco. Para poder realizar los análisis de rendimiento, es necesario realizar una serie de cambios en el fichero 'parse_log.py', situado en el directorio 'core/': 1. Descomentar la línea 12 (#import time) 2. Eliminar las líneas 245 y 329 (”””) 3. Modificar la línea 248 (ruta_flogs = 'Ruta/logsTestRendimiento') y poner la ruta del directorio 'logsTestsRendimiento' Una vez hechos los cambios, se ejecutará el fichero 'parse_log.py'. Por ejemplo, en sistemas GNU/Linux: $ python parselog.py Los tiempos de ejecución para cada fichero se irán mostrando en pantalla a medida que se realicen los test. Equipo utilizado • Procesador: Intel Core2Duo 2.1Ghz • Memoria RAM: 1 Gb • Sistema Operativo: GNU/Linux Debian 8.0 “Jessie” • Python: Python 2.7 72/117 4. Pruebas realizadas 4.4.1 Resultados Tamaño de fichero 560 Tiempo KiB 0.05 s 5 MiB 0.38 s 50 MiB 3.85 s 251 MiB 19.59 s 515 MiB 38.84 s 4.4.2 Notas Los tamaños están expresados con prefijos binarios, es decir, en base 2. Un mebibyte (MiB) equivale a 2^10 bytes, mientras que 1 megabyte (MB) equivaldría a 10^6 bytes. Los tiempos están expresados en segundos. 73/117 5. Planificación y evaluación de costes 5. Planificación y evaluación de costes Para la realización de este proyecto se ha optado por utilizar la metodología Proceso Unificado de Desarrollo de Software. El Proceso unificado se divide en cuatro fases: Inicio, Elaboración, Construcción y Transición. Cada fase se divide en iteraciones, y cada iteración en disciplinas. Aunque todas las iteraciones suelen incluir trabajo en casi todas las disciplinas, el grado de ellas varía a lo largo del proyecto. Es por esto que, para la realización de un diagrama de Gantt que muestre la relación tiempo/persona de las distintas fases del proyecto de una forma clara y sencilla, se han aproximado y sumado los tiempos de duración de cada fase. Además de las fases propias del Proceso Unificado de Desarrollo de Software, se ha incluido (después de la fase de inicio) una fase de Inmersión en las tecnologías de desarrollo. El objetivo de esta fase es representar el tiempo necesario para aprender a utilizar las tecnologías necesarias para la realización del proyecto. Diagrama de Gantt: figura 21: Diagrama de Gantt figura 22: Detalle de las fases del diagrama de Gantt La duración y los costes se han calculado para una persona trabajando ocho horas al día durante una jornada laboral de Lunes a Viernes. 74/117 5. Planificación y evaluación de costes La duración total del proyecto consta de 95 días de trabajo. Utilizando un coste estimado de 65 euros por hora, el coste total del proyecto asciende a 49.400 euros. 75/117 6. Conclusiones 6. Conclusiones En el capítulo 1, Introducción, se han planteado una serie de objetivos que debe cumplir la aplicación. En el apartado 4.1, Especificación suplementaria, del capítulo 4 (Metodología), se han planteado una serie de cualidades que debe cumplir la aplicación. En este capítulo se detallan el estado de los objetivos y cualidades que debe cumplir la aplicación. 6.1 Objetivos ✔ Automatización: El sistema realiza de forma autónoma y automática todas las operaciones de hardware y software necesarias para llevar a cabo la recogida de información y de restablecer el sistema a su estado original una vez finalizada su ejecución. ✔ Interfaz intuitiva: La interfaz permite al usuario la toma de decisiones de forma clara y sencilla. ✔ Registro de datos: El sistema registra la información recogida a lo largo de todas sus sesiones. ✔ Análisis: El sistema es capaz de realizar análisis sobre la información recogida, tanto en tiempo real como de forma retrospectiva. ✔ Monitorización: El sistema es capaz de monitorizar las redes WiFi al alcance y los dispositivos inalámbricos que tengan asociados, tanto de forma global, como de forma individualizada. ✔ Costes: El coste del proyecto se ha reducido al máximo mediante el uso de tecnologías gratuitas de libre distribución. 76/117 6. Conclusiones 6.2 Cualidades del sistema ✔ Usabilidad: La aplicación tiene una interfaz de uso intuitivo y muestra todos los textos en formato UTF-8. ✔ Fiabilidad: El sistema gestiona la información de forma consistente. ✔ Rendimiento: La aplicación proporciona una interfaz en modo texto para minimizar el consumo de recursos mientras se captura información. La aplicación implementa mecanismos para optimizar el análisis de ficheros de registro de gran tamaño de forma rápida y eficiente. ✔ Soporte: Se han reducido al máximo los costes en licencias y con ello se ha maximizado el número potencial de usuarios utilizando para ello, únicamente, componentes software estándar y de distribución gratuita. 77/117 7. Líneas futuras 7. Líneas futuras A pesar de que la aplicación cumple todos los objetivos planteados, en este apartado se citan algunas implementaciones que se podrían añadir a la aplicación en desarrollos futuros: • Multiplataforma Desarrollar el soporte para más plataformas y arquitecturas • Alarmas y filtro de clientes para la monitorización WiFi Al monitorizar una WiFi se mostrará una alarma cada vez que un dispositivo se conecte. El usuario podrá agregar un filtro a ciertos dispositivos para que no se muestre la alarma cuando se conecten. • Generar gráficos estadísticos Generar gráficos con las estadísticas del número de clientes conectados a las redes WiFi. • Monitorizar varias redes WiFi a la vez. 78/117 8. Bibliografía 8. Bibliografía 8.1 Monografías GONZÁLEZ Duque, Raúl. Python para todos. Henry, Jerome. CCNA Wireless 640-722 IUWNE Quick Reference. Cisco Press, 2012. James Carroll, Brandon. CCNA Wireless Official Exam Certification Guide. Cisco Press, 2009. LARMAN, Craig. Aplying UML and patterns: an introduction to object-oriented analysis and design and the Unified Process. Segunda edición. Upper Saddle River, 2002. O'CONNOR, TJ. Violent Python: A cookbook for Hackers, Forensic Analyst, Penetration Testers and Security Engineers. Primera Edición. 2012. PILGRIM, Mark. Dive into Python. 2004. RUIZ, Arkaitz y ORDUÑA, Pablo. Introducción a Python. 2006. VAN ROSSUM, Guido. Guía de aprendizaje de Python. Release 02. Fred L. Drake Jr., 2000. ZAW, Shed A.. Learn Python The Hard Way. Release 02. 2010. 79/117 8. Bibliografía 8.2 Textos electrónicos BSSID [en línea]. Wikipedia. <http://es.wikipedia.org/wiki/BSSID>. Dirección MAC [en línea]. Wikipedia. <http://es.wikipedia.org/wiki/Direcci %C3%B3n_MAC>. GNU Lesser General Public License [en línea]. Wikipedia. <https://es.wikipedia.org/wiki/GNU_Lesser_General_Public_License>. GNU/Linux [en línea]. Wikipedia. <http://es.wikipedia.org/wiki/GNU/Linux http://docs.python.org/3/faq/general.html#what-is-python>. GPL [en línea]. Wikipedia. <http://www.gnu.org/licenses/licenses.es.html#GPL>. IBM [en línea]. Wikipedia. <http://es.wikipedia.org/wiki/IBM>. IEEE [en línea]. Wikipedia. <http://es.wikipedia.org/wiki/IEEE>. Interfaz gráfica de usuario [en línea]. Wikipedia. <http://es.wikipedia.org/wiki/Interfaz_gr%C3%A1fica_de_usuario>. Lenguaje Unificado de Modelado [en línea]. Wikipedia. <https://es.wikipedia.org/wiki/Lenguaje_Unificado_de_Modelado>. Línea de comandos [en linea]. Wikipedia. <http://es.wikipedia.org/wiki/L %C3%ADnea_de_comandos>. Proceso Unificado [en línea]. Wikipedia. <http://es.wikipedia.org/wiki/Proceso_Unificado>. Prueba unitaria [en línea]. Wikipedia . <http://es.wikipedia.org/wiki/Prueba_unitaria>. 80/117 8. Bibliografía Punto de acceso inalámbrico [en línea]. Wikipedia. <http://es.wikipedia.org/wiki/Punto_de_acceso_inal%C3%A1mbrico>. PURCELL, Steve. Pyunit – the standard unit testing framework for Python [en línea].<http://pyunit.sourceforge.net/>. SSID [en línea]. Wikipedia. <http://es.wikipedia.org/wiki/Wi-Fi>. 81/117 9. Glosario 9. Glosario Término Definición e información Alias Estándar que define el uso de dos IEEE 802.11 niveles inferiores de la arquitectura 802.11 OSI, especificando sus normas de funcionamiento en una red de área local inalámbrica (WLAN). Arquitectura [hardware] Bluetooth Diseño conceptual y estructura operacional fundamental de una computadora. Especificación industrial para Redes Inalámbricas de Área Personal (WPAN). Forma de transmisión de información Difusión donde Broadcast un nodo emisor envía información a una multitud de nodos receptores de manera simultánea, sin necesidad de reproducir la misma transmisión nodo por nodo. BSSID Nombre de identificación único que Basic Service Set identifica todos los paquetes de una Identifier red inalámbrica de área local (WLAN). Método que permite a las personas dar Command Line CLI instrucciones a algún programa Interface informático por medio de una línea de texto simple. Método que permite convertir un Codificación Charset caracter de un lenguaje natural en un [de caracteres] símbolo de otro sistema de Encoding. representación. 82/117 9. Glosario Término Definición e información Dispositivo digital lógico de Conmutador Alias Switch interconexión de redes de computadoras que opera en la capa de enlace de datos del modelo OSI. Carrier Sense Multiple Access/Collision Avoidance (Acceso Múltiple por CSMA/CA Detección Portadora/Anticolisión). Protocolo para transmisiones en redes 802.11. Programa informático que permite al Driver Controlador sistema operativo interactuar con un periférico. Controlador software. Institute of Electrical and Electronic Engineers (Instituto de ingenieros IEEE Eléctricos y Electrónicos). Asociación técnico profesional dedicada a la estandarización. Periférico que permite la comunicación Tarjeta de red Interfaz de red con aparatos electrónicos. NIC Industrial, Scientific and Medical band (Banda Industrial, Científica y Médica). ISM (banda) Bandas reservadas internacionalmente para uso no comercial de radiofrecuencia en áreas industriales, científicas y médicas. LAN Local Area Network (Red de Área Red local. Local). 83/117 9. Glosario Término Definición e información Alias Contrato entre el autor o titular de los Licencias [software] derechos de explotación/distribución de un programa informático y el licenciatario. Licencia Licencia de software de código cerrado. Licencia de código cerrado privativa [software] Licencia propietaria Media Access Control (Control de MAC Acceso al Medio). Identificador de 48 bits que corresponde de forma única a una tarjeta o dispositivo de red. Modo texto Interfaz que se comunica con el Interfaz de línea de usuario mediante líneas de comandos comandos (CLI). Número de 24 bits comprado al IEEE, Organizationally que identifica a cada empresa u Unique Identifier organización a nivel mundial y reserva OUI un bloque en cada posible identificador derivado (direcciones MAC, direcciones de grupos, etc.) para el uso exclusivo del asignado. Dispositivo electrónico que permite la PA conexión inalámbrica de un equipo Punto de acceso móvil de cómputo (ordenador, tableta, AP smartphone) con una red. WAP Proceso que se ejecuta con prioridad Segundo plano Background baja y no siempre tiene la CPU de forma secuencial ejecutando su código. 84/117 9. Glosario Término Definición e información Teléfono móvil con capacidades de Smartphone Alias Teléfono inteligente almacenamiento y procesamiento de datos similares a una mini computadora. Equipamiento lógico o soporte lógico Software Programa de un sistema informático. Aplicación. Service Set Identifier (Identificador de Service Set IDentifier Conjunto de Servicios). Nombre SSID incluido en todos los paquetes de una red inalámbrica para identificarlos como parte de la misma. Computadora portátil de mayor Tableta Tablet tamaño que un smartphone o una PDA, integrada en una pantalla multitáctil. Transmission Control Protocol TCP (Protocolo de Transmisión de Control). Protocolo fundamental en internet. User Datagram Protocol (Protocolo de UDP Datagrama de Usuario). Protocolo de nivel de transporte de red. UTF-8 Wi-Fi WLAN Formato de codificación de caracteres UTF8 Unicode e ISO 10646. Mecanismo de conexión de dispositivos Wifi electrónicos de forma inalámbrica. Wireless Area Network (Red inalámbrica de área local). 85/117 10. Apéndices 10. Apéndices 10.1 Índice de figuras Red Ad-Hoc.............................................................................................................. 14 Basic Service Area................................................................................................... 15 Extended Service Area.............................................................................................15 Diagrama de Caso de Uso Usuario...........................................................................38 Gráfico del Modelo de Dominio de la aplicación.......................................................45 Diagrama de Secuencia del Sistema Registrar Actividad.........................................46 Diagrama de Secuencia del Sistema Monitorizar Red..............................................47 Diagrama de Secuencia del Sistema Analizar Registro............................................48 Arquitectura Lógica.................................................................................................. 49 Diagrama de clases global.......................................................................................51 Subsistema Airodump.............................................................................................. 53 Subsistema CLI........................................................................................................ 54 Diagrama de Secuencia Ejecutar airodump.............................................................55 Subsistema GUI........................................................................................................ 56 Diagrama de Secuencia Monitorizar red...................................................................57 Subsistema LOG....................................................................................................... 58 Diagrama de Secuencia Analizar Registro................................................................60 Subsistema Sistema................................................................................................. 61 Diagrama de Secuencia Restaurar sistema..............................................................62 Escenario de pruebas para análisis..........................................................................68 Resultados de test de análisis - Interfaz gráfica de wiFIC.........................................70 Resultados de análisis - Punto de Acceso falso........................................................70 Resultados de test de análisis - Dispositivo peligroso..............................................71 Diagrama de Gantt.................................................................................................. 74 Detalle de las fases del diagrama de Gantt.............................................................74 86/117 10. Apéndices 10.2 Índice de tablas Atributos y relaciones de las clases conceptuales....................................................40 Relación entre las clases del subsistema Log...........................................................59 Pruebas de rendimiento........................................................................................... 73 Glosario.................................................................................................................... 82 87/117 10. Apéndices 10.3 Pruebas unitarias (código fuente y resultados) 10.3.1 Test airodump 10.3.1.1 Código fuente #!/usr/bin/env python #_*_ coding:utf-8 _* ''' @author: Rubén Hortas Astariz ''' import airodump import os import unittest # Comprobar la función Check_aircrack() class airodump_instalado(unittest.TestCase): """ Simula que aircrack está instalado """ fake_aircrack_path = '' # Textfiuture (Prepara el contexto) def setUp(self): print 'Comprobado la función Check_aircrack' 88/117 10. Apéndices print 'Simulando que aircrack-ng está instalado' print 'Preparando el contexto...' # Preparar directorios falsos para simular que aircrack-ng # está instalado self.fake_aircrack_path = os.path.join(os.getcwd(), 'aircrackng') os.mkdir(self.fake_aircrack_path) self.paths = [] self.paths.append(os.getcwd()) def test(self): # aircrack-ng instalado r = airodump.Check_aircrack(self.paths) self.assertEqual(r, True, msg=None) def tearDown(self): # deshacer el contexto os.rmdir(self.fake_aircrack_path) print class airodump_no_instalado(unittest.TestCase): """ Simula que aircrack-ng *no* está instalado """ # Textfiture (Preparar el contexto) def setUp(self): print 'Comprobando la función Check_aircrack' 89/117 10. Apéndices print 'Simulando que aircrack *no* está instalado' print 'Preparando el contexto...' # Preparar directorios falsos para simular que aircrack-ng # *no* está instalado self.paths = [] self.paths.append(os.getcwd()) def test(self): # aircrack-ng no instalado r = airodump.Check_aircrack(self.paths) self.assertEqual(r, False, msg=None) print 'El mensaje de error indica que todo ha ido bien' print if __name__ == '__main__': unittest.main() 10.3.1.2 Resultados $ python test_airodump.py Comprobado la función Check_aircrack Simulando que aircrack-ng está instalado Preparando el contexto... .Comprobando la función Check_aircrack Simulando que aircrack *no* está instalado Preparando el contexto... [ERROR] aircrack-ng no está instalado. El mensaje de error indica que todo ha ido bien 90/117 10. Apéndices . ---------------------------------------------------------------------Ran 2 tests in 0.001s OK 10.3.2 Test OUI 10.3.2.1 Código fuente #!/usr/bin/env python #_*_ coding:utf-8 _* ''' @author: Rubén Hortas Astariz ''' import unittest import oui class check_oui(unittest.TestCase): def test(self): #Probar con unas cuantas MAC cogidas al azar de oui.txt #Los últimos 5 dígitos de la MAC son inventados #OUI usa los 6 primeros #00002F TIMEPLEX INC. manuf = oui.Find_manufacturer('00:00:2F:AA:BB:CC') 91/117 10. Apéndices self.assertEqual(manuf, 'TIMEPLEX INC.', msg=None) #00040F Asus Network Technologies, Inc. manuf = oui.Find_manufacturer('00:04:0F:AA:BB:CC') self.assertEqual(manuf, 'Asus Network Technologies, Inc.', msg=None) #549B12 Samsung Electronics manuf = oui.Find_manufacturer('54:9B:12:AA:BB:CC') self.assertEqual(manuf, 'Samsung Electronics', msg=None) #7C7BE4 Z'SEDAI KENKYUSHO CORPORATION manuf = oui.Find_manufacturer('7C:7B:E4:AA:BB:CC') self.assertEqual(manuf, "Z'SEDAI KENKYUSHO CORPORATION", msg=None) #Un dipostivo inventado manuf = oui.Find_manufacturer('01:02:03:AA:BB:CC') self.assertEqual(manuf, None, msg=None) if __name__ == "__main__": unittest.main() 10.3.2.2 Resultados $ python ./test_oui.py . ---------------------------------------------------------------------Ran 1 test in 0.098s 92/117 10. Apéndices OK 10.3.3 Test parse_log 10.3.3.1 Código fuente #!/usr/bin/env python #_*_ coding:utf-8 _* ''' @author: Rubén Hortas Astariz ''' import os import unittest import parse_log #from parse_log import Update_dicts_dev import clases_ap_dev class check_log_fail(unittest.TestCase): """ Comprueba el correcto funcionamiento de Check_file_log() """ f_log = 'asdasd.log' # Un fichero que no exista 93/117 10. Apéndices def test(self): print 'Comprobando la función Check_file_log' r = parse_log.Check_file_log(self.f_log) self.assertEqual(r, 0, msg=None) print 'El mensaje de error indica que todo ha ido correctamente.' print class check_add_new_dev(unittest.TestCase): """ Comprueba el correcto funcionamiento de Update_dict_devs() al añadir un nuevo dispositivo de red. """ # Textfiture (Preparar el contexto) def setUp(self): print 'Preparando el contexto para las pruebas de Update_dict_devs()' self.dict_devs = {} self.dict_dang_devs = {} def test_new_dev(self): dev_first_seen = '2013-01-01 00:00:00' dev_mac = '00:00:00:01' dev_essid = '01:00:00:00' dev_bssid = 'AP1' 94/117 10. Apéndices dev = clases_ap_dev.device(dev_first_seen, dev_mac, dev_essid) dev.bssid = dev_bssid conexion = dev.essid + ' (' + dev_bssid + ')' print print 'Comprobando al añadir un nuevo dispositivo' parse_log.Update_dicts_dev(dev, conexion, self.dict_devs, self.dict_dang_devs) self.assertEqual(self.dict_devs, {'00:00:00:01': [['01:00:00:00 (AP1)'], '2013-01-01 00:00:00']}, msg=None) self.assertEqual(self.dict_dang_devs, {}, msg=None) print class check_add_dev_cons(unittest.TestCase): """ Inicialización para los test de añadir más conexiones a un dispositivo registrado. """ # Textfiture (Preparar el contexto) def setUp(self): """ Añadir un primer registro de un dispositivo 95/117 10. Apéndices """ print 'Preparando el entorno para probar añdir más conexiones a un' \ + ' dispositivo de red...' self.dict_devs = {} self.dict_dang_devs = {} self.dev = None # Añadir la primera conexión de un dispositivo dev_first_seen = '2013-01-01 00:00:00' dev_mac = '00:00:00:01' dev_essid = '01:00:00:00' dev_bssid = 'AP1' self.dev = clases_ap_dev.device(dev_first_seen, dev_mac, dev_essid) self.dev.bssid = dev_bssid conexion = dev_essid + ' (' + dev_bssid + ')' parse_log.Update_dicts_dev(self.dev, conexion, self.dict_devs, self.dict_dang_devs) class check_add_dev_registered_con(check_add_dev_cons): """ Comprobar el caso de añadir un dispositivo ya registrado con una conexión 96/117 10. Apéndices ya registrada """ def test(self): print 'Comprobando al añadir un dispositivo ya registrado con' + \ ' una conexión ya registrada' #Con cambiar sólo la hora basta, es una conexión al mismo AP #Para el resto de los datos valen los de self.dev del setUP new_first_seen = '2013-01-01 00:00:05' new_dev = clases_ap_dev.device(new_first_seen, self.dev.mac, self.dev.bssid) conexion = self.dev.essid + ' (' + self.dev.bssid + ')' parse_log.Update_dicts_dev(new_dev, conexion, self.dict_devs, self.dict_dang_devs) self.assertEqual(self.dict_devs, {'00:00:00:01': [['01:00:00:00 (AP1)'], '2013-01-01 00:00:00']}, msg=None) self.assertEqual(self.dict_dang_devs, {}, msg=None) print class check_add_dang_dev(check_add_dev_cons): """ 97/117 10. Apéndices Comprobar el caso de añadir una conexión de un dispositivo ya registrado a otro AP. """ def test(self): print 'Añadiendo una conexión de un dispositivo ya registrado' + \ ' a otro AP' new_first_seen = '2013-01-01 02:0:00' new_essid = '02:00:00:00' new_bssid = 'AP2' new_dev = clases_ap_dev.device(new_first_seen, self.dev.mac, new_bssid) conexion = new_essid + ' (' + new_bssid + ')' parse_log.Update_dicts_dev(new_dev, conexion, self.dict_devs, self.dict_dang_devs) self.assertEqual(self.dict_devs, {'00:00:00:01': [['01:00:00:00 (AP1)', '02:00:00:00 (AP2)'], '2013-01-01 00:00:00']}, msg=None) self.assertEqual(self.dict_dang_devs, {'00:00:00:01': ['01:00:00:00 (AP1) - ' + \ '2013-01-01 00:00:00', '02:00:00:00 (AP2) -' + \ 98/117 10. Apéndices ' 2013-01-01 02:0:00']}, msg=None) print class check_add_ap(unittest.TestCase): """ Comprobar que se añada un nuevo AP correctamente """ # Textfiture (Preparar el contexto) def setUp(self): print 'Preparando el contexto para la prueba de añadir nuevo ap' self.dict_aps = {} self.dict_dang_aps = {} def test_new_ap(self): ap_first_seen = '00:00:01' ap_bssid = 'AP1' ap_channel = '1' ap_encryption = 'WPA2' ap_essid = '01:00:00:00' ap = clases_ap_dev.ap(ap_first_seen, ap_bssid, ap_channel, ap_encryption, ap_essid) parse_log.Update_dicts_ap(ap, self.dict_aps, self.dict_dang_aps) 99/117 10. Apéndices self.assertEqual(self.dict_aps, {'AP1': [['01:00:00:00'], '01:00:00:00 - 00:00:01 - Ch. 1 WPA2']}, msg=None) self.assertEqual(self.dict_dang_aps, {}, msg=None) class check_add_new_ap(unittest.TestCase): """ Inicialiación para los test de añadir más APs. """ def setUp(self): print 'Preparando el contexto para los test de añadir más APs' self.dict_aps = {} self.dict_dang_aps = {} ap_first_seen = '00:00:01' ap_bssid = 'AP1' ap_channel = '1' ap_encryption = 'WPA2' ap_essid = '01:00:00:00' self.ap = clases_ap_dev.ap(ap_first_seen, ap_bssid, ap_channel, ap_encryption, ap_essid) 100/117 10. Apéndices parse_log.Update_dicts_ap(self.ap, self.dict_aps, self.dict_dang_aps) class check_add_registered_ap(check_add_new_ap): """ Comprobar el caso de añadir un AP ya registrado """ def test(self): print 'Añadiendo un AP ya registrado' #Añadir el mismo ap con otra hora new_first_seen = '00:05:00:' new_ap = clases_ap_dev.ap(new_first_seen, self.ap.bssid, self.ap._ap__channel, self.ap._ap__encryption, self.ap.essid) parse_log.Update_dicts_ap(new_ap, self.dict_aps, self.dict_dang_aps) self.assertEqual(self.dict_aps, {'AP1': [['01:00:00:00'], '01:00:00:00 - 00:00:01 - Ch. 1 WPA2']}, msg=None) self.assertEqual(self.dict_dang_aps, {}, msg=None) 101/117 10. Apéndices class check_add_rogue_ap(check_add_new_ap): """ Comprobar el caso de añadir un Roque AP (punto de acceso falso) """ def test(self): #Crear un roque AP rogue_ap_first_seen = '00:00:01' rogue_ap_bssid = 'AP1' # El mismo BSSID rogue_ap_channel = '1' rogue_ap_encryption = 'WPA2' rogue_ap_essid = '01:02:03:04' rogue_ap = clases_ap_dev.ap(rogue_ap_first_seen, rogue_ap_bssid, rogue_ap_channel, rogue_ap_encryption, rogue_ap_essid) parse_log.Update_dicts_ap(rogue_ap, self.dict_aps, self.dict_dang_aps) self.assertEqual(self.dict_aps, {'AP1': [['01:00:00:00', '01:02:03:04'], '01:00:00:00 - 00:00:01 - Ch. 1 WPA2']}, msg=None) self.assertEqual(self.dict_dang_aps, {'AP1': ['01:00:00:00 - 00:00:01 - Ch. 1 WPA2', 102/117 10. Apéndices '01:02:03:04 - 00:00:01 - Ch. 1 WPA2']}, msg=None) class check_parse_log(unittest.TestCase): """ Comprueba el correcto funcionamiento de Parse_log() """ # Textfiture (Preparar el contexto) def setUp(self): print 'Preparando el contexto para las pruebas de Parse_log()' self.parent_dir = os.path.abspath(os.path.join(os.getcwd(), os.pardir)) self.f_log = os.path.join(self.parent_dir, 'logsTESTS', 'wific_escenario') self.pos = [0] self.dict_devs = {} self.dict_dang_devs = {} self.dict_aps = {} self.dict_dang_aps = {} def test(self): print 'Comprobando la función Parse_log' print 'Utilizando el fichero de log: ', self.f_log parse_log.Parse_log(self.f_log, self.pos, self.dict_devs, self.dict_dang_devs, self.dict_aps, self.dict_dang_aps) 103/117 10. Apéndices #dict_devs self.assertEqual(self.dict_devs, {'00:00:00:00:00:02': [['02:00:00:00:00:00 (AP2)'], '2013-01-01 00:00:00'], '00:00:00:00:00:01': [['01:00:00:00:00:00 (AP1)', '02:00:00:00:00:00 (AP2)', '03:00:00:00:00:00 (AP3)', '04:00:00:00:00:00 (AP4)'], '2013-01-01 00:00:00']}, msg=None) #dict_dang_devs self.assertEqual(self.dict_dang_devs, {'00:00:00:00:00:01': ['01:00:00:00:00:00 (AP1) -' + \ ' 2013-01-01 00:00:00', '02:00:00:00:00:00 (AP2) -' + \ ' 2013-01-02 00:00:00', '03:00:00:00:00:00 (AP3) -' + \ 104/117 10. Apéndices ' 2013-01-03 00:00:00', '04:00:00:00:00:00 (AP4) -' + \ ' 2013-01-04 00:00:00']}, msg=None) #dict_aps self.assertEqual(self.dict_aps, {'AP2': [['02:00:00:00:00:00'], '02:00:00:00:00:00 - 2013-01-01 00:00:00' + \ ' - Ch. 5 - WPA'], 'AP3': [['03:00:00:00:00:00'], '03:00:00:00:00:00 - 2013-01-01 00:00:00' + \ ' - Ch. 5 - WEP'], 'AP1': [['01:00:00:00:00:00', '05:00:00:00:00:00'], '01:00:00:00:00:00 - 2013-01-01 00:00:10' + \ ' - Ch. 5 - WPA2'], 'AP4': [['04:00:00:00:00:00'], '04:00:00:00:00:00 - 2013-01-01 00:00:00' + \ ' - Ch. 5 - WPA2']}, msg=None) #dict_dang_aps 105/117 10. Apéndices self.assertEqual(self.dict_dang_aps, {'AP1': ['01:00:00:00:00:00 - 2013-01-01 00:00:10' + \ ' - Ch. 5 - WPA2', '05:00:00:00:00:00 - 2013-01-01 01:00:10' + \ ' - Ch. 3 - WPA2']}) if __name__ == '__main__': unittest.main() 10.3.3.2 Resultados $ python ./test_parse_log.py Preparando el contexto para la prueba de añadir nuevo ap .Preparando el entorno para probar añdir más conexiones a un dispositivo de red... Añadiendo una conexión de un dispositivo ya registrado a otro AP .Preparando el entorno para probar añdir más conexiones a un dispositivo de red... Comprobando al añadir un dispositivo ya registrado con una conexión ya registrada .Preparando el contexto para las pruebas de Update_dict_devs() Comprobando al añadir un nuevo dispositivo .Preparando el contexto para los test de añadir más APs Añadiendo un AP ya registrado .Preparando el contexto para los test de añadir más APs .Comprobando la función Check_file_log 106/117 10. Apéndices [ERROR] El fichero de log de wiFIC no existe El mensaje de error indica que todo ha ido correctamente. .Preparando el contexto para las pruebas de Parse_log() Comprobando la función Parse_log Utilizando el fichero de log: /home/ruben/***/wific_escenario . ---------------------------------------------------------------------Ran 8 tests in 0.020s OK 10.3.3.3 Notas Por simplicidad se ha suprimido la ruta original al fichero de registro utilizado para las pruebas. 107/117 10. Apéndices 10.4 Manual de usuario 10.4.1 Dependencias Para poder utilizar la aplicación, en el sistema deberán estar instalados los siguientes paquetes software en sus respectivas versiones: aircrack-ng >= 1.1 python >= 2.7 < 3 python-wxgtk >= 2.8 <3 10.4.2 Utilizando el sistema 10.4.2.1 Modo texto Para minimizar el consumo de recursos en el equipo anfitrión, la aplicación puede realizar la captura de información en modo texto (o modo consola). Para utilizar este modo basta con ejecutar el archivo cli.py como usuario administrador o root. La orden de ejecución del archivo es: # python cli.py interfaz * Substituyendo interfaz por el alias de la interfaz de red que se quiere utilizar. En caso de no detectar ningún error, la aplicación procederá a la recolección de datos. En caso contrario informará del error. 108/117 10. Apéndices Ilustración 4: Ejemplo utilizando wlan0 como interfaz de red La aplicación se podrá detener en cualquier momento utilizando la combinación de teclas CTRL+C. 10.4.2.2 Interfaz gráfica Ilustración 5: Interfaz gráfica, ventana principal Para iniciar la aplicación en modo gráfico habrá que ejecutar el archivo wific.py como usuario administrador o root. 109/117 10. Apéndices 1. Botón ON/OFF Inicia/detiene el análisis de datos de las redes WiFi al alcance. 2. Botón de selección de interfaz de red Lista desplegable para seleccionar la interfaz de red con la que se realizará la recogida de los datos de las redes WiFi. 3. Botón de análisis Inicia/detiene el análisis de datos. Si la captura de datos está detenida, este botón inicia un análisis de forma retrospectiva, es decir, la aplicación analiza el fichero con la información recogida durante sesiones anteriores. Si la captura de datos está activa, el botón inicia/detiene el análisis de los datos recogidos en tiempo real. Según el estado en el que se encuentre la aplicación, el botón mostrará el texto con la función que realizará, “Analizar” o “Detener Análisis”. 4. Botón de monitorizar WiFi Este botón sólo está habilitado si el análisis de datos está activo. Muestra una ventana para seleccionar la red que se quiere monitorizar, y una vez seleccionada muestra los dispositivos que tiene asociados. 5. Barra de estado Barra que muestra el estado en el que se encuentra la aplicación. 110/117 10. Apéndices 10.4.2.2.1 Análisis El sistema puede realizar análisis en tiempo real (si está capturando información) o de forma retrospectiva. Una vez analizando (o realizado el análisis) el sistema mostrará la información en la ventana de análisis. Ilustración 6: Ejemplo de ventana de análisis 6. Lista de selección de elementos Lista para seleccionar el tipo de dispositivos a analizar. La ventana de peligros (7) mostrará los elementos peligrosos del tipo seleccionado. Opciones: • Todo: Muestra los dispositivos inalámbricos y los puntos de acceso peligrosos detectados. • Dispositivos: Muestra únicamente los dispositivos inalámbricos peligrosos detectados. Un dispositivo se considera peligroso cuando se ha conectado a varias redes WiFi. • Puntos de acceso: Muestra únicamente los puntos de acceso peligrosos detectados. Un punto de acceso se considera peligroso cuando existe un mismo ESSID (o nombre de red) con diferentes direcciones BSSID. 7. Ventana de peligros 111/117 10. Apéndices Esta ventana muestra los peligros encontrados del tipo escogido en la lista de selección de elementos (6). Punto de acceso peligroso Ilustración 7: Ejemplo de punto de acceso peligroso 7.1 ESSID (nombre de la red) 7.2 Direcciones BSSID de los puntos de acceso que tienen el mismo ESSID. 7.3 Fecha y hora en la que se detectó el punto de acceso. 7.4 Canal utilizado por el punto de acceso para transmitir información. 7.5 Cifrado utilizado por el punto de acceso. 7.6 Fabricante (o marca) del punto de acceso. 112/117 10. Apéndices Dispositivo inalámbrico peligroso Ilustración 8: Ejemplo de dispositivo peligroso 7.7 Dirección MAC del dispositivo 7.8 Fabricante (o marca) del dispositivo 7.9 BSSID del punto de acceso al que estaba asociado el dispositivo. 7.10 ESSID del punto de acceso al que estaba asociado el dispositivo. 7.11 Fecha y hora en la que se detectó la conexión. 7.12 Fabricante (o marca) del punto de acceso al que estaba asociado el dispositivo. 8. Ventana de información de conexiones Esta ventana muestra la información sobre las conexiones del elemento seleccionado en la ventana de peligros (7). La información mostrada en esta ventana se detalla en los apartados 7.1-6 para los puntos de acceso y 7.7-12 para los dispositivos inalámbricos. 113/117 10. Apéndices 9. Botón Guardar Guarda en un fichero (para el que el usuario escoge la ruta y la extensión) la información mostrada en la ventana de información de conexiones (8). Ilustración 9: Ejemplo de informe generado 10. Botón Cerrar/Detener análisis Cierra la ventana de análisis. Si el sistema está realizando un análisis en tiempo real, este botón mostrará el texto “Detener análisis”, al pulsarlo detendrá el análisis en tiempo real y mostrará el texto “Cerrar análisis”. 114/117 10. Apéndices 10.4.2.2.2 Monitorizar una WiFi Si el sistema está capturando información, una vez pulsado el botón “Monitorizar WiFi” (4), se mostrará una ventana con la lista de redes WiFi al alcance, donde se podrá seleccionar una para monitorizar. Ilustración 10: Ejemplo de lista de WiFis para monitorizar Una vez seleccionada la WiFi a monitorizar, el sistema mostrará los dispositivos que la red tiene asociados. 115/117 10. Apéndices Ilustración 11: Ejemplo de dispositivos asociados a una red WiFi 1. ESSID (dirección) y BSSID (nombre de red) del punto de acceso que crea la red. 2. Direcciones MAC de los dispositivos asociados. 3. Fecha y hora en la que se conectaron los dispositivos a la red por primera vez. 4. Fabricante (o marca) del dispositivo inalámbrico asociado a la red. 5. El botón “Cerrar” cancela la monitorización y cierra la ventana. 116/117 10. Apéndices 10.5 Notas sobre la terminología utilizada Root: Se ha utilizado este término para referirse al usuario administrador en un sistema operativo GNU/Linux y MAC OS X, en lugar de su traducción “usuario raíz”, por ser el nombre que tiene el usuario, y para diferenciarlo del usuario “Administrador” que utiliza el sistema operativo Windows. WiFi: Se ha utilizado este término en lugar de su traducción “red inalámbrica” para diferenciar las redes inalámbricas que utilizan la tecnología Wi-Fi de otras redes inalámbricas implementadas con otras tecnologías (bluetooth, WIMAX etc.) También se ha optado por estos términos, y por otros como “software” y “hardware”, por tratarse de términos de uso frecuente y estar completamente aceptados. 117/117