Categories: NoticiasTecnología

Cómo aprovechar las características de seguridad de Arm TrustZone de la LPC5500

Con dispositivos cada vez más conectados y la creciente sofisticación de los piratas informáticos, muchas compañías, como NXP Semiconductors, han reconocido la necesidad de contramedidas. NXP ha desarrollado la serie MCU LPC5500, que viene con características de seguridad mejoradas que se pueden usar para proteger proyectos integrados.
NXP adoptó un generador de números aleatorios que cumple con FIPS, seleccionó el algoritmo de descifrado "Prince" (que permite que el núcleo ejecute código cifrado simétrico), e implementó una clave efímera en chip de 4096 bits con tecnología PUF. Cuando se combinan con el acelerador de hardware criptográfico en chip "CASPER", las MCU LPC5500 son adecuadas para aplicaciones de IoT de última generación que requieren contramedidas de ciberseguridad robustas y aprovisionamiento de claves de ciclo de vida completo.
Además, el chip aprovecha la tecnología Arm TrustZone para dispositivos basados ​​en Cortex-M. En este artículo, aprenda cómo funciona la extensión TrustZone de la serie LPC5500 y cómo comenzar a utilizar las medidas de seguridad en aplicaciones personalizadas.

¿Qué es la tecnología Arm TrustZone para Cortex-M?

El principio central de TrustZone se explica mejor a través de un ejemplo. El fabricante de MCU a menudo proporciona código propietario personalizado como bibliotecas de seguridad, un gestor de arranque o algoritmos DSP rápidos en la ROM del microcontrolador. Sin embargo, los autores de estas aplicaciones a menudo tienen buenas razones para proteger su propiedad intelectual: es posible que no quieran que los usuarios o competidores descompilen los archivos binarios para realizar ingeniería inversa de los algoritmos.
Por un lado, los programadores quieren utilizar estas bibliotecas de software predefinidas. Por otro lado, sin embargo, el fabricante no quiere que el código quede expuesto a una parte posiblemente maliciosa.


Figura 1. El código de usuario no seguro y el contenido ROM seguro residen en la misma MCU física.

El proveedor desea ocultar los detalles de la implementación y, al mismo tiempo, garantizar que los desarrolladores puedan acceder a las funciones. El código de usuario es capaz de llamar a los métodos expuestos del software oculto, pero no tiene acceso directo a la memoria que posee la ROM segura. El resultado es una estructura que consta de dos subsistemas aislados. Las transiciones entre esos dos mundos se rigen por la extensión de seguridad TrustZone.
Esto significa que un microcontrolador que utiliza TrustZone será diseñado como dos proyectos separados. El primer proyecto comienza en el estado Seguro. Luego configura las atribuciones de seguridad para los recursos en chip y puede publicar funciones seguras en una tabla accesible desde el estado no seguro. El segundo contiene el código no seguro y tiene acceso limitado a las funciones expuestas del mundo seguro.

Diferencias de arquitecturas anteriores

Los núcleos Cortex-M3 y -M4 conocen dos modos de procesador: modo hilo y modo controlador. El software de la aplicación se ejecuta en modo hilo y el modo controlador maneja excepciones. El código puede operar en un nivel privilegiado o no privilegiado, que controla el acceso a ciertas funciones de la CPU.
Con la extensión TrustZone en núcleos Cortex-M33, se introdujeron dos nuevos estados, como se discutió anteriormente. Ese cambio dio como resultado cuatro modos de procesador diferentes: controlador no seguro, modo de controlador seguro, subproceso no seguro e hilo seguro.


Figura 2. La extensión TrustZone en el núcleo M33 crea cuatro modos de procesador.

Además de otras actualizaciones, también se introdujeron nuevos temporizadores SysTick con los nuevos estados. Así que ahora, hay temporizadores separados para el estado seguro y el estado no seguro.

Partición de memoria

Como se mencionó anteriormente, la memoria de la MCU se divide en áreas seguras y no seguras. El núcleo de la CPU de la MCU solo puede acceder a las regiones de memoria segura si funciona en uno de los modos seguros. No puede acceder a ninguna instrucción que resida en otras particiones de memoria. Sin embargo, puede leer y escribir segmentos seguros y no seguros de la RAM de datos. Si el núcleo de la CPU está en un estado no seguro, solo puede acceder a la instrucción no segura y a los bloques de memoria de datos.
TrustZone decora los rangos de direcciones en el mapa de memoria con atribuciones de seguridad. Hay tres atribuciones de seguridad: seguro (S), no seguro (NS) y no seguro invocable (NSC). El acceso a cada área de memoria está permitido o denegado, dependiendo del estado de seguridad actual del núcleo.


