Cómo usar TrustZone para asegurar los dispositivos de IoT con un mínimo de complejidad y costo de hardware

Por Jacob Beningo

Colaboración de Editores de DigiKey de América del Norte

Los dispositivos de IoT en el borde requieren la adopción de medidas de seguridad adicionales a las que tradicionalmente han requerido los productos incorporados. Comprender y empezar a trabajar en la seguridad suele ser difícil para los equipos y desarrolladores con experiencia en ingeniería eléctrica que no tienen conocimientos de criptografía o de seguridad de sistemas.

En un ciclo de desarrollo moderno, se dispone de poco tiempo y presupuesto para que los desarrolladores empiecen desde cero o se conviertan en expertos en seguridad. En cambio, los desarrolladores pueden aprovechar las soluciones de seguridad existentes y adaptarlas a sus necesidades específicas.

Este artículo presentará TrustZone de Arm®, una interesante solución que ha estado ganando impulso entre los diseñadores de sistemas basados en microcontroladores. A modo de ejemplo, el artículo presentará la serie de microcontroladores STM32L5 de STMicroelectronics que son compatibles con TrustZone, y mostrará cómo comenzar con TrustZone usando los kits de desarrollo asociados.

Seguridad a través del aislamiento

El elemento fundamental de un sistema seguro integrado es tener seguridad a través del aislamiento. La idea es que los activos de datos importantes como las claves privadas, los datos de usuario, las funciones seguras, etc., deben aislarse de los datos y funciones genéricas como los elementos de la interfaz gráfica de usuario o el sistema operativo en tiempo real (RTOS). Si bien hay métodos que pueden utilizarse para crear un aislamiento de software, los expertos en seguridad están de acuerdo con que un sistema incorporado debe utilizar la seguridad mediante el aislamiento basado en hardware.

Hay varias formas en que el hardware puede utilizarse para crear aislamiento, como el uso de un microcontrolador y un procesador de seguridad o el uso de un procesador multinúcleo en el que un núcleo está dedicado a un procesamiento seguro. Los nuevos procesadores Cortex®-M23, Cortex-M33 y Cortex-M55 del brazo soportan una característica opcional de aislamiento basada en el hardware conocida como TrustZone.

¿Qué es TrustZone de Arm?

TrustZone es un mecanismo de hardware implementado en microcontroladores de un solo núcleo que descompone el entorno de ejecución en memoria, periféricos y funciones seguras y no seguras. Cada entorno de ejecución contiene también una unidad de protección de memoria (UPM) que puede utilizarse para aislar aún más las regiones de memoria a fin de proporcionar "más capas en la cebolla" que actúen como elemento disuasorio para los posibles atacantes que traten de acceder a los activos de datos.

En general, un desarrollador integrado particionará su sistema en, al menos, dos proyectos: el proyecto de ejecución no seguro, que suele denominarse proyecto de usuario, y el proyecto de ejecución segura, que suele denominarse proyecto de firmware. Un microcontrolador que habilita la TrustZone arrancará en el estado seguro e iniciará el sistema antes de saltar al estado no seguro para ejecutar la aplicación del usuario (Figura 1).

El diagrama de los proyectos de TrustZone logra el aislamiento a través de un mecanismo de hardwareFigura 1: Los proyectos de TrustZone logran el aislamiento a través de un mecanismo de hardware que rompe el software incorporado en un proyecto de usuario (no seguro) y un proyecto de firmware (seguro). (Fuente de la imagen: Arm)

El proyecto del usuario solo puede acceder a funciones seguras a través de una pasarela segura que se crea entre el proyecto de firmware y el proyecto del usuario, y no puede acceder a lugares de memoria seguros sin activar una excepción.

Selección de una junta de desarrollo habilitada para TrustZone

La forma más fácil de empezar a entender la TrustZone es simplemente saltar y empezar a trabajar con ella. Para ello, un desarrollador debe seleccionar primero una junta de desarrollo. Hay varias tarjetas de desarrollo diferentes para elegir a través de varios proveedores de microcontroladores, pero tenga cuidado: no todas implementan TrustZone de la misma manera, lo que puede hacerlo un poco difícil.

Un buen ejemplo de placa de desarrollo que puede ser usado para comenzar con TrustZone es el Kit Discovery STM32L562E de STMicroelectronics (Figura 2).

