Comment utiliser Trivy pour trouver des vulnérabilités dans les conteneurs Docker –
Une analyse Trivy inspecte l’image de base de votre Dockerfile pour trouver les vulnérabilités non résolues dont vos conteneurs hériteront. Trivy peut également examiner les packages du système d’exploitation et les dépendances du code source ajoutés via les gestionnaires de packages populaires.
Trivy propose trois types d’analyse : conteneur, référentiel Git et répertoire du système de fichiers. Nous nous concentrons sur les analyses de conteneurs dans cet article. La documentation Trivy fournit plus d’informations sur la façon dont vous pouvez analyser votre code source et son environnement.
Sommaire
Installer Trivy
Trivy est disponible sur les distributions Linux les plus populaires. Vous devrez peut-être ajouter le référentiel du développeur. Vous pouvez trouver le bon lien pour votre distribution dans la documentation Trivy.
Si vous préférez utiliser une version spécifique, vous pouvez télécharger un binaire à partir de la page des versions GitHub du projet. Il existe également un script d’installation automatisé qui téléchargera le binaire approprié pour votre système d’exploitation.
Enfin, Trivy a sa propre image Docker que vous pouvez utiliser à la place d’une installation bare metal :
docker run --rm -v trivy-cache:/root/.cache/ -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:latest
Cette commande lie votre trivy-cache
répertoire au chemin du cache du conteneur Trivy. Cela améliore les performances en permettant à Trivy de mettre en cache les données en dehors de Docker entre les analyses.
Le socket Docker de votre hôte est également monté dans le conteneur. Cela permet à Trivy d’analyser d’autres conteneurs exécutés sur l’hôte. Vous êtes maintenant prêt à commencer à rechercher des vulnérabilités.
Première exécution
Le moteur de conteneur de Trivy prend en charge les images locales et distantes. Cela fonctionne avec Docker, Podman, les archives d’images exportées (docker save
) et des images dans des registres tels que Docker Hub et GitHub Container Registry.
Vous pouvez démarrer une analyse de base à l’aide de la trivy image
commander. Cela accepte une balise d’image.
trivy image my-image:latest
Trivy téléchargera sa base de données de vulnérabilités lors de la première exécution. La base de données sera mise en cache et réutilisée pour les analyses futures.
Les résultats du scan sont envoyés directement sur votre terminal. Le résumé en haut montre le système d’exploitation du conteneur détecté et une répartition des vulnérabilités trouvées par gravité. Le tableau fournit une liste complète des problèmes, y compris la bibliothèque dans laquelle chacun a été trouvé, une description et un ID CVE lorsqu’il est disponible.
Réduire le bruit
Trivy prend en charge plusieurs indicateurs pour vous permettre de personnaliser sa sortie. Il affichera par défaut toutes les vulnérabilités détectées si aucun indicateur n’est présent. Cela pourrait inclure des vulnérabilités qui n’ont pas été corrigées dans le projet en amont.
Vous pouvez exclure les problèmes non résolus en ajoutant le --ignore-unfixed
drapeau. Cela réduit le bruit en cachant les problèmes que vous ne pourrez pas résoudre.
trivy image --ignore-unfixed my-image:latest
Parfois, vous voudrez peut-être accepter intentionnellement une vulnérabilité. Tous les problèmes n’ont pas le même impact sur tous les projets. Si vous n’êtes pas concerné, ou si vous êtes prêt à prendre le risque, Trivy vous permettra d’omettre des identifiants CVE spécifiques de vos analyses.
Ajouter un .trivyignore
fichier dans votre répertoire de travail. Saisissez une liste d’ID CVE, un sur chaque ligne. Trivy trouvera et utilisera le fichier lorsque vous exécuterez une analyse. Les CVE présents dans .trivyignore
n’apparaîtra pas dans la sortie de numérisation. C’est une bonne idée d’ajouter un commentaire à chaque CVE que vous excluez ; cela garantit que les autres contributeurs sont informés de la raison pour laquelle le risque a été accepté.
# .trivyignore
# This issue is not relevant to our usage
CVE-2021-1234
Filtrage des vulnérabilités
Vous pouvez filtrer pour afficher les vulnérabilités d’un type particulier en utilisant le --vuln-type
drapeau. Cela accepte soit library
ou alors os
comme valeur.
Utilisant library
révélera les problèmes liés aux dépendances du langage de programmation. le os
L’option étend l’analyse aux packages du système d’exploitation.
Vous pouvez également filtrer par gravité de vulnérabilité. Cela vous aide à vous concentrer sur les problèmes importants en masquant des vulnérabilités relativement insignifiantes. Transmettez une liste de niveaux de gravité CVSS séparés par des virgules pour inclure :
trivy image --severity MEDIUM,HIGH,CRITICAL my-image:latest
Désormais, tout problème de gravité « faible » sera omis du rapport.
Trivy utilise par défaut un tableau visuel conçu pour la consommation humaine dans un terminal. Vous pouvez obtenir un JSON analysable par machine à la place en ajoutant --format json
.
Il existe également une prise en charge des styles de sortie personnalisés à l’aide de modèles. Plusieurs modèles sont inclus, tels que xml
et html
:
trivy image --format template @contrib/html.tpl -o scan.html my-image:latest
Cette analyse produira un rapport HTML enregistré dans scan.html
. Les rapports graphiques peuvent être plus rapides à lire et plus faciles à partager, en particulier lorsque de nombreux problèmes sont détectés.
Utiliser Trivy dans CI
Vous pouvez facilement incorporer Trivy dans vos scripts CI. Attention, le code de sortie est toujours 0
par défaut, même si des vulnérabilités sont trouvées. Ajouter le --exit-code 1
flag pour faire sortir Trivy avec un code différent de zéro si des problèmes sont présents.
Vous avez plusieurs options pour intégrer Trivy dans vos builds. Des modèles d’intégration officiels sont disponibles pour les fournisseurs de CI populaires, notamment GitHub, GitLab, Travis et CircleCI.
Lorsque vous créez des images dans votre pipeline, vous pouvez soit exécuter Trivy sur la sortie de génération finale, soit utiliser l’outil dans le conteneur. Les builds en plusieurs étapes de Docker vous permettent de référencer l’image Trivy et d’abandonner la build si une analyse échoue. Assurez-vous d’utiliser le filesystem
mode au lieu de image
, pendant que vous analysez le conteneur en cours d’exécution de l’intérieur.
COPY --from=aquasec/trivy:latest /usr/local/bin/trivy /usr/local/bin/trivy
RUN trivy filesystem --exit-code 1 --no-progress /
Il est généralement préférable d’exécuter Trivy vers la fin de votre Dockerfile
, une fois toutes vos dépendances logicielles installées. Cours rm /usr/local/bin/trivy
ensuite pour réduire la taille de votre image finale.
Mode serveur
Trivy peut fonctionner en mode client-serveur. Cela déplace la base de données des vulnérabilités vers le serveur, de sorte que les clients n’ont pas besoin de maintenir leurs propres versions.
Les binaires Trivy sont livrés avec le mode serveur intégré. Cours trivy server
pour démarrer une instance de serveur sur votre machine. Le port par défaut est 4594
; vous pouvez changer cela en ajoutant --listen localhost:8080
et en spécifiant le port choisi.
Le serveur téléchargera la base de données des vulnérabilités au démarrage. Il vérifiera les mises à jour en arrière-plan et extraira automatiquement les nouvelles versions.
Vous connectez un client Trivy à votre serveur en utilisant trivy client
:
trivy client --remote http://localhost:8080 image my-image:latest
Si vous avez besoin d’une authentification, ajoutez un --token
flag au serveur et aux commandes client. Le serveur n’acceptera de nouveaux clients que s’ils présentent le bon jeton.
Résumé
L’utilisation de Trivy pour analyser vos conteneurs Docker vous aide à trouver les vulnérabilités avant qu’elles ne deviennent un problème en production. Vous pouvez avoir plus confiance en vos conteneurs en vérifiant régulièrement les packages de système d’exploitation obsolètes et les dépendances du langage de programmation.
Trivy acquiert ses listes de vulnérabilités à partir de plusieurs sources différentes. Certaines de ces sources spécifient uniquement une utilisation non commerciale, vous devez donc vérifier que votre projet est conforme avant d’ajouter Trivy à vos builds.