TP : Analyse de sécurité avec Trivy dans GitLab CI¶
Ce TP vous fait manipuler Trivy sur une application Node.js conteneurisée déjà existante
L'objectif est de partir d'une image Docker et d'un Dockerfile perfectibles, puis de renforcer progressivement votre pipeline GitLab CI
Objectifs du TP¶
- Utiliser Trivy pour scanner une image Docker avec
trivy image - Utiliser Trivy pour analyser un
Dockerfileavectrivy config - Identifier les vulnérabilités et les problèmes de configuration les plus importants
- Corriger une partie des problèmes détectés
- Intégrer un scan Trivy dans GitLab CI avec cache et seuil de sévérité
Pré-requis¶
- Un dépôt GitLab avec un projet applicatif déjà versionné
- Une application Node.js avec un
Dockerfile - Un fichier
.gitlab-ci.ymlfonctionnel - Docker installé en local
Contexte¶
Vous disposez d'une application Node.js déjà prête à être construite en image Docker
Le dépôt contient déjà :
- le code de l'application
- un
package.json - un
Dockerfile - une pipeline GitLab CI minimale
Votre travail consiste à vérifier si l'image produite et le Dockerfile présentent des risques de sécurité, puis à améliorer la situation sans changer l'application elle-même
Point de départ commun recommandé¶
Si vous voulez que toute la classe travaille sur la même base, utilisez un Dockerfile volontairement perfectible comme point de départ
FROM node:16
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
Ce Dockerfile est intéressant pour le TP car il cumule plusieurs points de discussion :
- image de base ancienne
- absence d'utilisateur non privilégié
- usage de
npm installau lieu denpm ci - construction simple mais peu durcie
Si vous utilisez cette base, l'objectif n'est pas de tout réécrire mais de l'améliorer par petites étapes
Étape 1 : Construire et scanner l'image¶
Commencez par produire l'image Docker de votre application
- Construisez l'image avec un tag explicite
- Lancez un scan avec
trivy image <nom-image>:<tag> - Repérez les vulnérabilités
HIGHetCRITICAL - Identifiez au moins un package vulnérable provenant de l'image de base
- Repérez si une version corrigée est proposée
Étape 2 : Lire et classer les résultats¶
À partir du rapport console de Trivy :
- Distinguez ce qui semble venir :
- de l'image de base
- d'une dépendance applicative
- Relevez une vulnérabilité qui vous paraît prioritaire
- Relevez une vulnérabilité qui pourrait être traitée plus tard
- Proposez un ordre de traitement réaliste
Étape 3 : Analyser le Dockerfile¶
Analysez maintenant le fichier de build lui-même
- Lancez
trivy config Dockerfile - Relevez les alertes liées aux bonnes pratiques Docker
- Identifiez si le
Dockerfileprésente par exemple :- une image de base trop ancienne
- l'utilisation implicite de
root - des choix qui augmentent inutilement la surface d'attaque
- Faites le lien entre les alertes
trivy configet celles detrivy image
Étape 4 : Corriger une première fois¶
Apportez une ou deux corrections simples
Exemples possibles :
- changer le tag de l'image de base
- utiliser une image plus légère ou plus récente
- éviter une instruction risquée dans le
Dockerfile
Travail demandé :
- Modifiez le
Dockerfile - Reconstruisez l'image
- Relancez
trivy image - Relancez
trivy config Dockerfile - Comparez les résultats avant et après
Étape 5 : Intégrer Trivy dans GitLab CI¶
Automatisez ensuite le contrôle dans votre pipeline
- Ajoutez un stage
scan - Créez un job
trivy_scan - Utilisez l'image
aquasec/trivy:latest - Définissez
TRIVY_CACHE_DIRavec la valeur.trivycache/ - Ajoutez une section
cachepour conserver.trivycache/ - Dans le
script, lancez un scan de l'image Docker avec :--cache-dir $TRIVY_CACHE_DIR--exit-code 1--severity "HIGH,CRITICAL"
- Ajoutez ensuite l'option
--ignore-unfixedpour éviter de bloquer la pipeline sur des vulnérabilités qui n'ont pas encore de correctif disponible - Comparez le comportement du job avec et sans cette option
Étape 6 : Faire échouer puis corriger la pipeline¶
- Exécutez le pipeline avec une image contenant encore des vulnérabilités importantes
- Observez l'échec du job
trivy_scan - Corrigez l'image ou le
Dockerfile - Relancez le pipeline
- Vérifiez que le pipeline redevient vert ou au moins qu'il remonte moins d'alertes critiques