Heureusement pour nous, le Center for Internet Security ( CIS ) qui est un organisme à but non lucratif dont la mission première est de promouvoir de meilleures pratiques de sécurité sur Internet, a créé une "checklist" pour vous aider à sécuriser votre installation.
En se basant sur ce travail, l'équipe en charge du projet Docker a publié un audit de sécurité : Docker Bench for Security. Cet outil parcourt donc les préconisations du CIS afin de contrôler au mieux votre installation et signaler tout problème.
Dans ce tutoriel, nous allons installer Docker Bench for Security puis l'utiliser pour évaluer le niveau de sécurité de votre installation. Je vais partir du principe que nous avons installé Docker en suivant la documentation officielle : https://docs.docker.com/install/linux/docker-ce/debian/
Nous corrigerons ensuite certains problèmes, je me limiterai dans ce tutoriel à la correction des warings concernants auditd
.
Pré-requis
Pour aller au bout de ce tutoriel, vous aurez besoin des pré-requis suivants :
- Une installation de Debian 10.
- Un accès à votre serveur sur un compte autre que root qui pourra sudo ou accéder au groupe Docker pour exécuter les commandes liées au daemon.
- Une installation de Docker réalisée à partir de la documentation officielle.
Installer Docker Bench Security
Connectez-vous à votre serveur avec vos identifiants non-root.
Dans un premier temps, nous allons cloner le dépôt git de l'utilitaire de sécurité fourni par Docker :
$ cd ~
$ git clone https://github.com/docker/docker-bench-security.git
Tous les fichiers de l'utilitaire sont donc maintenant dans votre répertoire HOME
sous le dossier docker-bench-security
. Accédons à ce répertoire : $ cd docker-bench-security
Vous pouvez lancer l'utilitaire avec la commande suivante : $ sudo ./docker-bench-security.sh
Le script va vous renvoyer de nombreux éléments sous forme de INFO
, NOTE
, PASS
et WARN
. Nous allons considérer que les WARN
sont des vulnérabilités potentielles. Pour les INFO
, cela va dépendre de votre environnement, prenez le temps de considérer ces retours.
Pour notre tutoriel, nous allons nous concentrer sur les éléments concernant la sécurisation de l'hôte et non du daemon Docker. Effectivement, une seconde partie des WARN
ne concerne que la configuration du daemon, je reviendrai dans un deuxième tutoriel sur ces éléments car il est important de les expliquer en détails.
Pour lancer l'audit uniquement sur les éléments que nous souhaitons vérifier aujourd'hui : $ sudo ./docker-bench-security.sh -c host_configuration
Correction des Warnings
Attaquons-nous à la correction des WARN
renvoyées par l'audit de sécurité :
- Ensure a separate partition for containers has been created
Ce warning paraît complètement logique, avoir une partition dédiée à votre installation de Docker est clairement conseillée. Vous devriez partitionner votre serveur avec l'idée de cloisonner le dossier /var/lib/docker
.
Par contre, ce point n'est pas toujours évident à mettre en oeuvre. Dans le cadre d'offres "Cloud", on ne peut pas forcément choisir de partitionner son système. Dans ce cas, vous pouvez déplacer le dossier dans une partition éventuellement isolée : Par exemple si votre /home
est dans une partition dédiée.
- Ensure the container host has been Hardened
Il s'agit uniquement d'une NOTE
mais il est bon de rappeler que toutes ces modifications n'ont aucun intérêt si votre mot de passe ssh
est 1234.
Assurez-vous d'avoir protégé votre système comme il se doit.
- Ensure Docker is up to date
De même, c'est évident mais il faut pouvoir le faire facilement. Vous pouvez aller le site de Docker afin de vérifier que votre version est bien la dernière stable. Si ce n'est pas le cas :
$ sudo apt-get update
$ sudo apt-get upgrade
- Ensure only trusted users are allowed to control Docker daemon
Vous pouvez vérifier qu'aucun utilisateur non désiré n'a accès au groupe Docker.
Si c'est le cas, vous pouvez retirer l'utilisateur du groupe Docker avec la commande gpasswd
:
$ gpasswd -d username docker
- Ensure auditing is configured for various Docker files
Pour corriger ces points, nous allons devoir installer auditd
. Si vous ne connaissez pas auditd
, il s'agit d'un système de surveillance qui va enregistrer les opérations systèmes sur les fichiers, répertoires et sockets.
Nous allons donc lui demander de surveiller les fichiers, dossiers et sockets liés à Docker.
Installons auditd
avec la commande apt
: $ sudo apt-get install auditd
.
La commande suivante vous permet de vérifier les éléments audités : sudo auditctl -l
Pour voir un éventuel rapport d'audit : sudo aureport -l
Vous pouvez ajouter les éléments à surveiller, directement dans le fichier /etc/audit/rules.d/audit.rules
:
-w /usr/bin/dockerd -p rwxa -k docker
-w /etc/docker -p rwxa -k docker
-w /etc/default/docker -p rwxa -k docker
-w /etc/docker/daemon.json -p rwxa -k docker
-w /var/lib/docker -p rwxa -k docker
-w /usr/lib/systemd/system/docker.service -p rwxa -k docker
-w /usr/lib/systemd/system/docker.socket -p rwxa -k docker
-w /usr/bin/docker-runc -p rwxa -k docker
-w /usr/bin/docker-containerd -p rwxa -k docker
-w /usr/bin/containerd -p rwxa -k docker
Afin d'appliquer les changements, il est nécessaire de redémarrer le service d'audit : sudo systemctl restart auditd
À ce stade, vous avez correctement configuré auditd
pour notre audit de sécurité.
Vérifions que tout est : sudo ./docker-bench-security.sh -c host_configuration
Dans ce tutoriel, nous avons installé le script 'Docker Bench for Security' et nous l'avons utilisé pour vérifier et sécuriser l'installation de notre hôte. Dans un prochain article, nous sécuriserons les éléments liés au daemon Docker lui même.
Toute la sécurisation s'est faite au travers de l'outil auditd
. Cet outil demanderait un tutoriel à lui tout seul, mais je vais en rester là sur ce sujet pour aujourd'hui.
Ces commandes doivent nous inviter à nous poser des questions essentielles : Ok mais je fais quoi des événements enregistrés ? Je dois les lire ? Les envoyer à un système de supervision ?