Notre distribution Ocera Sécurisée permet de
certifier un système embarqué.
Elle repose sur des modifications sensibles
de GRUB, du noyau Linux et des utilitaires
de gestion des modules.
Certifier une application
Certifier une application c'est assurer que celle-ci
correspond bien à ce qu'elle prétend être.
C'est à dire authentifier sa provenance et garantir son
intégrité.
Ceci est particulièrement important dans le cadre de l'utilisation
de logiciels Open Source lorsque le fournisseur garanti
le fonctionnement d'une application tout en fournissant les
sources de cette application à l'utilisateur.
Ceci est tout aussi important lorsqu'une tierce partie développe
une bibliothèque ou un driver pour un système d'exploitation:
La question se pose pour le fournisseur lors de la maintenance
ou des garanties qu'il doit fournir au client.
La chaîne de confiance d'un système d'exploitation
Pour qu'une application puisse s'exécuter dans un ordinateur
ou un système embarqué, il a fallu que plusieurs programmes
préparent son exécution et lui propose un environnement
d'exécution adapté.
En général cela comprends:
- Un code ROM d'initialisation du matériel souvent
appelé BIOS capable de charger un boot-loader
primaire depuis une mémoire de masse (FLASH ou disque
dur)
- Un boot-loader primaire capable de gérer les particularité
de la mémoire de masse depuis laquelle il chargera le...
- boot-loader secondaire capable de gérer un système de
fichier plus évolué capable de charger le...
- système d'exploitation qui proposera aux programmes...
- des bibliothèques constituant une interface de
programmation pour des accès standardisés
au services du système d'exploitation et
aux périphériques qui seront pilotés au moyen de...
- drivers gérant les particularités matérielles
de ces périphériques.
Ainsi lorsque nous certifions une application
nous certifions toute la chaîne de code qui peut être modifié.
L'illustration ci-dessous représente la chaîne
de confiance partant du code ROM, supposé ici inaltérable pour
certifier le boot-loader, qui lui même certifie le système d'exploitation
qui certifie à son tour l'application.
La certification des drivers et des librairies sont des cas spécifiques
de la certification des applications.
La solution proposée par MNIS dans S.Ocera (Secured Ocera)
Notre solution repose sur des modifications apportées au boot loader,
au système d'exploitation, et aux utilitaires de gestion
de chargement dynamique des drivers ou des modules.
La modification du code ROM est assez triviale à effectuer,
elle consiste à effectuer un test d'intégrité du boot loader
primaire au moyen d'un HASH.
Le boot Loader
Le boot loader, dans notre cas GRUB, est modifié pour
y ajouter une clefs publique et les routines de vérification de signature,
SHA1, RSA.
La clefs publique servira à vérifier la signature du noyau
au moyen des routines de vérification.
Le noyau
Le noyau doit être modifié pour contenir la signature
qui sera vérifiée par le boot-loader et pour y ajouter le code
de vérification des exécutables.
Le code de vérification des exécutables est déjà en partie
contenu dans le noyau 2.6 et nous utilisons les HOOK de sécurité
de Linux pour implémenter les vérifications.
Les drivers et autres modules dynamiques
Les drivers et les modules dynamiquement chargeables
doivent être certifier par le noyau. Nous avons
modifié l'utilitaire de chargement du noyau insmod pour
y ajouter un code de vérification des modules.
Ce code vérifie que les modules ont été correctement signés à
l'aide de l'utilitaire o_mod_sign.
Le programme insmod est bien sur lui même
signé et vérifié par le
noyau lors de l'exécution.
Les applications et les librairies
Les applications sont signées au moyen de l'utilitaire o_sign
et sont vérifiées par le noyau lors du chargement ainsi
que toutes les librairies dynamiques associées.
La PKI associée
Nous utilisons les outils de OpenSSL pour
construire la PKI associée et les outils spécifiques
pour signer les exécutables ELF.
- o_mod_sign: utilitaire de signature des modules
dynamiquement chargeables.
- o_sign: utilitaire de signature des exécutables
ELF, du noyau et des librairies
Voir aussi sur le sujet
Autres solutions proposées pour garantir l'authenticité
du noyau ou des applications:
|