Aller au contenu principal

Analyse d’un conteneur

Identifier et corriger les failles de sécurité dans un conteneur Docker.

Notions théoriques

Les conteneurs Docker sont largement utilisés pour exécuter des applications de manière isolée.

attention

Un conteneur mal configuré ou utilisant une image vulnérable peut exposer un système à des attaques.

Fonctionnement d'un conteneur Docker

Rappel

Un conteneur est une instance isolée d'une image Docker. Une image est un ensemble de fichiers et de configurations nécessaires à l'exécution d'une application.

Lorsqu'un conteneur est lancé, il utilise les ressources du système hôte tout en restant isolé des autres processus.

Cependant, si l'image contient des vulnérabilités ou si le conteneur est mal sécurisé, un attaquant peut exploiter ces failles.

Risques de sécurité liés aux conteneurs Docker

  • Utilisation d'images non sécurisées : Télécharger des images depuis des sources non vérifiées peut introduire des failles de sécurité.
  • Permissions excessives : Exécuter un conteneur avec des privilèges root peut permettre à un attaquant d'accéder au système hôte.
  • Exposition de ports non sécurisés : Ouvrir trop de ports ou exposer un service non protégé peut faciliter une attaque.
  • Fuites de secrets : Stocker des mots de passe ou des clés API en clair dans une image Docker peut compromettre la sécurité.
  • Absence de mises à jour : Une image contenant des logiciels obsolètes peut être vulnérable à des exploits connus.

Bonnes pratiques pour sécuriser un conteneur

  • Utiliser des images officielles et vérifiées : Privilégier les images provenant de sources fiables comme Docker Hub ou des registres privés sécurisés.
  • Analyser les images Docker : Scanner les images avec des outils comme Trivy, Anchore ou Clair pour détecter les vulnérabilités.
  • Éviter d’exécuter les conteneurs en root : Utiliser un utilisateur non privilégié dans le fichier Dockerfile.
  • Limiter les privilèges du conteneur : Restreindre l'accès aux ressources système avec des options comme --cap-drop ALL.
  • Gérer les secrets de manière sécurisée : Utiliser des solutions comme Docker Secrets, Vault ou des variables d’environnement protégées.
  • Mettre à jour régulièrement les images : Rebuilder les images Docker avec les dernières mises à jour de sécurité.

Exemple pratique

Il est possible d’analyser une image Docker vulnérable avec Trivy, un outil de scan de sécurité.

Étape 1 : Installer Trivy

Sur un système Linux, installer Trivy avec la commande suivante :

sudo apt install -y trivy

Sur macOS avec Homebrew :

brew install aquasecurity/trivy/trivy

Étape 2 : Télécharger une image vulnérable

Récupérer une image Docker contenant des vulnérabilités :

docker pull vulnerables/web-dvwa

Étape 3 : Scanner l’image avec Trivy

Lancer une analyse de sécurité sur l’image téléchargée :

trivy image vulnerables/web-dvwa

Étape 4 : Interpréter les résultats

Trivy affiche une liste des vulnérabilités détectées, classées par niveau de gravité (Low, Medium, High, Critical).

Étape 5 : Corriger les vulnérabilités

Si l’image est obsolète, essayer de la mettre à jour :

docker pull vulnerables/web-dvwa:latest

Si des dépendances sont vulnérables, envisager de reconstruire l’image avec des versions mises à jour.

Test de mémorisation/compréhension


Quel est le principal risque d’utiliser une image Docker non sécurisée ?


Quel outil permet d’analyser les vulnérabilités des images Docker ?


Pourquoi est-il déconseillé d’exécuter un conteneur en root ?


Quelle commande permet de télécharger une image Docker ?


Que signifie une vulnérabilité classée 'Critical' dans un scan Trivy ?


Pourquoi est-il important de mettre à jour régulièrement les images Docker ?


Quelle option permet de restreindre les privilèges d’un conteneur Docker ?


Comment stocker des secrets de manière sécurisée dans un conteneur ?


Quelle est la meilleure source pour télécharger une image Docker sécurisée ?


Que faire si une image Docker contient des dépendances vulnérables ?


TP pour réfléchir et résoudre des problèmes

L'objectif de ce TP est d'analyser un conteneur Docker vulnérable et de corriger ses failles de sécurité en reconstruisant une image sécurisée.

remarque

Contrairement à l'exemple pratique, ce TP inclut la modification du Dockerfile et l'application de correctifs aux vulnérabilités détectées.

Étape 1 : Installer Docker et Trivy

