0Pricing
Security+ Academy · Leçon

Sécurité des conteneurs : renforcement des images et protection à l’exécution

Renforcez les images Docker en supprimant les paquets inutiles, en exécutant les conteneurs sans privilèges root et en utilisant des outils de sécurité à l’exécution (Falco, Sysdig) pour détecter les comportements anormaux des conteneurs.

Sécurité des conteneurs : renforcement des images et protection à l’exécution est une leçon Security+ Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Security+ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Security+ Academy comprend 4 leçons au total.

Fondamentaux de la sécurité des conteneurs

Les conteneurs regroupent le code d’une application et ses dépendances dans des unités isolées qui partagent le noyau OS de l’hôte, contrairement aux machines virtuelles, qui incluent un OS invité complet. Ce partage rend les conteneurs légers et rapides, mais introduit un modèle de sécurité différent : une vulnérabilité d’évasion de conteneur pourrait permettre à un attaquant de sortir du conteneur et d’accéder directement au noyau de l’hôte, ce qui affecterait tous les autres conteneurs. La sécurité des conteneurs se concentre sur trois couches : l’image (ce qui y est intégré), l’environnement d’exécution (ce que le conteneur peut faire pendant son fonctionnement) et la plateforme d’orchestration (la manière dont les conteneurs sont gérés).

Images de base minimales : réduire la surface d’attaque

Chaque paquet installé dans une image de conteneur constitue une surface d’attaque potentielle. Le principe des images de base minimales consiste à partir de la fondation la plus petite possible : Alpine Linux (5 Mo, avec un nombre minimal de paquets), les images distroless (images de Google qui contiennent uniquement l’environnement d’exécution et l’application, sans interpréteur de commandes ni gestionnaire de paquets), ou scratch (complètement vide, pour les fichiers binaires compilés statiquement). Un conteneur dépourvu d’interpréteur de commandes empêche un attaquant qui a réussi à exécuter du code de lancer facilement wget, curl ou d’autres outils pour étendre son attaque — un principe appelé défense par exposition minimale.

# Bad: starts from a full OS image
FROM ubuntu:22.04

# Better: minimal Alpine base
FROM alpine:3.18

# Best: distroless for Java apps
FROM gcr.io/distroless/java17-debian11

S’exécuter sans privilèges root : la première règle

Par défaut, les conteneurs Docker s’exécutent en tant que root (UID 0). Si un attaquant exploite une vulnérabilité dans l’application conteneurisée, il obtient les privilèges root à l’intérieur du conteneur. Si le conteneur partage un volume ou dispose de montages de l’hôte, root à l’intérieur du conteneur peut équivaloir à root sur l’hôte. La solution est simple : créer un utilisateur dédié dans le Dockerfile et basculer vers celui-ci avec la directive USER avant le CMD/ENTRYPOINT final. De nombreux outils d’analyse de sécurité des conteneurs signaleront comme problème toute image dépourvue d’un utilisateur sans privilèges root.

FROM alpine:3.18
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
COPY --chown=appuser:appgroup app /app/app
USER appuser
CMD ["/app/app"]

Conteneurs immuables et systèmes de fichiers en lecture seule

Les conteneurs immuables sont des conteneurs dont le système de fichiers ne peut pas être modifié pendant l’exécution. L’activation de --read-only dans Docker (ou de readOnlyRootFilesystem: true dans Kubernetes) empêche les attaquants d’écrire des logiciels malveillants sur le disque, de modifier des fichiers de configuration ou d’installer des outils dans un conteneur en cours d’exécution. Les applications qui doivent réellement écrire des données (journaux, fichiers temporaires) peuvent monter des volumes tmpfs spécifiques pour les écritures éphémères. Les conteneurs immuables imposent le principe selon lequel l’état d’exécution doit provenir uniquement de l’image et de la configuration, et non de modifications effectuées dans le conteneur qui contournent votre pipeline de sécurité CI/CD.

# Run container with read-only root filesystem
docker run --read-only \
  --tmpfs /tmp \
  --tmpfs /var/run \
  myapp:latest

Analyse des images : trouver les CVE avant le déploiement

