Un breve viaje al baremetal hardware hacking

Javier Tallón
Javier TallónSecurity Expert at jtsec Beyond IT Security
A brief journey to
baremetal hardware hacking
whoami
@jtsecES
 Javier Tallón
 Co Founder and Chief Operations Officer at
@jtsecES
careers@jtsec.es
• CyberSecurity Certification: Common Criteria, FIPS 140-2, ISO 27K1, …
• Pentesters con sello
@jtsecES
@jtsecES
• No podemos contaros cuál es el cacharro (ooooh!)
• Pero podemos poner fotos del interior (bieeeen!)
• Proyecto de pentesting (sin norma) para verificar la
seguridad de su producto
@jtsecES
• ¿Qué entendemos por Baremetal?
• Trabajamos directamente sobre el hardware (metal)
• ¿Qué diferencias hay al hacer Ingeniería inversa?
• No hay símbolos (NINGUNO)
• No hay sistema de ficheros
• Zero Knowledge
Baremetal Hardware Hacking?
@jtsecES
Las etapas del viaje
1. El Comienzo – El cacharro y su arquitectura
2. El Puente– Accediendo al código
3. El Desierto – Bypass de protecciones de lectura
4. El Descenso – Reversing ARM
5. Los Túneles – Debugging ARM
6. El Templo – Fuzz testing
7. La Montaña – Explotación
8. La Cumbre – Manteniendo el acceso
@jtsecES
1. El comienzo – El cacharro y su arquitectura
- Múltiples muestras permiten pruebas destructivas
- Primer paso: Abrir la caja
- Bypass Anti tamper Switch
@jtsecES
1. El comienzo – El cacharro y su arquitectura
- Fase de reconocimiento
• Fingerprint module
• LCD
• Contactless interface
• Contact interface
• USB interface
• 2x SAM cards
@jtsecES
1. El comienzo – El cacharro y su arquitectura
- Fase de reconocimiento
• No external flash or storage
• 2 x STM32 ARM ICs
• APP: STM32F103RET6 <M3>
• SEC: STM32F072 <M0>
@jtsecES
1. El comienzo – El cacharro y su arquitectura
- Fase de reconocimiento
FLASH CPU RAM
FLASH CPU RAM
• Microcontrolador
• No suele haber S.O.
• Poca capacidad
• Capacidades de tiempo real
• Microprocesador
• Flash menos protegida
• Mayor capacidad
@jtsecES
1. El comienzo – El cacharro y su arquitectura
- Fase de reconocimiento
• STM32F103RET6 <M3>
• Flash: 512KB
• SRAM: 64 KB
• STM32F072RB <M0>
• Flash: 128KB
• SRAM: 16 KB
@jtsecES
1. El comienzo – El cacharro y su arquitectura
- Fase de reconocimiento
@jtsecES
1. El comienzo – El cacharro y su arquitectura
- Fase de reconocimiento • Estudio detallado de la PCB
@jtsecES
1. El comienzo – El cacharro y su arquitectura
- Fase de reconocimiento
• Identificamos los posibles paths de ataque
• Externos
• USB
• Fingerprint
• Smartcard interfaces
• SAM interfaces
• LCD
• Internos
• JTAG/SWD
• UART
• IC1 – IC2
• IC1 – Fingerprint
• IC1 – Smartcard
• IC1 – SAM
@jtsecES
2. El Puente– Accediendo al código
- El acceso a las interfaces no es tan fácil como a veces se pinta
- Popular los PADs
@jtsecES
2. El Puente– Accediendo al código
- Acceso directo a pista!
@jtsecES
@jtsecES
2. El Puente– Accediendo al código
- Acceso directo a pista!
@jtsecES
2. El Puente– Accediendo al código
- Acceso directo a pista!
UART
MAN IN THE BUS
@jtsecES
@jtsecES
2. El Puente– Accediendo al código
MAN IN THE BUS
- Teóricamente podemos esnifar tráfico
- Hay que averiguar los parámetros de
conexión
@jtsecES
2. El Puente– Accediendo al código
MAN IN THE BUS
- Teóricamente podemos esnifar tráfico
- Hay que averiguar los parámetros de
conexión
- VELOCIDAD LOCA (approx. 921699 bps)
@jtsecES
2. El Puente– Accediendo al código
- Suplantando las comunicaciones y descifrando el protocolo
- Los paquetes empiezan por 02
- Terminan por 03
- Tiene un CRC
@jtsecES
2. El Puente– Accediendo al código
• Tres maneras de acceder al código
• JTAG (Join Test Action Group)
• Daisy chain
• TDI, TDO, TMS, TCK, TRST
• SWD
• SWDIO, SWCLK
• UART (Bootloader)
• RX, TX, GND
BoundaryScan
BoundaryScan
Boundary Scan
Boundary Scan
ChipI/O
ChipI/O
Chip I/O
Chip I/O
Flash
Controller
Debug
Controller
JTAG
Controller
UART
Controller
@jtsecES
2. El Puente– Accediendo al código
• JTAG no es estándar, pero en general es posible
• Obtener identificación de los chips (IDCODE)
• Controlar los pins (Boundary Scan)
• Acceder a los registros de la CPU
• Acceder a la RAM
• Acceder a la Flash
@jtsecES
2. El Puente– Accediendo al código
• STM32F103RET6 (APP)
@jtsecES
2. El Puente– Accediendo al código
• STM32F103RET6 (APP)
• Pudimos volcar el chip forzando a que el micro arrancase desde el bootloader
y leyendo el puerto serie
• Mantener en alta (3,3V) el pin BOOT0
• Conectar al puerto serie (que normalmente conecta con el otro chip)
• Forzar reset (no lo encontramos en la placa)
@jtsecES
2. El Puente– Accediendo al código
• STM32F072 (SEC)
@jtsecES
3. El Desierto – Bypass de protecciones de lectura
• STM32F072 (SEC)
• Tres niveles de seguridad para la protección de lectura (RDP)
• 2 bytes: nRDP y RDP
• nRDP != ~RDP (nRDP es el complemento bit a bit RDP)
• RDP Level 0: “no protection” (Default) Acceso complete de lectura/escritura
• RDP Level 1: “read protection” No hay acceso a la memoria flash
• Permite salir del nivel, pero fuerza un borrado de todo
• Pero permite el acceso a la SRAM
• Y a los periféricos
• RDP Level 2: “no debug” SWD deshabilitado para siempre
@jtsecES
3. El Desierto – Bypass de protecciones de lectura
• STM32F072 (SEC)
• RDP y nRDP: Guardados en la región “Option Bytes”
• Memoria no volátil para la configuración del
sistema
• Parte de la memoria flash
• Parte del mapa de memoria del sistema
@jtsecES
3. El Desierto – Bypass de protecciones de lectura
@jtsecES
3. El Desierto – Bypass de protecciones de lectura
• STM32F072 (SEC)
• Tres ataques a la familia STM32F0
• Cold Boot Stepping
• Si podemos leer la SRAM y el código incluye una
comprobación de integridad podemos inferir el
contenido de la flash.
• Security downgrade
• Debug Interface exploit
@jtsecES
3. El Desierto – Bypass de protecciones de lectura
• STM32F072 (SEC)
• Security Downgrade
• 1 valor se mapea a CRP Level 2
• 1 valor se mapea a CRP Level 0
• El resto a CRP Level1
@jtsecES
3. El Desierto – Bypass de protecciones de lectura
• STM32F072 (SEC)
• Security Downgrade
@jtsecES
3. El Desierto – Bypass de protecciones de lectura
• STM32F072 (SEC)
• Debug Interface exploit
• Condición de carrera entre que se accede a la flash por SWD y que se deniega
expresamente el permiso
@jtsecES
3. El Desierto – Bypass de protecciones de lectura
• STM32F072 (SEC)
• Debug Interface exploit
• Resetear sistema
• Inicializar interfaz de debug
• Configurar dirección de lectura
• Leer flash
• Si OK → address += 4
@jtsecES
3. El Desierto – Bypass de protecciones de lectura
• STM32F072 (SEC)
@jtsecES
3. El Desierto – Bypass de protecciones de lectura
• ¡Tenemos los dos binarios!
@jtsecES
4. El Descenso – Reversing ARM
• ARM Assembly? No problem!
• ARM es RISC, que es más simple que CISC
• ARM ISA
• Modos CPU
• ARM mode (4 B instructions) (word aligned)
• Thumb mode (2 B instructions) (half word aligned)
• Thumb-2 mode (2 or 4 B instructions)
• El procesador sabe si está en Thumb mode porque el
bit menos significativo del contador de programa vale 1
• Direcciones impares
@jtsecES
4. El Descenso – Reversing ARM
• ARM ISA
• Registros
• Todos son registros R0-R15 generales y puede accederse directamente a ellos.
• R15 se usa como EIP (PC).
• R14 es el Link-Register (LR).
• R13 se usa como ESP (SP)
• R11 se usa como EBP (FP)
@jtsecES
4. El Descenso – Reversing ARM
• ARM ISA
• Saltos
• Branch (B{cond} address) → Salta a la dirección
• Branch and optionally Exchange (BX{cond} address) → Salta a la dirección y cambia de modo si es
necesario
• Branch with Link (BL{cond} address) → Salta a la dirección y guarda la dirección de la siguiente
instrucción en LR
• Branch with Link and optionally Exchange (BL{cond} address) → Salta a la dirección, cambia de modo
si es necesario y guarda la dirección de la siguiente instrucción en LR
• Acceso a memoria
• LDR Ra, [Rb] → Copia en el registro Ra el contenido de la dirección apuntada por Rb
• STR Ra, [Rb] → Copia en la dirección apuntada por Rb el contenido del registro Ra
@jtsecES
4. El Descenso – Reversing ARM
• Where are my symbols?
@jtsecES
4. El Descenso – Reversing ARM
• Recovering symbols from datasheet
• First approach: Check datasheet!
@jtsecES
4. El Descenso – Reversing ARM
• Recovering symbols
@jtsecES
4. El Descenso – Reversing ARM
• Recovering symbols from datasheet
• Los primeros bytes contienen la ISR, así que es un
buen punto de partida
• Reset apunta al código que se ejecutará en primer
lugar
@jtsecES
4. El Descenso – Reversing ARM
• Recovering symbols from SRAM
• Muchas regiones de memoria no son identificadas
como funciones por IDA Pro
• Los handlers no son llamados por nadie! (No
hay función padre)
• Truco! Volcamos la SRAM (usando SWD) y
buscamos punteros a zonas de memoria de la
flash (0x0800xxxx)
• Function handlers (e.g. USB)
• Constantes (pools)
@jtsecES
4. El Descenso – Reversing ARM
• Recovering symbols with BinDiff
• BinDiff es una herramienta de comparación para archivos binarios, que ayuda a los investigadores e
ingenieros de vulnerabilidades a encontrar rápidamente diferencias y similitudes en el código
desensamblado.
• Con BinDiff puede identificar y aislar las correcciones de vulnerabilidades en los parches suministrados por
los proveedores. También puede portar símbolos y comentarios entre desensamblajes de múltiples
versiones del mismo binario o usar BinDiff para reunir pruebas de robo de código o violación de patente.
• Necesita los archivos del IDB generados por IDA Pro.
@jtsecES
4. El Descenso – Reversing ARM
• Recovering symbols with BinDiff
• BinDiff usa heurísticas para comprobar similitud entre funciones
@jtsecES
4. El Descenso – Reversing ARM
• Recovering symbols with BinDiff
• Podemos usarlo para:
• Reusar trabajo entre el desensamblado de
ambos MCUs
• Adivinar el compilador usado y las funciones de
libc.
• Idea! Compilamos un programa básico con
distintas toolchains y usamos BinDiff para
encontrar similitudes
• Supuesto general: Los desarrolladores son
vagos y usarán lo que usa todo el mundo.
• Googleamos “STM32 development
environment”
• Contiene proyectos y aplicaciones de
ejemplo!
@jtsecES
4. El Descenso – Reversing ARM
• Recovering symbols with BinDiff
• Las toolchains / IDEs más importantes son:
• IAR Embedded Workbench
• Keil uVision
• Atollic TrueStudio
• Compilamos proyecto de ejemplo (con símbolos!), usamos BinDiff, si no funciona intentamos con más IDEs!
@jtsecES
4. El Descenso – Reversing ARM
• Recovering symbols with Diaphora
• Diaphora es un plugin para IDA Pro que tiene como objetivo ayudar en las tareas típicas de BinDiffing. Es
similar a otros productos de la competencia y proyectos de código abierto como Zynamics BinDiff,
DarunGrim o TurboDiff. Sin embargo, es capaz de realizar más acciones que cualquiera de los plugins o
proyectos IDA anteriores.
@jtsecES
4. El Descenso – Reversing ARM
• Recovering symbols with Diaphora
• Script en Python que se llama desde IDA Pro
• Usa bases de datos sqlite como almacenamiento intermedio.
• Heurísticas como BinDiff pero usando el poder de Hex-Rays
@jtsecES
4. El Descenso – Reversing ARM
• Recovering symbols with Diaphora
@jtsecES
4. El Descenso – Reversing ARM
• IDAPython y el acceso a periféricos
• Check datasheet again!
• Los periféricos están
mapeados en memoria
¿Cómo encontrar el acceso
a los mismos en el
desensamblado?
@jtsecES
4. El Descenso – Reversing ARM
• IDAPython y el acceso a periféricos
• Sabiendo el aspecto que tendrá en el desensamblado la funcionalidad que estamos
buscando podemos crear un script que busque ese patrón de ensamblador por todo el
binario.
• Para cada instrucción si el registro de la instrucción tiene la dirección de un periférico
que nos interesa
Y
• Es usado en un STR → Output
• Es usado en un LDR → Input
@jtsecES
4. El Descenso – Reversing ARM
• IDAPython y el acceso a periféricos
• Sabiendo el aspecto que tendrá en el desensamblado la funcionalidad que estamos
buscando podemos crear un script que busque ese patrón de ensamblador por todo el
binario.
@jtsecES
5. Los Túneles – Debugging ARM
• Usualmente el análisis estático de las funciones no es suficiente
• O es demasiado costoso
• El problema del debugging
• Múltiples procesadores
• Conexiones difíciles
• Condiciones de carrera
• …
• Trucos para debugger firmware en tu PC
• mmap
• source code copy
• Baremetal emulation
@jtsecES
5. Los Túneles – Debugging ARM
• Restricciones
• A priori no es posible hacer entrada / salida
• Ni interactuar con los periféricos
• No es posible interactuar con zonas de memoria que puede
que no se hayan inicializado
• Mejor para estudiar funciones aisladas
@jtsecES
5. Los Túneles – Debugging ARM
• Offline debugging - mmap
• 1. Abrimos el fichero
• 2. Mapeamos con mmap a la función que nos
interese
• 3. Creamos un punter a función a la dirección
que queremos probar
• 4. Llamamos a la función con argumentos
similiares a los que vemos en el código
0x8008a00
@jtsecES
5. Los Túneles – Debugging ARM
• Offline debugging – source code copy
• 1. Decompilamos la función que queremos estudiar
con Hex Rays
• 2. Copiamos la función a nuestro archive C
• 3. Llamamos a la función con los argumentos
apropiados
@jtsecES
5. Los Túneles – Debugging ARM
• Offline debugging – compilar
• Compilar con:
• arm-linux-gnueabi-gcc -static sccopy-trick.c -o
sccopy-trick -g
• Ejecutar con:
• qemu-arm scscopy-trick
• Depurar con:
• qemu-arm -singlestep -g 1234 mmap-trick
• gdb-multiarch
(gdb) target remote localhost:1234
@jtsecES
5. Los Túneles – Debugging ARM
• Offline debugging – baremetal emulation
• GNU MCU Eclipse es un proyecto de código abierto que incluye una familia de plug-ins y herramientas
Eclipse para el desarrollo de ARM y RISC-V embebidos multiplataforma, basados en la toolchain GNU. Este
proyecto está alojado en GitHub.
• https://gnu-mcu-eclipse.github.io/
• GNU MCU Eclipse QEMU plugin
• Puede ser usado de manera independiente
• Soporta bastantes dispositivos (incluyendo STM32)
• … y placas de desarrollo
@jtsecES
5. Los Túneles – Debugging ARM
• Offline debugging – baremetal emulation
• Ejecutar qemu
• ./qemu-system-gnuarmeclipse -mcu STM32F103RB -nographic --image /root/Desktop/STM32F103.bin
-verbose -serial pty -serial pty -serial pty -serial pty -S -s
• Ejecutar gdb
• gdb-multiarch
(gdb) target remote localhost:1234
• Monitorizar puertos serie
tail -f /dev/pts/? |hexdump -C
Reset ISR
@jtsecES
6. El Templo – Fuzz testing
• Hasta ahora tenemos
• Acceso a SWD / JTAG
• Conocimiento de nuestro objetivo a través del
reversing
• Estático (IDA Pro)
• Dinámico offline (debugging)
• Dinámico (bus eavesdropping)
• ¡Es hora de encontrar bugs! ¡Fuzzing!
@jtsecES
6. El Templo – Fuzz testing
• Debemos de ser capaces de, de manera automática:
• Generar datos de prueba
• Transmitirlos a nuestro objetivo
• Monitorizar y registrar el comportamiento
• Depende de la interfaz. En nuestro caso (entre otras)
interfaces SAM
@jtsecES
6. El Templo – Fuzz testing
• Conectamos a nuestro micro con las interfaces que hemos externalizado usando un
programador propio de la marca (recordad que JTAG no es del todo estándar).
@jtsecES
6. El Templo – Fuzz testing
• Conectamos adecuadamente
• Arrancamos OpenOCD
• Ejecutar gdb
gdb-multiarch
(gdb) target remote localhost:3333
• ¡Lanzamoss fuzz-testing y
monitorizamos!
@jtsecES
7. La Montaña – Explotación
• Aplica todo lo que ya conocéis
• Format string bugs
• Stack overflow
• …
• No hay protecciones del S.O.
• No ASLR
• Con una interesante diferencia!
@jtsecES
7. La Montaña – Explotación
• ¿Qué ocurre al leer la dirección 0x00000000?
• Windows → Crash (Segmentation Fault)
• Linux → Crash (Segmentation Fault)
• Baremetal → Depende
• Usualmente no hay MMU
• ¡En 0x00000000 hay una copia del firmware!
@jtsecES
8. La Cumbre – Manteniendo el acceso
• Trojanizar un firmware baremetal es relativamente sencillo!
• Flash:
• Concatenamos nuestro código al código original
• Modificamos el código original para que salte al nuestro
@jtsecES
8. La Cumbre – Manteniendo el acceso
• Necesitaremos espacio para nuestras variables
• SRAM:
• Pintamos la SRAM con un valor conocido antes de que se
ejecute el código
• Dejamos que el dispositivo arranque e interactuamos con él
• Volcamos de nuevo la SRAM para encontrar regiones no
utilizadas
• Cuando sepa qué regiones de memoria están disponibles,
puede decirle a su compilador que use estas regiones de
memoria
@jtsecES
Conclusiones
• Lee las especificaciones!
• Asume que el firmware es público
• Protege los buses!
• Cifra! Siempre!
• ¿Physical access == Game Over?
jtsec: Beyond IT Security
c/ Abeto s/n Edificio CEG Oficina 2B
CP 18230 Granada – Atarfe – Spain
hola@jtsec.es
@jtsecES
www.jtsec.es
¡Gracias por aguantar!
1 of 73

