Grype est un scanner de vulnérabilité open source qui trouve les faiblesses dans les images de conteneurs et les répertoires du système de fichiers. Grype est développé par Anchore mais fonctionne comme un binaire autonome plus facile à maîtriser que le moteur Anchore.
Des vulnérabilités connues se frayent un chemin dans votre logiciel via des packages de système d'exploitation obsolètes, des dépendances de langage de programmation compromises et des images de base non sécurisées. L'analyse active de vos artefacts vous tient informé des problèmes avant que des acteurs malveillants ne les trouvent. Voici comment utiliser Grype pour trouver des problèmes dans votre code et vos conteneurs.
Installer Grype
Grype est distribué sous forme de binaire pré-compilé dans deb
, rpm
, source Linux et formats Mac. Vous pouvez récupérer la dernière version de GitHub et l'installer avec le gestionnaire de packages de votre système ou en copiant le binaire à un emplacement de votre chemin. Vous pouvez également utiliser le script d'installation pour automatiser le processus :
curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin
Vérifiez le fonctionnement de votre binaire en exécutant le grype
commande. La documentation sur les commandes disponibles sera affichée.
Analyses de base
Dans sa forme la plus simple, Grype prend un seul argument qui spécifie l'image du conteneur ou le chemin du système de fichiers à analyser. Pour numériser une image, fournissez une balise de registre valide. Grype utilisera les informations d'identification Docker disponibles pour extraire des images de Docker Hub et des registres privés.
grype alpine:latest
Vous pouvez également numériser une archive d'image qui a été exportée depuis Docker :
grype saved-image.tar
Grype téléchargera sa base de données de vulnérabilités lors de sa première exécution. Cela pèse actuellement environ 90 Mo. Une fois la base de données disponible, Grype extraira l'image Docker, cataloguera le logiciel qu'elle contient et analysera les vulnérabilités connues présentes dans la base de données.
Les résultats sont affichés dans un tableau dans votre terminal. Chaque vulnérabilité comprend son ID CVE, le nom du package affecté et son niveau de gravité. Lorsque le problème a été corrigé dans une version ultérieure, vous verrez le numéro de version de cette mise à jour dans le FIXED-IN
colonne. Cela vous aide à déterminer si une vulnérabilité peut être facilement corrigée avec une simple mise à jour du gestionnaire de packages.
Grype peut fonctionner avec des packages pour toutes les distributions Linux les plus populaires. Il prend également en charge les packages Ruby Gems, NPM et Yarn, les dépendances Python Eggs, Wheels et Poetry, ainsi que les modules Java aux formats JAR, WAR, EAR, JPI et HPI.
Scanner les systèmes de fichiers
Grype peut analyser les chemins du système de fichiers sur votre machine. Cela vous permet de découvrir les vulnérabilités dans les référentiels de code source avant de créer une image. Pour utiliser cette fonctionnalité, spécifiez un chemin de répertoire avec le dir:
schéma :
grype dir:/example-dir
Grype recherchera des fichiers compatibles imbriqués sous la racine du répertoire donné. Chaque fichier trouvé sera indexé et analysé à la recherche de vulnérabilités.
Les analyses de systèmes de fichiers présentent les mêmes types de vulnérabilité que les analyses d'images de conteneurs. L'analyse peut prendre quelques minutes si vous travaillez avec une grande arborescence de répertoires.
Filtrage des vulnérabilités
Deux indicateurs de filtrage sont pris en charge pour limiter le rapport aux vulnérabilités ou aux options de résolution qui vous intéressent :
--only-fixed
– Afficher uniquement les vulnérabilités qui ont été corrigées dans une version ultérieure du package concerné.--fail-on high
– Quittez immédiatement avec un code d'erreur lorsqu'unhigh
-niveau de vulnérabilité est trouvé. Vous pouvez substituer n'importe quel niveau d'erreur pris en charge (critique, élevé, moyen ou faible) au lieu dehigh
.
Ignorer les vulnérabilités
Les vulnérabilités peuvent être ignorées pour masquer les faux positifs ou les problèmes que vous avez décidé de ne pas résoudre, peut-être parce qu'ils ne sont pas pertinents pour votre utilisation du package.
Pour ignorer une vulnérabilité, vous devez créer un fichier de configuration Grype personnalisé au format YAML. Ajoutez le CVE de la vulnérabilité sous le niveau supérieur ignore
champ :
ignore: - vulnerability: CVE-2021-12345
D'autres champs sont également pris en charge, comme cette variante pour ignorer tous les problèmes liés aux packages NPM :
ignore: - package: type: npm
Enregistrez votre fichier de configuration dans .grype.yaml
ou .grype/config.yaml
dans votre répertoire de travail. Il sera utilisé automatiquement la prochaine fois que vous exécuterez une analyse Grype. Le fichier de configuration global ~/.grype.yaml
est également pris en charge. Le fichier de votre répertoire de travail sera fusionné avec le fichier global au moment de l'exécution.
Les vulnérabilités n'affecteront pas le code de sortie de Grype si elles sont ignorées. Le rapport JSON les déplacera vers un ignoredMatches
séparé tandis que les rapports de table terminale les excluent complètement. Si vous ignorez une vulnérabilité, n'oubliez pas de documenter pourquoi elle a été acceptée afin que chaque contributeur comprenne le risque.
Utilisation des SBOM
Grype peut fonctionner avec des SBOM générés par Syft, un autre des projets d'Anchore. Syft indexe vos images de conteneurs pour produire une liste des dépendances qu'elles contiennent.
Utilisez Syft pour créer un SBOM pour votre image au format JSON :
syft alpine:latest -o json > alpine-sbom.json
Lancez ensuite une analyse Grype à l'aide du SBOM :
grype sbom:/alpine-sbom.json
Grype inspectera l'image référencée à la recherche de nouvelles vulnérabilités découlant de sa nomenclature. Continuez à utiliser Grype avec votre SBOM pour surveiller les problèmes émergents dans les dépendances d'images que vous avez déjà auditées et indexées.
Personnalisation de la sortie Grype
Grype fournit quatre formateurs de sortie différents entre lesquels vous pouvez basculer en utilisant le -o
Indicateur CLI :
table
– Le tableau par défaut lisible par l'homme pour la consommation en terminal.json
– Un rapport au format JSON contenant des informations beaucoup plus complètes sur chaque vulnérabilité, ainsi que des détails sur la base de données Grype utilisée pour l'analyse. Les fichiers JSON conviennent à l'archivage et à la comparaison à long terme, ou à une utilisation en tant qu'artefacts de build CI.cyclonedx
– Un rapport compatible CycloneDX au format XML qui est prêt à alimenter d'autres outils prenant en charge les SBOM et les listes de vulnérabilités.template
– Ce formateur avancé vous permet de produire vos propres rapports dans des formats arbitraires.
Le template
Le formateur accepte un modèle Go qui sera utilisé pour rendre la sortie du rapport. Pour utiliser ce formateur, ne le spécifiez pas par son nom. Transmettez plutôt le chemin d'accès à un fichier contenant votre modèle Go :
grype alpine:latest -o output-template.tmpl
Le modèle doit utiliser la syntaxe de modèle Go pour référencer les variables fournies par Grype. Vous pouvez créer tout type de format de fichier dont vous avez besoin, comme une page HTML, un fichier Markdown ou une structure JSON personnalisée. Les documents Grype incluent un exemple de production d'un fichier CSV à partir des variables disponibles.
Base de données des vulnérabilités
La base de données des vulnérabilités stocke les détails de toutes les vulnérabilités connues de Grype. Une fois téléchargée, la version en cache sera réutilisée jusqu'à ce qu'une mise à jour soit disponible. Les interactions manuelles avec la base de données ne sont généralement pas nécessaires.
Dans certaines situations, vous devrez peut-être forcer le téléchargement d'une base de données. Cela peut être dû au fait que vous configurez un serveur isolé avant d'exécuter une analyse. Utilisez le grype db check
et grype db update
commandes pour rechercher et télécharger une version plus récente de la base de données.
Une fois la base de données disponible, les analyses fonctionneront pendant que votre système est hors ligne. Vous pouvez désactiver les vérifications automatiques de mise à jour de la base de données de Grype en définissant le GRYPE_DB_AUTO_UPDATE
variable d'environnement sur false
dans votre coquille.
Résumé
Grype vous alerte des vulnérabilités à l'intérieur de vos conteneurs et sur votre système de fichiers. En tant que binaire CLI autonome, il est plus facile de démarrer qu'une installation complète d'Anchore.
Si vous vous demandez lequel choisir, la valeur d'Anchore réside dans son extensibilité et ses options de configuration avancées. Avec Anchore Engine, vous pouvez définir vos propres ensembles de politiques en fonction des portes, des déclencheurs et des actions. Ceux-ci vous permettent d'adapter précisément vos numérisations à votre environnement spécifique. Grype offre une expérience plus simple lorsque vous souhaitez simplement une liste des vulnérabilités connues dans votre image.
Quel que soit votre choix, l'adoption d'une forme d'analyse active des vulnérabilités vous tiendra informé des faiblesses de votre chaîne d'approvisionnement logicielle. Pour une approche entièrement intégrée, utilisez Grype dans le cadre de votre pipeline CI afin d'être alerté des nouvelles vulnérabilités au fur et à mesure que le code est validé.