Vous souhaitez exécuter des applications ou des services dans un espace isolé sous Linux ? Ou peut-être souhaitez-vous tester et déboguer une application sans qu’elle n’interfère avec le reste de votre système ? Si c’est le cas, vous voudrez en savoir plus sur chroot, un puissant mécanisme intégré à Linux qui vous permet de créer un environnement distinct au sein de votre système.
Explorons chroot en détail, découvrons ses avantages, ses cas d’utilisation, comment le configurer sur un système Linux et, si nécessaire, comment y échapper.
Qu’est-ce que chroot sous Linux ?
chroot ou change-root est sans doute l’une des formes les plus simples et les plus anciennes de logiciel de conteneurisation qui permet à un utilisateur de mettre en bac à sable des applications et des services en toute sécurité. Le sandboxing, en termes informatiques, est le processus d’isolation d’un programme dans un espace confiné avec des ressources prédéfinies.
Si vous êtes familier avec Docker et son fonctionnement, vous pouvez considérer chroot comme une version fortement dépouillée de celui-ci. chroot fonctionne en changeant le répertoire racine d’un programme, en restreignant l’accès et la visibilité, et en fournissant ainsi une couche supplémentaire d’isolation et de sécurité.
Essentiellement, vous créez un répertoire séparé, copiez toutes les dépendances du programme dans le nouveau répertoire, puis exécutez la commande chroot. Cela permet au programme de fonctionner correctement tout en n’ayant pas accès au système de fichiers de base.
Le chrootage d’un programme est un excellent moyen de tester sa fiabilité dans un espace sécurisé sans modifier les fichiers du système actuel. En outre, vous pouvez également réduire le risque de sécurité causé par un paquetage compromis, car dans un environnement chrooté, le paquetage compromis ne sera pas en mesure d’accéder aux fichiers sensibles du système et de les modifier.
Le programme ne pourra accéder et visualiser que les fichiers importés dans le répertoire chrooté, également connu sous le nom de « prison chroot ». Cela empêche le programme et ses sous-processus d’interférer avec le système de base.
Qu’est-ce qu’une prison chroot ?
Une prison chroot est un environnement isolé dans lequel les programmes chroot résident et sont exécutés. Le terme chroot jail est dérivé du concept selon lequel le processus et ses sous-processus à l’intérieur de l’environnement chrooté n’ont pas d’accès ou de visibilité au système de fichiers de base et sont piégés dans les limites de chroot avec des ressources prédéterminées.
Maintenant que le concept de chroot est clair pour vous, passons à la pratique et apprenons comment créer une prison chroot et y faire naître des processus.
Comment créer une prison chroot et y exécuter des programmes
Une prison de chroot est essentiellement un répertoire qui contient toutes les ressources, fichiers, binaires et autres dépendances dont un programme a besoin pour fonctionner correctement.
Cependant, contrairement à un environnement Linux normal, l’environnement de la prison chroot est très restreint et le programme ne peut pas accéder à des fichiers et à des ressources système externes ou supplémentaires.
Par exemple, pour exécuter l’interpréteur de commandes Bash dans une prison chroot, vous devez copier le binaire Bash et toutes ses dépendances dans le répertoire chroot.
Voici les étapes pour créer une prison chroot et lancer un shell Bash :
- Pour qu’un programme s’exécute correctement, vous devez copier toutes ses dépendances dans le répertoire chrooté. Trouvons le binaire, dans ce cas, Bash, et l’emplacement de toutes ses dépendances en utilisant les commandes which et ldd :
which bash
ldd /usr/bin/bash - Maintenant que vous connaissez l’emplacement du binaire et de ses dépendances, copiez-les dans le répertoire que vous souhaitez transformer en prison chroot. En utilisant la commande mkdir, créez les répertoires nécessaires et en utilisant la commande cp, copiez tous les fichiers dans les répertoires correspondants :
mkdir bin lib lib64 && cp -r /lib/ * ./lib && cp -r /lib64/* /lib64/ && cp /bin/bash /bin/
- Enfin, une fois le programme et ses dépendances copiés, vous pouvez lancer la commande chroot avec des privilèges élevés en utilisant le préfixe sudo pour créer l’environnement chroot dans le répertoire choisi. Par défaut, un shell Bash est lancé. Voici la commande à taper :
sudo chroot directory_name
C’est tout ce qu’il faut faire pour créer une prison chroot et exécuter un programme à l’intérieur.
Comment sortir d’une prison chroot
Bien que les prisons chroot soient utiles pour tester des logiciels instables, elles sont également utiles pour gérer les connexions SSH, car le chrootage des utilisateurs connectés est l’une des nombreuses façons de sécuriser votre serveur SSH.
D’un autre côté, si vous êtes un testeur de pénétration et que vous vous êtes connecté au serveur SSH de votre cible, découvrir qu’il s’agit d’un environnement chrooté peut être frustrant et vous donner l’impression d’être dans une impasse.
Cependant, il existe de nombreuses façons de s’échapper d’une prison chroot mal configurée, certaines nécessitant des compétences en programmation C tandis que d’autres peuvent être automatisées à l’aide d’outils. Voici quelques moyens simples de s’échapper d’une prison chroot :
- Appels de chroot imbriqués
- Appels chroot imbriqués avec descripteur de fichier sauvegardé
- Méthode de montage de la racine
- procfs escape
- évasion de ptrace
Notez que pour effectuer une évasion de chroot à l’aide de l’une de ces méthodes, vous devez disposer de privilèges élevés dans le système. Pour en savoir plus sur ces méthodes d’évasion, rendez-vous sur le dépôt GitHub de chw00t, un outil d’automatisation de l’évasion de chroot.
Vous savez maintenant tout sur chroot dans Linux
Maintenant que vous savez ce qu’est le chroot, comment il fonctionne et comment le mettre en œuvre, vous devriez être en mesure de mettre vos applications en bac à sable sans effort depuis le terminal. Gardez à l’esprit que, comme vous le savez, il y a plusieurs façons de sortir d’un environnement chrooté.
Cela montre que chroot n’a en aucun cas été conçu pour être implémenté comme une fonctionnalité de sécurité. Vous devez donc utiliser chroot avec beaucoup de prudence car une configuration incorrecte peut se retourner contre vous et compromettre la sécurité de votre système.
Il est préférable de s’en tenir à des solutions de sandboxing dédiées comme les logiciels de conteneurisation ou les machines virtuelles. Ces deux solutions sont centrées sur le sandboxing et la sécurité, donc à moins qu’il y ait un nouveau zero-day en ville, vous n’avez pas à vous inquiéter de la sécurité et de l’intégrité de votre système.
Si vous ne savez pas lequel choisir entre la conteneurisation et le logiciel de virtualisation, vous devriez essayer les deux et voir par vous-même lequel est le meilleur.