Figura 3. La CPU puede acceder a diferentes áreas en modo seguro y no seguro.

En el dispositivo LPC55S69, la memoria se dividió en segmentos seguros y no seguros según la dirección. Si el bit de dirección de memoria 28 es BAJO, la memoria no es segura. De lo contrario, es seguro. La única excepción es la memoria del programa, que se puede configurar a través de la Unidad de atribución de seguridad.

Los componentes básicos de una aplicación segura

El código no seguro no puede realizar ninguna llamada directa a la parte segura de la aplicación. En cambio, la parte segura expone una lista de funciones a las que puede acceder un usuario. Esa lista se denomina tabla de chapa porque es una capa muy delgada que es visible desde el exterior, pero oculta los detalles internos. La tabla de chapa se encuentra en una región de memoria con el atributo TrustZone invocable no seguro.
Por lo general, la fuente de la parte asegurada no es visible. En cambio, se compila, dando una biblioteca de objetos y la tabla de chapa como un archivo de encabezado. Tenga en cuenta que ninguno de estos archivos contiene ninguna de las instrucciones reales, pero juntas contienen la información necesaria para llamar a funciones seguras. La tabla de chapa solo contiene una puerta de enlace y una instrucción de ramificación a la ubicación de memoria segura donde residen las instrucciones reales.

Transición entre funciones seguras y no seguras

Las CPU con la extensión TrustZone admiten dos nuevas funciones para la transición entre seguro y no seguro: la instrucción SG y BXNS.
Cuando el código de usuario desea una función segura, realiza una llamada a través de la tabla de recubrimiento, que se encuentra en la parte NSC de la memoria. La instrucción SG luego se utiliza para cambiar la CPU a un modo seguro. Cuando se completa la ejecución, el control vuelve al código de usuario con la instrucción BXNS:


Figura 4. El código de usuario debe llamar a una función segura a través del guardián de TrustZone.

Si el usuario intenta una operación ilegal relacionada con la seguridad, como acceder directamente a un área protegida, se genera una excepción de falla segura.

Un ejemplo seguro de Hello World

El SDK para LPCXpresso55S69 viene con algunos ejemplos de TrustZone que se pueden cargar en MCUXpresso. Como se mencionó anteriormente, estos ejemplos consisten en dos proyectos separados: la parte segura y el código de usuario no seguro.
La parte segura se ve casi exactamente como cualquier otro proyecto MCUXpresso. Sin embargo, hay una diferencia, que es la siguiente llamada a la función:

Esta función debe llamarse lo antes posible. Después de eso, es responsabilidad del proyecto seguro configurar la memoria y el proyecto no seguro:

Debido a que el proyecto seguro maneja todas las llamadas de configuración, el proyecto no seguro no tiene que hacerlo, por lo que su función principal es breve:

Sin embargo, esta aplicación solo llama a funciones seguras que se definieron en el otro proyecto. La siguiente definición para la función PRINTF_NSE es la siguiente:

Si se sigue esa definición, apunta a la tabla de chapa, definida en el proyecto asegurado. Es importante recordar que el proyecto no seguro solo conoce el archivo de encabezado que describe la tabla de chapa. Sin embargo, en este caso, podemos echar un vistazo a la función correspondiente en el código fuente:

La decoración “__attribute __ ((cmse_nonsecure_entry))” obliga a exportar la función al archivo objeto.

Particionando la memoria

