Formation > Blog > Docker > Sécuriser Docker pour son environnement de production

Sécuriser Docker

Docker est une solution de conteneurs utilisée pour créer et déployer des applications par des développeurs du monde entier. Bien qu’elle permette une rapidité d’action, cela entraine une grande surface d’attaque potentielle pour les pirates informatiques.

Dans cet article, nous allons voir comment sécuriser Docker sur une plateforme Linux. Si vous souhaitez en savoir plus concernant la sécurité sur Docker, nous vous conseillons notre article sur la configuration de conteneurs image sécurisés.

Vous souhaitez devenir complètement opérationnels dans vos tâches de déploiement d’applications ? Notre formation Docker vous donnera une maitrise complète de l’outil et vous permettra de créer et de déployer des applications web.

L’équipe Ambient IT

Comment Sécuriser l’Host Docker ?

Dans cette section, nous allons passer en revue les actions de sécurité possibles dans l’host docker.

Scanner le Kernel Linux

Avant d’héberger une solution Docker sur Linux, il faut d’abord scanner le Kernel. Pour cela, il existe de nombreux outils open-source comme Lynis et OpenVAS.

Copiez ou clonez le projet Lynis depuis Github avec la commande git clone :

git clone https://github.com/CISOfy/lynis.git

Utilisez ensuite la commande ci-dessous pour naviguer dans le répertoire Lynis et auditer le système Linux.

cd lynis; ./lynis audit system

Durcir le Kernel Linux

Après avoir analysé Linux à la recherche de vulnérabilités, vous pouvez ajouter une couche de protection supplémentaire du Kernel avec grsecurity. Cela fournit des fonctions de sécurités supplémentaires comme :

  • Prévention de l’exploitation du dépassement de tampon
  • Prévention de la vulnérabilité de la course /tmp
  • Restrictions de /proc qui ne divulguent pas d’informations sur les propriétaires de processus.
  • Prévention de l’exécution de code arbitraire dans le noyau.

Il faut noter que les patchs correctifs grsécurity ne sont plus gratuits.

Installer Docker dans une VM

Au lieu d’installer Docker directement sur un hôte Linux, vous pouvez l’installer dans une machine virtuelle. Ainsi, même si le noyau de l’hôte présente une vulnérabilité, les conteneurs Docker ne seront pas affectés.

Protéger les privilèges Root

Par défaut, Docker requiert des privilèges root pour créer et gérer les conteneurs. Un pirate informatique pourrait tirer parti de cette surface d’attaque pour s’octroyer des droits de super-utilisateur et avoir ainsi accès à des données confidentielles.

Pour éviter cela, il est possible d’abandonner des fonctionnalités comme setgid et setuid afin d’empêcher les programmes de changer leur GID, et ainsi bloquer une éventuelle escalade de privilèges.

Il existe une commande capable de supprimer les capacités setgid et setuid via –cap-drop pour empêcher le conteneur apache de transformer son GID et UID en un autre UID et GID :

docker run -d --cap-drop SETGID --cap-drop SETUID apache

User Docker

Vous pouvez créer un utilisateur pour gérer les opérations de docker telles que docker run au lieu de les gérer via un superutilisateur. Créez un utilisateur Docker avec cette commande :

sudo groupadd docker

Cela crée un groupe appelé Docker auquel vous pouvez rajouter un utilisateur :

sudo useradd "nom de l'utilisateur"

Ajoutez votre utilisateur au groupe docker :

sudo usermod  -aG docker "nom de l'utilisateur"

Gérer des conteneurs avec Cgroups

Dans un environnement de production, vous pouvez avoir plus d’un conteneur.

Si cgroups n’est pas installé sur votre hôte, vous pouvez utiliser la commande suivante pour l’installer :

sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1

Allouez les conteneurs à des ressources CPU limitées via les options –cpu-shares et –cpuset-cpus.

Le processus conteneur de prodnginx est exécuté uniquement sur le premier cœur via –cpuset-cpus et se voit allouer 20 CPU via –cpu-shares. Pareillement le processus conteneur de proxnginx est exécuté sur les deux premiers cœurs de CPU et se voit également allouer 20 CPU.

docker run -d --name prodnginx --cpuset-cpus=0 --cpu-shares=20 nginx
docker run -d --name testnginx --cpuset-cpus=2 --cpu-shares=20 nginx

Tapez ensuite la commande docker stats pour voir l’utilisation du CPU par les conteneurs prodnginx et testnginx :

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O
845bea7263fb        prodnginx            57.69%              1.258MiB / 985.2MiB   0.13%               578B / 0B           1.33MB / 0B 
189ba15e8258        testnginx            55.85%              1.25MiB / 985.2MiB    0.13%               578b / 0B           1.33MB / 0B 

Gestion des conteneurs avec Namescape

Un Namescape peut empêcher les conteneurs de s’exécuter en tant qu’utilisateurs privilégiés, ce qui peut bloquer les attaques basées sur l’exploitation des privilèges.

Vous pouvez activer le namescape dans Docker en utilisant les fichiers /etc/subuid et /etc/subgid.

Sécuriser le Docker Daemon

Vous devez sécuriser le daemon Docker afin de garantir une communication sécurisée entre le client Docker et le client daemon via TLS.

Ouvrez le fichier daemon.json et utilisez la commande suivante :

{
  "debug": false,
  "tls": true,
  "tlscert": "/var/docker/server.pem",
  "tlskey": "/var/docker/serverkey.pem",
  "hosts": ["votre adresse IP"]
}

Vous pouvez aussi signer vos images docker avec la commande docker trust sign. Vous devez retirer l’image docker de docker hub et la marquer à nouveau avec la commande docker pull et docker tag respectivement.

Il est possible d’analyser les images Docker à la recherche de vulnérabilités et de défauts de configuration. Utilisez Anchor Engine pour rechercher les vulnérabilités et Docker Bench Security pour vérifier les défauts de configuration.

UNE QUESTION ? UN PROJET ? UN AUDIT DE CODE / D'INFRASTRUCTURE ?

Pour vos besoins d’expertise que vous ne trouvez nulle part ailleurs, n’hésitez pas à nous contacter.

ILS SE SONT FORMÉS CHEZ NOUS

partenaire sncf
partenaire hp
partenaire allianz
partenaire sfr
partenaire engie
partenaire boursorama
partenaire invivo
partenaire orange
partenaire psa
partenaire bnp
partenaire sncf
partenaire hp
partenaire allianz
partenaire sfr
partenaire engie
partenaire boursorama
partenaire invivo
partenaire orange
partenaire psa
partenaire bnp