Îmbunătățirea securității embedded cu arhitectura Armv8-M și TrustZone

by donpedro

Securizarea unei aplicații bazate pe microcontroler pentru IoT poate fi înșelătoare. Securizarea începe de la nivelul hardware și apoi se scalează în software-ul integrat. Pentru o securizare de succes a software-ului, dezvoltatorii solicită ca hardware-ul să suporte funcții critice precum:
Inițializare (boot-are) sigură
Protecția memoriei
Acceleratoare de motoare criptografice
Generator real de numere aleatoare (TRG)
Multiplexare sigură de pin
Izolare software
În vreme ce unele dintre aceste funcții sunt suportate de procesoarele Arm® Cortex®-M, precum seriile M0+, M3/4/7, poate fi dificilă și consumatoare de timp crearea unei soluții de succes.
O nouă soluție pe care se pot baza dezvoltatorii la nivel de hardware este utilizarea noii serii de microcontrolere Cortex-M23/33 care se bazează pe arhitectura Armv8-M. Aceste procesoare sunt proiectate pornind de la ideea de securitate, conținând numeroase funcții de securitate precum cele listate mai devreme, incluzând Arm TrustZone® pentru microcontrolere. În acest articol ne vom familiariza mai mult cu arhitectura Armv8-M și vom explora modalitatea de îmbunătățire a securității integrate utilizând TrustZone.

Figura 1: Din punct de vedere al performanței, noile procesoare Cortex-M23/33 se potrivesc în familie ca procesoare îmbunătățite Cortex-M0+ și Cortex-M4. — (Sursă imagine: Arm)

Introducere în arhitectura Armv8-M
Primul lucru de realizat în legătură cu arhitectura Armv8-M este acela că este cea mai recentă arhitectură de la Arm, care are drept țintă sistemele embedded de timp real ieftine și înalt integrate. Există trei noi tipuri de procesoare care s-au adăugat familiei. M23, care este o variantă de joasă putere, M33, care este o variantă de înaltă performanță și recent anunțatul M35P, care este un procesor de înaltă performanță și securitate fizică (gândit ca rezistență la vandalizare) (Figura 1).

În vreme ce arhitectura Armv8-M aduce îmbu­nă­tățirea performanțelor față de generațiile anterioare de arhitecturi, sunt și câteva îmbunătățiri critice severe de luat în considerare:
Îmbunătățiri ale setului de instrucțiuni
Configurație flexibilă a punctelor de întrerupere
Reprioritizare dinamică a întreruperilor
Suport de urmărire îmbunătățit
Configurarea mai simplă a unității de protecție a memoriei (MPU − Memory Protection Unit)

Cea mai mare și interesantă îmbunătățire a arhitecturii este abilitarea de a utiliza Arm TrustZone.
TrustZone este o extensie de securitate a arhitecturii care permite unui dezvoltator să izoleze fizic programul de execuție și regiuni de memorie precum RAM, spațiu program și periferice în hardware. TrustZone permite software-ului să fie spart în regiuni sigure și nesigure, care se execută apoi într-o stare a procesorului fie sigură, fie nesigură. Starea sigură permite acces complet la memoria și perifericele procesorului, în vreme ce starea nesigură poate accesa numai regiuni nesigure și funcții sigure care sunt intenționat expuse unui program nesigur (Figura 2).

Figura 2: TrustZone utilizează izolare hardware pentru a separa procesorul și aplicațiile în stări nesigure și sigure. Programul ce se execută în stare nesigură nu poate accesa sau manipula memorie sau programe sigure. Acestea din urmă pot fi accesate doar rulând într-o stare sigură. — (Sursă imagine: Arm)

Dezvoltatorii pot alege care locații flash sau RAM aparțin stării sigure și care aparțin stării nesigure. Atunci când programul nesigur apelează o funcție sigură, comutarea dintre stările nesigură și sigură este gestionată complet în hardware într-o manieră deterministă, care are timpul de comutație, în cel mai rău caz, de peste trei cicluri de ceas. Există câțva regiștri din CPU care sunt partajați între stările sigure și nesigure, dar fiecare stare are, de asemenea, proprii regiștri: indicator stivă, eroare și control. M33 are chiar un registru de limită a stivei, care poate fi utilizată pentru a detecta depășirea stivei.
Este important de reținut că TrustZone este o extensie de procesor, ceea ce înseamnă că depinde de producătorul procesorului dacă va include suport TrustZone sau nu pe componentă. De vreme ce TrustZone este opțional, haideți să examinăm câteva procesoare Armv8-M care sunt disponibile la ora actuală și cum gestionează TrustZone.

Selectarea unui procesor Armv8-M cu suport TrustZone
Există la ora actuală câteva procesoare disponibile care suportă procesorul Armv8-M. Ceea ce este interesant este că aceste componente sunt așa de noi, astfel încât la sfârșitul verii 2018, singurul producător care avea componente în producție era Microchip Technology. S-au anunțat și alți producători de procesoare, precum Nuvoton, cu componente în lucru. Ne putem aștepta ca în următoarea perioadă să vedem o creștere dramatică a numărului de componente Armv8-M, inclusiv din cele care suportă TrustZone.
Microchip a produs două versiuni principale ale arhitecturii Armv8-M, componente din familia SAML10 și SAML11. Versiunea SAML10 nu include TrustZone, în vreme ce componenta SAML11 include. Tabelul 1 prezintă toate variantele de componente ale SAML10 și SAML11 care sunt curent în producție și care sunt disponibile. Principala diferență între variante este disponibilitatea de RAM, flash, pini și periferice, adică ceea ce căutăm când selectăm un microcontroler.

 Caracteristici specifice ale SAM L10/L11 