Los atributos de seguridad definen qué partes de la memoria son seguras, NSC o no seguras. Estos se verifican con cada acceso. Para ese fin, la MCU se amplió con hardware que maneja estas comprobaciones y consta de tres bloques lógicos:
Unidad de atribución de seguridad (SAU)
Unidad de atribución definida de implementación (IDAU)
Lógica de atribución de seguridad
El proyecto seguro programa la SAU dentro de la función BOARD_InitTrustZone (). Esto permite que la memoria se particione en ocho regiones con diferentes configuraciones de seguridad. Tenga en cuenta que cualquier región no establecida explícitamente permanece segura de forma predeterminada.
La IDAU permite al fabricante de MCU, NXP en este caso, definir más regiones personalizadas. Aquí, las regiones dependen del 28 ° bit de la dirección. En la MCU LPC55S69, la parte inferior del mapa de memoria (0x0000_0000 a 0x2FFF_FFFF) por defecto es no seguro, por lo que es libre de configurar con la SAU.
El árbitro se asegura de que las configuraciones IDAU y SAU coincidan. Para que una región de memoria se marque como no segura, ambos bloques lógicos deben configurarse como no seguros. De lo contrario, la memoria volverá al estado seguro predeterminado. Lo mismo se aplica a las regiones de memoria NSC. Para que una sección sea NSC, la SAU debe marcarse como NSC y la IDAU debe configurarse como no segura.
Hay una herramienta dentro de MCUXpresso que permite al usuario definir rápida y fácilmente las regiones de memoria. Para acceder a la herramienta, use la barra de menú principal del IDE y abra la perspectiva TEE:


Figura 5. Esta herramienta MCUXpresso permite al usuario ver y editar el mapa de memoria de la MCU.

La tabla en el lado izquierdo de la herramienta puede cambiar el nivel de seguridad de las regiones de memoria. El mapa de memoria en el lado derecho ilustra cómo se divide la memoria.

TrustZone ofrece un componente de seguridad necesario

En la serie MCU LPC5500 con tecnología TrustZone, la memoria se divide en un mundo seguro y no seguro: es posible permitir a los usuarios acceder a partes de la memoria no segura, y una aplicación segura también puede ser escrita para ser utilizada por otros. TrustZone actúa como un guardián entre los dos mundos y gestiona la transición del núcleo entre ellos.
Se introdujeron dos nuevas instrucciones para tal fin. La aplicación segura proporciona una tabla de chapa que expone las funciones invocables desde el contexto no seguro. El hardware en la MCU asegura que no se realicen operaciones ilegales de acceso a la memoria. Este hardware también se puede utilizar para configurar las regiones en el mapa de memoria. Para ese propósito, MCUXpresso ofrece la perspectiva TEE. Una comprensión más profunda de la seguridad proporcionada por la serie LPC5500 de MCU permite una mejor experiencia de diseño. Puede encontrar más información sobre TrustZone mirando TrustZone: Calling the Secure World. Los artículos de la industria son una forma de contenido que permite a los socios de la industria compartir noticias, mensajes y tecnología útiles con los lectores de All About Circuits de una manera que el contenido editorial no es adecuado para ellos. Todos los artículos de la industria están sujetos a estrictas pautas editoriales con la intención de ofrecer a los lectores noticias útiles, experiencia técnica o historias. Los puntos de vista y opiniones expresados ​​en los artículos de la industria son los del socio y no necesariamente los de All About Circuits o sus escritores.

Maria Montero

Me apasiona la fotografía y la tecnología que nos permite hacer todo lo que siempre soñamos. Soñadora y luchadora. Actualmente residiendo en Madrid.

Recent Posts

Máquina de mano Lean, Green, Raspberry Pi

Los días felices de la PDA y Blackberry han quedado definitivamente atrás, pero el factor…

3 years ago

Cómo pronosticar series de tiempo usando autorregresión

Tutorial sobre cómo pronosticar usando un modelo autorregresivo en PythonFoto de Aron Visuals en UnsplashForecasting…

3 years ago

Aquí están todas las formas en que puede cargar su AirPods Pro

Si tienes un iPhone, los AirPods Pro son la opción obvia para escuchar música, ¡aunque…

3 years ago

Las principales noticias tecnológicas del lunes: la prohibición de clientes de terceros de Twitter parece no ser un accidente

Ilustración de Alex Castro / The Verge Plus nuevos rumores sobre el quinto Galaxy Fold.…

3 years ago

AirPods Max 2: aquí están las características más solicitadas

Se rumorea que los auriculares premium de próxima generación de Apple, los AirPods Max 2,…

3 years ago

El remake de Dead Space continúa luciendo terriblemente genial en el nuevo tráiler de la historia

El desarrollador Motive Studio y el editor EA han lanzado un nuevo tráiler de la…

3 years ago