Aller au contenu principal

Copa Correction des CVEs d'Images Docker, Directly patch container image vulnerabilities

Introduction La sécurité des conteneurs Docker est cruciale pour protéger les applications déployées. Les vulnérabilités, souvent référencées par des Common Vulnerabilities and Exposures (CVEs),…

coolibra08 juil. 20261110 vues

 

Introduction

La sécurité des conteneurs Docker est cruciale pour protéger les applications déployées. Les vulnérabilités, souvent référencées par des Common Vulnerabilities and Exposures (CVEs), peuvent compromettre la sécurité de vos systèmes. Le projet Copacetic est un outil qui aide à identifier et corriger ces vulnérabilités dans les images Docker. Cet article présente comment utiliser copa pour corriger les CVEs, avec des exemples pratiques.

 

Qu'est-ce que COPA ?

copa est un outil CLI sur buildkit qui permet de corriger directement les images de conteneurs en fonction des résultats de l'analyse des vulnérabilités. On peut utiliser  Trivy comme outil d'analyse.

Avantages:

  • Permettre le patch d'images docker thirdparties et vos propres images, pour respecter les bonnes pratiques  DevSecOps.
  • Pas besoin de rebuid d'image pour faire le patch
  • Reduire le délai d'execution
  • Reduit la complexité de correction

Installation

Copa a besoin de docker pour manager les images et trivy pour les scanner.

sudo apt update
sudo apt upgrade -y
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update

 # List the available versions:
apt-cache madison docker-ce | awk '{ print $3 }'

VERSION_STRING=5:27.1.2-1~ubuntu.22.04~jammy
sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin

sudo groupadd docker

sudo usermod -aG docker $USER

exit

connect to vm

docker --version

docker ps

 

    • Activer  containerd-snapshotter: Ajouter ce contenu dans vim /etc/docker/daemon.json
# vim /etc/docker/daemon.json

{
  "features": {
    "containerd-snapshotter": true
  }
}

 

    • Rdemarrer le service docker
sudo systemctl restart docker

 

Trivy est un outil d'analyse de vulnérabilité (cve) des images docker.

sudo apt-get install wget apt-transport-https gnupg
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install trivy

trivy --version

 

cd /tmp/

wget https://github.com/project-copacetic/copacetic/releases/download/v0.7.0/copa_0.7.0_linux_amd64.tar.gz
tar -xzvf copa_0.7.0_linux_amd64.tar.gz

sudo mv copa /usr/local/bin/

copa --version

 

Utilisation de copa pour pacth d'image docker

 

  • pull l'image docker nginx:stable-alpine3.19-perl depuis docker hub
docker pull nginx:stable-alpine3.19-perl

 

 

  • Analysez l'image du conteneur pour vérifier les vulnérabilités du système d'exploitation pouvant être corrigées

export IMAGE=nginx:stable-alpine3.19-perl

export TRIVY_DB_REPOSITORY=public.ecr.aws/aquasecurity/trivy-db
export TRIVY_JAVA_DB_REPOSITORY=public.ecr.aws/aquasecurity/trivy-java-db
export TRIVY_CHECKS_BUNDLE_REPOSITORY=public.ecr.aws/aquasecurity/trivy-checks

trivy image  --ignore-unfixed $IMAGE

 

 

  • Corrigez l'image fournie avec Copa

 

copa patch -i $IMAGE

 

 

  • Analysez à nouveau l’image corrigée et vérifiez que les vulnérabilités ont été corrigées
trivy image --ignore-unfixed $IMAGE-patched

 

 

Integration gitlab-ci

  • Créer une vm et installer docker
  • Activer  containerd-snapshotter sur la vm: Ajouter ce contenu dans vim /etc/docker/daemon.json
# vim /etc/docker/daemon.json

{
  "features": {
    "containerd-snapshotter": true
  }
}

 

  • Redemarrer le service docker
sudo systemctl restart docker

 

  • Créer un runner docker
    • La config du runner: config.toml
[[runners]]
  name = "local-home-runner"
  url = "https://gitlab.com/"
  token = "glrt-t2_w2MR-" # token à generer sur gitlab
  executor = "docker"
  [runners.custom_build_dir]
  [runners.docker]
    tls_verify = false
    image = "docker:27.1.1-dind"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]
    shm_size = 0
  [runners.cache]
    Type = "shell"
    Path = "/cache/gitlab-runner"
    Shared = true

 

    • Docker compose file pour lancer le runner: docker-compose.yml
services:
  gitlab-runner:
    image: gitlab/gitlab-runner:alpine3.19
    restart: always
    volumes:
      - ./config:/etc/gitlab-runner  # le repertoir config contient le fichier config.toml
      - /var/run/docker.sock:/var/run/docker.sock
    deploy:
      mode: replicated
      replicas: 1

 

    • Lancer le runner
docker compose up -d

 

  • Le pipeline de test: le fichier .gitlab-ci.yml
services:
  - docker:dind

stages:
  - copa-patch

patch_vulnerable_image:
  stage: copa-patch
  image: docker:latest
  tags:
    - copa-runner

  script:
    - apk add --no-cache curl jq wget tar
    - wget https://github.com/project-copacetic/copacetic/releases/download/v0.9.0/copa_0.9.0_linux_amd64.tar.gz
    - tar -xzvf copa_0.9.0_linux_amd64.tar.gz
    - mv copa /usr/local/bin/
    - copa --version
    - docker pull library/nginx:1.21.6
    - docker tag library/nginx:1.21.6 registry.techledger.io/nginx:1.0
    - docker ps
    - docker images
    - TIMESTAMP=$(date +'%Y%m%d-%H%M')
    - copa patch -i registry.techledger.io/nginx:1.0 --ignore-errors -t 1.0-${TIMESTAMP}-patched
    - docker images

 

 

 


N'hésitez pas à laisser des commentaires si vous avez des questions ou des suggestions !


 

Commentaires

Connectez-vous pour rejoindre la discussion.
  • coolibra02 nov. 2024

    N'hésitez pas à laisser des commentaires si vous avez des questions ou des suggestions !