Como aproveitar os recursos de segurança Arm TrustZone do LPC5500

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Com dispositivos cada vez mais conectados e a sofisticação crescente de hackers, muitas empresas – como a NXP Semiconductors – reconheceram a necessidade de contramedidas. O NXP desenvolveu a série LPC5500 MCU, que vem com recursos de segurança aprimorados que podem ser usados ​​para proteger projetos incorporados.

O NXP adotou um gerador de números aleatórios compatível com FIPS, selecionou o algoritmo de descriptografia “Prince” (permitindo que o núcleo execute código criptografado simétrico) e implementou uma chave efêmera no chip de 4096 bits com a tecnologia PUF. Quando combinados com o acelerador de hardware criptográfico no chip ‘CASPER’, os MCUs LPC5500 são adequados para aplicativos de IoT de ponta da rede que exigem medidas de segurança cibernética robustas e provisionamento de chaves de todo o ciclo de vida.

Além disso, o chip utiliza a tecnologia Arm TrustZone para dispositivos baseados em Cortex-M. Neste artigo, saiba como funciona a extensão TrustZone da série LPC5500 e como começar a utilizar as medidas de segurança em aplicativos personalizados.

O que é a tecnologia Arm TrustZone para Cortex-M?

O princípio central do TrustZone é melhor explicado através de um exemplo. O fabricante do MCU geralmente fornece código proprietário personalizado, como bibliotecas de segurança, um carregador de inicialização ou algoritmos DSP rápidos na ROM do microcontrolador. No entanto, os autores desses aplicativos geralmente têm boas razões para proteger sua propriedade intelectual – eles podem não querer que usuários ou concorrentes descompilem os binários para fazer engenharia reversa dos algoritmos.

Por um lado, os programadores desejam utilizar essas bibliotecas de software predefinidas. Por outro lado, no entanto, o fabricante não deseja que o código seja exposto a uma parte possivelmente maliciosa.

O código do usuário não seguro e o conteúdo da ROM segura residem no mesmo MCU físico.

Figura 1. O código do usuário não seguro e o conteúdo da ROM segura residem no mesmo MCU físico.

O fornecedor deseja ocultar os detalhes da implementação, garantindo ao mesmo tempo que os desenvolvedores possam acessar as funções. O código do usuário é capaz de chamar os métodos expostos do software oculto, mas não tem acesso direto à memória pertencente à ROM segura. O resultado é uma estrutura que consiste em dois subsistemas isolados. As transições entre esses dois mundos são regidas pela extensão de segurança TrustZone.

Leia Também  Detector de ruído inteligente para uma zona livre de ruído

Isso significa que um microcontrolador utilizando TrustZone será arquitetado como dois projetos separados. O primeiro projeto inicia no estado Seguro. Em seguida, configura as atribuições de segurança para recursos no chip e pode publicar funções seguras em uma tabela acessível a partir do estado não seguro. O segundo contém o código não seguro e tem acesso limitado às funções expostas do mundo seguro.

Diferenças das arquiteturas anteriores

Os núcleos Cortex-M3 e -M4 conhecem dois modos de processador: modo thread e modo manipulador. O software aplicativo é executado no modo de encadeamento e o modo manipulador lida com exceções. O código pode operar em um nível privilegiado ou não privilegiado, que controla o acesso a determinados recursos da CPU.

Com a extensão TrustZone nos núcleos Cortex-M33, dois novos estados foram introduzidos, conforme discutido acima. Essa alteração resultou em quatro modos diferentes de processador: manipulador não seguro, modo de manipulador seguro, encadeamento não seguro e encadeamento seguro.

A extensão TrustZone no núcleo M33 cria quatro modos de processador.

Figura 2. A extensão TrustZone no núcleo M33 cria quatro modos de processador.

Além de outras atualizações, novos temporizadores SysTick também foram introduzidos com os novos estados. Portanto, agora, existem temporizadores separados para o estado seguro e o estado não seguro.

Partição de memória

