Comment automatiser les audits de sécurité Docker avec Docker Bench for Security

0
162

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, en particulier si vous exécutez 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 d'audit de sécurité open source.

Exécuter le script

Le moyen le plus simple de utiliser Docker Bench consiste à télécharger le script et à 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 des vérifications nécessitant 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

La couleur du rapport’ codé, afin que vous puissiez identifier rapidement les problèmes. Les lignes bleues INFO enregistrent l'entrée dans différentes sections de numérisation. Une ligne verte PASS indique que votre système a satisfait au contrôle. Les lignes WARN rouges indiquent une vulnérabilité potentielle.

Docker Bench exécute plus de 200 vérifications individuelles au total. La liste exhaustive est disponible dans le référentiel 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 mise à jour de Docker.

Configuration du démon

Le Les tests orientés démon vérifient que le socket Docker n'est pas exposé sur une connexion non sécurisée. Le trafic réseau entre les conteneurs sur le réseau de pont par défaut 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 devenir trop grand pour le conteneur.

La section suivante, les fichiers de configuration du démon Docker, a un objectif similaire. Il garantit que le répertoire d'installation 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 conteneur

Docker Bench effectue une vérification de base des fichiers Docker pour vos images connues. Il recherchera les utilisateurs de conteneur dédiés, la présence d'instructions HEALTHCHECK 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 de confiance, appliquez de nouveaux correctifs de sécurité et évitez l'installation de packages inutiles. Ces mesures aident à éliminer les vulnérabilités au sein des conteneurs.

Container Runtime

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 AppArmor à l'utilisation de montages de système de fichiers et d'options de mise en réseau appropriés.

Vous allez déposer des points si vous utilisez des conteneurs privilégiés ou montez le socket Docker dans un récipient. 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 dans des conteneurs. Ceci est déconseillé, car l'accès direct aux conteneurs 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 un manque de mémoire sur l'hôte. Les vérifications réseau signalent les ports inutilisés ainsi que les demandes de mappage de ports privilégiés dans des 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 crypté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 d'utiliser un audit au niveau du système sur les répertoires clés de Docker. L'audit enregistre toutes les opérations qui affectent les fichiers et répertoires surveillés. Cela vous permet de suivre les changements potentiellement destructeurs.

Assurez-vous que Auditd est installé. Modifiez /etc/audit/audit.rules et ajoutez les lignes suivantes au 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

L'instruction -p wa signifie que auditd consignera les écritures et attribuera les modifications 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. L'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” }

  • < strong>icc : Cela empêche les conteneurs de communiquer entre eux via le réseau de pont par défaut. Les conteneurs ne se contacteront que s'ils sont explicitement liés entre eux à l'aide d'un –link.
  • live-restore : Ce paramètre permet aux conteneurs de continuer à s'exécuter 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 et setgid.
  • userland-proxy : La désactivation de cela signifie qu'iptables est utilisé pour acheminer le trafic du port hôte vers les conteneurs. Sans cela, le processus proxy 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, de sorte que la racine dans un conteneur correspond à un utilisateur hôte moins privilégié. Cela réduit le risque qu'un conteneur compromis puisse exécuter des commandes root sur votre hôte. L'utilisation de la valeur par défaut indiquera à Docker de configurer un compte utilisateur dédié à cette fin.

CONNEXION : 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ésactivez 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 : N'incluez pas les mesures correctives suggérées. Utile lorsque vous souhaitez vous concentrer sur les avertissements et réduire le bruit dans la sortie.
  • -l report.txt : Écrivez 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 toute une section de vérifications ne s'applique pas à vous, envisagez de créer un alias shell afin de pouvoir exécuter rapidement Docker Bench avec une séquence d'indicateurs appliqués.

Conclusion

CONNEXESComment utiliser Docker Scan pour trouver des vulnérabilités dans vos images

L'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 aux avertissements qu'il émet contribuera à renforcer votre hôte et à améliorer votre 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, ainsi que des scanners de vulnérabilité de conteneur actifs comme Trivy et Clair. Ceux-ci vous aideront à identifier les problèmes au sein de vos conteneurs, tels que les dépendances obsolètes qui pourraient être exploitées.

Bien qu'un bon score soit toujours la cible, 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.