Recommended

Navaja Negra 2018 - Análisis Forense en dispositivos Android en casos extremo... by
Navaja Negra 2018 - Análisis Forense en dispositivos Android en casos extremo...Navaja Negra 2018 - Análisis Forense en dispositivos Android en casos extremo...
Navaja Negra 2018 - Análisis Forense en dispositivos Android en casos extremo...Buenaventura Salcedo Santos-Olmo
963 views56 slides
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018] by
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]RootedCON
718 views93 slides
David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019] by
David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]
David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]RootedCON
608 views40 slides
⭐⭐⭐⭐⭐ INTRODUCCÓN A LOS CPLDs Y FPGAs by
⭐⭐⭐⭐⭐ INTRODUCCÓN A LOS CPLDs Y FPGAs⭐⭐⭐⭐⭐ INTRODUCCÓN A LOS CPLDs Y FPGAs
⭐⭐⭐⭐⭐ INTRODUCCÓN A LOS CPLDs Y FPGAsVictor Asanza
3.5K views26 slides
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011] by
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]RootedCON
1.3K views53 slides
Introduccion a la microelectronica by
Introduccion a la microelectronicaIntroduccion a la microelectronica
Introduccion a la microelectronicaMarco Aurelio
1.9K views47 slides

More Related Content

What's hot

