Hacking físico con USB

¿Te han dicho alguna vez que si te encuentras un USB en el suelo, no lo debes introducir en tu ordenador? Hoy te mostraré mediante una prueba de concepto por qué no debes hacerlo. En este post veremos cómo crear un USB malicioso que puede infectar un ordenador en segundos.

Pero antes un poco de historia.

En 2010, los medios se hicieron eco de un virus que había conseguido infectar una central nuclear de Irán. Este malware, llamado Stuxnet, relentizaba las centrifugadoras que enriquecían uranio, aumentando la presión hasta puntos críticos. La central tenía unos sensores que permitían accionar unas válvulas que liberaban la presión cuando esta aumentaba. El virus consistía en modificar los datos que leían estos sensores para que pareciera que todo iba correctamente, y aumentar la presión de las centrifugadoras.

Si hubieran querido, podrían haber hecho estallar la central nuclear. Sin embargo, cuando la presión era demasiado alta, Stuxnet paraba el ataque. Esto se debe a que su objetivo era retrasar el programa nuclear de Irán. De haberlo hecho estallar, los ingenieros iranís hubieran detectado y arreglado el problema enseguida. sin embargo, al aumentar mucho la presión sin que llegaran a estallar, se producían muchos más fallos en los rotores por estrés, y los ingenieros no eran capaces de identificar por qué, retrasandolos enormemente.

 

 

Hacking físico con USB

Pero lo más curioso de esto, es que la primera versión de este virus no tenía una forma de propagación automática con la que llegar a la red de la central. Para poder actuar, el virus debía ejecutarse en un ordenador de la central, pues necesitaba modificar uno de los archivos de configuración para poder ejecutar su código en vez del original. Pero los sistemas de la central nuclear no estaban conectados a internet, por seguridad. Entonces ¿cómo se infectó? Mediante los propios trabajadores de la empresa.

Alguien dejó caer una memoria USB cerca de un empleado de la central, que se la encontró y tuvo la brillante idea de conectarla a su ordenador para ver el contenido del mismo. Una vez dentro de la red, ya si pudo propagarse y llegar hasta ese archivo de configuración.

Este es el caso más sonado de este tipo de vector de infección, puesto que se considera la primera arma cibernética. Sin embargo, se han encontrado miles de casos en los que mediante ingeniería social un trabajador ha comprometido a su empresa al conectar un USB que se había encontrado.

Bad USB

Hoy en día, no hacen falta más que un par de clicks para hacerse con un USB malicioso. Cualquiera con acceso a un ordenador y 10 dólares puede tener el suyo propio. La marca más famosa de este tipo de USB es RubberDucky y cuesta 45 dólares, sin embargo encontramos otros por 8 o 9 dólares con la misma funcionalidad, o incluso se puede fabricar manualmente.

¿Cómo funciona?

Al enchufarlo, el ordenador reconoce el USB como si fuera un teclado. El programa del USB simplemente realiza distintas pulsaciones de teclas automáticamente. Dado que el sistema operativo lo considera como el teclado del usuario legítimo, todo lo que se pulsa se ejecuta.

 

PoC

Para esta prueba de concepto utilizaré un dispositivo llamado Lily GO que compré por 8 dólares en Aliexpress. La principal diferencia con el Rubber Ducky es que en este último se puede insertar una tarjeta microSD en la que almacenar información comprometida o guardar scripts.

Existen muchos scripts ya creados para Rubber Ducky que permiten realizar diferentes ataques. En este github puedes encontrar un recopilatorio de esos scripts.

Sin embargo, estos scripts solo valen para el Rubber Ducky. La versión low cost se programa mediante Arduino, por lo que los scripts varían. sin embargo, esto no supone ningún problema, gracias a que alguien ya se ha tomado la molestia de realizar un conversor DuckyScript – Arduino.

No obstante, la gracia está en aprender a hacer nuestros propios scripts.

Para ello, en primer lugar necesitaremos descargarnos Arduino. Una vez descargado, vamos a herramientas -> placa y seleccionamos «Arduino Leonardo».

 

