martes, octubre 29, 2019

Cómo construir tu firmware en Micro:Bit usando MakeCode de Microsoft

Hace unas semanas hablamos sobre Micro:Bit y las posibilidades de esta pequeña placa que podemos encontrar a un precio más que asequible. Hablamos de las posibilidades que ofrece y cómo BTLEJack aprovechaba el hardware para ‘sniffar’ tráfico BLE (Bluetooth Low-Energy) en el aire.

Figura 1: Cómo construir tu firmware en Micro:Bit usando MakeCode de Microsoft

El tema BLE nos ha estado llamando mucho la atención en el departamento de Ideas Locas del área CDO y, pronto, tendremos más sorpresas que comentar y compartir, aunque como ‘leak’ o pista os podemos decir que hay algo ya en el Github de ElevenPaths. Además, en la próxima BlackHat de Europa tendremos la exposición de la herramienta HomePwn.

Figura 2: HomePwn en el GitHub de ElevenPaths

Aquí os dejamos información de la herramienta, la fecha y la hora en la que ElevenPaths presentaremos HomePwn en BlackHat Arsenal 2019. Es para nosotros un orgullo, ya que por tercer año consecutivo estaremos allí: UAC-A-Mola y Dirtytooth Pi nos abrió el camino en 2017 - si no contamos DUST de 2011 con Informática 64 -, iBombShell lo siguió en 2018 y en 2019 estará HomePwn, una nueva herramienta que permite realizar un pentesting a todo dispositivo que conectamos en un hogar y en una oficina, el cual no es directamente tu ordenador. Herramienta que dispone de funcionalidades para tratar con tecnología WiFi, NFC y BLE. ‘All-in-one’. De HomePwn ya hablaremos en otro artículo.

Figura 3: HomePwn en BlackHat Europe Arsenal 2019

Hoy quiero compartir mis ‘trasteos’ con la Micro:Bit y con el lenguaje de bloques MakeCode y cómo de fácil es crear nuestros propios firmware. Además, mostraré como Microsoft pone al alcance de todos la posibilidad de programar en Javascript para la Micro:Bit. La idea que me surgió fu "¿Podré crear un pequeño firmware que utilice conexión Bluetooth?"


Figura 4: Ataque de replay por BLE a los "encuentra-todo"

BLE puede tener cifrado en su comunicación, pero por defecto Micro:Bit proporciona la conexión sin cifrado. Recordemos este vídeo en el que los ‘encuentra-todo’ eran atacados mediante ataque de replay, previa captura de tráfico BLE.

Entorno de trabajo para crear nuestro primer firmware

Microsoft proporciona MakeCode como editor y entorno de trabajo para generar firmware sencillo. La dirección URL es la siguiente. En la web del entorno podemos encontrar un “simulador” de lo que ocurrirá con la Micro:Bit cuando el firmware sea cargado sobre ésta. Es una animación donde se irá dibujando en la matriz de led’s todo lo que ocurrirá por pantalla.

Figura 5: Animación de la matriz de leds

Si nos fijamos en el entorno, encontramos una serie de menús, si decidimos trabajar desde el área de bloques.
Opciones básicas: como, por ejemplo, mostrar algún texto en la matriz de led’s, mostrar algún icono, hacer una pausa, hacer un proceso que se ejecute siempre, etcétera.
Entrada: Este apartado nos proporciona opciones para manejar diferentes sensores: nivel de luz, temperatura, dirección de la brújula, aceleración, botones presionados, etcétera. Hay que recordar que, además, Micro:Bit tiene BLE y radio frecuencia.
El apartado Música: proporciona al programador la opción de reproducir tonos y melodías. Recomendable.
El apartado LED: nos proporciona la posibilidad de pintar sobre la matriz con un control total.
Figura 6: Menús en la zona de bloquers
Bluetooth o Radio: Son excluyentes. Si elegimos Bluetooth podremos configurar y ‘jugar’ con el elemento BLE para pruebas. Recibir conexiones e interactuar con el cliente como queramos o necesitemos.
La parte de bucles: lógica y variables nos permite construir cualquier estructura y programa que queramos hacer con la Micro:Bit, como veremos posteriormente.
Creando nuestro propio firmware: Punto de vista de MakeCode

