⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Surface d'attaque du daemon Docker

Cette page décrit les implications de sécurité liées à l'exécution du daemon Docker et comment atténuer les risques potentiels.

Présentation

L'exécution de conteneurs (et d'applications) avec Docker implique d'exécuter le daemon Docker. Ce daemon nécessite des privilèges root à moins que vous n'optiez pour le mode Rootless, et vous devriez donc être conscient de certains détails importants de sécurité.

Risques principaux

Accès privilégié

Seuls les utilisateurs de confiance devraient être autorisés à contrôler votre daemon Docker. Ceci est une conséquence directe de certaines fonctionnalités puissantes de Docker.

Spécifiquement, Docker vous permet de :

  • Partager un répertoire entre l'hôte Docker et un conteneur invité
  • Le faire sans limiter les droits d'accès du conteneur

Cela signifie que vous pouvez démarrer un conteneur où le répertoire /host est le répertoire / sur votre hôte, et le conteneur peut altérer votre système de fichiers hôte sans aucune restriction.

Exemple de risque

$ docker run -v /:/host -it ubuntu bash
root@container:/# rm -rf /host/etc

Cette commande monterait le système de fichiers racine de l'hôte et permettrait la suppression de fichiers critiques.

Implications de sécurité

API REST

L'API REST de Docker (utilisée par la CLI Docker pour communiquer avec le daemon) peut être exposée sur un socket TCP, pas seulement un socket Unix. Si vous exposez cela sur un port réseau, toute personne avec un accès réseau au port peut exécuter des commandes Docker.

Par défaut, Docker s'exécute via un socket Unix /var/run/docker.sock. Le propriétaire de ce socket est root, et l'accès nécessite des privilèges appropriés.

Montages de volumes

Les montages de volumes peuvent exposer des parties sensibles du système de fichiers hôte :

# Exemple de montage dangereux
volumes:
  - /etc/passwd:/etc/passwd
  - /var/run/docker.sock:/var/run/docker.sock

Mesures d'atténuation

1. Utilisation d'utilisateurs non-privilégiés

Ajoutez des utilisateurs de confiance au groupe docker plutôt que d'utiliser sudo :

$ sudo usermod -aG docker $USER

Attention : Le groupe docker accorde des privilèges équivalents à root.

2. Mode Rootless

Utilisez le mode Rootless pour exécuter le daemon Docker sans privilèges root :

$ dockerd-rootless.sh

3. Limitation de l'exposition réseau

Si vous devez exposer l'API Docker sur le réseau :

$ dockerd -H tcp://0.0.0.0:2376 --tls --tlsverify \
  --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem

4. Socket Unix sécurisé

Assurez-vous que le socket Docker a les bonnes permissions :

$ sudo chown root:docker /var/run/docker.sock
$ sudo chmod 660 /var/run/docker.sock

5. Audit et surveillance

  • Surveillez l'accès au socket Docker
  • Auditez les commandes Docker exécutées
  • Utilisez des solutions de sécurité pour conteneurs

Bonnes pratiques

Principe du moindre privilège

  1. N'accordez l'accès Docker qu'aux utilisateurs qui en ont besoin
  2. Utilisez des images de base minimales
  3. Exécutez les processus avec des utilisateurs non-root dans les conteneurs

Contrôles d'accès

  1. Implémentez une authentification forte
  2. Utilisez des registres d'images de confiance
  3. Scannez les images pour les vulnérabilités

Réseau

  1. Limitez l'exposition des ports
  2. Utilisez des réseaux personnalisés
  3. Implémentez la segmentation réseau

Outils de sécurité

Docker Content Trust

Activez la vérification des signatures d'images :

$ export DOCKER_CONTENT_TRUST=1

Profils de sécurité

Scanning d'images

$ docker scan myimage:latest

Surveillance et logging

Activation des logs d'audit

Configurez le daemon pour logger les événements :

{
  "log-driver": "syslog",
  "log-opts": {
    "syslog-facility": "daemon"
  }
}

Surveillance des événements

$ docker events --filter type=container

Conclusion

La surface d'attaque du daemon Docker est significative en raison de ses privilèges élevés. Une configuration et des pratiques de sécurité appropriées sont essentielles pour minimiser les risques.

Points clés à retenir :

  • Le daemon Docker nécessite une attention particulière en matière de sécurité
  • Limitez l'accès aux utilisateurs de confiance uniquement
  • Considérez le mode Rootless pour réduire l'exposition
  • Implémentez des contrôles de sécurité appropriés
  • Surveillez et auditez l'utilisation de Docker

Références