Aller au contenu

Objectifs pédagogiques

  • Comprendre les vulnérabilités dans les images Docker et leur impact
  • Installer et utiliser Trivy pour scanner des images localement
  • Interpréter les rapports de vulnérabilités (CVE, scores CVSS)
  • Intégrer Trivy dans des pipelines CI/CD (GitLab CI et GitHub Actions)
  • Mettre en place des politiques de sécurité pour bloquer les images vulnérables
  • Appliquer des bonnes pratiques pour sécuriser les images Docker

Vulnérabilités & Définitions


Qu'est-ce qu'une vulnérabilité ?

Une vulnérabilité est une faiblesse dans un logiciel qui peut être exploitée par un attaquant pour :

  • Exécuter du code arbitraire
  • Accéder à des données sensibles
  • Provoquer un déni de service (DoS)
  • Élever ses privilèges
  • Compromettre le système hôte

Exemple concret : La vulnérabilité Log4Shell (CVE-2021-44228) a permis l'exécution de code à distance dans des millions d'applications Java


Problèmes courants

  • Images obsolètes : Utilisation d'images non maintenues
  • Packages inutiles : Surface d'attaque élargie
  • Secrets embarqués : Clés API, tokens dans l'image
  • Privilèges excessifs : Conteneurs exécutés en root
  • Images non fiables : Provenance inconnue

CVE et CVSS - Comprendre les scores de vulnérabilités

CVE (Common Vulnerabilities and Exposures)

Identifiant unique pour chaque vulnérabilité connue
Format : CVE-ANNÉE-NUMÉRO

  • Exemple : CVE-2023-12345

CVE et CVSS - Comprendre les scores de vulnérabilités

CVSS (Common Vulnerability Scoring System)

Système de notation de la gravité d'une vulnérabilité (0.0 à 10.0)

Score CVSS Gravité Couleur Action recommandée
0.0 None 🟢 Vert Aucune action
0.1 - 3.9 Low 🟡 Jaune Surveiller
4.0 - 6.9 Medium 🟠 Orange Corriger sous 30 jours
7.0 - 8.9 High 🔴 Rouge Corriger sous 7 jours
9.0 - 10.0 Critical 🔴 Critique Corriger immédiatement

Facteurs d'évaluation CVSS

  • Vecteur d'attaque : Réseau, adjacent, local, physique
  • Complexité : Facilité d'exploitation
  • Privilèges requis : Aucun, faible, élevé
  • Impact : Confidentialité, intégrité, disponibilité

Trivy & Présentation


Présentation de Trivy

Trivy (prononcé "tri-vee") est un scanner de vulnérabilités open-source développé par Aqua Security

Caractéristiques principales :

  • Complet : Scanne les images Docker, filesystems, Git repositories, Kubernetes
  • Rapide : Base de données locale, résultats en secondes
  • Précis : Faible taux de faux positifs
  • Facile à utiliser : Une seule commande pour scanner
  • Intégrable : CI/CD, IDE, Kubernetes admission controllers
  • Gratuit : 100% open-source

Ce que Trivy détecte :

  • Vulnérabilités OS (Alpine, Ubuntu, Debian, RHEL, etc.)
  • Vulnérabilités dans les packages applicatifs (npm, pip, gem, etc.)
  • Mauvaises configurations (Dockerfile, Kubernetes)
  • Secrets exposés (clés API, tokens)
  • Licences logicielles

Trivy & Utilisations


Premier scan - Les commandes de base

Scanner une image Docker

# Scan basique
trivy image nginx:latest

# Scan avec sortie détaillée
trivy image --severity HIGH,CRITICAL nginx:latest

# Scan avec format de sortie JSON
trivy image --format json --output results.json nginx:latest

# Scan avec format tabulaire (plus lisible)
trivy image --format table nginx:latest

Premier scan - Les commandes de base

Scanner un Dockerfile

# Avant de builder l'image
trivy config Dockerfile

# Scanner pour les mauvaises configurations
trivy config --severity HIGH,CRITICAL Dockerfile

Premier scan - Les commandes de base

Scanner un système de fichiers

# Scanner le répertoire courant
trivy fs .

# Scanner un projet Node.js
trivy fs --scanners vuln,secret ./mon-projet-node

# Scanner uniquement les vulnérabilités
trivy fs --scanners vuln ./

Premier scan - Les commandes de base

Scanner un repository Git

# Scanner un dépôt distant
trivy repo https://github.com/username/repository

# Scanner un dépôt local
trivy repo .

Options avancées de Trivy

Multiples examples

# Ignorer les vulnérabilités non corrigées
trivy image --ignore-unfixed nginx:latest

# Scanner uniquement certains types
trivy image --vuln-type os,library nginx:latest

# Filtrer par sévérité
trivy image --severity CRITICAL,HIGH nginx:latest

# Définir un code de sortie si vulnérabilités trouvées
trivy image --exit-code 1 nginx:latest

# Nettoyer le cache
trivy image --clear-cache

# Mode offline (utiliser cache uniquement)
trivy image --offline-scan nginx:latest

# Scanner avec une base de données personnalisée
trivy image --skip-db-update --cache-dir ./my-cache nginx:latest

Fichier .trivyignore - Ignorer des vulnérabilités

Créez un fichier .trivyignore pour ignorer certaines CVE :

# .trivyignore
# Ignorer CVE spécifiques (avec justification)

# CVE-2024-67890 - Fix not available yet, mitigation in place
CVE-2024-67890

Exercice

  • Créer une app simple
  • Introduire plusieurs vulnérabilités intentionnel
  • Scan cette image en local mais aussi via CI/CD
  • Être capable de jouer avec certains params
    • return code
    • ignore-unfixed
    • trivy-ignore
    • ne pas scan les low/medium

☕️ Si tu souhaites soutenir mon travail, tu peux m'offrir un café ici.