Construction et sécurisation d`un système Linux embarqué

publicité
Construction et sécurisation d'un
système Linux embarqué
Frédéric AIME
[email protected]
0 950 260 370
Différentes approches
●
●
●
Création d'une distribution “From Scratch”
–
Nécessite un investissement intellectuel
–
Forte granularité
–
Parfaite maîtrise du projet
–
Conseillé si LINUX est stratégique
Choix d'un produit commercial
–
Outils graphiques
–
Cross compilation
–
Support technique
Mais
–
Granularité moindre
–
Coût de support parfois élevé
Phases de construction d'un système
●
●
●
●
●
Optimisation de la procédure de démarrage du système
Réduction drastique de l'utilisation mémoire (utilisation de ucLibc
et Busybox)
Optimisation du noyau en fonction des fonctionnalités
nécessaires (pilotes de périphériques, réseau ou non, etc...).
Réduction et simplification du nombre de fichiers et répertoires
de configuration comme /etc contenant la majorité des fichiers de
config.
Suppression du système de swap: un système embarqué est
destiné à un usage bien défini et sera donc suffisamment
dimensionné en mémoire vive pour éviter l'utilisation d'une
partition de swap.
Optimisation du démarrage
•
boot du système par LILO (LInux LOader) ou un programme
équivalent
•
chargement du noyau
•
lancement par le noyau du processus init (/sbin/init)
•
lecture du fichier /etc/inittab par le processus init. Ce fichier
contient en général le nom du script de démarrage:
# System initialization (runs when system boots).
si:S:sysinit:/etc/rc.d/rc.S
•
le script en question poursuit l'initialisation du système
Construction d'un environnement
“Lightweight”
•
Utilisation de uclibc
•
Nécessite:
•
•
•
binutils
gcc
Remplacement des commandes systèmes par
busybox
•
Prend en charge la majorité des commandes usuelles
Linux
Optimisation du noyau
•
Sélection de l'architecture cible
•
Inventaire des drivers utiles
•
Supprimer tous les autres
•
Optimisation en espace (option -Os de gcc)
•
Suppression des fonctionnalités inutiles
Interfaces graphiques
•
De plus en plus fréquent
X Window System: parfois peu adapté car coûteux en ressources
•
•
•
•
XFree86 peut être optimisé en taille et ressources (Xkdrive, mode VESA...)
Frame-buffer LINUX: accès aux modes graphiques sans X11 (en général mode VESA
+ quelques supports spécifiques)
QTopia (ex Qt/Embedded )
•
•
Compatible source avec Qt: à la base de KDE et du navigateur OPERA
•
Utilise le frame-buffer LINUX
•
•
•
Reste cependant la référence dans le monde UNIX (plugins, etc...)
Déja éprouvé dans des solutions industrielles avec OPERA (Motorola, Sony mylo,
sharp, volvo,...)
Existe en version GPL ==> applications DOIVENT être GPL
GTK+
Exemple d'environnement de
développement pour l'embarqué
*
ou
Station de développement
Cross GCC
Binutils architecture cible
ucLibc architecture cible
Filesystem cible:
Base-layout
ucLibc
Busybox
* en utilisant un sous-système permettant de faire fonctionner gcc, ex: cygwin
Sécurisation du système
●
Principes de sécurisation identiques à
l'informatique traditionnelle
–
La sécurité parfaite N'EXISTE PAS
–
Objectif : Rendre le plus complexe possible les
« turnaround »
–
Contraintes particulières
●
●
D'espace de stockage
D'espace mémoire
Sécurisation du système
●
Isoler applicatif du système
–
Environnement « chrooté »
●
●
●
●
Un environnement « virtuel » et disjoint du système
principal
Exemple : serveur FTP, serveur WEB, ...
Cantonner l'impact d'une brèche de sécurité à cet
environnement
Difficile à mettre en place dans certains cas
–
–
Front-end web de configuration du système
Utilisateurs applicatifs non privilégiés (non root)
Sécurisation du système
●
●
Noyau compilé dans l'esprit « SELinux »
–
SELinux : un ensemble de règles de configuration
–
Mais reste un noyau standard avec éventuellement
quelque patches
Un module est capable de tout faire
–
Modules de noyau figés
●
Phase de boot
–
–
Chargement des modules connus
echo off > /proc/modules en fin de phase de boot (<= linux-2.4.x)
Sécurisation du système
●
●
Définir les éléments qui peuvent être mis à jour
–
Noyau
–
Modules « trustés »
–
Applicatifs
S'assurer que l'on parle au bon serveur de mise
à jour
–
Utilisation de certificats « clients » pour valider le
serveur
–
Utilisation de signature numérique des paquets à
mettre à jour
Sécurisation du système
●
Ce que fait Netfilter
–
Effectuer des filtrages de paquets, principalement
pour assurer des fonctions de Firewall (Filter)
–
Effectuer des opérations de NAT (Network Address
Translation)
–
Effectuer des opérations de marquage des paquets
(Mangle)
Téléchargement