GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment inspecter le contenu d'une image Docker sans démarrer un conteneur

Les images Docker peuvent regrouper des fichiers binaires et des bibliothèques arbitraires dans un seul blob de données. Inspecter ce qui se trouve réellement à l'intérieur d'une image vous aide à évaluer sa pertinence et à identifier tout risque de sécurité.

Le moyen le plus simple d'explorer le contenu d'une image consiste à démarrer un conteneur, à obtenir une session shell, puis à utiliser des commandes de terminal régulières telles que ls et cd pour afficher sa structure de répertoires de l'intérieur. Ce n'est cependant pas idéal dans les environnements critiques pour la sécurité - la création d'un conteneur avec une image inconnue pourrait vous exposer à un script de point d'entrée malveillant.

Voici des techniques que vous pouvez utiliser pour inspecter les fichiers d'une image sans démarrer un conteneur.

Créer un conteneur sans le démarrer

docker create est un équivalent moins connu de docker run . Il crée un nouveau conteneur au-dessus d'une image donnée sans le démarrer. Vous pourrez le lancer plus tard avec le docker start commande.

Créer un nouveau conteneur n'est pas dangereux car il restera inerte jusqu'à ce qu'il soit exécuté. Vous pouvez à peu près le comparer à la définition des paramètres de configuration d'une machine virtuelle que vous n'utilisez pas. Même s'il est configuré pour démarrer à partir d'un ISO de système d'exploitation entaché, vous n'allez pas endommager votre environnement.

docker create --name suspect-container suspect-image:latest

La commande ci-dessus crée un nouveau conteneur appelé suspect-container qui sera basé sur le suspect-image:latest photo.

Exportation du système de fichiers du conteneur

Maintenant que vous avez un conteneur valide mais arrêté, vous pouvez exporter son système de fichiers à l'aide de l'docker export commande. Comme le conteneur n'a jamais été démarré, vous pouvez être sûr que l'exportation représente avec précision le système de fichiers défini par les calques de votre image.

docker export suspect-container > suspect-container.tar

Vous vous retrouverez avec une archive tar dans votre répertoire de travail qui contient tout ce qui se trouve dans votre image. Ouvrez ou extrayez cette archive à l'aide de votre logiciel préféré pour parcourir les répertoires de l'image et lister et afficher les fichiers.

Si vous n'avez pas besoin d'enregistrer ou d'ouvrir l'archive, préférant obtenir la liste des fichiers dans votre terminal, modifiez le tar commande :

docker export suspect-container | tar t > suspect-container-files.txt

tar t répertorie le contenu de l'archive d'entrée. Vous vous retrouverez avec une liste de tout ce qui se trouve dans votre image dans suspect-container-files.txt .

Utilisation de "l'enregistrement d'image docker"

Une variante de cette technique consiste à utiliser docker image save . Cette commande enregistre directement les données d'une image dans une archive tar.

docker image save suspect-image:latest > suspect-image.tar

Cette méthode produit une archive centrée sur l'image, et non sur les conteneurs créés à partir de celle-ci. Le tar inclura un manifest.json fichier, décrivant les calques de l'image, et un ensemble de répertoires contenant le contenu de tous les calques individuels.

Ceci est utile lorsque vous évaluez le rôle de chaque couche dans la construction de l'image. Cependant, créer et exporter un conteneur arrêté est un moyen plus accessible de parcourir le système de fichiers final de l'image.

Liste des couches avec "historique des images docker"

Une autre façon d'inspecter le contenu d'une image consiste à afficher sa liste de calques avec l'docker image history commande.

docker image history suspect-image:latest

Cela expose les instructions Dockerfile qui composaient les calques de l'image. Il ne vous permettra pas de voir les fichiers et répertoires individuels dans le système de fichiers de l'image, mais peut être plus efficace pour mettre en évidence un comportement suspect.