Sumar configurații
Pentru dezvoltatorii care sunt interesați să înceapă să utilizeze Armv8-M, există două kituri de dezvoltare între care se poate alege. Placa de evaluare SAML10 Xplained de la Microchip include microcontrolerul SAM L10E14A, care dispune de 16 KB de memorie flash, 2 KB de memorie de date flash, 4 KB de memorie SRAM și capsulă cu 32-pini. Placa de evaluare SAML11 Xplained de la Microchip include microcontrolerul SAM L11E16A, care dispune de 64 KB de memorie flash, 2 KB de memorie de date flash, 16 KB SRAM și capsulă cu 32-pini. Plăcile de evaluare sunt identice, mai puțin faptul că procesoarele sunt diferite. Placa Xplained este prezentată în Figura 3.

Figura 3: Placa de dezvoltare Microchip SAML10/L11 se bazează pe arhitectura Armv8. Versiunea SAML11 suportă TrustZone. — (Sursă imagine: Keil)

Figura 4: Atunci când utilizează TrustZone, dezvoltatorii realizează un spațiu de lucru multi-proiect, unde un proiect este dedicat pentru programul sigur și celălalt este pentru programul utilizator.– (Sursă imagine: Keil)

Cum lucrează aplicațiile TrustZone
Dezvoltatorii care lucrează cu TrustZone vor des­coperi că modul prin care o aplicație embedded este dezvoltată este pe cale să se schimbe dramatic. În primul rând dezvoltatorii au nevoie să separe spațiile aplicațiilor pentru a determina ce programe și biblioteci aparțin de starea sigură și care de starea nesigură.
Odată făcută această separare, un dezvoltator creează două aplicații software diferite; una pentru program sigur și una pentru program nesigur. Acest lucru poate fi făcut foarte ușor utilizând un compilator/IDE precum Keil MDK. Ceea ce are de făcut în mod esențial un dezvoltator este un spațiu de lucru multi-proiect, unde un proiect este programul sigur și celălalt proiect este programul nesigur (Figura 4).

Atunci când pornește o aplicație TrustZone, programul începe executarea în starea sigură. Acest lucru permite dezvoltatorului să stabilească imediat o bază de încredere de pe care se poate executa restul aplicației. În acest punct, aplicația se execută precum orice altă aplicație embedded. Diferența principală este aceea că programul nesigur poate accesa numai funcții sigure și apeluri recursive printr-o poartă sigură (Figura 5).

Figura 5: O aplicație TrustZone începe execuția din starea sigură și intră în starea nesigură odată ce baza de încredere a fost stabilită. Starea nesigură poate face doar solicitări de funcții pentru funcțiile expuse programului sigur, în caz contrar fiind lansată o excepție. (Sursă imagine: Keil)

Dacă aplicația utilizator încearcă să acceseze un program sigur, memorie sau periferice, fără trecerea printr-o poartă sigură, va fi generată o excepție. Fără dubii, acest lucru înseamnă că, fie există o problemă în program, fie în mediul de producție, un hacker este pe cale să acceseze sistemul. În acest punct, programul poate decide cum să contracareze atacul, cum ar fi de exemplu să repornească sistemul pentru a îndepărta orice program injectat, care ar putea rula în SRAM-ul nesigur.

Sfaturi și trucuri pentru securizarea unei aplicații embedded cu TrustZone
Există numeroase tehnici care pot ajuta la îmbu­nă­tățirea securității integrate.
Mai jos sunt prezentate câteva sfaturi și trucuri ce vor ajuta dezvoltatorii interesați în utilizarea arhitecturii Armv8-M cu TrustZone:
Utilizați zona sigură pe perioada reinițializării pentru a putea stabili o bază de încredere și un mediu de execuție de încredere.
Puneți în zona sigură sarcinile critice, bibliotecile și cheile.
Lăsați programul utilizator în zona nesigură.
Pentru a păstra acest lucru simplu, puneți kernel-ul RTOS într-un singur loc, fie în zona sigură, fie în zona nesigură.
Utilizați MPU în zone sigure și zone nesigure pentru a îmbunătăți izolarea procesului.
Minimizarea programului în zona sigură poate ajuta la minimizarea suprafeței de atac a programelor sigure.
Fiți siguri că programul sigur șterge orice informație secretă de pe registrele fără miză, înainte de a inițializa o tranziție de la o stare sigură la una nesigură.

Concluzie
Securizarea unei aplicații bazate pe microcontroler pentru IoT este importantă dar complicată. Securitatea începe la nivel de hardware, dar numeroase familii de microcontrolere tradiționale rulează pe nuclee Cortex-M0+, Cortex-M3/4/7, care au lipsă de funcții necesare pentru a securiza cu succes un dispozitiv. Dezvoltatorii pot acum beneficia de noua arhitectură Armv8-M bazată pe nuclee Cortex-M23 și Cortex-M33 pentru a-și securiza aplicațiile inte­grate, utilizând un număr în creștere de procesoare cu această arhitectură.

Autor: Jacob Beningo – Grupul de editori Nord Americani ai Digi-Key

Digi-Key Electronics   |   www.digikey.com
DK_Electronics

S-ar putea să vă placă și