Les outils d’analyse des images de conteneurs examinent les paquets installés dans une image Docker en les comparant à des bases de données de vulnérabilités (NVD, CVE) et signalent les CVE connus. Parmi les principaux analyseurs figurent Trivy (Aqua Security, rapide et gratuit), Grype (Anchore), Snyk Container et l’analyse des images AWS ECR. L’analyse doit être intégrée au pipeline CI/CD afin que toute image présentant des CVE critiques ou élevées fasse échouer le pipeline avant son envoi vers un registre. Les analyseurs doivent également rechercher les secrets (clés d’API, mots de passe) intégrés accidentellement dans les couches de l’image.

# Scan a Docker image with Trivy
trivy image --severity HIGH,CRITICAL myapp:latest

# Fail CI pipeline if vulnerabilities found
trivy image --exit-code 1 --severity CRITICAL myapp:latest

Gestion des secrets : jamais dans les couches d’image

Une erreur courante et dangereuse consiste à intégrer des secrets (clés d’API, mots de passe de base de données, certificats TLS) dans des images Docker, soit dans des variables d’environnement intégrées à l’image, soit dans des fichiers ajoutés via COPY. Ces secrets sont visibles par toute personne ayant accès à l’image, via docker history ou en extrayant les couches de l’image. Même si une couche ultérieure supprime le fichier, celui-ci reste présent dans l’historique de l’image. Les secrets doivent être injectés à l’exécution via des variables d’environnement provenant d’un gestionnaire de secrets, des secrets Docker ou des Secrets Kubernetes montés en tant que volumes.

# Never bake secrets into images
# Bad: ENV DATABASE_PASSWORD='supersecret'

# Good: inject at runtime via environment
docker run -e DATABASE_PASSWORD=$(vault read -field=password secret/db) myapp:latest

# Or use Docker secrets in Swarm/K8s

Protection à l’exécution : Falco et surveillance des appels système

Les outils de sécurité à l’exécution surveillent le comportement du conteneur pendant son fonctionnement et alertent en cas d’activité anormale ou la bloquent. Falco (projet CNCF) s’intègre au noyau Linux à l’aide d’eBPF ou de modules du noyau afin d’intercepter les appels système et de les comparer à des règles. Par exemple, une règle peut déclencher une alerte si un conteneur lance un shell (execve('/bin/sh')), ouvre une connexion réseau sur un port inattendu ou lit /etc/shadow. Ces indicateurs comportementaux signalent souvent une attaque en cours, même si aucun CVE connu n’a été exploité. Sysdig Secure et Aqua Security proposent des plateformes commerciales de protection à l’exécution.

# Example Falco rule: alert on shell execution in container
# - rule: Shell Spawned in Container
#   desc: A shell was spawned in a container
#   condition: container and proc.name in (bash, sh, zsh)
#   output: Shell spawned (user=%user.name container=%container.name)
#   priority: WARNING

Capacités Linux et profils Seccomp

Par défaut, les conteneurs Docker suppriment de nombreuses capacités Linux, mais en conservent encore davantage que nécessaire pour la plupart des applications. Les capacités répartissent les privilèges root en unités distinctes (par exemple, CAP_NET_ADMIN, CAP_SYS_ADMIN). Il est recommandé de supprimer toutes les capacités, puis de rétablir uniquement celles qui sont nécessaires avec --cap-drop=ALL --cap-add=NET_BIND_SERVICE. Les profils Seccomp (Secure Computing Mode) définissent une liste blanche des appels système qu’un conteneur est autorisé à effectuer. Docker fournit un profil seccomp par défaut qui bloque environ 44 appels système dangereux. Des profils seccomp personnalisés pour des applications spécifiques peuvent renforcer cette restriction en bloquant tous les appels système que l’application n’utilise légitimement jamais.

# Drop all capabilities, add only what's needed
docker run \
  --cap-drop=ALL \
  --cap-add=NET_BIND_SERVICE \
  --security-opt seccomp=/etc/docker/seccomp-custom.json \
  myapp:latest

Registres de conteneurs et signature des images

Les registres de conteneurs (Docker Hub, AWS ECR, Google Artifact Registry) stockent et distribuent les images. La sécurisation du registre implique : l’activation de l’analyse des vulnérabilités lors de l’envoi, la restriction de l’accès d’envoi aux seuls comptes de service CI/CD, l’activation de la signature des images avec Sigstore/Cosign ou Docker Content Trust (Notary) afin que les environnements d’exécution ne récupèrent que des images signées cryptographiquement provenant de sources approuvées, ainsi que la configuration de l’immutabilité des images afin que les balises ne puissent pas être remplacées. Cela élimine les attaques par modification de balise, au cours desquelles un attaquant remplace une balise :latest approuvée par une image malveillante.

