Sécurité pour les conteneurs Docker

Remarque perev. : Le thème de la sécurité Docker est peut-être l'un des éternels du monde informatique d'aujourd'hui. Par conséquent, sans autre explication, nous présentons la traduction de la prochaine sélection de recommandations pertinentes. Si vous vous êtes déjà intéressé à ce problème, beaucoup d'entre eux vous seront familiers. Et nous avons complété la sélection elle-même avec une liste d'utilitaires utiles et plusieurs ressources pour une étude plus approfondie de la question.



Voici un guide de sécurité Docker. Les commentaires sont les bienvenus, car il s'agit plutôt d'une collection d'extraits de diverses ressources, et tous n'ont pas été soigneusement vérifiés. Les recommandations sont divisées en trois catégories:

  1. Mesures nécessaires à l'intérieur du système d'exploitation hôte lorsque vous travaillez avec Docker;
  2. Instructions relatives au fichier de configuration d'assemblage et à la création de conteneurs;
  3. Outils de sécurité pouvant s'intégrer à des fonctionnalités spécifiques de Docker Enterprise.

Diverses ressources sont devenues la base du leadership, dont plusieurs sont énumérées ci-dessous. Elle ne peut pas être considérée comme exhaustive, mais elle couvre toutes les bases. Des informations supplémentaires peuvent être trouvées dans la description des tests CIS (le lien est donné à la fin de ce manuel), ainsi que dans la documentation de Docker.

Référence de sécurité Docker


Docker Bench for Security vérifie automatiquement la conformité de votre Docker avec les meilleures pratiques les plus courantes. Le script est un bon test de sécurité heuristique, mais il ne doit pas être considéré comme un outil d'analyse complet.

OS hĂ´te


De toute évidence, le conteneur Docker ne peut pas être protégé si le système hôte lui-même n'est pas protégé. Par conséquent, vous devez suivre les meilleures pratiques dans le domaine de la sécurité du système d'exploitation. De plus, il serait prudent d'effectuer une analyse de vulnérabilité en plus des recommandations suivantes.

Règles d'audit


Créez et utilisez des règles d'audit pour les fichiers associés à Docker à l'aide de auditctl . Par exemple, vous pouvez ajouter -w /usr/bin/dockerd -k docker à /etc/audit.rules et redémarrer le service d'audit.

Mode FIPS


L'activation du mode FIPS oblige les outils cryptographiques à basculer vers les algorithmes introduits dans les normes FIPS (American Federal Information Processing Standards - approx. Transl.) , Se conformant ainsi aux normes et exigences fédérales et industrielles. Si le système d'exploitation hôte prend en charge le mode FIPS, vous pouvez l'activer en exécutant les commandes suivantes:

 sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="fips=1 /g' /etc/default/grub grub2-mkconfig -o /boot/grub2/grub.cfg && reboot 

Vous devez Ă©galement activer FIPS dans le Docker Engine:

 mkdir -p /etc/systemd/system/docker.service.d 2>&1; echo -e "[Service]\n Environment=\"DOCKER_FIPS=1\"" > /etc/systemd/system/docker.service.d/fips-module.conf; systemctl daemon-reload; systemctl restart docker 

Consultez la documentation Docker et Red Hat pour plus d'informations.

Les secrets de Docker


Les données confidentielles doivent être gardées secrètes. Vous pouvez démarrer le service correspondant à l'aide de la commande docker service create:

 docker service create --label com.docker.ucp.access.label=/prod --name nginx --publish 443 --secret source=orcabank_prod_mobile.ca.pem.v1,target=ca.pem nginx 

Consultez la documentation pour plus de détails.

Fichier de configuration Docker


Les paramètres suivants peuvent être ajoutés au /etc/docker/daemon.json configuration /etc/docker/daemon.json :

  • "icc":false - dĂ©sactive l'Ă©change de donnĂ©es entre les conteneurs pour Ă©viter les fuites d'informations inutiles.
  • log-level: "info" - capture tous les journaux sauf le dĂ©bogage.
  •  { "log-driver": "syslog", "log-opts": { "syslog-address": "udp://1.2.3.4:1111" } } 

    - connecte la journalisation à distance, les transmet à l'adresse spécifiée. Fonctionne uniquement si le démon syslog est en cours d'exécution. TCP et UDP sont acceptés comme options. La connexion pour chaque conteneur spécifique est également possible. Pour ce faire, un indicateur spécial est défini lors du démarrage de Docker ( --log-opt syslog-address=ADDRESS ).
  • "userns-remap": "Your_User" - empĂŞche l'escalade de privilèges en isolant l'espace de noms pour un utilisateur spĂ©cifique.

Sécurité des transports


Seuls les utilisateurs ayant accès aux informations d'identification du client TLS doivent pouvoir se connecter au démon Docker (si un accès à distance est nécessaire).

Plugins d'autorisation


Décidez quels utilisateurs sont autorisés à exécuter quelles commandes et créez le plug-in d'autorisation approprié pour Docker. Exécutez ensuite le démon Docker et ajoutez-y le plugin:

 dockerd --authorization-plugin=PLUGIN_ID 

