Agence web » Actualités du digital » Comment évaluer la sécurité de Docker Engine –

Comment évaluer la sécurité de Docker Engine –

Docker permet aux développeurs de logiciels et aux ingénieurs DevOps de créer rapidement des packages d’applications pour la production. Les conteneurs Docker fonctionnent en grande partie indépendamment de leur hôte, mais ne sont pas insensibles aux menaces de sécurité. Voici comment auditer votre installation Docker Engine pour garantir une sécurité maximale pour votre hôte et vos charges de travail.

Comprendre l’architecture de Docker

La première étape pour évaluer les risques Docker est de comprendre comment la technologie fonctionne réellement. Docker alimenté par trois composants distincts:

  • Démon Docker Engine – Le service d’arrière-plan qui gère les opérations en coulisses avec des conteneurs et des images.
  • API REST – Docker Engine fournit une API REST qui envoie des commandes au démon Docker. L’API est généralement fournie via un socket REST, mais peut également être exposée via HTTP.
  • Client de ligne de commande Docker – La CLI Docker s’exécute lorsque vous utilisez docker dans un terminal. Il envoie des commandes au démon Docker. Les commandes sont traitées pour déterminer l’action à entreprendre.

Un attaquant compromettant l’un de ces composants pourrait accéder à votre environnement. Grâce à une configuration appropriée, vous pouvez protéger vos charges de travail et augmenter la sécurité par rapport à l’exécution d’applications directement sur l’hôte.

La surface d’attaque

Le démon Docker présente la plus grande surface d’attaque. Prendre le contrôle du démon permet d’accéder à l’hôte et à tous vos conteneurs. Le démon s’exécute généralement comme root, donc une infiltration réussie peut accorder un accès illimité à votre machine physique.

Vous devez vous assurer que le socket du démon Docker (/var/run/docker.sock) n’est accessible à personne d’autre que le root utilisateur. Comme le démon peut accéder à l’hôte, fournir un accès au socket permet de désactiver efficacement le contrôle de votre machine.

Le démon de Docker prend en charge un socket TCP qui permet le contrôle à distance sur le réseau. Si vous activez cette fonction, une communication non chiffrée sera proposée sans aucune authentification.

Évitez d’utiliser des connexions TCP à moins que vous ne vous trouviez dans un environnement réseau que vous avez spécifiquement configuré pour être sûr. Vous devez configurer TLS et vous assurer que seuls les clients autorisés sont autorisés à se connecter.

Certaines images Docker peuvent nécessiter que vous montiez le socket Docker dans le conteneur. Ceci est souvent utilisé par les outils de gestion Docker qui fournissent une interface aux conteneurs exécutés sur votre hôte. En montant la prise de cette manière, tout ce qui se trouve à l’intérieur du conteneur peut prendre le contrôle de votre système. Les conteneurs ne doivent jamais recevoir de socket Docker, sauf si vous êtes sûr que la charge de travail en nécessite un.

Mode sans racine

Docker prend désormais en charge un mode sans racine qui vous permet d’exécuter Docker sans root accès. Cela contribue à améliorer la sécurité, mais s’accompagne d’une complexité supplémentaire au moment de la configuration.

L’utilisation du mode sans racine exécute Docker et vos conteneurs dans un espace de noms utilisateur. La plupart des fonctionnalités de Docker fonctionneront, bien qu’il existe certaines limitations.

Tous les pilotes de stockage ne sont pas disponibles, les réseaux de superposition ne sont pas pris en charge et les réseaux de conteneurs sont entièrement espacés de noms. Cela signifie que vous ne pouvez pas accéder directement aux adresses IP du conteneur à partir de l’hôte sans entrer d’abord dans l’espace de noms réseau dédié.

L’utilisation du mode sans racine peut être utile dans les environnements à haute sécurité où l’intégrité de l’hôte est primordiale. Cela permet de réduire l’impact d’une attaque réussie en limitant les possibilités de falsifier le système plus large.

Sécurité de l’API REST

L’API Docker REST est généralement accessible via un socket UNIX. Les vérifications des autorisations sont effectuées à l’aide de mécanismes UNIX standard.

Vous pouvez exposer l’API sur un socket TCP, permettant l’accès via HTTP. Cela augmente le risque de compromis. Vous devez vous assurer que vos contrôles d’accès au réseau sont définis de sorte que le trafic ne puisse provenir que d’hôtes approuvés.

