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
- N'accordez l'accès Docker qu'aux utilisateurs qui en ont besoin
- Utilisez des images de base minimales
- Exécutez les processus avec des utilisateurs non-root dans les conteneurs
Contrôles d'accès
- Implémentez une authentification forte
- Utilisez des registres d'images de confiance
- Scannez les images pour les vulnérabilités
Réseau
- Limitez l'exposition des ports
- Utilisez des réseaux personnalisés
- 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