# Sign a container image with Cosign
cosign sign --key cosign.key myregistry.io/myapp:v1.2.3

# Verify signature before deployment
cosign verify --key cosign.pub myregistry.io/myapp:v1.2.3

Techniques d’évasion de conteneur et défenses

Les attaquants qui obtiennent la possibilité d’exécuter du code dans un conteneur peuvent tenter une évasion de conteneur pour atteindre l’hôte. Les techniques courantes incluent : l’exploitation de conteneurs privilégiés (--privileged fournit un accès presque illimité à l’hôte), l’exploitation des connecteurs Docker exposés (/var/run/docker.sock monté dans un conteneur fournit un accès complet à l’API Docker, notamment la possibilité de créer des conteneurs privilégiés) et l’exploitation de vulnérabilités du noyau par l’intermédiaire de capacités non sécurisées. Défenses : n’utilisez jamais le mode privilégié sauf nécessité absolue, ne montez jamais le connecteur Docker dans des conteneurs d’application, maintenez le noyau de l’hôte à jour et utilisez gVisor ou Kata Containers pour les charges de travail nécessitant une isolation renforcée.

# DANGEROUS: never do this in production
# docker run --privileged -v /:/host myapp:latest

# Check if a container is running privileged
docker inspect mycontainer | grep -i privileged

Conformité au CIS Docker Benchmark

Le Center for Internet Security (CIS) Docker Benchmark fournit des recommandations détaillées de configuration de sécurité pour les hôtes et les conteneurs Docker. Elles couvrent la configuration du démon, l’hygiène des images, les paramètres d’exécution des conteneurs et les contrôles réseau. Des outils comme Docker Bench for Security automatisent la vérification de conformité par rapport au référentiel CIS et produisent un rapport noté des éléments réussis ou échoués. L’exécution périodique de ce référentiel et son intégration au CI/CD garantissent que les dérives de configuration de sécurité sont détectées rapidement. Les candidats à Security+ doivent savoir que les CIS Benchmarks constituent une référence principale pour le renforcement de la sécurité des OS et des plateformes dans le contexte de l’examen.

# Run Docker Bench for Security
docker run -it --net host --pid host --userns host --cap-add audit_control \
  -v /var/lib:/var/lib -v /var/run/docker.sock:/var/run/docker.sock \
  -v /etc:/etc docker/docker-bench-security

Vérification rapide

Évaluez votre compréhension des notions de CompTIA Security+ (SY0-701) présentées dans cette leçon.

Récapitulatif de la leçon

Dans cette leçon, vous avez appris que les images de base minimales et les utilisateurs non root réduisent la surface d’attaque et le niveau de privilèges des charges de travail conteneurisées, que les outils de protection à l’exécution comme Falco détectent dans les conteneurs des schémas anormaux d’appels système révélateurs d’attaques en cours, et qu’il ne faut jamais utiliser de conteneurs privilégiés ni monter le connecteur Docker dans des conteneurs d’application, car ces configurations permettent l’évasion de conteneur. Nous allons maintenant étudier la sécurité de Kubernetes, notamment RBAC, les politiques réseau et les normes de sécurité des pods.

Questions Fréquemment Posées

La leçon « Sécurité des conteneurs : renforcement des images et protection à l’exécution » est-elle gratuite ?

Oui — le texte complet de « Sécurité des conteneurs : renforcement des images et protection à l’exécution » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Security+ Academy, passe à CoddyKit PRO. Le cours Security+ Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Sécurité des conteneurs : renforcement des images et protection à l’exécution » ?

Renforcez les images Docker en supprimant les paquets inutiles, en exécutant les conteneurs sans privilèges root et en utilisant des outils de sécurité à l’exécution (Falco, Sysdig) pour détecter les… Tu pratiques Security+ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Security+ Academy ?

Aucune expérience préalable n'est requise. Security+ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Sécurité des conteneurs : renforcement des images et protection à l’exécution » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Security+ Academy ?

Oui. Chaque leçon Security+ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Sécurité des conteneurs : renforcement des images et protection à l’exécution
  2. Sécurité Kubernetes : RBAC, politiques réseau et sécurité des pods
  3. Sécurité des environnements sans serveur et des fonctions
  4. Analyse de sécurité de l’infrastructure sous forme de code
← Retour à Security+ Academy