Como mencionado anteriormente, a memória do MCU é particionada em áreas seguras e não seguras. O núcleo da CPU do MCU pode acessar apenas regiões seguras de memória se operar em um dos modos seguros. Ele não pode acessar nenhuma instrução que reside em outras partições de memória. No entanto, ele pode ler e gravar segmentos seguros e não seguros da RAM de dados. Se o núcleo da CPU estiver em um estado não seguro, ele poderá acessar apenas os blocos de instruções e memória de dados não seguros.

O TrustZone decora os intervalos de endereços no mapa de memória com atribuições de segurança. Existem três atribuições de segurança: seguro (S), não seguro (NS) e não seguro chamado (NSC). O acesso a cada área de memória é permitido ou negado, dependendo do estado de segurança atual do núcleo.

A CPU pode acessar diferentes áreas no modo seguro e não seguro.

Figura 3. A CPU pode acessar diferentes áreas no modo seguro e não seguro.

No dispositivo LPC55S69, a memória foi dividida em segmentos seguros e não seguros com base no endereço. Se o bit 28 do endereço de memória estiver BAIXO, a memória não é segura. Caso contrário, é seguro. A única exceção é a memória do programa, que pode ser configurada através da Unidade de Atribuição de Segurança.

Os blocos de construção de um aplicativo seguro

O código não seguro não pode fazer chamadas diretas para a parte segura do aplicativo. Em vez disso, a parte segura expõe uma lista de funções que um usuário pode acessar. Essa lista é denominada tabela de folheado porque é uma camada muito fina que é visível do lado de fora, mas oculta os detalhes internos. A tabela de folheado está localizada em uma região de memória com o atributo TrustZone NonSecure Callable.

Leia Também  Sintetizador de música NTH - Open Electronics

Geralmente, a fonte da peça segura não é visível. Em vez disso, é compilado, fornecendo uma biblioteca de objetos e a tabela de folheado como um arquivo de cabeçalho. Observe que nenhum desses arquivos contém instruções reais, mas juntos eles contêm as informações necessárias para chamar funções seguras. A tabela de folheado contém apenas um gateway e uma instrução de ramificação para o local seguro da memória em que as instruções reais residem.

Transição entre funções seguras e não seguras

As CPUs com a extensão TrustZone suportam duas novas funções para fazer a transição entre seguras e não seguras: a instrução SG e BXNS.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

Quando o código do usuário deseja uma função segura, ele faz uma chamada através da tabela de folheado, localizada na parte NSC da memória. A instrução SG é utilizada para alternar a CPU para um modo seguro. Quando a execução é concluída, o controle é retornado ao código do usuário com a instrução BXNS:

O código do usuário deve chamar uma função segura através do gatekeeper TrustZone.

Figura 4. O código do usuário deve chamar uma função segura através do gatekeeper TrustZone.

Se o usuário tentar uma operação ilegal relacionada à segurança, como acessar diretamente uma área protegida, uma exceção de Falha Segura será gerada.

Um exemplo seguro do Hello World

O SDK para o LPCXpresso55S69 vem com alguns exemplos TrustZone que podem ser carregados no MCUXpresso. Como mencionado anteriormente, esses exemplos consistem em dois projetos separados: a parte segura e o código do usuário não seguro.

A parte segura se parece quase exatamente com qualquer outro projeto do MCUXpresso. No entanto, há uma diferença, que é a seguinte chamada de função:

a chamada de função no modo seguro

Essa função deve ser chamada o mais cedo possível. Depois disso, é responsabilidade do projeto seguro configurar a memória e o projeto não seguro:

 é responsabilidade do projeto seguro configurar a memória e o projeto não seguro

Como o projeto seguro lida com todas as chamadas de instalação, o projeto não seguro não precisa, portanto sua função principal é curta:

função principal é curta

No entanto, esse aplicativo chama apenas funções seguras definidas no outro projeto. A seguinte definição para a função PRINTF_NSE é mostrada:

Função PRINTF_NSE

