|
1.
Utiliser un environnement chroot
« Chrooter » un service (ou un utilisateur) est une façon de limiter
son environnement afin qu'il n'accède qu'à l'essentiel sans pouvoir
obtenir un accès (ou des informations) qui pourraient mener aux privilèges
root. En démarrant un service par le biais d'un autre utilisateur que root
(nobody, apache, named), un attaquant ne peut accéder aux fichiers qu'avec les
permissions de cet utilisateur. Cela veut dire qu'un attaquant ne peut obtenir
un accès root même si les services ont une faille de sécurité.
Certains services comme pure-ftpd et bind ont des fonctionnalités permettant
d'utiliser chroot, mais pas tous. Si le service le supporte, profitez-en.
Sinon, il vous faudra trouver un moyen de créer le vôtre. Voyons à présent
comment créer un environnement chroot. Pour comprendre les bases, nous allons
expérimenter avec bash. (Ce qui est une façon aisée d'apprendre à
utiliser chroot.)
Créez le répertoire /chroot (mkdir /chroot) et cherchez
quelles sont les bibliothèques dynamiques avec lesquelles bash est
compilé (si la compilation a été faite avec le mode -static, ce n'est
pas nécessaire) :
La commande suivante va créer une liste des bibliothèques utilisées par
bash.
Exemple de code 1.1 : obtenir la liste des bibliothèques utilisées |
# ldd /bin/bash
libncurses.so.5 => /lib/libncurses.so.5 (0x4001b000)
libdl.so.2 => /lib/libdl.so.2 (0x40060000)
libc.so.6 => /lib/libc.so.6 (0x40063000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
|
Créons à présent un environnement pour bash.
Exemple de code 1.1 : création d'un environnement chroot pour bash |
# mkdir /chroot/bash
# mkdir /chroot/bash/bin
# mkdir /chroot/bash/lib
|
Copiez ensuite les fichiers utilisés par bash (/lib) dans
le répertoire lib de l'environnement chroot et copiez la commande
bash dans le répertoire bin du chroot. Cela devrait suffire pour
recréer l'environnement, mais avec moins de fonctionnalités. Il ne vous reste
qu'à l'essayer : chroot /chroot/bash /bin/bash. Si vous obtenez une
invite vous donnant /, c'est gagné ! Dans le cas contraire, il
devrait vous dire quel est le fichier manquant. Il se peut également que
certaines bibliothèques partagées dépendent d'autres bibliothèques.
Vous remarquerez assez vite que, dans le chroot, rien ne marche à part
echo. C'est parce que nous n'avons aucune autre commande dans notre
environnement que bash et qu'echo est une fonction intégrée.
La méthode est la même pour créer un service en chroot. La seule différence est
que les services se basent parfois sur des périphériques (« devices »)
et des fichiers de configuration dans /etc. Copiez-les tout
simplement (des périphériques peuvent être copiés avec cp -a) vers
l'environnement chroot, éditez le script d'initialisation (init) pour qu'il
utilise chroot avant de s'exécuter. Il peut être difficile de trouver quels
périphériques et fichiers de configuration sont nécessaires. C'est ici que la
commande strace devient utile. Démarrez le service avec
/usr/bin/strace et notez les fonctions suivantes : open, read, stat
et peut-être connect. Cela devrait vous donner une bonne idée des fichiers à
copier. Dans la plupart des cas, copiez juste le fichier passwd (retirez tous
les utilisateurs qui n'ont aucun rapport avec le service),
/dev/zero, /dev/log et /dev/random.
1.
Le mode utilisateur Linux (« User Mode Linux »)
Une autre façon de créer un environnement plus sécurisé est de faire fonctionner
une machine virtuelle. Une telle machine est, comme son nom l'indique, un
processus exécuté par votre véritable système d'exploitation, et qui fournit un
environnement matériel et un système d'exploitation qui donnent l'impression
d'être une machine en soit. Le bénéfice, en ce qui a trait à la sécurité, est
que si le serveur exécuté par la machine virtuelle est compromis, seul le
serveur virtuel est affecté, et non pas l'installation mère.
Pour plus d'informations au sujet de l'installation du mode utilisateur Linux,
consultez le User Mode Linux Guide.
|