Se5611 t3 extra_camacho by
Se5611 t3 extra_camachoSe5611 t3 extra_camacho
Se5611 t3 extra_camachoLuisAdrianCamacho
117 views6 slides
Grabacion de microcontroladores_pic by
Grabacion de microcontroladores_picGrabacion de microcontroladores_pic
Grabacion de microcontroladores_picMelvin Gustavo Balladares Rocha
319 views70 slides
Curso Micro Tema 1 by
Curso Micro Tema 1Curso Micro Tema 1
Curso Micro Tema 1Luis Zurita
3.7K views25 slides
PicSumador by
PicSumadorPicSumador
PicSumadorEduardo Triana
2.4K views12 slides
⭐⭐⭐⭐⭐ SOLUCIÓN LECCIÓN SISTEMAS DIGITALES 2, 2do Parcial (2021PAO2) C6 by
⭐⭐⭐⭐⭐ SOLUCIÓN LECCIÓN SISTEMAS DIGITALES 2, 2do Parcial (2021PAO2) C6⭐⭐⭐⭐⭐ SOLUCIÓN LECCIÓN SISTEMAS DIGITALES 2, 2do Parcial (2021PAO2) C6
⭐⭐⭐⭐⭐ SOLUCIÓN LECCIÓN SISTEMAS DIGITALES 2, 2do Parcial (2021PAO2) C6Victor Asanza
4.9K views7 slides
Cartilla pic16f877 by
Cartilla pic16f877Cartilla pic16f877
Cartilla pic16f877Franklin Isai Leonhuacal
317 views10 slides