Antes de empezar con el script, es importante saber que la librería por defecto solo soporta teclados estadounidenses, por lo que en caso de que nuestra víctima tenga configurado el teclado en otro idioma, deberemos instalar las librerías compatibles con ese idioma. 

Para hacer esto solo tenemos que descargar este repositorio en el directorio Arduino/libraries, y modificar la librería Keyboard.

Ahora si, vamos con el script. En primer lugar, incluimos la librería Keyboard.h, con la que podremos simular la pulsación de teclas. La función setup() es la principal del script. Para empezar, debemos llamar a Keyboard.begin() y esperar un tiempo (medio segundo es suficiente).

Cada tecla tiene especial tiene un identificador. Por ejemplo, la tecla de enter es «KEY_RETURN». Primero hay que llamar a la función de pulsar tecla, después esperar unas milésimas de segundo, y por último llamar a la función de soltar tecla. Encapsularemos esto en la función typeKey para que sea más fácil:

Para escribir una cadena de texto, llamamos a la función Keyboard.print(palabra).

Para esta prueba inicial, vamos a abrir un bloc de notas y escribir «Hacked by Lethani!», suponiendo que la víctima está utilizando Windows. Pensemos qué teclas es necesario pulsar. El método más rápido es mediante el atajo de teclado Windows + R, que abre el panel de Ejecutar:

 

Por tanto primero presionaré la tecla de windows, cuyo identificador es «KEY_LEFT_GUI» y presionaré la tecla r (código ascii 114). Después, soltaré ambas teclas.

Tras una espera de medio segundo (para que se abra el panel), voy a escribir el programa que usaré. Pulsaré enter, y esperaré medio segundo a que se abra el notepad. Por último, escribiré una frase en el notepad:

Por acabar esta prueba de concepto, y para hacer un poquito de spam, vamos a abrirle a la victima un navegador a pantalla completa con mi web.

El proceso es idéntico: abro Ejecutar y escribo el comando. En este caso, el comando es iexplore, con -k para que salga a pantalla completa.

El script final quedaría así:

 

Cabe destacar que no he utilizado la función loop() porque en este ejemplo no era necesaria, pero es una función muy util ya que permite ejecutar cíclicamente las instrucciones que introduzcamos.

Para cargarlo en el USB tan solo hay que conectarlo, seleccionarlo en Herramientas -> Puerto, pulsar en «Verificar» (para comprobar la sintaxis del script) y pulsar en «Subir». Aviso: una vez subido, se ejecutará automáticamente, por lo que debes tener mucho cuidado.

A continuación os dejo un vídeo que he grabado con una demostración del script anterior.

Esta herramienta es muy útil combinada con ingeniería social, puesto que permite ataques físicos delante de la víctima sin que se de cuenta, mucho más sigilosa y rápidamente que de forma manual.

No obstante, recuerda que la ética y el honor debe prevalecer a cualquier fin personal.

Lethani.

4.7/5 - (229 votos)

6 comentarios en «Hacking físico con USB»

    • Ese es uno de los problemas de esta «versión china» del rubberducky, que en el momento en el que lo conectas a cualquier ordenador se ejecuta el payload. Pero siempre hay métodos para no auto-infectarte, puedes enchufarlo con el ordenador apagado o enviar la información que recopiles a algún sitio en internet, como pastebin.com.

      Responder
  1. me pone esto por que?

    Arduino:1.8.16 (Windows Store 1.8.51.0) (Windows 10), Tarjeta:»LilyPad Arduino USB»

    El Sketch usa 5578 bytes (19%) del espacio de almacenamiento de programa. El máximo es 28672 bytes.

    Las variables Globales usan 278 bytes (10%) de la memoria dinámica, dejando 2282 bytes para las variables locales. El máximo es 2560 bytes.

    Ha ocurrido un error mientras se enviaba el sketch

    avrdude: butterfly_recv(): programmer is not responding

    avrdude: butterfly_recv(): programmer is not responding

    avrdude: butterfly_recv(): programmer is not responding

    avrdude: butterfly_recv(): programmer is not responding

    avrdude: butterfly_recv(): programmer is not responding

    Found programmer: Id = «�»; type = �

    Software Version = i.

    Responder

Responder a Lethani Cancelar la respuesta