Note de traduction.: Le sujet de la sĂ©curitĂ© de Docker est sans doute l'un des Ă©ternels dans le monde informatique moderne. Voici donc la traduction d'une nouvelle sĂ©lection de recommandations pertinentes. Si vous vous ĂȘtes dĂ©jĂ intĂ©ressĂ© Ă ce sujet, beaucoup d'entre elles vous seront familiĂšres. Nous avons complĂ©tĂ© cette sĂ©lection par une liste d'utilitaires utiles et quelques ressources pour approfondir le sujet.

Je vous propose un guide sur la sécurité de Docker. Les retours sont les bienvenus, car il s'agit plutÎt d'une compilation d'extraits provenant de différentes sources, et toutes n'ont pas été soumises à une vérification approfondie. Les recommandations sont divisées en trois catégories :
- Mesures nécessaires au sein du systÚme d'exploitation hÎte lors de l'utilisation de Docker ;
- Instructions concernant le fichier de configuration de construction et la création de conteneurs ;
- Outils de sécurité pouvant s'intégrer aux fonctionnalités spécifiques de Docker Enterprise.
Le guide est basĂ© sur diverses ressources, dont beaucoup sont mentionnĂ©es ci-dessous. Il ne peut pas ĂȘtre considĂ©rĂ© comme exhaustif, mais il couvre toutes les bases. Des informations supplĂ©mentaires sont disponibles dans la description des tests CIS (le lien est fourni Ă la fin de ce guide), ainsi que dans la documentation de Docker.
Docker Security Benchmark
vĂ©rifie automatiquement votre Docker par rapport aux meilleures pratiques les plus courantes. Le script sert de bon test heuristique de sĂ©curitĂ©, mais il ne doit pas ĂȘtre considĂ©rĂ© comme un outil d'analyse complĂšte.
SystĂšme d'exploitation hĂŽte
Il est Ă©vident qu'un conteneur Docker ne peut pas ĂȘtre sĂ©curisĂ© si le systĂšme hĂŽte lui-mĂȘme n'est pas protĂ©gĂ©. Il est donc nĂ©cessaire de suivre les meilleures pratiques en matiĂšre de sĂ©curitĂ© des systĂšmes d'exploitation. De plus, il serait judicieux de mener une analyse des vulnĂ©rabilitĂ©s en complĂ©ment des recommandations suivantes.
RĂšgles d'audit
Créez et utilisez des rÚgles d'audit pour les fichiers liés à Docker à l'aide de auditctl. Par exemple, vous pouvez ajouter -w /usr/bin/dockerd -k docker sur /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 inclus dans le FIPS (Normes de traitement de l'information fĂ©dĂ©rales amĂ©ricaines â n.d.t.), en conformitĂ© avec les normes et exigences fĂ©dĂ©rales et sectorielles. Si le systĂšme d'exploitation de l'hĂŽte prend en charge le mode FIPS, celui-ci peut ĂȘtre activĂ© 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 && rebootIl est également nécessaire d'activer FIPS dans 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 dockerPour plus d'informations, consultez la documentation et .
Docker Secrets
Les donnĂ©es sensibles doivent ĂȘtre stockĂ©es sous forme de secrets. Vous pouvez dĂ©marrer le service correspondant avec 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 nginxPour plus de détails, voir le .
Le fichier de configuration de Docker
Les paramĂštres suivants peuvent ĂȘtre ajoutĂ©s au fichier de configuration /etc/docker/daemon.json:
-
"icc":falseâ dĂ©sactive l'Ă©change de donnĂ©es entre les conteneurs pour Ă©viter les fuites d'informations indĂ©sirables. -
log-level: "info"â capture tous les journaux sauf ceux de dĂ©bogage. { "log-driver": "syslog", "log-opts": { "syslog-address": "udp://1.2.3.4:1111" } }â active la journalisation Ă distance, les journaux sont envoyĂ©s Ă l'adresse spĂ©cifiĂ©e. Cela fonctionne uniquement si le dĂ©mon syslog est en cours d'exĂ©cution. Les options acceptĂ©es sont TCP et UDP. Il est Ă©galement possible de configurer cela pour chaque conteneur spĂ©cifique. Pour cela, un drapeau spĂ©cial doit ĂȘtre positionnĂ© lors du dĂ©marrage de Docker (
--log-opt syslog-address=ADDRESS).-
"userns-remap": "Your_User"â empĂȘche l'Ă©lĂ©vation de privilĂšges (privilege escalation) en isolant l'espace de noms pour un utilisateur spĂ©cifique.
Sécurité au niveau du transport
La possibilitĂ© de se connecter au dĂ©mon Docker (si l'accĂšs Ă distance est nĂ©cessaire) ne doit ĂȘtre accordĂ©e qu'aux utilisateurs disposant des informations d'identification TLS-client.
Plugins d'autorisation
Déterminez quels utilisateurs sont autorisés à exécuter quelles commandes, et créez le plugin d'autorisation correspondant pour Docker. Puis démarrez le démon Docker et ajoutez-y le plugin :
dockerd --authorization-plugin=PLUGIN_IDPour en savoir plus sur la création de plugins d'autorisation, consultez .
Options du démon
Le démon Docker fonctionne avec un ensemble de paramÚtres par défaut.
-
--live-restoreâ ce paramĂštre aide Ă rĂ©duire le temps d'arrĂȘt des conteneurs lors de l'arrĂȘt ou du redĂ©marrage du systĂšme. Cela facilite leur mise Ă jour ou leur correction avec un minimum de temps d'arrĂȘt; -
--userland-proxy=falseâ lorsque les hairpins NAT sont disponibles ou utilisĂ©s, un proxy en espace utilisateur devient un service superflu qui augmente uniquement le nombre de vecteurs d'attaque possibles; -
--no-new-privilegesâ empĂȘche les conteneurs d'obtenir des privilĂšges supplĂ©mentaires via suid ou sguid; -
--seccomp-profile /path/to/profileâ si vous avez votre propre profil seccomp, vous pouvez l'appliquer avec ce drapeau. Pour en savoir plus sur Seccomp et Docker, vous pouvez .
Configuration des conteneurs et des fichiers de construction
Création d'un utilisateur
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
Interdire l'accÚs à distance au démon. S'il est néanmoins nécessaire, protégez-le avec des certificats.
Isoler l'espace de noms utilisateur
Il est particuliĂšrement important de s'assurer que l'espace de noms utilisateur dans Docker est isolĂ©, car par dĂ©faut, il est partagĂ© avec l'espace de noms de l'hĂŽte. Dans certains cas, ceci peut ĂȘtre exploitĂ© pour Ă©lever des privilĂšges ou mĂȘme pour sortir du conteneur. L'espace de noms utilisateur peut ĂȘtre isolĂ© en modifiant le fichier de configuration (comme dĂ©crit ci-dessus dans la section « Fichier de configuration de Docker »). Cette mention supplĂ©mentaire de ce problĂšme est due Ă son importance.
Healthchecks
Les healthchecks (vérifications de l'état) sont un outil puissant pour contrÎler l'intégrité du conteneur. Ils se configurent dans le Dockerfile à l'aide de l'instruction HEALTHCHECK. Les healthchecks permettent de s'assurer que le conteneur fonctionne correctement. Dans l'exemple ci-dessous, la vérification de l'état se termine par 0 si le serveur fonctionne et par 1 s'il "est tombé" :
HEALTHCHECK CMD curl --fail http://localhost || exit 1SELinux
Si SELinux est pris en charge par le systÚme d'exploitation hÎte, créez ou importez une politique SELinux et exécutez Docker en mode démon avec SELinux activé :
docker daemon --selinux-enableDans ce cas, les conteneurs Docker peuvent ĂȘtre exĂ©cutĂ©s avec des paramĂštres de sĂ©curitĂ©, par exemple :
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bashInterfaces réseau
Par dĂ©faut, Docker Ă©coute tous les interfaces rĂ©seau. Ătant donnĂ© que, dans la plupart des cas, le trafic n'est attendu que sur l'une d'entre elles, cette approche augmente indĂ»ment le risque d'attaque. Par consĂ©quent, lors du lancement du conteneur, il est possible de lier ses ports Ă des interfaces spĂ©cifiques sur l'hĂŽte :
docker run --detach --publish 10.2.3.4:49153:80 nginxVersions mises en cache des images
Lors du téléchargement des images, assurez-vous que le cache local correspond au contenu du référentiel. Sinon, vous risquez d'obtenir une version obsolÚte de l'image ou une image contenant des vulnérabilités.
Pont réseau
ModÚle réseau par défaut, docker0, vulnérable aux attaques de type ARP-spoofing et MAC-flooding. Pour résoudre ce problÚme, créez un pont réseau selon vos spécifications, comme décrit .
Avertissement concernant le socket Docker
Ne transmettez jamais le socket Docker à l'intérieur d'un conteneur. Sinon, le conteneur pourra exécuter des commandes Docker et donc interagir avec le systÚme d'exploitation hÎte et le contrÎler. Ne faites pas cela.
Configuration de Docker Enterprise
Docker Trust
Docker Trust 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, vĂ©rifiĂ©es par des clĂ©s publiques sur le Notary Server. Pour plus d'informations - . L'activation de Docker Trust dans l'Enterprise Engine est dĂ©crite en dĂ©tail dans .
Analyse des vulnérabilités
Docker Enterprise dispose d'un scanner de vulnérabilités intégré, permettant de télécharger une base de données CVE pour une analyse hors ligne des vulnérabilités dans les images. L'analyse réguliÚre des images aide à les rendre plus sûres : l'utilisateur reçoit immédiatement des avertissements sur les vulnérabilités trouvées. Pour en savoir plus sur la façon de procéder, voir .
Note de traduction.: Il existe également des scanners de vulnérabilités Open Source pour les images Docker, dont des exemples sont présentés à la fin de l'article.
Intégration LDAP et UCP
Universal Control Plane peut ĂȘtre intĂ©grĂ© Ă LDAP. Cela simplifie le systĂšme d'authentification et Ă©vite les doublons inutiles. Pour en savoir plus, consultez l'article .
Autres ressources
Des informations supplémentaires sur les meilleures pratiques pour sécuriser Docker sont disponibles sur . Nous vous recommandons également de télécharger .
Bonus du traducteur
En complément logique de cet article, nous publions une liste de 10 outils Open Source populaires pour assurer la sécurité dans Docker. Il a été tiré de (par Bill Doerrfeld de Doerrfeld.io).
NB: Pour en savoir plus sur de nombreux projets mentionnés ici, consultez également l'article «».
- â le script dĂ©jĂ mentionnĂ© au dĂ©but de l'article qui vĂ©rifie la conformitĂ© des conteneurs Docker aux pratiques de sĂ©curitĂ© courantes.

- â probablement l'outil d'analyse statique des vulnĂ©rabilitĂ©s le plus populaire pour les conteneurs. Il utilise de nombreuses bases de donnĂ©es de vulnĂ©rabilitĂ©s CVE (y compris les trackers des principales distributions Linux, telles que Red Hat, Debian, Ubuntu). Il propose une API pour les dĂ©veloppeurs et une option simple d'extension des fonctionnalitĂ©s (via l'ajout de « pilotes »). Il est utilisĂ© dans le registre public d'images de conteneurs populaire (l'Ă©quivalent de Docker Hub) â Quay.io.
- â une solution de sĂ©curitĂ© rĂ©seau au niveau du noyau, basĂ©e sur la technologie de filtrage des paquets rĂ©seau BPF.
- â un outil pour analyser le contenu des images Ă la recherche de vulnĂ©rabilitĂ©s de sĂ©curitĂ© selon la base CVE. De plus, il permet d'appliquer des politiques personnalisĂ©es (sur la base de diffĂ©rentes donnĂ©es, y compris les listes blanches/noires, le contenu des fichiers, etc.) pour Ă©valuer la sĂ©curitĂ© des conteneurs.
- â un Ă©cosystĂšme complet pour crĂ©er et maintenir des politiques de sĂ©curitĂ© sur diffĂ©rentes plateformes. Pour vĂ©rifier les conteneurs, il propose l'outil
oscap-docker. - â un outil pour scanner les conteneurs Docker Ă la recherche de vulnĂ©rabilitĂ©s, de chevaux de Troie, de virus et de malwares. Les bases CVE comprennent des vĂ©rifications liĂ©es aux dĂ©pendances d'OWASP, Ă la base Red Hat Oval, au dĂ©pĂŽt d'exploits Exploit Database.
- â un cadre pour la signature d'images Docker, initialement créé par Docker Inc (et ensuite transfĂ©rĂ© au dĂ©veloppement au sein de la CNCF). Son utilisation permet de dĂ©lĂ©guer des rĂŽles et de rĂ©partir des responsabilitĂ©s sur les conteneurs, ainsi que de vĂ©rifier l'intĂ©gritĂ© cryptographique des images.
- â une API pour les mĂ©tadonnĂ©es, conçue pour gĂ©rer les politiques de sĂ©curitĂ© internes. Par exemple, elle permet d'amĂ©liorer le fonctionnement des scanners de sĂ©curitĂ© des conteneurs. Shopify utilise cette API pour gĂ©rer les mĂ©tadonnĂ©es de ses 500 000 images.
- â un outil pour Kubernetes qui surveille le comportement du systĂšme : l'activitĂ© dans les conteneurs, sur les hĂŽtes, dans le rĂ©seau. Il permet de configurer des vĂ©rifications continues dans l'infrastructure, la dĂ©tection d'anomalies et l'envoi d'alertes pour toute appel systĂšme Linux.
- â un autre outil pour l'analyse statique des images de conteneurs Docker. Il permet d'« examiner » les fichiers de l'image, de collecter les donnĂ©es nĂ©cessaires, d'appliquer les politiques appropriĂ©es, etc.
Une autre bonne sĂ©lection de recommandations pratiques sur la façon de sĂ©curiser Docker peut ĂȘtre trouvĂ©e chez Aqua Security. Beaucoup de leurs conseils se chevauchent avec ceux mentionnĂ©s ci-dessus, mais il y en a d'autres. Par exemple, les auteurs suggĂšrent de mettre en place une surveillance de l'activitĂ© des conteneurs et prĂ©cisent sur quoi se concentrer lors de l'utilisation de Docker Swarm.
Pour ceux qui souhaitent approfondir ce sujet, un livre est sorti l'année derniÚre intitulé «», dont des extraits sont disponibles gratuitement. .
Enfin, pour une introduction pratique Ă certains aspects de la sĂ©curitĂ© de Docker : les profils Seccomp et l'utilisation des capacitĂ©s du noyau Linux dans les conteneurs - des travaux pratiques correspondants peuvent ĂȘtre rĂ©alisĂ©s sur le site Play with Docker * Nous avons parlĂ© de cette ressource

il y a deux ans, et en novembre 2018, une histoire intéressante (du point de vue de la sécurité) s'est produite avec elle. Pour résumer, des spécialistes de CyberArk Software Ltd. ont réussi à la pirater : obtenir la possibilité d'exécuter des commandes au-delà des conteneurs, c'est-à -dire sur le systÚme hÎte. Une belle illustration du problÚme de sécurité dans Docker, n'est-ce pas ? Pour tous les détails de ce qui s'est passé, lisez Note du traducteur : La question de la sécurité de Docker est probablement l'un des sujets éternels dans le monde moderne de l'informatique. C'est pourquoi, sans plus d'explications, nous vous présentons la traduction d'une nouvelle sélection de recommandations pertinentes. .
P.S. de l'auteur
Lisez aussi dans notre blog :
- «»;
- «»;
- «»;
- «»;
- «»;
- «».
Source : habr.com