What's hot(7)

Similar to Un breve viaje al baremetal hardware hacking

Enrutamiento estatico by
Enrutamiento estaticoEnrutamiento estatico
Enrutamiento estaticoProfessor
1K views35 slides
Electronica: microcontroladores aplicaciones IoT by
Electronica: microcontroladores aplicaciones IoTElectronica: microcontroladores aplicaciones IoT
Electronica: microcontroladores aplicaciones IoTLeopoldo Armesto Ángel
256 views17 slides
Trabajo equipos by
Trabajo equiposTrabajo equipos
Trabajo equiposLorentia Fernandez
268 views11 slides
Cronologia y caracteristicas de microprocesadores Intel - Update hasta Intel ... by
Cronologia y caracteristicas de microprocesadores Intel - Update hasta Intel ...Cronologia y caracteristicas de microprocesadores Intel - Update hasta Intel ...
Cronologia y caracteristicas de microprocesadores Intel - Update hasta Intel ...Victor Escamilla
80.4K views19 slides
Arquitectura Microcontrolador PIC16F887 by
Arquitectura Microcontrolador PIC16F887Arquitectura Microcontrolador PIC16F887
Arquitectura Microcontrolador PIC16F887Fernando Aparicio Urbano Molano
18.8K views40 slides
Dispositivos de interconexión de by
Dispositivos de interconexión deDispositivos de interconexión de
Dispositivos de interconexión deMartin Zuñiga
344 views23 slides

Similar to Un breve viaje al baremetal hardware hacking(20)

