Revista Tecnología

Evil Crow cable, ¿por qué troyanizar hardware?

Publicado el 23 diciembre 2019 por Debadastra @jdaanial

Sobre los autores: Ernesto Sanchez (@ernesto_xload) y Joel Serna (@JoelSernaMoreno) son consultores en seguridad informática que han participado en eventos como: Navaja Negra, RootedCON, CCN-CERT, Mundo Hacker Day, etc.

Sabemos que hemos estado bastante tiempo sin aparecer por aquí, pero hemos estado liados con un proyecto de una duración de unos dos años, y sí, estamos aquí para contarlo.

Lo primero de todo, agradecer a todas las personas que han apoyado y ayudado en esto, sobre todo a las mencionadas aquí abajo:

Todo empezó a finales de 2017, donde Ernesto Sánchez y un servidor decidimos empezar un “proyecto” para demostrar que los dispositivos USB no son lo que realmente parecen.

La idea de troyanizar hardware, como bien se explica en una entrevista que nos hizo Guillermo Cid para el Confidencial (aquí), viene de que las personas confían en el hardware y nunca llegan a pensar que este puede haber sido alterado con fines maliciosos.

En los últimos años hemos podido observar que las personas tienen mas cuidado a la hora de conectar pendrives en sus equipos porque pueden contener malware, pero… ¿qué pasa con todo lo demás?

Evil Crow cable, ¿por qué troyanizar hardware?

Todos los periféricos USB que utilizamos en nuestro día a día se pueden troyanizar. Así es como nació Evil Crow cable.

Evil Crow cable, como su propio nombre indica, es un cable de móvil con el famoso microcontrolador Attiny85 en su interior, junto a 3 resistencias y 2 diodos zener.

Evil Crow cable, ¿por qué troyanizar hardware?

¿Qué se puede hacer con él? La finalidad del cable es simple, un dispositivo BadUSB como puede ser el USB Rubber Ducky. En este artículo no vamos a entrar otra vez en el tema de los dispositivos BadUSB, quien no sepa lo que es o esté interesado… aquí tiene los enlaces de los artículos anteriores que escribimos para este mismo blog: BadUSB Ultra Low Cost y Vuelve el patito Low Cost, ahora grazna como un USB Rubber Ducky original.

¿Aún no queda claro que es Evil Crow cable? No pasa nada, tenemos un repositorio específico donde está documentada toda su historia, desde el comienzo del desarrollo en una breadboard (utilizando un Attiny45 en las primeras pruebas, que al final no fue suficiente para nosotros y utilizamos Attiny85), hasta el cable completo que ha ido a producción gracias a la ayuda de Luca Bongiorni y a nuestro distribuidor April Brother:

https://github.com/joelsernamoreno/BadUSB-Cable

La historia está muy bien y todo eso… pero, ¿donde puedo comprar el cable? Puedes comprarlo por unos 10$, tanto en la tienda del distribuidor en Tindie, como en Aliexpress… aquí dejamos el enlace de compra directo en Aliexpress: Evil Crow cable

Cabe destacar que Evil Crow cable es un proyecto sin ánimo de lucro, ¿que queremos decir con esto? Basicamente, todos estáis invitados a pagarnos unas cervezas si nos veis en alguna CON 😀

Ahora vamos a meternos en el asunto…

Configuración e instalación del software

Una vez hemos obtenido el dispositivo, tenemos que tener en cuenta que, primero tenemos que instalar el IDE de Arduino y también los drivers en el caso de Windows (aquí)

NOTA: no es aconsejable instalar el IDE de Arduino desde repositorios de nuestra distribución de Linux, suele ser una versión algo obsoleta y puede darnos problemas. Destacar que el funcionamiento del dispositivo es ligeramente distinto a cualquier otro Arduino con el que hayamos trabajado anteriormente y necesita ser desconectado y conectado para ser reprogramado (Hay disponible un dispositivo para hacer ésto por hardware mediante un interruptor disponible aquí, pero no creemos que sea tanta molestia conectar y desconectar el dispositivo cada vez). Lo primero es tener la última versión del arduino IDE (Aquí) y asegurarnos que está todo actualizado.

