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

docker-bench-sec-1

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

bench-sec-host

Correction des Warnings

Attaquons-nous à la correction des WARN renvoyées par l'audit de sécurité :

  1. 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.

  1. 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.

  1. 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
  1. 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
  1. 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

auditdview

Pour voir un éventuel rapport d'audit : sudo aureport -l

auditdview2

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

allok


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 ?