Chaque ligne de la sortie de la commande représente un nouveau calque dans l'image. La colonne "CREATED BY" affiche l'instruction Dockerfile qui a créé la couche.

L'analyse de la liste des calques vous aide à identifier rapidement les actions suspectes qui pourraient indiquer que vous utilisez une image malveillante. Rechercher des binaires inconnus dans RUN instructions, modifications inattendues des variables d'environnement et CMD suspects et ENTRYPOINT déclarations.

Les deux dernières couches sont sans doute les plus importantes à évaluer lors de l'inspection de l'historique d'une image. Ils vous disent exactement ce qui se lancera lorsque vous docker run ou docker start un contenant. Si l'une ou l'autre des instructions semble suspecte ou inconnue, envisagez d'utiliser les techniques ci-dessus pour inspecter complètement les fichiers binaires ou les scripts référencés.

L'accès au système de fichiers d'une image fournit une vue très granulaire de son contenu où le contenu malveillant peut facilement passer inaperçu, même après une inspection manuelle. La liste des couches exposées par docker image history ne peut pas vous aider à trouver des éléments de système de fichiers déguisés, mais est plus efficace pour révéler des opérations manifestement malveillantes telles que des téléchargements furtifs de logiciels espions ou des remplacements de variables d'environnement.

Outils tiers

Des outils open source tiers sont également disponibles pour vous aider à répertorier le contenu des images. Ceux-ci offrent généralement des capacités de filtrage afin que vous puissiez rapidement énumérer les packages de système d'exploitation installés, les dépendances de langage de programmation et les fichiers ordinaires.

L'inspection des images est intégrée au moteur d'analyse des conteneurs Anchore. Vous pouvez l'utiliser en exécutant anchore-cli image content my-image:latest après avoir installé Anchore. Cela fournit une liste complète du contenu du système de fichiers de l'image cible.

Une autre option est Dive, un outil spécialement conçu pour visualiser le contenu de l'image. Il utilise une approche basée sur les couches et met en évidence les modifications du système de fichiers apportées à chaque nouvelle couche. Vous parcourez le système de fichiers à l'aide d'une vue de terminal interactive basée sur une arborescence.

Conclusion

Les images Docker sont généralement opaques au point de consommation. Les registres populaires ne fournissent pas de liste de fichiers dans leurs API ou leurs interfaces utilisateur. Cette fonctionnalité n'est pas non plus intégrée à la CLI Docker. Bien que de nombreux développeurs utilisent les images telles quelles, une image non auditée peut être intolérable dans les environnements à haut risque.

Vous pouvez inspecter une image suspecte en l'exportant vers une archive et en parcourant son contenu. Cela maintient l'image inerte, empêchant l'exécution de contenu malveillant, tout en offrant une vue complète du système de fichiers qu'elle créerait dans un conteneur.

Vous pouvez encore renforcer votre posture de sécurité en combinant l'exploration manuelle du contenu avec des analyses d'images automatisées. Ceux-ci accélèrent le processus de détection des vulnérabilités connues, mais peuvent ne pas être efficaces pour trouver de nouveaux fichiers malveillants déposés dans des emplacements cachés. L'utilisation de plusieurs techniques vous permet d'étendre votre couverture et de détecter le plus grand nombre possible de fichiers suspects.


Docker
  1. Comment exécuter MySQL dans un conteneur Docker

  2. Comment se connecter en SSH à un conteneur Docker

  3. Comment installer Vim dans un conteneur Docker

  4. Comment utiliser la commande Docker Inspect

  5. Comment créer une image Docker à partir d'un conteneur et d'un Dockerfile

Comment exécuter PHPMyAdmin dans un conteneur Docker

Comment exécuter Grafana dans un conteneur Docker

Comment créer une image Docker à partir d'un conteneur en cours d'exécution

Comment créer une image Windows Docker avec la balise Docker Build

Comment configurer un conteneur Apache Docker

Comment utiliser Docker Commit pour modifier les images de conteneur