Imagen del kit Discovery STM32L562E de STMicroelectronicsFigura 2: El kit Discovery STM32L562E incluye numerosos sensores integrados, Bluetooth, y una tarjeta de expansión de E/S que facilita comenzar con las aplicaciones de TrustZone. (Fuente de la imagen: STMicroelectronics)

El kit viene con muchas características de apoyo que pueden ser útiles cuando se trabaja con TrustZone por primera vez. Por ejemplo, el kit de desarrollo incluye un módulo LCD TFT de 1.54" 240 x 240 píxeles que incluye un panel de control táctil, un módulo de baja energía Bluetooth v4.1, un acelerómetro y giroscopio 3D iNEMO y un STLINK-V3E integrado, entre muchas otras características para E/S y expansión de periféricos.

Una segunda placa de desarrollo que puede ser usado para comenzar con TrustZone es la placa NUCLEO-L552ZE-Q Nucleo de STMicroelectronics (Figura 3).

Imagen de la placa de desarrollo de STM32L552ZE-Q NUCLEO de STMicroelectronicsFigura 3: La placa de desarrollo STM32L552ZE-Q NUCLEO proporciona un procesador compatible TrustZone, ST-LinkV3, y cabeceras de expansión para actividades de desarrollo personalizadas. (Fuente de la imagen: STMicroelectronics)

A diferencia del kit Disconvery STM32L562E, el NUCLEO-L552ZE-Q es una tarjeta de desarrollo básica que incluye el ST-LinkV3, el microcontrolador STM32L552VET6, los puertos de expansión y un LED. Esta placa de desarrollo es ideal para los desarrolladores que quieren probar TrustZone y comenzar a integrar sus propios componentes de hardware lo más rápido posible.

Aunque el NUCLEO-L552ZE-Q no incluye todas las campanas y silbatos, el STM32L552VET6 es bastante impresionante. Se trata de un procesador Arm Cortex-M33 con una unidad de punto flotante (FPU), hasta 512 kilobytes (Kbytes) de memoria flash y 256 Kbytes de SRAM. Incluye varias características de seguridad adicionales por encima de TrustZone, como una raíz de confianza con una entrada de arranque única, instalación de firmware segura y soporte de actualización de firmware seguro con un firmware de confianza para Cortex-M (TF-M).

Los procesadores de ambas tarjetas de desarrollo incluyen la Unidad de Arbitraje de Seguridad TrustZone (SAU) que se utiliza para configurar qué memorias y periféricos serán protegidos por TrustZone. El SAU falta en las implementaciones de TrustZone de algunos proveedores de microcontroladores. Esto no es necesariamente un problema, pero requiere un procedimiento diferente para configurar TrustZone.

Iniciando la primera aplicación basada en TrustZone

Poner en marcha una de las placas de desarrollo de STMicroelectronics requiere varios pasos y paquetes de software. Primero, un desarrollador querrá descargar STM32CubeIDE. STM32CubeIDE proporciona el compilador, los paquetes de microcontroladores y el IDE para el desarrollo de aplicaciones, y cualquier nota de aplicación asociada, incluyendo STM AN5394.

El uso de un proyecto de ejemplo de TrustZone existente es la forma más rápida de poner en marcha una aplicación. Hay varios proyectos que se incluyen como parte del paquete de software STM32Cube_FW_L5. El software se descarga como parte del software STM32CubeL5. Una vez descargado, los desarrolladores pueden importar el proyecto TrustZoneEnabled ubicado en una ruta de directorio como la siguiente:

STM32Cube_FW_L5_V1.2.0\STM32Cube_FW_L5_V1.2.0\Projects\STM32L552E-EV\Templates\TrustZoneEnabled\

Una vez importado el proyecto, un desarrollador puede ver que el proyecto tiene una estructura de proyecto jerárquica que divide la aplicación en aplicaciones seguras y no seguras (Figura 4).

La imagen del proyecto TrustZone se aplica en una estructura de proyecto jerárquicaFigura 4: El proyecto TrustZone se ejecuta en una estructura de proyectos jerárquica con proyectos seguros y no seguros. (Fuente de la imagen: Beningo Embedded Group)