Pour en savoir plus sur la création de plugins d'autorisation, consultez la documentation .

Options de démon


Le démon Docker fonctionne avec un ensemble de paramètres par défaut.

  • --live-restore - cette option permet de rĂ©duire les temps d'arrĂŞt du conteneur lors de l'arrĂŞt ou du redĂ©marrage du système. Il devient plus facile de les corriger ou de les mettre Ă  jour avec un temps d'arrĂŞt minimal;
  • --userland-proxy=false - lorsque des NAT en Ă©pingle Ă  cheveux sont disponibles ou utilisĂ©s, le proxy dans l'espace utilisateur devient un service redondant, ce qui ne fait qu'augmenter le nombre de vecteurs d'attaque possibles;
  • --no-new-privileges - empĂŞche les conteneurs d'obtenir des privilèges supplĂ©mentaires en utilisant suid ou sguid;
  • --seccomp-profile /path/to/profile - si vous avez votre propre profil seccomp, vous pouvez l'utiliser avec ce drapeau. En savoir plus sur Seccomp et Docker ici .

Configuration des conteneurs et des fichiers d'assemblage


Création d'utilisateurs


Assurez-vous qu'un utilisateur est créé pour le conteneur et exécutez-le sous cet utilisateur (NE PAS exécuter le conteneur sous root).

Accès à distance


Refuser l'accès à distance au démon. S'il est toujours nécessaire, protégez-le avec des certificats.

Isoler l'espace du nom d'utilisateur


Il est particulièrement important de s'assurer que l'espace du nom d'utilisateur dans Docker est isolé, car par défaut, il est partagé avec l'espace du nom d'hôte. Dans certains cas, cela peut être utilisé pour élever des privilèges ou même pour sortir du conteneur. Vous pouvez isoler un espace de noms utilisateur en modifiant le fichier de configuration (comme décrit ci-dessus dans la section Fichier de configuration Docker). Une mention supplémentaire de ce problème est due à son importance.

Healthcheck


Healthcheck (Health Check) est un outil puissant pour vérifier l'intégrité des conteneurs. Il est configuré dans le Dockerfile à l'aide de l' HEALTHCHECK . Healthcheck vous permet de vérifier que le conteneur fonctionne correctement. Dans l'exemple ci-dessous, le bilan de santé se termine par 0 si le serveur est en cours d'exécution et 1 s'il s'est "écrasé":

 HEALTHCHECK CMD curl --fail http://localhost || exit 1 

SELinux


Si SELinux est pris en charge par le système d'exploitation hôte, créez ou importez une stratégie SELinux et exécutez Docker en mode démon avec SELinux activé:

 docker daemon --selinux-enable 

Dans ce cas, les conteneurs Docker peuvent être lancés avec des paramètres de sécurité, par exemple:

 docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bash 

Interfaces réseau


Par défaut, Docker écoute sur toutes les interfaces réseau. Étant donné que dans la plupart des cas, le trafic n'est attendu que sur l'un d'entre eux, une telle approche augmente déraisonnablement le risque d'attaque. Par conséquent, lorsque vous démarrez un conteneur, vous pouvez lier ses ports à des interfaces spécifiques sur l'hôte:

 docker run --detach --publish 10.2.3.4:49153:80 nginx 

Versions d'image en cache


Lors du téléchargement d'images, assurez-vous que le cache local correspond au contenu du référentiel. Sinon, vous pouvez recevoir une version obsolète de l'image ou une image contenant des vulnérabilités.

Pont réseau


Le modèle de réseau par défaut, docker0 , est vulnérable aux attaques telles que l'usurpation ARP et l'inondation MAC. Pour résoudre ce problème, créez un pont réseau conformément à vos spécifications, comme décrit ici .

Avertissement de socket Docker


Ne jetez jamais une prise Docker à l'intérieur d'un conteneur. Sinon, le conteneur pourra exécuter des commandes Docker et, par conséquent, communiquer avec le système d'exploitation hôte et le contrôler. Ne fais pas ça.

Configuration de Docker Enterprise


Docker trust


Docker Trust vous permet de générer des clés qui peuvent être utilisées pour vérifier l'intégrité cryptographique des images. Les clés Docker Trust peuvent être utilisées pour signer des images Docker avec des clés privées, qui sont vérifiées par des clés publiques sur Notary Server. Plus d'informations ici . L'activation de Docker Trust dans Enterprise Engine est décrite en détail dans cette section de la documentation .

Analyse de vulnérabilité


Docker Enterprise dispose d'un scanner de vulnérabilités intégré, qui permet de télécharger la base de données CVE pour les vulnérabilités de numérisation hors ligne des images. La numérisation régulière des images contribue à les rendre plus sûres: l'utilisateur reçoit immédiatement des avertissements sur les vulnérabilités trouvées. Pour plus d'informations sur la façon de procéder, voir ici .

Remarque perev. : Il existe également des scanners de vulnérabilité Open Source dans Docker-images, voir des exemples à la fin de l'article.

