TP 6 - Renforcement de la sécurité avec Docker

Découverte de Podman

Avec l’aide du mode d’emploi rootless de Podman, découvrons ensemble les choix d’architecture de Podman et son mode rootless par défaut : https://podman.io/docs/installation

Note : il est aussi possible d’utiliser docker-compose avec Podman grâce à l’activation de son API.

Ressources pour le debugging si nécessaire :

Les options de dockerd : le fichier daemon.json

Revenons à Docker. On peut spécifier des options plus sécurisées, soit en modifiant le service docker.service, soit en modifiant le fichier /etc/docker/daemon.json (plus recommandé).

  • par exemple, on peut choisir certaines valeurs plus restrictives pour les cgroups, pour éviter qu’un conteneur trop gourmand bloque le host (se référer à la documentation).

Configurer les user namespaces

Par défault, et à cause de leur côté contre-intuitif, ils ne sont pas utilisés !

Voici la documentation détaillée de leur fonctionnement : https://docs.docker.com/engine/security/userns-remap/#enable-userns-remap-on-the-daemon

  • Activons-les grâce à une option spéciale :

/etc/docker/driver.json :

{
    "userns-remap": "default"
}
  • Relancez le service docker.service

  • Observez ces fichiers :

    • /etc/subuid
    • /etc/passwd
  • Montez le dossier / (racine) dans un conteneur : que s’est-il passé ?

docker run -it -v /:/dossier-racine-hote ubuntu /bin/bash
  • Faites un id depuis un conteneur

  • Avec docker inspect et ps -aux, trouvez le UID effectif d’un conteneur après l’activation de cette option.

Lancer un audit sur l’installation Docker

Facultatif : inter-container communication on default network

Désactivez l’options icc dans le fichier daemon.json et relancez l’audit. Tentez de pinger un conteneur depuis un autre (voir TP3 sur le réseau pour un exemple).

Le contenu des images Docker

Utiliser un scanner d’images Docker

La sécurité de Docker c’est aussi celle de la chaîne de dépendance, des images, des packages installés dans celles-ci : on fait confiance à trop de petites briques dont on ne vérifie pas la provenance ou la mise à jour

En production, on peut utiliser Watchtower : un conteneur ayant pour mission de périodiquement récupérer des images et recréer les conteneurs pour qu’ils utilisent la dernière image Docker

Un registry avancé avec Harbor

Un registry avancé, par exemple avec Harbor, permet d’activer le scanning d’images, de gérer les droits d’usage d’images, et de potentiellement restreindre les images utilisables dans des contextes d’organisation sécurisés.

Voir la démo : https://goharbor.io/docs/2.10.0/install-config/demo-server/

Le renforcement de sécurité : les profils AppArmor

AppArmor est plus haut niveau que SELinux (qui s’active dans daemon.json mais que sur les systèmes RedHat).

  • Dans l’écrasante majorité des cas, on peut se concentrer sur les capabilities (pour des conteneurs non privilégiés) pour avoir un cluster Docker déjà très sécurisé.