Installation de Docker

  • Sous Debian/Ubuntu :

    1. Installer curl et exécuter le script d’installation de Docker :

      apt install curl -y
      curl -fsSL https://get.docker.com | sh
    2. Ajouter l’utilisateur actuel au groupe docker pour éviter d’avoir à utiliser sudo à chaque commande :

      sudo usermod -aG docker $(whoami)
    3. Redémarrer la session pour appliquer les modifications.

  • Sous macOS et Windows :

    1. Télécharger et installer Docker Desktop depuis le site officiel :

    2. Vérifier que Docker fonctionne après l’installation :

      docker --version

Installation de Trivy

  • Sous Debian/Ubuntu :

    sudo apt install -y trivy
  • Sous macOS :

    brew install aquasecurity/trivy/trivy
info

Cette étape permet d’installer Docker et Trivy correctement.

  • docker --version doit afficher une version valide de Docker.
  • trivy --version doit afficher une version valide de Trivy.
  • Sous Debian, si docker ps affiche une erreur de permission, redémarrer la session après l’ajout au groupe docker.

Étape 2 : Télécharger et exécuter un conteneur vulnérable

  1. Télécharger une image vulnérable depuis Docker Hub :

    docker pull vulnerables/web-dvwa
  2. Exécuter le conteneur :

    docker run -d --name dvwa -p 8080:80 vulnerables/web-dvwa
  3. Vérifier que le conteneur est bien en cours d'exécution :

    docker ps
  4. Accéder à l'application vulnérable via un navigateur à l'adresse :

    http://localhost:8080
info

Cette étape permet de lancer un conteneur basé sur une image vulnérable.

  • docker pull vulnerables/web-dvwa télécharge l’image.
  • docker run -d --name dvwa -p 8080:80 vulnerables/web-dvwa exécute le conteneur en arrière-plan et mappe le port 80 du conteneur sur le port 8080 de l'hôte.
  • docker ps doit afficher un conteneur en cours d'exécution avec le nom dvwa.
  • Si l’accès au site ne fonctionne pas, vérifier que le port 8080 n’est pas déjà utilisé par un autre service.

Étape 3 : Scanner l’image du conteneur avec Trivy

  1. Exécuter un scan de sécurité sur l’image téléchargée :

    trivy image vulnerables/web-dvwa
  2. Analyser les résultats et identifier les vulnérabilités critiques.

info

Cette étape permet d’identifier les failles de sécurité dans l’image Docker.

  • trivy image vulnerables/web-dvwa affiche une liste de vulnérabilités.
  • Les vulnérabilités sont classées par gravité : Low, Medium, High, Critical.
  • Si aucune vulnérabilité n’est détectée, vérifier que Trivy est bien configuré avec trivy --help.

Étape 4 : Modifier le Dockerfile pour sécuriser l’image

  1. Créer un dossier de travail :

    mkdir dvwa-secure && cd dvwa-secure
  2. Créer un fichier Dockerfile et y copier le contenu suivant :

    FROM vulnerables/web-dvwa:latest

    RUN apt-get update && apt-get upgrade -y && apt-get clean

    USER nobody
  3. Construire une nouvelle image sécurisée :

    docker build -t dvwa-secure .
info

Cette étape permet de créer une version plus sécurisée de l’image en appliquant des mises à jour et en évitant l’exécution en root.

  • FROM vulnerables/web-dvwa:latest utilise l’image vulnérable comme base.
  • RUN apt-get update && apt-get upgrade -y && apt-get clean met à jour les paquets pour corriger certaines vulnérabilités.
  • USER nobody empêche l’exécution en tant que root.
  • docker build -t dvwa-secure . génère une nouvelle image sécurisée.

Étape 5 : Déployer et tester la nouvelle image

  1. Arrêter et supprimer l’ancien conteneur :

    docker stop dvwa && docker rm dvwa
  2. Exécuter le conteneur basé sur l’image sécurisée :

    docker run -d --name dvwa-secure -p 8080:80 dvwa-secure
  3. Vérifier que l’application fonctionne toujours à l’adresse :

    http://localhost:8080
info

Cette étape permet de s’assurer que la nouvelle image fonctionne correctement.

  • docker stop dvwa && docker rm dvwa supprime l’ancien conteneur.
  • docker run -d --name dvwa-secure -p 8080:80 dvwa-secure lance le conteneur sécurisé.
  • Si l’application ne fonctionne pas, vérifier avec docker logs dvwa-secure pour voir les erreurs éventuelles.

Étape 6 : Scanner la nouvelle image avec Trivy

  1. Exécuter un scan de sécurité sur l’image sécurisée :

    trivy image dvwa-secure
  2. Comparer les résultats avec ceux obtenus à l’étape 3.

info

Cette étape permet de vérifier si les modifications apportées ont réduit le nombre de vulnérabilités.

  • trivy image dvwa-secure analyse l’image reconstruite.
  • Si des vulnérabilités critiques persistent, envisager d’autres correctifs comme la suppression des paquets inutiles.