Intégration LDAP et UCP


Le plan de contrôle universel peut être intégré à LDAP. Le résultat sera un système d'authentification simplifié pour éviter les doublons inutiles. En savoir plus à ce sujet dans l'article Intégrer avec un annuaire LDAP .

Autres materiaux


Pour plus d'informations sur les meilleures pratiques de sécurité de Docker, visitez docs.docker.com . Nous vous recommandons également de télécharger les tests Center for Internet Security pour Docker .

Bonus du traducteur


En complément logique de cet article, nous publions une liste de 10 outils de sécurité Open Source populaires dans Docker . Il a été emprunté à un autre article (rédigé par Bill Doerrfeld de Doerrfeld.io).

NB : En savoir plus sur de nombreux projets mentionnés ici dans l'article « 33+ Kubernetes Security Tools ».

  1. Docker Bench for Security est un script déjà mentionné au tout début de l'article qui vérifie la conformité des conteneurs Docker avec les pratiques de sécurité courantes.

  2. Clair est probablement l'utilitaire le plus populaire pour l'analyse statique des vulnérabilités dans un conteneur. Il utilise de nombreuses bases de données de vulnérabilité CVE (y compris les trackers des principales distributions Linux telles que Red Hat, Debian, Ubuntu). Il offre une API aux développeurs et une simple opportunité d'étendre les fonctions (grâce à l'ajout de "pilotes"). Il est utilisé dans le registre public populaire d'images de conteneurs (similaire au Docker Hub) - Quay.io.
  3. Cilium est une solution de sécurité réseau au niveau du noyau basée sur la technologie de filtrage de paquets réseau BPF.
  4. Anchore est un utilitaire basé sur CVE pour analyser le contenu des images afin de détecter les failles de sécurité. De plus, il vous permet d'appliquer des politiques personnalisées (basées sur diverses données, notamment des listes blanches / noires, le contenu des fichiers, etc.) pour évaluer la sécurité des conteneurs.
  5. OpenSCAP Workbench est un écosystème complet pour créer et maintenir des politiques de sécurité sur toutes les plateformes. Pour vérifier les conteneurs, il offre l' oscap-docker .
  6. Dagda est un utilitaire pour analyser les conteneurs Docker à la recherche de vulnérabilités, chevaux de Troie, virus et logiciels malveillants. Les bases de données CVE incluent les vérifications de dépendance OWASP, la base de données Red Hat Oval et le référentiel d'exploits Exploit Database.
  7. Notary est un cadre pour la signature d'images Docker, créé à l'origine par Docker Inc (puis remis à la CNCF pour le développement). Son utilisation vous permet de déléguer des rôles et de répartir les responsabilités entre les conteneurs, ainsi que de vérifier l'intégrité cryptographique des images.
  8. Grafaes est une API de métadonnées conçue pour gérer les politiques de sécurité internes. Par exemple, il améliore les performances des scanners de sécurité des conteneurs. Shopify utilise cette API pour gérer les métadonnées sur ses 500 000 images.
  9. Sysdig Falco - un utilitaire pour Kubernetes qui surveille le comportement du système: activité dans des conteneurs, sur des hôtes, sur le réseau. Vous permet de configurer des contrôles continus dans l'infrastructure, de détecter les anomalies et d'envoyer des alertes à tout appel système Linux.
  10. Le collecteur Banyanops est un autre outil pour l'analyse d'image statique des conteneurs Docker. Vous permet de "regarder" dans les fichiers image, de collecter les données nécessaires, d'appliquer les politiques nécessaires, etc.

Un autre bon choix de conseils pratiques pour rendre Docker plus sûr se trouve dans cet article Aqua Security. Beaucoup de ses conseils chevauchent ceux déjà mentionnés ci-dessus, mais il y en a d'autres. Par exemple, les auteurs proposent de surveiller l'activité dans des conteneurs et indiquent ce qu'il faut rechercher lors de l'utilisation de Docker Swarm.

Pour ceux qui souhaitent approfondir ce sujet l'année dernière, le livre « Docker Security: Quick Reference » a été publié , dont des fragments sont disponibles gratuitement ici .

Enfin, pour une connaissance pratique de certains aspects de la sécurité Docker: les profils Seccomp et l'utilisation des capacités du noyau Linux dans des conteneurs - vous pouvez parcourir les travaux de laboratoire correspondants sur la ressource Play with Docker * - voir la section Sécurité.



* Nous avons parlé de cette ressource il y a deux ans, et en novembre 2018, une histoire très intéressante (d'un point de vue sécuritaire) lui est arrivée. En bref, les spécialistes de CyberArk Software Ltd. réussi à le casser: pour atteindre la capacité d'exécuter des commandes en dehors des conteneurs, c'est-à-dire sur le système hôte. Une excellente illustration des problèmes de sécurité dans Docker, non? Lisez tous les détails de ce qui s'est passé ici .

PS du traducteur


Lisez aussi dans notre blog:

Source: https://habr.com/ru/post/fr474012/


All Articles