
Environnement d'exécution de confiance (TEE) en Go
Le framework GoTEE implémente l'instanciation concurrente d'unikernels basés sur TamaGo en modes privilégié et non privilégié, interagissant entre eux via le mode moniteur et des appels système personnalisés.
Grâce à ces capacités, GoTEE implémente un environnement d'exécution de confiance (TEE) basé sur TamaGo, apportant la sécurité mémoire, la commodité et les capacités de Go à l'exécution bare metal dans le monde sécurisé ARM TrustZone ou les environnements d'exécution superviseur RISC-V.
GoTEE peut superviser des Trusted Applets autonomes en Go, Rust ou C pur, implémentant l'API GoTEE, ainsi que tout système d'exploitation capable de fonctionner dans le monde normal ARM TrustZone ou en mode S RISC-V, comme Linux.
Contextes d'exécution isolés pour le mode utilisateur ARM, le monde normal TrustZone ou le mode superviseur RISC-V
API pour l'implémentation d'un Trusted OS (gestionnaires Syscall, JSON-RPC et d'exceptions)
La documentation principale, qui comprend un tutoriel, est disponible sur le wiki du projet.
La documentation de l'API du paquet est disponible sur pkg.go.dev.
Le tableau suivant résume les SoC et cartes actuellement pris en charge.
| SoC | Board | SoC package | Board package |
|---|---|---|---|
| NXP i.MX6ULZ | USB armory Mk II | imx6ul | usbarmory/mk2 |
| NXP i.MX6ULL | MCIMX6ULL-EVK | imx6ul | mx6ullevk |
| SiFive FU540 | QEMU sifive_u | fu540 | qemu/sifive_u |
Dans la nomenclature TEE, l'unikernel privilégié est communément appelé Trusted OS, tandis que celui non privilégié représente un Trusted Applet.
L'exemple GoTEE démontre le fonctionnement concurrent d'unikernels Go agissant comme Trusted OS, Trusted Applet et OS principal.
[!WARNING] L'OS principal peut être n'importe quel OS « riche » (par exemple Linux) ; TamaGo est simplement utilisé pour un exemple autonome. Il en va de même pour le Trusted Applet, qui peut être n'importe quelle application bare metal capable de fonctionner en mode utilisateur et d'implémenter l'API GoTEE, comme des programmes C ou Rust autonomes.
Un exemple Rust peut être utilisé en remplaçant
trusted_applet_gopartrusted_applet_rustlors de la compilation.
La combinaison Trusted OS/applet de l'exemple effectue des tests de base de l'exécution concurrente de trois unikernels TamaGo à différents niveaux de privilège :
L'OS principal rend la main avec un appel moniteur.
Le Trusted Applet dort pendant 5 secondes avant de tenter de lire la mémoire du Trusted OS, ce qui déclenche une exception gérée par le superviseur qui met fin au Trusted Applet.
L'interface syscall GoTEE est implémentée pour la communication entre le Trusted OS et le Trusted Applet.
Lorsqu'elle est lancée sur l'USB armory Mk II, l'application d'exemple est accessible via SSH par Ethernet over USB (protocole ECM, pris en charge sur les hôtes Linux et macOS) :
$ ssh [email protected]
tamago/arm • TEE security monitor (Secure World system/monitor)
allgptr # memory forensics of applet goroutines
csl # show config security levels (CSL)
csl <periph> <slave> <hex csl> # set config security level (CSL)
dbg # show ARM debug permissions
exit, quit # close session
gotee # TrustZone example w/ TamaGo unikernels
help # this help
linux <uSD|eMMC> # boot NonSecure USB armory Debian base image
lockstep <fault %> # tandem applet example w/ fault injection
peek <hex offset> <size> # memory display (use with caution)
poke <hex offset> <hex value> # memory write (use with caution)
reboot # reset device
sa # show security access (SA)
sa <id> <secure|nonsecure> # set security access (SA)
stack # stack trace of current goroutine
stackall # stack trace of all goroutines
>
L'exemple peut être lancé avec la commande gotee qui génère deux instances de l'OS principal pour démontrer le comportement avant et après l'application des restrictions TrustZone à l'aide de périphériques matériels réels.
De plus, la commande linux peut être utilisée pour générer l'image de base USB armory Debian en tant qu'OS principal non sécurisé.
[!NOTE] Seules les versions de l'image de base USB armory Debian >= 20211129 sont prises en charge pour le fonctionnement non sécurisé.