El segundo paso es bajar el paquete de compatibilidad con ésta placa y el IDE de Arduino para poder trabajar correctamente con ella, para ello tenemos que ir a Archivo -> Preferencias -> Gestor de URLs Adicionales de Tarjetas y añadiremos en una nueva linea lo siguiente (si tenemos alguna no es incompatible):

http://digistump.com/package_digistump_index.json

Evil Crow cable, ¿por qué troyanizar hardware?

Simplemente aceptamos y vamos a Herramientas -> Placa -> Gestor de Tarjetas, aquí buscamos Digistump AVR Boards y procedemos a su instalación.

Evil Crow cable, ¿por qué troyanizar hardware?

En caso de usar linux, es posible que tengas que tener la versión actual y legacy de libusb, así como añadir unas reglas nuevas de udev, hay un tutorial de Digistump aquí. Comentar que las librerías originales de Digistump solo poseen soporte para emular teclados con el layout en_US (Inglés de EEUU), con lo que es muy aconsejable descargar e instalar la librería con soporte para otros idiomas, disponible aquí.

Payloads y primer Hola Mundo

Evil Crow cable lleva un microcontrolador Attiny85 en su interior, entonces… podemos utilizar cualquier payload compatible con la famosa placa de 2$ Digispark. En el siguiente enlace podéis descargar más de 20 payloads compatibles y probados:

https://github.com/joelsernamoreno/badusb_examples/tree/master/attiny85_digispark

Una vez hemos descargado los payloads… tenemos que abrir el IDE de Arduino que hemos descargado y configurado anteriormente, también nos tenemos que asegurar que hemos configurado la placa correcta, para ello vamos a Herramientas -> Placa y seleccionamos “Digisparck (Default – 16.5 mhz)” y ningún puerto.

Evil Crow cable, ¿por qué troyanizar hardware?

Lo siguiente es compilar y subir el código, primero podemos pulsar el botón de Verificar para asegurarnos de que no existe ningún error y después pulsar el botón Subir, sin conectar el dispositivo aún. A los pocos segundos, el IDE nos pedirá que conectemos el dispositivo y lo reprogramará como podemos ver en la siguiente captura. Ya está nuestro “hola mundo”, a los pocos segundos ejecutará el código, dicho código está guardado en la flash del Attiny85 con lo que se ejecutará cada vez que conectemos el dispositivo a un ordenador.

Evil Crow cable, ¿por qué troyanizar hardware?

En el siguiente enlace podéis ver el vídeo del proceso de subir el payload a Evil Crow cable:

https://twitter.com/JoelSernaMoreno/status/1181296289323130882?s=19

NOTA: Si recibimos el error de que estamos utilizando una versión de Micronucleus antigua, tenemos que hacer lo siguiente:

1. Descargar la última versión de Micronucleus desde su repositorio en GitHub, podemos ejecutar el siguiente comando: git clone https://github.com/micronucleus/micronucleus.git

2. Acceder al directorio micronucleus/commandline con el siguiente comando: cd micronucleus/commandline

3. Compilar Micronucleus con el siguiente comando: make

4. Acceder al directorio .arduino15/packages/digistump/tools/micronucleus/2.0a4 con el siguiente comando: cd ~/.arduino15/packages/digistump/tools/micronucleus/2.0a4/

5. Crear un backup de Micronucleus con el siguiente comando: mv micronucleus micronucleus.old

6. Copiar la última versión de Micronucleus al directorio actual con el siguiente comando: cp ~/PATH/micronucleus/commandline/micronucleus .

Cambiar PATH por el directorio donde hemos descargado Micronucleus

7. Verificar y Subir el código otra vez

Máquina virtual para dummies

La instalación del software puede ser algo tediosa para algunas personas, por eso mismo hemos creado una máquina virtual con toda la configuración y software visto anteriormente.

Para descargar la máquina virtual tenéis que acceder al siguiente enlace (contraseña de la máquina virtual: evilcrowcable):

https://mega.nz/#!dtBmgQIY!4iiRBmrM1v42V-EDzVBr9dvOznbAHK-9jp3wK9BgMlo

La máquina virtual ha sido probada en VMWare, para descargar VMWare aquí: https://www.vmware.com/

