Docker est devenu un élément incontournable dans la conteneurisation des applications.
Avec sa popularité grandissante, la sécurité est devenue un enjeu important, aussi bien pour les développeurs que pour les administrateurs systèmes.
Cependant, tout système complexe comporte des failles, et Docker n’échappe pas à la règle.
Ce post va vous expliquer comment attaquer Docker, en particulier en abusant des cgroups, des capabilities, et en explorant la vulnérabilité des conteneurs via le montage de la socket Docker.
Nous verrons aussi comment des outils comme Clair et Trivy peuvent aider à détecter ces failles avant qu'elles ne soient exploitées.
1. Abus des cgroups avec l'attaque "notify_on_release"
Les cgroups (groupes de contrôle) sont une fonctionnalité essentielle de Linux, utilisée pour limiter et isoler les ressources des processus, comme la CPU, la mémoire et le disque. Docker repose sur ces cgroups pour gérer ses conteneurs, mais ils peuvent être exploités. L’attaque "notify_on_release" en est un parfait exemple. Cette technique consiste à ajouter un script dans les cgroups configuré pour s’exécuter dès qu’un processus est libéré (notifié). Ainsi, un attaquant peut utiliser cette faille pour exécuter des commandes arbitraires sur le système hôte.
Imaginez un conteneur compromis dans lequel un attaquant parvient à ajouter une commande à exécuter via le cgroup. Une fois le conteneur arrêté, la commande est déclenchée sur le système hôte, lui permettant potentiellement d'obtenir des privilèges plus élevés.
2. Capabilities Linux : Monter un système de fichiers de l'hôte
Les capabilities Linux sont des permissions spécifiques accordées à des processus individuels, réduisant le besoin de donner des droits root complets. Docker utilise les capabilities pour fournir aux conteneurs des permissions spécifiques. Cependant, une mauvaise configuration des capabilities peut entraîner des failles critiques.
Par exemple, si un conteneur a la capability CAP_SYS_ADMIN
, il peut monter des systèmes de fichiers. En exploitant cette capability, un attaquant pourrait monter un système de fichiers de l’hôte dans le conteneur, donnant ainsi un accès direct aux fichiers sensibles du système. Une fois ces fichiers accessibles, il devient possible de les lire ou même de les modifier, compromettant ainsi la sécurité de tout le serveur.
3. Le montage de la socket Docker : Exposition du daemon
Une autre attaque courante implique le montage de la socket Docker (/var/run/docker.sock
) directement dans un conteneur. Cette pratique est parfois utilisée pour des raisons de commodité lors de la gestion de plusieurs conteneurs, mais elle représente une énorme faille de sécurité. En ayant accès à cette socket, un attaquant pourrait interagir directement avec le daemon Docker du système hôte, lui permettant de lister, démarrer, arrêter et même créer de nouveaux conteneurs.
Le plus inquiétant, c’est qu’avec cet accès, l'attaquant peut également inspecter les autres conteneurs exécutés sur la même machine. Par exemple, en accédant aux informations réseau ou aux variables d’environnement des autres conteneurs, il peut obtenir des informations sensibles, voire établir des connexions entre conteneurs pour mener des attaques plus ciblées.
4. Outils de scan de vulnérabilités : Clair et Trivy
Avant qu'un attaquant ne puisse exploiter les vulnérabilités de vos conteneurs, il est essentiel d'analyser vos images Docker à la recherche de failles de sécurité. Deux outils populaires pour cela sont Clair et Trivy.
Clair est un outil de scan de vulnérabilités pour les conteneurs. Il analyse les images Docker en profondeur, détectant les vulnérabilités connues en se basant sur des bases de données de CVE (Common Vulnerabilities and Exposures). Clair fonctionne en créant un graphe des couches de l'image Docker et en comparant chaque couche avec les vulnérabilités connues. Vous pouvez intégrer Clair dans vos pipelines CI/CD pour automatiser la détection des vulnérabilités dès la phase de build.
Trivy, quant à lui, est un autre scanner de vulnérabilités mais il se distingue par sa simplicité d’utilisation. Il permet de scanner non seulement les images Docker, mais aussi les systèmes de fichiers locaux et les dépôts de code. Trivy détecte non seulement les vulnérabilités, mais aussi les mauvaises configurations et les secrets accidentellement laissés dans le code ou les conteneurs. Sa rapidité et son efficacité en font un outil incontournable pour la sécurité des conteneurs Docker.
5. Protéger votre environnement Docker
Pour se protéger de ces attaques, voici quelques mesures de sécurité essentielles à mettre en place :
Limiter les capabilities des conteneurs : Utilisez le principe du moindre privilège en réduisant les capabilities accordées à vos conteneurs. Ne donnez pas
CAP_SYS_ADMIN
ou d'autres capabilities sensibles à moins que cela ne soit absolument nécessaire.Éviter le montage de la socket Docker : Le montage de la socket Docker expose directement le daemon à des attaques potentielles. Si cela est inévitable, assurez-vous de restreindre l’accès au conteneur en limitant les permissions et en contrôlant qui peut interagir avec la socket.
Surveiller les cgroups : Activez la surveillance de vos cgroups pour détecter les comportements anormaux. L’utilisation de solutions de surveillance comme Falco peut aider à identifier rapidement toute tentative de manipulation des cgroups.
Scanner vos images Docker régulièrement : Utilisez des outils comme Clair et Trivy pour scanner régulièrement vos images Docker à la recherche de vulnérabilités. Ces outils devraient être intégrés à votre pipeline CI/CD pour automatiser la sécurité dès le développement.
Utiliser des images Docker sécurisées : Privilégiez toujours des images Docker officielles ou des images vérifiées provenant de sources de confiance. Vous pouvez également créer vos propres images Docker en vous assurant qu'elles respectent les meilleures pratiques de sécurité.
Conclusion
La sécurité de Docker ne doit jamais être négligée. Bien que cet outil offre de nombreux avantages en termes de flexibilité et de déploiement, il introduit également des vulnérabilités qui peuvent être exploitées par des attaquants. En comprenant les failles potentielles des cgroups, des capabilities et de la socket Docker, et en utilisant des outils comme Clair et Trivy pour détecter les vulnérabilités, vous pouvez renforcer la sécurité de vos conteneurs et éviter des compromissions majeures. Protégez vos environnements Docker avant qu'il ne soit trop tard !
Dans LaFormationCyber, vous découvrirez une mine d'informations bien plus riche que ce que cette newsletter peut offrir.
Vous y trouverez des défis étape par étape pour escape d’un container docker et exploiter les fonctionnalités linux à un niveau bien plus élevé.
Dans la prochaine newsletter, tu en apprendras plus sur kubernetes, et comment on peut là aussi faire des choses qui ne seraient pas venues à l’esprit d’un adminSys lambda !
Tu ne connais pas kubernetes ? => https://kubernetes.io/docs/concepts/overview/
À la semaine prochaine, Neo.
Tu aimerais te former à la cybersécurité pour augmenter ton salaire, devenir l’indispensable devenir un hacker éthique ou le Cybersecurity Champion de ton équipe ?
Rejoins ma formation spécialisée en hacking en cliquant ici.