Vous devez auditer vos politiques de pare-feu afin de ne pas négliger un appareil qui pourrait interagir avec l’API Docker. N’oubliez pas que limiter les connexions à localhost n’est pas suffisant – cela autoriserait toujours l’accès à partir des conteneurs Docker exécutés sur votre ordinateur, ce qui pourrait potentiellement permettre une élévation de privilèges involontaire.

Limitation de la communication entre les conteneurs

Docker permet à tous les conteneurs de communiquer entre eux par défaut docker0 réseau ponté. Un conteneur compromis pourrait fouiner dans ce réseau pour en savoir plus sur son environnement. Il pourrait utiliser le réseau de pont comme point de vue pour commencer une infiltration plus large de vos charges de travail.

La désactivation de la communication entre conteneurs améliore votre posture de sécurité en améliorant l’isolation des conteneurs. Vous devrez lier explicitement les conteneurs entre eux à l’aide du --link=ContainerName flag ou votre propre réseau Docker.

Exécutez le démon Docker avec le --icc=false drapeau pour désactiver la communication sur le docker0 pont.

Restreindre les capacités de Conainer

Les capacités du noyau Linux définissent les actions disponibles pour les utilisateurs avec root accès. Les capacités aident à verrouiller les processus qui s’exécutent en tant que root, tels que les conteneurs Docker. Chaque processus doit disposer de l’ensemble minimal de capacités dont il a besoin.

Docker exécute automatiquement des conteneurs avec une sélection limitée de fonctionnalités. Même cette liste est souvent excessive pour une simple charge de travail comme un serveur Web. Vous pouvez le restreindre davantage en spécifiant votre propre liste de fonctionnalités disponibles pour un conteneur.

docker run --cap-drop all --cap-add SYSLOG example-image:latest

La commande ci-dessus exécutera un conteneur avec uniquement le SYSLOG aptitude. le --cap-drop flag ne tient pas compte de la liste de capacités par défaut. Les capacités sont ensuite ajoutées avec --cap-add, créant une liste blanche.

Cela vaut la peine d’évaluer votre conteneur par rapport à la liste des capacités du noyau. Supprimez toutes les fonctionnalités inutilisées des conteneurs exécutés en production. Cela permet de limiter les dommages qu’un conteneur compromis peut causer.

Activer les fonctionnalités intégrées du noyau

Ne négligez pas les fonctionnalités de sécurité intégrées à votre noyau. Docker fonctionne avec des technologies existantes telles que AppArmor et SELinux.

Certaines distributions, telles que RedHat Linux, sont livrées avec des politiques système SELinux prédéfinies qui augmentent la sécurité de Docker. Vous pouvez ajouter manuellement la prise en charge de SELinux en exécutant le démon Docker avec le --selinux-enabled drapeau. Cela active une stratégie Docker pour définir des étiquettes SELinux sur vos conteneurs. SELinux offre une meilleure isolation des processus de conteneur des processus hôtes, améliorant ainsi votre posture de sécurité.

Les bases

Il est facile de se concentrer sur les aspects complexes de la sécurité de Docker: mode sans racine, accès au démon et communications de conteneur. Ne négligez pas les bases – les pratiques de sécurité standard s’appliquent toujours.

Gardez toujours Docker Engine à jour pour obtenir les dernières corrections de bogues. Vous devez également vous assurer que le noyau de votre hôte est entièrement patché. Les conteneurs partageant le même noyau que votre hôte, toute vulnérabilité pourrait être exploitée par vos applications conteneurisées.

Il est recommandé de dédier une machine physique ou une VM spécifique à l’exécution de Docker. N’exécutez aucun autre service directement sur l’hôte. Vous pouvez les exécuter en tant que conteneurs à la place, ce qui réduit l’impact d’un compromis d’hôte réussi.

Lorsqu’il est configuré correctement, Docker augmente la sécurité en isolant les applications. Prendre le temps d’évaluer votre position vous aide à identifier les risques potentiels et à comprendre comment les attaques pourraient commencer. Le verrouillage des privilèges de conteneur, la protection du démon Docker et la mise à jour de votre hôte vous aideront à renforcer vos conteneurs.

★★★★★