Ahora tenemos que configurar nuestro entorno para que la máquina virtual reconozca correctamente Evil Crow cable:

1. Ejecutar VMWare e importar la máquina virtual

2. Iniciar la máquina virtual e Instalar VMWare-Tools: https://vitux.com/how-to-install-vmware-tools-in-ubuntu/

3. Añadir puerto serie con los siguientes pasos:

– En VMWare, hacemos click en la pestaña Settings.

Hacemos click en el botón +Add…

Seleccionamos Serial Port y hacemos click en finalizar

Evil Crow cable, ¿por qué troyanizar hardware?

4. Añadir el controlador USB con los siguientes pasos:

– En VMWare, hacemos click en la pestaña Settings.

Hacemos click en el botón +Add…

Seleccionamos USB controller y hacemos click en finalizar

Evil Crow cable, ¿por qué troyanizar hardware?

5. Iniciar la máquina virtual

6. Abrir un terminal (CTRL+ALT+T) y acceder al directorio del IDE de Arduino con el siguiente comando: cd arduino-1.8.10-linux64/arduino-1.8.10/

7. Ejecutar el IDE de Arduino con el siguiente comando: ./arduino

8. Abrir un payload en el IDE de Arduino. Nota: Los payloads están descargados en el home del usuario de la máquina virtual

9. Verificar y subir los payloads a Evil Crow cable.

Línea de datos

Cuando empezamos el proyecto a finales de 2017 y presentamos la charla “Troyanizando Hardware: ten cuidado con qué (USB) metes y donde” en la primera edición de la h-c0n, el cable BadUSB que teníamos en ese momento sólo permitía alimentación a través del puerto MicroUSB.

En el cable final de producción, hemos conseguido habilitar la línea de datos en modo “PoC”, utilizando el esquema básico que hay publicado en Internet.

¿Qué queremos decir con esto? Actualmente no tenemos control sobre la línea de datos de Evil Crow cable. Para conseguir control sobre la línea de datos necesitaríamos añadir un mini Hub USB dentro del conector USB del cable. Pero… ¿qué podemos hacer mientras esperamos una V2?

La línea de datos podrá/no podrá ser utilizada en las siguientes cuatro situaciones:

1. Si conectamos Evil Crow cable sólo a un ordenador, el payload se ejecutará correctamente.

2. Si conectamos Evil Crow cable junto a un dispositivo multimedia (teléfono, mp3, etc) a la vez a un ordenador, se habilitará la línea de datos y podremos acceder al almacenamiento del dispositivo multimedia, pero el payload no se ejecutará.

3. Primero conectamos Evil Crow cable a un ordenador y después de ejecutar el payload conectamos un dispositivo multimedia al puerto MicroUSB: La línea de datos será habilitada y podremos acceder al almacenamiento del dispositivo multimedia, pero tendremos que esperar unos 10-15 segundos después de la ejecución del payload antes de conectar el dispositivo multimedia. Si conectamos el dispositivo multimedia antes de esos 10-15 segundos, es posible que la línea de datos no funcione correctamente.

4. Primero conectamos Evil Crow cable y un dispositivo multimedia a un ordenador a la vez, la línea de datos será habilitada y tendremos acceso al almacenamiento del dispositivo multimedia (ver punto 2 de esta sección). Después, desconectamos el dispositivo multimedia mientras Evil Crow cable sigue conectado al ordenador: el payload se ejecuta correctamente.

Dejamos el siguiente enlace con la demostración en vídeo de la línea de datos para entenderlo mejor:

https://twitter.com/JoelSernaMoreno/status/1189658626929111040?s=19

Actualmente estamos trabajando en la versión V2 de Evil Crow cable donde tendremos control total sobre la línea de datos, y posiblemente… control remoto sobre el propio cable, pero mientras tanto… se decidió habilitar esta PoC en todos los cables de producción para pruebas 😀

Para terminar, decir que tenéis toda la información de la instalación vista en el artículo y más información sobre la línea de datos en el siguiente repositorio:

https://github.com/joelsernamoreno/EvilCrow-Cable

Un saludo y hasta la próxima!


Volver a la Portada de Logo Paperblog