Docker est pratique, mais cela peut aussi représenter un risque pour la sécurité. Il est important de protéger Docker Engine contre d'éventuelles menaces, surtout si vous utilisez un hôte Docker en production.
Docker Bench for Security est un script automatisé qui peut vous aider à trouver des problèmes avec votre configuration. Le script Bench analyse votre hôte pour trouver des faiblesses dans la configuration de votre moteur Docker. Il est fourni par Docker lui-même en tant qu'outil open source d'audit de sécurité.
Exécuter le script
La façon la plus simple d'utiliser Docker Bench est de télécharger le script et de l'exécuter directement. Vous pouvez l'inspecter sur GitHub si vous êtes préoccupé par son contenu.
Utilisez Git pour cloner le référentiel Bench. Exécutez le script à l'aide de votre shell. Docker Bench doit être exécuté avec sudo
, car il inclut les vérifications qui nécessitent un accès root.
git clone https://github.com/docker/docker-bench-security.git cd docker-bench-security sudo sh docker-bench-security.sh
Vous verrez les résultats de l'audit affichés dans votre terminal. La numérisation prendra plusieurs secondes. Cela peut prendre une minute ou plus si vous avez beaucoup de conteneurs en cours d'exécution.
Comprendre le rapport
Le rapport est codé par couleur, ce qui vous permet d'identifier rapidement les problèmes. Bleu INFO
entrées de journal de lignes dans différentes sections de numérisation. Un PASS
vert indique que votre système a satisfait à la vérification. WARN
rouge les lignes indiquent une vulnérabilité potentielle.
Docker Bench exécute plus de 200 vérifications individuelles au total. La liste exhaustive est disponible dans le dépôt GitHub du projet. Voici comment les tests sont classés.
Configuration de l'hôte
Ce groupe de tests se concentre sur les faiblesses de l'audit de sécurité de votre hôte. Des vérifications sont effectuées pour un audit approprié des répertoires Docker, l'utilisation d'une partition dédiée pour les conteneurs et l'installation d'une version Docker mise à jour.
Configuration du démon
Les tests orientés démon vérifient que le socket de Docker n'est pas exposé sur une connexion non sécurisée. Trafic réseau entre conteneurs sur le bridge
par défaut réseau doit être restreint et les registres non sécurisés supprimés.
Cette section recherche également les octrois de privilèges inappropriés aux conteneurs. Les conteneurs ne devraient pas pouvoir acquérir de nouveaux privilèges. Cela pourrait permettre à un attaquant de dépasser le conteneur.
La section suivante, Fichiers de configuration du démon Docker, a un objectif similaire. Il garantit que le répertoire d'installation de Docker et le socket Unix disposent des autorisations et de la propriété appropriées. Le système de fichiers de Docker doit appartenir à root:root
avec des autorisations restrictives de 644
.
Images de conteneurs
CONNEXES Comment évaluer la sécurité du moteur Docker
Docker Bench effectue une vérification de base des Dockerfiles pour vos images connues. Il recherchera des utilisateurs de conteneurs dédiés, la présence de HEALTHCHECK
instructions et l'utilisation de Content Trust pour vérifier l'intégrité des données.
Cette section de test émettra également des avertissements qui vous rappelleront les étapes de base du durcissement de l'image. Utilisez des images de base fiables, appliquez de nouveaux correctifs de sécurité et évitez l'installation de packages inutiles. Ces mesures aident à éliminer les vulnérabilités au sein conteneurs.
Exécution du conteneur
Les tests Container Runtime inspectent vos conteneurs en cours d'exécution. Cette section contient plus de 30 tests, allant de la disponibilité de SELinux et d'AppArmor à l'utilisation des montages de système de fichiers et des options de mise en réseau appropriés.
Vous perdrez des points si vous utilisez des conteneurs privilégiés ou montez le socket Docker dans un conteneur. Les conteneurs ne doivent pas pouvoir obtenir de privilèges supplémentaires ou interférer avec le système hôte.
Bench recherche également des serveurs SSH exécutés à l'intérieur conteneurs. Ceci est déconseillé, car l'accès direct au conteneur doit être évité. Il est préférable d'utiliser docker exec
de l'hôte pour interagir avec les conteneurs.
Des tests supplémentaires examinent l'utilisation des limites du processeur et de la mémoire. Un conteneur illimité peut consommer des ressources excessives et éventuellement provoquer une condition de mémoire insuffisante sur l'hôte. Les vérifications de mise en réseau signalent les ports inutilisés ainsi que les demandes de mappage des ports privilégiés dans les conteneurs.
Docker Swarm
Docker Bench comprend une section supplémentaire pour les utilisateurs de Docker Swarm. Il se concentre sur le signalement des secrets et des certificats non sécurisés qui ne sont pas correctement tournés. Cela nécessite également une configuration réseau correcte, y compris l'utilisation de réseaux superposés chiffrés.
La section Swarm affichera un avertissement si le mode Swarm est activé mais pas réellement utilisé. Si vous ne prévoyez pas d'utiliser Swarm, désactivez-le en exécutant docker swarm leave --force
.
Résoudre les problèmes courants
La plupart des hôtes Docker présenteront plusieurs avertissements si vous n'avez pas pris de mesures actives pour les renforcer. Voici quelques mesures que vous pouvez prendre pour traiter certains des rapports Docker Bench les plus courants.
Activation de l'audit pour les fichiers Docker
Docker conseille l'utilisation d'un audit au niveau du système sur les principaux répertoires Docker. L'audit consigne toutes les opérations qui affectent les fichiers et répertoires surveillés. Cela vous permet de suivre les changements potentiellement destructeurs.
Assurez-vous d'avoir auditd
installée. Modifier /etc/audit/audit.rules
et ajoutez les lignes suivantes en bas du fichier :
-w /etc/default/docker -p wa -w /etc/docker -p wa -w /etc/docker/daemon.json -p wa -w /lib/systemd/system/docker.service -p wa -w /lib/systemd/system/docker.socket -p wa -w /usr/bin/docker -p wa -w /usr/bin/docker-containerd -p wa -w /usr/bin/docker-runc -p wa -w /var/lib/docker -p wa
Le -p wa
instruction signifie que auditd
enregistrera les écritures et les modifications d'attributs qui affectent les fichiers. Si votre sortie Docker Bench suggère que vous utilisiez l'audit pour des répertoires supplémentaires, ajoutez-les également à la liste. Les répertoires de Docker peuvent changer au fil du temps.
Vous devrez redémarrer auditd
pour appliquer vos modifications :
sudo systemctl restart auditd
Renforcer le démon
Docker Bench trouvera généralement des problèmes avec la configuration de votre démon. Ajout de ce qui suit à /etc/docker/daemon.json
calmera plusieurs avertissements de démon.
{
"icc": false,
"live-restore": true,
"no-new-privileges": true,
"userland-proxy": false,
"userns-remap": "default"
}
- ICC : Cela empêche les conteneurs de communiquer entre eux via le
bridge
par défaut réseau. Les conteneurs ne se contacteront que s'ils sont explicitement liés à l'aide d'un--link
. - restauration en direct : Cette configuration permet aux conteneurs de continuer à fonctionner même si le démon s'arrête. Ceci est conseillé dans les environnements de production où vous souhaitez minimiser les temps d'arrêt.
- pas de nouveaux privilèges : Cela empêche les conteneurs d'élever leurs privilèges à l'aide de commandes telles que
setuid
etsetgid
. - userland-proxy : La désactivation signifie que
iptables
est utilisé pour acheminer le trafic du port hôte vers des conteneurs. Sans cela, le processus de proxy de l'espace utilisateur de Docker est utilisé, ce qui augmente la surface d'attaque de votre démon. - userns-remap : Cela permet l'utilisation d'espaces de noms d'utilisateurs, donc
root
dans un conteneur correspond à un utilisateur hôte moins privilégié. Cela réduit le risque qu'un conteneur compromis puisse exécuterroot
commandes sur votre hôte. Utilisation dedefault
demandera à Docker de créer un compte utilisateur dédié à cet effet.
CONNEXE : Comment utiliser Cron avec vos conteneurs Docker
Personnalisation de la sortie du rapport
Docker Bench prend en charge plusieurs indicateurs que vous pouvez utiliser pour ajuster sa sortie :
- -b : Désactiver les couleurs. Utile si vous exécutez le script dans un environnement CI qui ne prend pas en charge la sortie ANSI complète.
- -p : Ne pas inclure les mesures correctives suggérées. Utile lorsque vous souhaitez vous concentrer sur les avertissements et réduire le bruit dans la sortie.
- -l rapport.txt : Écrire la sortie dans
report.txt
au lieu du terminal. - -c check_5.1,check_5.2 : Exécutez les vérifications 5.1 et 5.2 uniquement. La liste des tests est disponible sur GitHub.
- -e check_5.1,check_5.2 : Exclure les vérifications 5.1 et 5.2.
Vous pouvez combiner des indicateurs pour produire le rapport dont vous avez besoin. Si une section entière de vérifications ne s'applique pas à vous, envisagez de créer un alias de shell afin de pouvoir exécuter rapidement Docker Bench avec une séquence d'indicateurs appliqués.
Conclusion
CONNEXES Comment utiliser Docker Scan pour trouver des vulnérabilités dans vos imagesL'utilisation du script Docker Bench for Security vous aide à trouver et à résoudre les faiblesses de la sécurité de votre hôte Docker. Répondre à tous les avertissements qu'il émet contribuera à renforcer votre hôte et à améliorer votre posture de sécurité.
N'oubliez pas que Docker Bench n'est pas un test exhaustif. Il existe d'autres aspects du maintien de la sécurité de Docker qui ne doivent pas non plus être négligés.
Un conteneur compromis pourrait donner aux attaquants un pied dans vos systèmes, même si vous disposez d'une sécurité renforcée au niveau de l'hôte. Vous pouvez réduire ce risque en utilisant Docker Bench, aux côtés de scanners de vulnérabilité de conteneurs actifs comme Trivy et Clair. Ceux-ci vous aideront à identifier les problèmes internes vos conteneurs, comme les dépendances obsolètes qui pourraient être exploitées.
Bien qu'un bon score soit toujours l'objectif, vous devez également noter que Docker Bench est destiné aux charges de travail de production. Toutes les vérifications ne sont pas pertinentes pour l'installation Docker locale d'un développeur. Exécutez le script, lisez les avertissements et évaluez ceux qui s'appliquent à votre environnement.