Enrutamiento estatico by Professor
Enrutamiento estaticoEnrutamiento estatico
Enrutamiento estatico
Professor1K views
Cronologia y caracteristicas de microprocesadores Intel - Update hasta Intel ... by Victor Escamilla
Cronologia y caracteristicas de microprocesadores Intel - Update hasta Intel ...Cronologia y caracteristicas de microprocesadores Intel - Update hasta Intel ...
Cronologia y caracteristicas de microprocesadores Intel - Update hasta Intel ...
Victor Escamilla80.4K views
Dispositivos de interconexión de by Martin Zuñiga
Dispositivos de interconexión deDispositivos de interconexión de
Dispositivos de interconexión de
Martin Zuñiga344 views
Arquitectura de Computadorasv by Jairo Anton
Arquitectura de ComputadorasvArquitectura de Computadorasv
Arquitectura de Computadorasv
Jairo Anton1.3K views
Cuestionario de informatica by LADY MORALES
Cuestionario de informaticaCuestionario de informatica
Cuestionario de informatica
LADY MORALES157 views
Cuestionario de informatica by flor palacios
Cuestionario de informaticaCuestionario de informatica
Cuestionario de informatica
flor palacios194 views
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, TALLER RESUELTO 1ra EVALUACIÓN (2019 2do ... by Victor Asanza
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, TALLER RESUELTO 1ra EVALUACIÓN (2019 2do ...⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, TALLER RESUELTO 1ra EVALUACIÓN (2019 2do ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, TALLER RESUELTO 1ra EVALUACIÓN (2019 2do ...
Victor Asanza2K views
3 microcontroladores by Proyesa
3 microcontroladores3 microcontroladores
3 microcontroladores
Proyesa312 views
Cuáles son las mainboard y los procesadores más recientes en el mercado by Karina Coba
Cuáles son las mainboard y los procesadores  más recientes en el mercadoCuáles son las mainboard y los procesadores  más recientes en el mercado
Cuáles son las mainboard y los procesadores más recientes en el mercado
Karina Coba6.1K views
Procesador De Un Ordenador by carlos2211
Procesador De Un OrdenadorProcesador De Un Ordenador
Procesador De Un Ordenador
carlos2211108 views
Procesador De Un Ordenador by carlos2211
Procesador De Un OrdenadorProcesador De Un Ordenador
Procesador De Un Ordenador
carlos2211323 views

More from Javier Tallón

ICCC2023 Statistics Report, has Common Criteria reached its peak? by
ICCC2023 Statistics Report, has Common Criteria reached its peak?ICCC2023 Statistics Report, has Common Criteria reached its peak?
ICCC2023 Statistics Report, has Common Criteria reached its peak?Javier Tallón
22 views29 slides
ICCC23 -The new cryptographic evaluation methodology created by CCN by
ICCC23 -The new cryptographic evaluation methodology created by CCNICCC23 -The new cryptographic evaluation methodology created by CCN
ICCC23 -The new cryptographic evaluation methodology created by CCNJavier Tallón
4 views44 slides
Experiences evaluating cloud services and products by
Experiences evaluating cloud services and productsExperiences evaluating cloud services and products
Experiences evaluating cloud services and productsJavier Tallón
8 views26 slides
TAICS - Cybersecurity Certification for European Market.pptx by
TAICS - Cybersecurity Certification for European Market.pptxTAICS - Cybersecurity Certification for European Market.pptx
TAICS - Cybersecurity Certification for European Market.pptxJavier Tallón
56 views31 slides
La ventaja de implementar una solución de ciberseguridad certificada por el C... by
La ventaja de implementar una solución de ciberseguridad certificada por el C...La ventaja de implementar una solución de ciberseguridad certificada por el C...
La ventaja de implementar una solución de ciberseguridad certificada por el C...Javier Tallón
8 views24 slides
EUCA23 - Evolution of cryptographic evaluation in Europe.pdf by
EUCA23 - Evolution of cryptographic evaluation in Europe.pdfEUCA23 - Evolution of cryptographic evaluation in Europe.pdf
EUCA23 - Evolution of cryptographic evaluation in Europe.pdfJavier Tallón
14 views41 slides

More from Javier Tallón(20)

ICCC2023 Statistics Report, has Common Criteria reached its peak? by Javier Tallón
ICCC2023 Statistics Report, has Common Criteria reached its peak?ICCC2023 Statistics Report, has Common Criteria reached its peak?
ICCC2023 Statistics Report, has Common Criteria reached its peak?
Javier Tallón22 views
ICCC23 -The new cryptographic evaluation methodology created by CCN by Javier Tallón
ICCC23 -The new cryptographic evaluation methodology created by CCNICCC23 -The new cryptographic evaluation methodology created by CCN
ICCC23 -The new cryptographic evaluation methodology created by CCN
Javier Tallón4 views
Experiences evaluating cloud services and products by Javier Tallón
Experiences evaluating cloud services and productsExperiences evaluating cloud services and products
Experiences evaluating cloud services and products
Javier Tallón8 views
TAICS - Cybersecurity Certification for European Market.pptx by Javier Tallón
TAICS - Cybersecurity Certification for European Market.pptxTAICS - Cybersecurity Certification for European Market.pptx
TAICS - Cybersecurity Certification for European Market.pptx
Javier Tallón56 views
La ventaja de implementar una solución de ciberseguridad certificada por el C... by Javier Tallón
La ventaja de implementar una solución de ciberseguridad certificada por el C...La ventaja de implementar una solución de ciberseguridad certificada por el C...
La ventaja de implementar una solución de ciberseguridad certificada por el C...
Javier Tallón8 views
EUCA23 - Evolution of cryptographic evaluation in Europe.pdf by Javier Tallón
EUCA23 - Evolution of cryptographic evaluation in Europe.pdfEUCA23 - Evolution of cryptographic evaluation in Europe.pdf
EUCA23 - Evolution of cryptographic evaluation in Europe.pdf
Javier Tallón14 views
Evolucionado la evaluación Criptográfica by Javier Tallón
Evolucionado la evaluación CriptográficaEvolucionado la evaluación Criptográfica
Evolucionado la evaluación Criptográfica
Javier Tallón22 views
España y CCN como referentes en la evaluación de ciberseguridad de soluciones... by Javier Tallón
España y CCN como referentes en la evaluación de ciberseguridad de soluciones...España y CCN como referentes en la evaluación de ciberseguridad de soluciones...
España y CCN como referentes en la evaluación de ciberseguridad de soluciones...
Javier Tallón8 views
EUCA22 Panel Discussion: Differences between lightweight certification schemes by Javier Tallón
EUCA22 Panel Discussion: Differences between lightweight certification schemesEUCA22 Panel Discussion: Differences between lightweight certification schemes
EUCA22 Panel Discussion: Differences between lightweight certification schemes
Javier Tallón16 views
EUCA22 - Patch Management ISO_IEC 15408 & 18045 by Javier Tallón
EUCA22 - Patch Management ISO_IEC 15408 & 18045EUCA22 - Patch Management ISO_IEC 15408 & 18045
EUCA22 - Patch Management ISO_IEC 15408 & 18045
Javier Tallón22 views
Cross standard and scheme composition - A needed cornerstone for the European... by Javier Tallón
Cross standard and scheme composition - A needed cornerstone for the European...Cross standard and scheme composition - A needed cornerstone for the European...
Cross standard and scheme composition - A needed cornerstone for the European...
Javier Tallón16 views
¿Cómo incluir productos y servicios en el catálogo CPSTIC (CCN-STIC 105)? by Javier Tallón
¿Cómo incluir productos y servicios en el catálogo CPSTIC (CCN-STIC 105)?¿Cómo incluir productos y servicios en el catálogo CPSTIC (CCN-STIC 105)?
¿Cómo incluir productos y servicios en el catálogo CPSTIC (CCN-STIC 105)?
Javier Tallón32 views
Is Automation Necessary for the CC Survival? by Javier Tallón
Is Automation Necessary for the CC Survival?Is Automation Necessary for the CC Survival?
Is Automation Necessary for the CC Survival?
Javier Tallón10 views
CCCAB tool - Making CABs life easy - Chapter 2 by Javier Tallón
CCCAB tool - Making CABs life easy - Chapter 2CCCAB tool - Making CABs life easy - Chapter 2
CCCAB tool - Making CABs life easy - Chapter 2
Javier Tallón10 views
2022 CC Statistics report: will this year beat last year's record number of c... by Javier Tallón
2022 CC Statistics report: will this year beat last year's record number of c...2022 CC Statistics report: will this year beat last year's record number of c...
2022 CC Statistics report: will this year beat last year's record number of c...
Javier Tallón57 views
CCCAB, la apuesta europea por la automatización de los Organismos de Certific... by Javier Tallón
CCCAB, la apuesta europea por la automatización de los Organismos de Certific...CCCAB, la apuesta europea por la automatización de los Organismos de Certific...
CCCAB, la apuesta europea por la automatización de los Organismos de Certific...
Javier Tallón59 views
Automating Common Criteria by Javier Tallón
Automating Common Criteria Automating Common Criteria
Automating Common Criteria
Javier Tallón127 views

Recently uploaded

La nueva era. by
La nueva era.La nueva era.
La nueva era.msebastianalvarezz
10 views3 slides
Tarea-Teclados ergonómico y pantallas táctiles.pptx by
Tarea-Teclados ergonómico y pantallas táctiles.pptxTarea-Teclados ergonómico y pantallas táctiles.pptx
Tarea-Teclados ergonómico y pantallas táctiles.pptxxiomarakerly200325
8 views16 slides
Excel avanzado.pdf by
Excel avanzado.pdfExcel avanzado.pdf
Excel avanzado.pdfNyobeMahechaDvila
46 views22 slides
PRESENTACION DE FC.pptx by
PRESENTACION DE FC.pptxPRESENTACION DE FC.pptx
PRESENTACION DE FC.pptxGabrielRivas75
5 views5 slides
Las Tecnologías de la Información y la Comunicación en la Escuela by
Las Tecnologías de la Información y la Comunicación en la EscuelaLas Tecnologías de la Información y la Comunicación en la Escuela
Las Tecnologías de la Información y la Comunicación en la Escuelaandresbenavides012
10 views235 slides
fundamentosdeelectricidadyelectronica-231021044044-6e7cadfc.pdf by
fundamentosdeelectricidadyelectronica-231021044044-6e7cadfc.pdffundamentosdeelectricidadyelectronica-231021044044-6e7cadfc.pdf
fundamentosdeelectricidadyelectronica-231021044044-6e7cadfc.pdf8m6zpwytgs
8 views20 slides

Recently uploaded(20)

Tarea-Teclados ergonómico y pantallas táctiles.pptx by xiomarakerly200325
Tarea-Teclados ergonómico y pantallas táctiles.pptxTarea-Teclados ergonómico y pantallas táctiles.pptx
Tarea-Teclados ergonómico y pantallas táctiles.pptx
Las Tecnologías de la Información y la Comunicación en la Escuela by andresbenavides012
Las Tecnologías de la Información y la Comunicación en la EscuelaLas Tecnologías de la Información y la Comunicación en la Escuela
Las Tecnologías de la Información y la Comunicación en la Escuela
fundamentosdeelectricidadyelectronica-231021044044-6e7cadfc.pdf by 8m6zpwytgs
fundamentosdeelectricidadyelectronica-231021044044-6e7cadfc.pdffundamentosdeelectricidadyelectronica-231021044044-6e7cadfc.pdf
fundamentosdeelectricidadyelectronica-231021044044-6e7cadfc.pdf
8m6zpwytgs8 views
programacion orientada a objetos_sebastian segura barreto.pptx by sebastiansegura25
programacion orientada a objetos_sebastian segura barreto.pptxprogramacion orientada a objetos_sebastian segura barreto.pptx
programacion orientada a objetos_sebastian segura barreto.pptx
excelavanzado1-231020003159-be608ddc.pdf by sarahloradorado
excelavanzado1-231020003159-be608ddc.pdfexcelavanzado1-231020003159-be608ddc.pdf
excelavanzado1-231020003159-be608ddc.pdf
sarahloradorado11 views
Probando aplicaciones basadas en LLMs.pdf by Federico Toledo
Probando aplicaciones basadas en LLMs.pdfProbando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdf
Federico Toledo44 views
Basura electronica.docx by MissPotato2
Basura electronica.docxBasura electronica.docx
Basura electronica.docx
MissPotato28 views
PostCall: Encuestas telefónicas post llamada by OpenDireito
PostCall: Encuestas telefónicas post llamadaPostCall: Encuestas telefónicas post llamada
PostCall: Encuestas telefónicas post llamada
OpenDireito6 views
FUNDAMENTOS DE ELECTRICIDAD Y ELECTRONICA.pdf by ortizjuanjose591
FUNDAMENTOS DE ELECTRICIDAD Y ELECTRONICA.pdfFUNDAMENTOS DE ELECTRICIDAD Y ELECTRONICA.pdf
FUNDAMENTOS DE ELECTRICIDAD Y ELECTRONICA.pdf
tecnologaeinformtica-231124115719-3a836080.pdf by MaraJos722801
tecnologaeinformtica-231124115719-3a836080.pdftecnologaeinformtica-231124115719-3a836080.pdf
tecnologaeinformtica-231124115719-3a836080.pdf
MaraJos72280110 views
Tarea Práctica web de la sesión 14.pptx by illanlir
Tarea Práctica web de la sesión 14.pptxTarea Práctica web de la sesión 14.pptx
Tarea Práctica web de la sesión 14.pptx
illanlir7 views

Un breve viaje al baremetal hardware hacking

  • 1. A brief journey to baremetal hardware hacking
  • 2. whoami @jtsecES  Javier Tallón  Co Founder and Chief Operations Officer at @jtsecES careers@jtsec.es • CyberSecurity Certification: Common Criteria, FIPS 140-2, ISO 27K1, … • Pentesters con sello
  • 4. @jtsecES • No podemos contaros cuál es el cacharro (ooooh!) • Pero podemos poner fotos del interior (bieeeen!) • Proyecto de pentesting (sin norma) para verificar la seguridad de su producto
  • 5. @jtsecES • ¿Qué entendemos por Baremetal? • Trabajamos directamente sobre el hardware (metal) • ¿Qué diferencias hay al hacer Ingeniería inversa? • No hay símbolos (NINGUNO) • No hay sistema de ficheros • Zero Knowledge Baremetal Hardware Hacking?
  • 6. @jtsecES Las etapas del viaje 1. El Comienzo – El cacharro y su arquitectura 2. El Puente– Accediendo al código 3. El Desierto – Bypass de protecciones de lectura 4. El Descenso – Reversing ARM 5. Los Túneles – Debugging ARM 6. El Templo – Fuzz testing 7. La Montaña – Explotación 8. La Cumbre – Manteniendo el acceso
  • 7. @jtsecES 1. El comienzo – El cacharro y su arquitectura - Múltiples muestras permiten pruebas destructivas - Primer paso: Abrir la caja - Bypass Anti tamper Switch
  • 8. @jtsecES 1. El comienzo – El cacharro y su arquitectura - Fase de reconocimiento • Fingerprint module • LCD • Contactless interface • Contact interface • USB interface • 2x SAM cards
  • 9. @jtsecES 1. El comienzo – El cacharro y su arquitectura - Fase de reconocimiento • No external flash or storage • 2 x STM32 ARM ICs • APP: STM32F103RET6 <M3> • SEC: STM32F072 <M0>
  • 10. @jtsecES 1. El comienzo – El cacharro y su arquitectura - Fase de reconocimiento FLASH CPU RAM FLASH CPU RAM • Microcontrolador • No suele haber S.O. • Poca capacidad • Capacidades de tiempo real • Microprocesador • Flash menos protegida • Mayor capacidad
  • 11. @jtsecES 1. El comienzo – El cacharro y su arquitectura - Fase de reconocimiento • STM32F103RET6 <M3> • Flash: 512KB • SRAM: 64 KB • STM32F072RB <M0> • Flash: 128KB • SRAM: 16 KB
  • 12. @jtsecES 1. El comienzo – El cacharro y su arquitectura - Fase de reconocimiento
  • 13. @jtsecES 1. El comienzo – El cacharro y su arquitectura - Fase de reconocimiento • Estudio detallado de la PCB
  • 14. @jtsecES 1. El comienzo – El cacharro y su arquitectura - Fase de reconocimiento • Identificamos los posibles paths de ataque • Externos • USB • Fingerprint • Smartcard interfaces • SAM interfaces • LCD • Internos • JTAG/SWD • UART • IC1 – IC2 • IC1 – Fingerprint • IC1 – Smartcard • IC1 – SAM
  • 15. @jtsecES 2. El Puente– Accediendo al código - El acceso a las interfaces no es tan fácil como a veces se pinta - Popular los PADs
  • 16. @jtsecES 2. El Puente– Accediendo al código - Acceso directo a pista!
  • 18. @jtsecES 2. El Puente– Accediendo al código - Acceso directo a pista!
  • 19. @jtsecES 2. El Puente– Accediendo al código - Acceso directo a pista! UART MAN IN THE BUS
  • 21. @jtsecES 2. El Puente– Accediendo al código MAN IN THE BUS - Teóricamente podemos esnifar tráfico - Hay que averiguar los parámetros de conexión
  • 22. @jtsecES 2. El Puente– Accediendo al código MAN IN THE BUS - Teóricamente podemos esnifar tráfico - Hay que averiguar los parámetros de conexión - VELOCIDAD LOCA (approx. 921699 bps)
  • 23. @jtsecES 2. El Puente– Accediendo al código - Suplantando las comunicaciones y descifrando el protocolo - Los paquetes empiezan por 02 - Terminan por 03 - Tiene un CRC
  • 24. @jtsecES 2. El Puente– Accediendo al código • Tres maneras de acceder al código • JTAG (Join Test Action Group) • Daisy chain • TDI, TDO, TMS, TCK, TRST • SWD • SWDIO, SWCLK • UART (Bootloader) • RX, TX, GND BoundaryScan BoundaryScan Boundary Scan Boundary Scan ChipI/O ChipI/O Chip I/O Chip I/O Flash Controller Debug Controller JTAG Controller UART Controller
  • 25. @jtsecES 2. El Puente– Accediendo al código • JTAG no es estándar, pero en general es posible • Obtener identificación de los chips (IDCODE) • Controlar los pins (Boundary Scan) • Acceder a los registros de la CPU • Acceder a la RAM • Acceder a la Flash
  • 26. @jtsecES 2. El Puente– Accediendo al código • STM32F103RET6 (APP)
  • 27. @jtsecES 2. El Puente– Accediendo al código • STM32F103RET6 (APP) • Pudimos volcar el chip forzando a que el micro arrancase desde el bootloader y leyendo el puerto serie • Mantener en alta (3,3V) el pin BOOT0 • Conectar al puerto serie (que normalmente conecta con el otro chip) • Forzar reset (no lo encontramos en la placa)
  • 28. @jtsecES 2. El Puente– Accediendo al código • STM32F072 (SEC)
  • 29. @jtsecES 3. El Desierto – Bypass de protecciones de lectura • STM32F072 (SEC) • Tres niveles de seguridad para la protección de lectura (RDP) • 2 bytes: nRDP y RDP • nRDP != ~RDP (nRDP es el complemento bit a bit RDP) • RDP Level 0: “no protection” (Default) Acceso complete de lectura/escritura • RDP Level 1: “read protection” No hay acceso a la memoria flash • Permite salir del nivel, pero fuerza un borrado de todo • Pero permite el acceso a la SRAM • Y a los periféricos • RDP Level 2: “no debug” SWD deshabilitado para siempre
  • 30. @jtsecES 3. El Desierto – Bypass de protecciones de lectura • STM32F072 (SEC) • RDP y nRDP: Guardados en la región “Option Bytes” • Memoria no volátil para la configuración del sistema • Parte de la memoria flash • Parte del mapa de memoria del sistema
  • 31. @jtsecES 3. El Desierto – Bypass de protecciones de lectura
  • 32. @jtsecES 3. El Desierto – Bypass de protecciones de lectura • STM32F072 (SEC) • Tres ataques a la familia STM32F0 • Cold Boot Stepping • Si podemos leer la SRAM y el código incluye una comprobación de integridad podemos inferir el contenido de la flash. • Security downgrade • Debug Interface exploit
  • 33. @jtsecES 3. El Desierto – Bypass de protecciones de lectura • STM32F072 (SEC) • Security Downgrade • 1 valor se mapea a CRP Level 2 • 1 valor se mapea a CRP Level 0 • El resto a CRP Level1
  • 34. @jtsecES 3. El Desierto – Bypass de protecciones de lectura • STM32F072 (SEC) • Security Downgrade
  • 35. @jtsecES 3. El Desierto – Bypass de protecciones de lectura • STM32F072 (SEC) • Debug Interface exploit • Condición de carrera entre que se accede a la flash por SWD y que se deniega expresamente el permiso
  • 36. @jtsecES 3. El Desierto – Bypass de protecciones de lectura • STM32F072 (SEC) • Debug Interface exploit • Resetear sistema • Inicializar interfaz de debug • Configurar dirección de lectura • Leer flash • Si OK → address += 4
  • 37. @jtsecES 3. El Desierto – Bypass de protecciones de lectura • STM32F072 (SEC)
  • 38. @jtsecES 3. El Desierto – Bypass de protecciones de lectura • ¡Tenemos los dos binarios!
  • 39. @jtsecES 4. El Descenso – Reversing ARM • ARM Assembly? No problem! • ARM es RISC, que es más simple que CISC • ARM ISA • Modos CPU • ARM mode (4 B instructions) (word aligned) • Thumb mode (2 B instructions) (half word aligned) • Thumb-2 mode (2 or 4 B instructions) • El procesador sabe si está en Thumb mode porque el bit menos significativo del contador de programa vale 1 • Direcciones impares
  • 40. @jtsecES 4. El Descenso – Reversing ARM • ARM ISA • Registros • Todos son registros R0-R15 generales y puede accederse directamente a ellos. • R15 se usa como EIP (PC). • R14 es el Link-Register (LR). • R13 se usa como ESP (SP) • R11 se usa como EBP (FP)
  • 41. @jtsecES 4. El Descenso – Reversing ARM • ARM ISA • Saltos • Branch (B{cond} address) → Salta a la dirección • Branch and optionally Exchange (BX{cond} address) → Salta a la dirección y cambia de modo si es necesario • Branch with Link (BL{cond} address) → Salta a la dirección y guarda la dirección de la siguiente instrucción en LR • Branch with Link and optionally Exchange (BL{cond} address) → Salta a la dirección, cambia de modo si es necesario y guarda la dirección de la siguiente instrucción en LR • Acceso a memoria • LDR Ra, [Rb] → Copia en el registro Ra el contenido de la dirección apuntada por Rb • STR Ra, [Rb] → Copia en la dirección apuntada por Rb el contenido del registro Ra
  • 42. @jtsecES 4. El Descenso – Reversing ARM • Where are my symbols?
  • 43. @jtsecES 4. El Descenso – Reversing ARM • Recovering symbols from datasheet • First approach: Check datasheet!
  • 44. @jtsecES 4. El Descenso – Reversing ARM • Recovering symbols
  • 45. @jtsecES 4. El Descenso – Reversing ARM • Recovering symbols from datasheet • Los primeros bytes contienen la ISR, así que es un buen punto de partida • Reset apunta al código que se ejecutará en primer lugar
  • 46. @jtsecES 4. El Descenso – Reversing ARM • Recovering symbols from SRAM • Muchas regiones de memoria no son identificadas como funciones por IDA Pro • Los handlers no son llamados por nadie! (No hay función padre) • Truco! Volcamos la SRAM (usando SWD) y buscamos punteros a zonas de memoria de la flash (0x0800xxxx) • Function handlers (e.g. USB) • Constantes (pools)
  • 47. @jtsecES 4. El Descenso – Reversing ARM • Recovering symbols with BinDiff • BinDiff es una herramienta de comparación para archivos binarios, que ayuda a los investigadores e ingenieros de vulnerabilidades a encontrar rápidamente diferencias y similitudes en el código desensamblado. • Con BinDiff puede identificar y aislar las correcciones de vulnerabilidades en los parches suministrados por los proveedores. También puede portar símbolos y comentarios entre desensamblajes de múltiples versiones del mismo binario o usar BinDiff para reunir pruebas de robo de código o violación de patente. • Necesita los archivos del IDB generados por IDA Pro.
  • 48. @jtsecES 4. El Descenso – Reversing ARM • Recovering symbols with BinDiff • BinDiff usa heurísticas para comprobar similitud entre funciones
  • 49. @jtsecES 4. El Descenso – Reversing ARM • Recovering symbols with BinDiff • Podemos usarlo para: • Reusar trabajo entre el desensamblado de ambos MCUs • Adivinar el compilador usado y las funciones de libc. • Idea! Compilamos un programa básico con distintas toolchains y usamos BinDiff para encontrar similitudes • Supuesto general: Los desarrolladores son vagos y usarán lo que usa todo el mundo. • Googleamos “STM32 development environment” • Contiene proyectos y aplicaciones de ejemplo!
  • 50. @jtsecES 4. El Descenso – Reversing ARM • Recovering symbols with BinDiff • Las toolchains / IDEs más importantes son: • IAR Embedded Workbench • Keil uVision • Atollic TrueStudio • Compilamos proyecto de ejemplo (con símbolos!), usamos BinDiff, si no funciona intentamos con más IDEs!
  • 51. @jtsecES 4. El Descenso – Reversing ARM • Recovering symbols with Diaphora • Diaphora es un plugin para IDA Pro que tiene como objetivo ayudar en las tareas típicas de BinDiffing. Es similar a otros productos de la competencia y proyectos de código abierto como Zynamics BinDiff, DarunGrim o TurboDiff. Sin embargo, es capaz de realizar más acciones que cualquiera de los plugins o proyectos IDA anteriores.
  • 52. @jtsecES 4. El Descenso – Reversing ARM • Recovering symbols with Diaphora • Script en Python que se llama desde IDA Pro • Usa bases de datos sqlite como almacenamiento intermedio. • Heurísticas como BinDiff pero usando el poder de Hex-Rays
  • 53. @jtsecES 4. El Descenso – Reversing ARM • Recovering symbols with Diaphora
  • 54. @jtsecES 4. El Descenso – Reversing ARM • IDAPython y el acceso a periféricos • Check datasheet again! • Los periféricos están mapeados en memoria ¿Cómo encontrar el acceso a los mismos en el desensamblado?
  • 55. @jtsecES 4. El Descenso – Reversing ARM • IDAPython y el acceso a periféricos • Sabiendo el aspecto que tendrá en el desensamblado la funcionalidad que estamos buscando podemos crear un script que busque ese patrón de ensamblador por todo el binario. • Para cada instrucción si el registro de la instrucción tiene la dirección de un periférico que nos interesa Y • Es usado en un STR → Output • Es usado en un LDR → Input
  • 56. @jtsecES 4. El Descenso – Reversing ARM • IDAPython y el acceso a periféricos • Sabiendo el aspecto que tendrá en el desensamblado la funcionalidad que estamos buscando podemos crear un script que busque ese patrón de ensamblador por todo el binario.
  • 57. @jtsecES 5. Los Túneles – Debugging ARM • Usualmente el análisis estático de las funciones no es suficiente • O es demasiado costoso • El problema del debugging • Múltiples procesadores • Conexiones difíciles • Condiciones de carrera • … • Trucos para debugger firmware en tu PC • mmap • source code copy • Baremetal emulation
  • 58. @jtsecES 5. Los Túneles – Debugging ARM • Restricciones • A priori no es posible hacer entrada / salida • Ni interactuar con los periféricos • No es posible interactuar con zonas de memoria que puede que no se hayan inicializado • Mejor para estudiar funciones aisladas
  • 59. @jtsecES 5. Los Túneles – Debugging ARM • Offline debugging - mmap • 1. Abrimos el fichero • 2. Mapeamos con mmap a la función que nos interese • 3. Creamos un punter a función a la dirección que queremos probar • 4. Llamamos a la función con argumentos similiares a los que vemos en el código 0x8008a00
  • 60. @jtsecES 5. Los Túneles – Debugging ARM • Offline debugging – source code copy • 1. Decompilamos la función que queremos estudiar con Hex Rays • 2. Copiamos la función a nuestro archive C • 3. Llamamos a la función con los argumentos apropiados
  • 61. @jtsecES 5. Los Túneles – Debugging ARM • Offline debugging – compilar • Compilar con: • arm-linux-gnueabi-gcc -static sccopy-trick.c -o sccopy-trick -g • Ejecutar con: • qemu-arm scscopy-trick • Depurar con: • qemu-arm -singlestep -g 1234 mmap-trick • gdb-multiarch (gdb) target remote localhost:1234
  • 62. @jtsecES 5. Los Túneles – Debugging ARM • Offline debugging – baremetal emulation • GNU MCU Eclipse es un proyecto de código abierto que incluye una familia de plug-ins y herramientas Eclipse para el desarrollo de ARM y RISC-V embebidos multiplataforma, basados en la toolchain GNU. Este proyecto está alojado en GitHub. • https://gnu-mcu-eclipse.github.io/ • GNU MCU Eclipse QEMU plugin • Puede ser usado de manera independiente • Soporta bastantes dispositivos (incluyendo STM32) • … y placas de desarrollo
  • 63. @jtsecES 5. Los Túneles – Debugging ARM • Offline debugging – baremetal emulation • Ejecutar qemu • ./qemu-system-gnuarmeclipse -mcu STM32F103RB -nographic --image /root/Desktop/STM32F103.bin -verbose -serial pty -serial pty -serial pty -serial pty -S -s • Ejecutar gdb • gdb-multiarch (gdb) target remote localhost:1234 • Monitorizar puertos serie tail -f /dev/pts/? |hexdump -C Reset ISR
  • 64. @jtsecES 6. El Templo – Fuzz testing • Hasta ahora tenemos • Acceso a SWD / JTAG • Conocimiento de nuestro objetivo a través del reversing • Estático (IDA Pro) • Dinámico offline (debugging) • Dinámico (bus eavesdropping) • ¡Es hora de encontrar bugs! ¡Fuzzing!
  • 65. @jtsecES 6. El Templo – Fuzz testing • Debemos de ser capaces de, de manera automática: • Generar datos de prueba • Transmitirlos a nuestro objetivo • Monitorizar y registrar el comportamiento • Depende de la interfaz. En nuestro caso (entre otras) interfaces SAM
  • 66. @jtsecES 6. El Templo – Fuzz testing • Conectamos a nuestro micro con las interfaces que hemos externalizado usando un programador propio de la marca (recordad que JTAG no es del todo estándar).
  • 67. @jtsecES 6. El Templo – Fuzz testing • Conectamos adecuadamente • Arrancamos OpenOCD • Ejecutar gdb gdb-multiarch (gdb) target remote localhost:3333 • ¡Lanzamoss fuzz-testing y monitorizamos!
  • 68. @jtsecES 7. La Montaña – Explotación • Aplica todo lo que ya conocéis • Format string bugs • Stack overflow • … • No hay protecciones del S.O. • No ASLR • Con una interesante diferencia!
  • 69. @jtsecES 7. La Montaña – Explotación • ¿Qué ocurre al leer la dirección 0x00000000? • Windows → Crash (Segmentation Fault) • Linux → Crash (Segmentation Fault) • Baremetal → Depende • Usualmente no hay MMU • ¡En 0x00000000 hay una copia del firmware!
  • 70. @jtsecES 8. La Cumbre – Manteniendo el acceso • Trojanizar un firmware baremetal es relativamente sencillo! • Flash: • Concatenamos nuestro código al código original • Modificamos el código original para que salte al nuestro
  • 71. @jtsecES 8. La Cumbre – Manteniendo el acceso • Necesitaremos espacio para nuestras variables • SRAM: • Pintamos la SRAM con un valor conocido antes de que se ejecute el código • Dejamos que el dispositivo arranque e interactuamos con él • Volcamos de nuevo la SRAM para encontrar regiones no utilizadas • Cuando sepa qué regiones de memoria están disponibles, puede decirle a su compilador que use estas regiones de memoria
  • 72. @jtsecES Conclusiones • Lee las especificaciones! • Asume que el firmware es público • Protege los buses! • Cifra! Siempre! • ¿Physical access == Game Over?
  • 73. jtsec: Beyond IT Security c/ Abeto s/n Edificio CEG Oficina 2B CP 18230 Granada – Atarfe – Spain hola@jtsec.es @jtsecES www.jtsec.es ¡Gracias por aguantar!