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),…


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
- coolibra02 nov. 2024
N'hésitez pas à laisser des commentaires si vous avez des questions ou des suggestions !