Comment vérifier la sécurité des conteneurs Docker sans prise de tête
Récemment, des chercheurs en sécurité ont découvert plus de quatre millions de conteneurs vides de substitution et des centaines de milliers d'images contenant des cryptominers cachés sur Docker Hub. Nous sommes habitués à récupérer des images de base ou des dépendances tierces avec une simple commande docker pull, en rarement réfléchir à ce qui pourrait se cacher à l'intérieur des couches — non seulement un package vulnérable, mais aussi un jeton d'accès intégré à l'infrastructure de quelqu'un d'autre ou un script d'évasion de sandbox.
Pour l'analyse d'images, les gens se tournent généralement vers Trivy, Grype ou Clair. Ils font un travail correct pour trouver les CVE connues dans les packages système, mais manquent souvent des choses subtiles comme une mauvaise configuration d'exécution, des clés API fuitées et de nouveaux vecteurs d'attaque ciblant les chaînes d'approvisionnement.
Le projet dockerscan du chercheur espagnol en sécurité Daniel Garcia (cr0hn) résout ce problème avec un audit complet. La première version de l'outil a été écrite en Python en 2017 et fonctionnait lentement, mais dans la deuxième version, l'auteur a complètement réécrit le moteur en Go, augmenté la vitesse de dix fois et combiné l'analyse de vulnérabilités, la détection de secrets et l'audit de configuration dans un seul binaire.
Ce qui se cache dans le nouveau DockerScan
Au lieu d'exécuter trois utilitaires différents à la suite pour vérifier les images, dockerscan exécute des diagnostics complets dans plusieurs domaines à la fois.
L'outil combine cinq modules d'analyse :
- CIS Docker Benchmark v1.7.0. Vérifie plus de 80 paramètres de sécurité, y compris l'exécution en tant que root, les ports ouverts inutiles, l'absence de directive HEALTHCHECK et les permissions correctes des fichiers système.
- Détecteur d'attaques sur la chaîne d'approvisionnement. Recherche les traces des campagnes populaires des dernières années : miners cachés (comme xmrig), backdoors dans les bibliothèques système (suite à l'incident xz-utils), textes de phishing et conteneurs sans vraies couches.
- Détection de secrets intégrés. Reconnaît plus de 40 formats de clés et jetons (AWS, GCP, OpenAI, Stripe, clés SSH privées, chaînes de connexion aux bases de données). Les jetons inconnus sont captés via le calcul de l'entropie de Shannon avec un seuil supérieur à 4,5.
- Base de données des vulnérabilités CVE. Suit les vulnérabilités dangereuses d'évasion de conteneurs (CVE-2024-21626 dans runc), les problèmes de BuildKit et les images de base obsolètes. La base de données est compilée à partir de l'instantané officiel MITRE cvelistV5, donc l'utilitaire ne frappe pas les limites de l'API NVD.
- Audit de sécurité à l'exécution. Vérifie les capacités Linux dangereuses (par exemple, CAP_SYS_ADMIN), les profils Seccomp et AppArmor et les drapeaux d'isolation des namespaces.
Dans la version 2.1.0, l'auteur a corrigé un bug important dans les builds v2.0.x précédentes qui faisait que l'analyse des vulnérabilités des packages retournait silencieusement zéro résultat. Maintenant, la correspondance des versions de packages suit les règles dpkg en tenant compte des backports de distribution.
Démarrage rapide et exécution des vérifications
L'utilitaire est distribué sous forme de binaire prêt à l'emploi pour Linux, macOS et Windows. Aucune dépendance à récupérer.
L'installation sur Linux amd64 prend trois lignes :
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-linux-amd64 -o dockerscan
chmod +x dockerscan
sudo mv dockerscan /usr/local/bin/
Avant la première exécution, téléchargez la base de données CVE locale :
dockerscan update-db
La base de données est mise à jour quotidiennement via GitHub Actions et pèse environ 30 Mo compressés. Après cela, vous pouvez pointer le scanner vers n'importe quelle image locale ou distante :
dockerscan nginx:latest
Si vous êtes uniquement intéressé par des vérifications spécifiques, par exemple la détection de secrets et la conformité CIS Benchmark, vous pouvez limiter les modules avec le flag --scanners :
dockerscan --scanners cis,secrets ubuntu:22.04
Pour les scripts d'automatisation, le mode silencieux -q et le filtrage par sévérité sont utiles :
dockerscan -q --only-critical my-app:prod
Travailler avec les registres privés
Un problème courant avec de nombreux scanners est l'authentification peu pratique avec les dépôts privés. Dockerscan prend en charge tous les scénarios populaires : Docker Hub, GHCR, AWS ECR, Google Artifact Registry, Azure ACR et GitLab.
Si vous êtes déjà authentifié via docker login, l'utilitaire récupère automatiquement les jetons depuis ~/.docker/config.json. Il prend également en charge les assistants d'identification système (osxkeychain sur macOS, wincred sur Windows et pass sur Linux).
Pour les pipelines CI/CD, il est plus pratique de passer les identifiants via des variables d'environnement :
export DOCKER_USERNAME=ci-bot
export DOCKER_PASSWORD=ghp_secret_token_here
dockerscan ghcr.io/my-org/private-service:v1.2.0
L'utilitaire retourne des codes de sortie clairs : 0 pour un rapport propre, 1 lorsque des problèmes de niveau High sont trouvés et 2 lorsque des vulnérabilités critiques sont détectées. Cela permet d'arrêter immédiatement la construction du pipeline lors de la découverte d'un bug dangereux.
Intégration dans CI/CD et rapports
Les résultats de Dockerscan sont enregistrés aux formats JSON et SARIF. Le format SARIF est nativement compris par GitHub Security, GitLab et Azure DevOps, donc les problèmes trouvés sont immédiatement affichés dans l'interface de pull request.
Étape d'exemple pour GitHub Actions :
name: Security Scan
run: |
./dockerscan update-db
./dockerscan -q myapp:${{ github.sha }}
name: Upload SARIF report
uses: github/codeql-action/upload-sarif@v2
if: always()
with:
sarif_file: dockerscan-report.sarif
Licence et limitations
La licence du projet mérite une attention particulière. L'auteur a choisi un modèle Source-Available. Le code source est entièrement ouvert, l'utilitaire peut être utilisé gratuitement pour les besoins internes de l'entreprise, intégré dans les pipelines CI/CD personnels et utilisé dans les audits et pentests. Une seule chose est interdite : emballer dockerscan dans un SaaS commercial et le vendre comme un service de scan cloud payant sans la permission de l'auteur.
Faut-il passer à DockerScan
Si vous avez besoin d'une analyse statique rapide des images combinée à des vérifications des permissions des conteneurs et à la détection de jetons fuités, dockerscan couvre toutes ces tâches avec une seule commande. L'utilitaire consomme environ 50 à 100 Mo de RAM et fonctionne заметно plus vite que les anciennes solutions Python.
L'outil est parfaitement adapté aux ingénieurs DevOps et aux spécialistes de la sécurité pour l'audit régulier des images de production et l'ajout de vérifications strictes aux pipelines de déploiement. La meilleure façon de commencer est de l'exécuter sur quelques-uns de vos propres conteneurs de travail pour voir le nombre réel d'avertissements CIS Benchmark cachés.
Projets similaires