Vamos a crear un pequeño firmware. Primero lo veremos desde el punto de vista de los bloques de MakeCode. Con la estructura “al iniciar” que podemos seleccionar en el apartado “básico” indicamos a Micro:Bit que queremos que se ejecute cuando la placa se ponga en marcha.

Como se puede ver en la imagen, indicamos que queremos cargar el bluetooth como servicio uart. Además, para que nos demos cuenta de lo que ocurre le indicamos que muestre la cadena “Arrancado!”. Esta palabra irá recorriendo la matriz de 9 led. Una vez se muestra “Arrancado!”, se puede ver un ícono sobre la matriz.

Figura 7: Programa en módulos

Otra estructura a incluir es “al conectar bluetooth”. Esta estructura se puede meter desde el apartado “bluetooth”. Cuando Micro:Bit recibe una conexión este realizará las acciones que incluyamos en esta estructura. Es importante el detalle del pairing.

Figura 8: Bloque "al conectar bluetooth"

Como decía, es importante el detalle del pairing. Desde las opciones del proyecto se puede configurar como queremos el pairing. Se puede elegir entre tres opciones. Con “No Pairing” cualquier dispositivo puede hacer pairing con la Micro:Bit. La opción por defecto necesita poner el modo pairing, para que, posteriormente, el pairing sea automático. El “Passkey pairing” proprociona un mecanismo de seguridad en el que debemos enviar 6 dígitos que nos mostrará por pantalla. Para proyectos básicos con BLE de prueba utilizaremos la primera opción, pero debemos entender que lo más seguro es el tercer caso.

Figura 9. "No Pairing Required"

La estructura “bluetooth al recibir datos” permite leer datos que llegan por la conexión Bluetooth hacia la Micro:Bit. Las acciones que introduzcamos aquí, nos muestra un ejemplo de lo que podemos hacer. Se van leyendo datos y se hacen acciones en función de lo que recibimos.

Figura 10: Bloque "Bluetooth al recibir datos"

Otro ejemplo, uniendo la conexión Bluetooth con la lectura en un solo bloque es el siguiente. Tenemos variables establecida como “connection” y “data” y vamos jugando con ellas para ir recibiendo valores que nos interesan. Como se puede ver, si obtenemos un string concreto realizamos una acción y si recibimos otra cosa no hacemos nada. Esto empieza a dar mucho juego por la facilidad de la programación y el potencial de la placa.

Javascript Vs MakeCode

Ahora, toca hablar del código JavaScript. Aquí tenemos un ejemplo de lo que se puede hacer y en qué se traduce el código de bloques generado previamente. Al final, es más rápido hacerlo en código Javascript, pero hasta que se vaya aprendiendo se puede utilizar el lenguaje de bloques para ir creando firmwares y darle sentido a nuestra Micro:Bit. Hay que tener en cuenta que el potencial de la placa con todos los sensores que tiene es muy grande.

Figura 11: Programación en JavaScript

Probé a lanzar un BTLEJack cuando intercambiamos datos entre una app móvil, lo simulé con nRF Connect, El tráfico se envía en plano como se puede observar tras una captura con BTLEJack con la ejecución del siguiente comando:
btlejack -w /tmp/ble -o /Users/cx01724/Desktop/smartlock_1level.pcap -x nordic -c any
Hay que enlazar Wireshark con BTLEJack creando un pipe, el cual es representado con /tmp/ble. En la captura se puede observar el opcode de escritura, el handle sobre el que se escribe y la instrucción que se está enviando. Esto puede simular ataques de replay sobre la placa y la simulación que estamos haciendo.

Figura 12: Captura BLE

Si no has probado esta placa, es totalmente recomendable por todo lo que se puede hacer con ella. Incluso, desde el punto de seguridad con radio frecuencia y BLE se puede dar bastante juego.

Saludos,

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDO de Telefónica.
Para consultas puedes usar el Buzón Público para contactar con Pablo González

No hay comentarios:

Publicar un comentario