Hay muchos detalles que pueden ser explorados en estos proyectos. AN5394 puede completar bastantes detalles, mientras que el archivo readme.txt de la carpeta Doc de cada proyecto puede explicar los detalles de los proyectos seguros y no seguros. Para los propósitos de este artículo, examinaremos los conceptos más importantes relacionados con TrustZone. Específicamente: cómo está configurada la TrustZone. La configuración se encuentra en el archivo partition_stm32L562xx.h ubicado en:

C:\STM32Cube_FW_L5_V1.2.0\Projects\STM32L562E-DK\Templates\TrustZoneEnabled\Secure\Inc

Este archivo contiene los ajustes para la SAU. Por ejemplo, la figura 5 muestra la configuración de la región 0 de SAU. Esta región está actualmente configurada para una ejecución segura. La figura 6, por otro lado, muestra la región SAU 1 configurada como no segura.

El código de la región SAU 0 configurado para una ejecución seguraFigura 5: El SAU se utiliza para configurar qué regiones de memoria son seguras y no seguras. El código anterior demuestra cómo la región 0 de SAU está configurada para una ejecución segura. (Fuente de la imagen: Beningo Embedded Group)

Imagen de la región 1 de SAU configurada para una ejecución no seguraFigura 6: El SAU se utiliza para configurar qué regiones de memoria son seguras y no seguras. El código anterior demuestra cómo la región 1 de SAU está configurada para una ejecución no segura. (Fuente de la imagen: Beningo Embedded Group)

Un desarrollador decidiría qué regiones necesitan ser seguras y no seguras y utilizaría el archivo de la partición para configurar el SAU. ¡Crear estas configuraciones no garantiza que TrustZone esté habilitada! Cuando una aplicación basada en TrustZone se programa en el objetivo, el desarrollador debe establecer el byte de opción TZ en 1 para activar TrustZone. Luego, durante el arranque, se activará y la configuración SAU se leerá y usará.

Consejos y trucos para trabajar con TrustZone

Empezar a trabajar con TrustZone no es difícil, pero requiere que los desarrolladores piensen en el diseño de su aplicación de una manera un poco diferente. A continuación, se brindan algunos "consejos y trucos" para comenzar:

  • No será necesario proteger todos los datos. Identificar por adelantado los activos de datos críticos que deben ser protegidos.
  • Aprovechar los marcos de seguridad existentes, como la CMSIS-Zone y el Trusted Firmware para la Cortex-M (TF-M) para acelerar el desarrollo.
  • Examine cuidadosamente las posibles amenazas al dispositivo y seleccione un microcontrolador que soporte soluciones de hardware y software para protegerse de esas amenazas.
  • TrustZone proporciona una única capa de aislamiento. Aprovechar las MPU y otros mecanismos de hardware para crear múltiples capas de aislamiento basadas en el hardware.
  • Identificar los elementos de código seguros y no seguros durante la fase de arquitectura, no durante la de implementación.

Los desarrolladores que sigan estos "consejos y trucos" se darán cuenta de que se ahorran bastante tiempo y dolor al trabajar para asegurar su dispositivo IoT.

Conclusión:

TrustZone es una importante herramienta disponible para los desarrolladores de IoT que buscan asegurar sus dispositivos y proteger sus activos de datos. Las soluciones de seguridad pueden aplicarse de varias maneras diferentes, pero como hemos visto, TrustZone ofrece a los desarrolladores una única solución básica que proporciona un modelo de desarrollo de software tradicional. La única diferencia es que los desarrolladores necesitan empezar a pensar en términos de componentes, datos e hilos seguros y no seguros.

DigiKey logo

Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de DigiKey o de las políticas oficiales de DigiKey.

Acerca de este autor

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo es un consultor de software integrado que actualmente trabaja con clientes en más de una docena de países para transformar drásticamente sus negocios mejorando la calidad del producto, el costo y el tiempo de comercialización. Ha publicado más de 200 artículos sobre técnicas de desarrollo de software embebido, es un conferenciante y entrenador técnico muy solicitado y tiene tres títulos que incluyen una Maestría en Ingeniería de la Universidad de Michigan. No dude en ponerse en contacto con él en jacob@beningo.com, en su sitio web www.beningo.com, y suscríbase a su boletín mensual Embedded Bytes Newsletter.

Acerca de este editor

Editores de DigiKey de América del Norte