Se essa definição for seguida, ela apontará para a tabela de folheado, definida no projeto protegido. É importante lembrar que o projeto não seguro conhece apenas o arquivo de cabeçalho que descreve a tabela de folheado. No entanto, neste caso, podemos dar uma olhada na função correspondente no código fonte:

A decoração “__atributo __ ((cmse_nonsecure_entry))” força a exportação da função no arquivo de objeto.

Particionando a memória

Os atributos de segurança definem quais partes da memória estão protegidas, NSC ou não seguras. Eles são verificados a cada acesso. Para esse propósito, o MCU foi estendido com hardware que lida com essas verificações e consiste em três blocos lógicos:

  1. Unidade de atribuição de segurança (SAU)
  2. Unidade de Atribuição Definida pela Implementação (IDAU)
  3. Lógica de atribuição de segurança

A SAU é programada pelo projeto seguro dentro da função BOARD_InitTrustZone (). Isso permite que a memória seja particionada em oito regiões com diferentes configurações de segurança. Observe que qualquer região não definida explicitamente permanece segura por padrão.

Leia Também  Pesquisadores dobram o alcance dos veículos elétricos usando materiais domésticos comuns

O IDAU permite que o fabricante do MCU – NXP neste caso – defina mais regiões personalizadas. Aqui, as regiões dependem do 28º bit do endereço. No LPC55S69 MCU, a parte inferior do mapa de memória (0x0000_0000 a 0x2FFF_FFFF) é padronizada como não segura, portanto, é livre para configurar com a SAU.

O árbitro garante que as configurações de IDAU e SAU correspondam. Para que uma região de memória seja marcada como não segura, os dois blocos lógicos devem ser configurados como não seguros. Caso contrário, a memória voltará ao estado seguro padrão. O mesmo se aplica às regiões de memória NSC. Para que uma seção seja NSC, a SAU deve ser marcada como NSC, e a IDAU deve ser configurada como não segura.

Existe uma ferramenta no MCUXpresso que permite ao usuário definir rápida e facilmente regiões de memória. Para acessar a ferramenta, use a barra de menus principal do IDE e abra a perspectiva TEE:

Esta ferramenta MCUXpresso permite ao usuário visualizar e editar o mapa de memória do MCU.

Figura 5. Esta ferramenta MCUXpresso permite ao usuário visualizar e editar o mapa de memória do MCU.

A tabela no lado esquerdo da ferramenta pode alterar o nível de segurança das regiões da memória. O mapa de memória no lado direito ilustra como a memória é particionada.

TrustZone oferece um componente de segurança necessário

Na série LPC5500 MCU com tecnologia TrustZone, a memória é dividida em um mundo seguro e não seguro – é possível permitir que os usuários acessem partes da memória não segura, e um aplicativo seguro também pode ser gravado para ser utilizado por outras. O TrustZone atua como um gatekeeper entre os dois mundos e gerencia como as transições principais entre eles.

Duas novas instruções foram introduzidas para esse fim. O aplicativo seguro fornece uma tabela de folheado que expõe as funções que podem ser chamadas do contexto não seguro. O hardware no MCU garante que nenhuma operação ilegal de acesso à memória seja realizada. Esse hardware também pode ser utilizado para configurar as regiões no mapa de memória. Para esse fim, o MCUXpresso oferece a perspectiva do TEE. Um entendimento mais profundo da segurança fornecida pela série de MCUs LPC5500 permite uma melhor experiência de design. Mais informações sobre o TrustZone podem ser encontradas no TrustZone: Calling the Secure World.

Os artigos do setor são uma forma de conteúdo que permite que os parceiros do setor compartilhem notícias, mensagens e tecnologia úteis com os leitores do All About Circuits de uma maneira que o conteúdo editorial não é adequado. Todos os artigos do setor estão sujeitos a diretrizes editoriais rigorosas com a intenção de oferecer aos leitores notícias úteis, conhecimentos técnicos ou histórias. Os pontos de vista e opiniões expressos nos artigos do setor são os do parceiro e não necessariamente os da All About Circuits ou seus autores.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br