Pro vysokou bezpečnost vestavěného software je nutné, aby hardware podporoval důležité funkce, jako například:
- Bezpečné bootování
- Ochrana paměti
- Kryptografický akcelerátor
- Pravý generátor náhodných čísel (TRG)
- Secure pin multiplexing
- Izolaci softwaru
I když některé z těchto funkcí jsou podporovány v procesorech Arm Cortex-M, jako jsou řady M0 +, M3 / 4/7, může být obtížné a časově náročné vytvořit bezpečný software. Nové řešení, které lze využít na hardwarové úrovni, je použití nové řady mikrokontrolérů Cortex-M23 / 33, které jsou založeny na architektuře Armv8-M. Tyto procesory obsahují mnoho bezpečnostních prvků, které byly uvedeny dříve, včetně Arm TrustZone pro mikrokontroléry. V tomto článku se lépe seznámíme s architekturou Armv8-M a prozkoumáme, jak můžeme pomocí TrustZone zlepšit vestavěnou bezpečnost.
Úvod do architektury Armv8-M
Architektura Armv8-M je nejnovější architektura pro mikrokontroléry od společnosti Arm, která se zaměřuje na nízkonákladové a vestavěné systémy v reálném čase. Existují tři nové typy procesorů, které jsou součástí této rodiny. Model M23 je variantou pro aplikace s malou spotřebou. Model M33 je vhodný pro aplikace, které vyžadují velký výkon. Nedávno oznámený procesor M35P je vysoce výkonný procesor, který myslí na fyzickou bezpečnost (podpora „tamper“ funkce) (obrázek 1).
Obrázek 1: Z hlediska výkonu se nové procesory Cortex-M23 / 33 hodí do rodiny jako vylepšené procesory Cortex-M0 + a Cortex-M4. (Zdroj obrázku: Arm)
Armv8-M architektura zlepšuje výkonnost předchozí architektury a zahrnuje několik vylepšení, které je nutné poznamenat:
- Vylepšení sady instrukcí
- Flexibilní konfigurace breakpointu
- Dynamická prioritizace přerušení
- Vylepšená podpora trasování
- Jednodušší nastavení ochrany paměti (MPU)
Největším a nejzajímavějším zlepšením architektury je možnost používat Arm TrustZone. Jedná se o rozšíření bezpečnosti architektury, která umožňuje fyzicky izolovat kód aplikace, paměťovou oblast jako je RAM a periferie v hardware. Služba TrustZone umožňuje software rozdělit do zabezpečených a nezabezpečených oblastí, které pak budou spouštěny buď v bezpečném nebo nezabezpečeném režimu procesoru. Zabezpečený režim umožňuje plný přístup k paměti a periferiím procesoru, zatímco nezabezpečený reřim může přistupovat pouze k nezabezpečeným oblastem a zabezpečeným funkcím, které jsou záměrně vystaveny v nezabezpečené oblasti.(obrázek 2).
Obrázek 2: TrustZone izoluje kód aplikace, paměťovou oblast či periferie. Kód, který se provádí v nezabezpečeném režimu, nemůže přistupovat nebo manipulovat s bezpečnou částí paměti nebo kódem. Paměť a kód je přístupný pouze v bezpečném režimu procesoru. (Zdroj obrázku: Arm)
Lze si vybrat, která Flash paměť či RAM paměť bude přístupná v bezpečném či nezabezpečeném režimu procesoru. Když nezabezpečený kód vyvolá zabezpečenou funkci, přepínání mezi nezabezpečenými a zabezpečenými režimy se v hardware provádí deterministickým způsobem, který má nejvyšší prioritu a čas přepínání se přibližuje ke třem hodinovým cyklům. V rámci procesoru je několik registrů, které jsou sdíleny mezi bezpečnými a nezabezpečenými režimy. Každý režim má také vlastní registr ukazatele režimu, poruchy a kontroly. M33 má dokonce i registr limitu zásobníku, který lze použít k detekci přetečení.
Je důležité si uvědomit, že TrustZone je rozšíření procesoru, což znamená, že je na výrobci procesoru, zda bude obsahovat podporu TrustZone nebo nikoli. Vzhledem k tomu, že je TrustZone nepovinný ukážeme si několik procesorů Armv8-M, které jsou v současné době k dispozici a jak pracují s rozšířením TrustZone.
Výběr procesoru Armv8-M s podporou TrustZone
V současné době existuje několik procesorů, které jsoun založeny na architektuře Armv8-M. Prvním výrobcem, který již má tyto procesory ve výrobě je Microchip Technology. Od jiných výrobců procesorů jako je Nuvoton, přicházejí zprávy, že v brzké době již budou procesory k dispozici. V příštích měsících můžeme očekávat dramatický nárůst počtu procesorů s architekturou Armv8-M, včetně těch, které podporují TrustZone.
Microchip vytvořil dvě hlavní verze architektury Armv8-M, které nalezneme v řadách SAML10 a SAML11. Verze SAML10 nezahrnuje TrustZone, zatímco SAML11 ano. Obrázek 3 ukazuje všechny varianty SAML10 a SAML11, které jsou v současné době vyráběné a dostupné. Hlavní rozdíly mezi variantami jsou dostupnost paměti RAM, paměti Flash, počet pinů a periferií, což je to, co je nutné znát při výběru mikrokontroléru.
Varianty SAM10 a SAM11
Obrázek 3: Varianty mikročipů Microchip SAML10 a SAML11. Pouze SAML11 obsahuje Arm TrustZone. (Zdroj obrázku: technologie Microchip)
Pro ty, kteří chtějí začít s Armv8-M existují dva vývojové kity. SAML10 Xplained evaluation board zahrnuje mikrokontrolér SAM L10E14A, který obsahuje 16 kbitů Flah paměť, 2 kByty datové Flash paměti, 4 KByty SRAM a je dodáván v 32-pinovém pouzdře. SAML11 Xplained Evaluation Board obsahuje mikrokontrolér SAM L11E16A, který obsahuje 64 kbitů Flash paměť, 2 KBytů datovou paměť Flash, 16 KBytů SRAM a je také dodáván v 32-pinovém pouzdře. Vývojové desky jsou shodné s tím, že se liší pouze procesory. Desku Xplained lze vidět na obrázku 4.
Obrázek 4: Vývojová deska Microchip SAML10 / L11 je založena na architektuře Armv8. Verze SAML11 podporuje TrustZone (zdroj obrazu: Keil)
Jak fungují aplikace TrustZone
Vývojáři, kteří pracují s TrustZone, zjistí, že způsob, jakým je vyvíjena integrovaná aplikace, se dramaticky změní. Musí určit, který kód a knihovny patří do bezpečného režimu a které patří do nezabezpečeného režimu. Jakmile je toto určeno, vývojář musí vytvořit dvě různé softwarové aplikace. Jeden zabezpečený kód a druhý nezabezpečený kód. To lze provést velmi snadno a to pomocí kompilátoru / IDE zvaný Keil MDK. Jedná se o multi-projektový pracovní prostor, kde jeden projekt je pro bezpečný kód a druhý je pro nezabezpečený kód(obrázek 5).
Obrázek 5: Pro vývoj software s TrustZone, vývojáři musí používat multi-projektový pracovní prostor, kde je jeden projekt určen pro bezpečný kód a druhý pro uživatelský kód. (Zdroj obrázku: Keil)
Při spuštění aplikace TrustZone začne kód pracovat v zabezpečeném režimu. To umožňuje okamžitě vytvořit důvěryhodný zdroj, ze kterého se může zbytek aplikace spouštět. Po spuštění systému se aplikace přepne ze zabezpečeného režimu na nezabezpečený a spustí uživatelský kód aplikace.
V tomto okamžiku aplikace pracuje stejně jako každá jiná vestavěná aplikace. Hlavní rozdíl spočívá v tom, že nezabezpečený kód může přistupovat k zabezpečeným funkcím pomocí funkčního volání (callbacks) prostřednictvím zabezpečené brány (Obrázek 6).
Obrázek 6: Aplikace TrustZone se spustí z bezpečného režimu a vstoupí do nezabezpečeného režimu, jakmile je vytvořen důvěryhodný zdroj. Nezabezpečený režim může provádět pouze funkční volání k funkcím v zabezpečeném kódu. (Zdroj obrázku: Keil)
Pokud se uživatelská aplikace pokusí přistupovat k zabezpečenému kódu, paměti nebo periferiím bez přechodu přes zabezpečenou bránu, bude generována výjimka. Nepochybně to znamená, že buď nastala chyba v softwaru nebo se hacker pokouší o přístup do systému. Kód pak může rozhodnout, jak by se měl systém zachovat. Například může provést restartování systému, aby odstranil infiltrovaný kód, který může být spuštěn v nezabezpečené SRAM paměti.
Tipy a triky pro zabezpečení vestavěné aplikace pomocí TrustZone
Existuje mnoho technik, které mohou pomoci zlepšit vestavěnou bezpečnost. Níže je několik tipů a triků, které využijete s architekturou Armv8-M a TrustZone:
- Při obnovení použijte zabezpečenou zónu, abyste vytvořili důvěryhodný zdroj, pro opětovné spuštění uživatelského kódu
- Klíčové úkoly bezpečnosti, knihovny a klíče patří do zabezpečené zóny.
- Uživatelský kód je umístěn v nezabezpečené zóně
- Jádro RTOS vložit na jedno místo, buď do zabezpečené nebo nezabezpečené zóny
- Použijte MPU v zabezpečených i nezabezpečených zónách, abyste zlepšili izolaci procesu
- Minimalizace kódu v zabezpečené zóně může snížit riziko napadení
- Ujistěte se, že bezpečný kód vymaže všechny tajné informace z registrů před zahájením přechodu ze zabezpečeného do nezabezpečeného režimu
Závěr
Zabezpečení aplikace založené na mikrokontrolérech pro IO je důležité a ne jednoduché. Zabezpečení začíná na hardwarové úrovni, ale mnoho tradičních rodin mikrokontrolérů pracujících s jádry Cortex-M0 +, Cortex-M3 / 4/7 mohou mít nedostatečné funkce pro bezpečnost. Vývojáři nyní mohou využívat novou architekturu Armv8-M na jádrech Cortex-M23 a Cortex-M33 pro zabezpečení svých vestavěných aplikací. Škála procesorů, které mají architekturu Armv8-M s podporou TrustZone stále roste, což je pozitivní pro výběr procesoru pro danou aplikaci.
Článek vyšel v originále "Improving Embedded Security with the Armv8-M Architecture and TrustZone" na webu DigiKey.com, autorem je Jacob Beningo