stokkete - stock.adobe.com

Chasse aux vulnérabilités : comment scanner des images Docker avec Clair

Les vulnérabilités des conteneurs exposent un environnement informatique à des problèmes de sécurité et à des défaillances en cascade. À l’aide de ce tutoriel, apprenez à utiliser Clair pour rechercher les images de conteneurs Docker compromises.

Les images Docker contiennent du code applicatif, mais aussi un système d’exploitation dit de base et des utilitaires qui assurent le bon fonctionnement de l’application. Même petites, les images de conteneurs Docker présentent une surface d’attaque, ce qui les rend vulnérables. Des scans réguliers peuvent aider à les protéger.

Les outils d’analyse de conteneurs recherchent des vulnérabilités connues dans l’image. Pour ce faire, ils s’appuient en général sur la base de données des vulnérabilités de sécurité Common Vulnerabilities and Exposures (CVE).

Dans ce tutoriel, nous utilisons Clair pour scanner les images Docker. Clair est un outil d’analyse de conteneurs open source proposé par Quay.io, une startup rachetée par Red Hat en 2018. Clair extrait du contenu et détecte des vulnérabilités dans les conteneurs de base officiels suivants : Ubuntu, Debian, RHEL, Suse, Oracle, Alpine, AWS Linux, VMware Photon et Python.

Il existe de nombreux outils de scans de vulnérabilités sur le marché. La plupart effectuent une analyse statique de l’image Docker en comparant les versions des applications Docker avec la liste CVE.

La recherche des vulnérabilités dans les images Docker est une bonne parade contre les attaques lancées sur les applications, mais elle se limite à vérifier le statut de l’image à un instant T. Or les choses évoluent rapidement.

Conditions préalables   

Ce tutoriel consacré à Clair porte essentiellement sur l’analyse d’un conteneur local en guise de démonstration. Dans notre cas, nous utilisons :

  • un hôte Ubuntu 18.04 ;
  • la dernière version de Docker ;
  • Docker Compose, pour définir et exécuter des applications Docker multiconteneurs.

Installez Docker Compose à l’aide de la commande :

 (sudo apt install docker-compose -y)

Ici, le système Clair se compose d'un serveur back-end PostgreSQL, d'un serveur middleware et d'un outil client, dans notre cas, clairctl, un outil de vérification disposant d’une interface en ligne de commande. Tous ces éléments sont utilisés au sein d’un environnement Docker.

Configuration système

Docker Compose permet de mettre en place plusieurs images Docker distinctes simultanément pour pouvoir les contrôler comme une seule unité.

À partir d’une invite SSH sur l’hôte, et en partant de votre répertoire de base, lancez les commandes suivantes dans l’ordre indiqué :

mkdir -p clair/docker-compose-data/clair-config
wget https://raw.githubusercontent.com/jgsqware/clairctl/master/docker-compose.yml --directory-prefix=clair/docker-compose-data/
wget https://raw.github.com/jgsqware/clairctl/master/docker-compose-data/clair-config/config.yml --directory-prefix=clair/clair-config/
cd clair/docker-compose-data

Le fichier de configuration pour le serveur Clair se trouve dans le dossier clair-config. Après avoir exécuté les commandes précédentes et récupéré les informations, lancez la commande suivante :

       docker-compose up

Cette commande met automatiquement en place la base de données PostgreSQL, le serveur middleware Clair et clairctl comme outil d’analyse local en ligne de commande. La première fois, il faut plusieurs minutes au serveur back-end de la base de données pour télécharger toutes les données CVE.

Remarque : Des messages d’erreur critiques signalent l’échec de chargement d’une configuration. Vous pouvez les ignorer, car ils n’ont aucune importance par rapport à l’analyse des conteneurs Docker dans le cadre de ce tutoriel. Les URL sollicitées recherchent un fichier de configuration Clair, mais, pour plus de simplicité et de concision, nous l’avons remplacé. Ces erreurs n’ont aucun impact sur les étapes suivantes de la procédure.

Docker Compose en cours de fonctionnement
Figure 1

Après quelques minutes, tout le système est prêt à analyser les vulnérabilités. Dans un autre shell SSH, vérifiez que tous les conteneurs Docker sont opérationnels.

Analyse d’une image vulnérable

Pour cette étape, nous avons besoin d’une image vulnérable. Plusieurs images volontairement rendues vulnérables, comme Damn Vulnerable Web Application, permettent de tester le fonctionnement d’un outil d’analyse. Utilisez exclusivement l’image fournie pour tester le fonctionnement de Clair ; elle est criblée de bugs à dessein.

Pour soumettre cette image vulnérable à l’analyse, lancez la commande suivante sur le serveur Ubuntu :

	docker pull infoslack/dvwa

Lorsque l’image a été extraite, lancez cette autre commande pour la tester :

	docker-compose exec clairctl clairctl analyze -l infoslack/dvwa

docker-compose exec clairctl indique à l’environnement Docker d’exécuter la commande qui suit sur le conteneur Docker clairctl. Le reste de la commande précise l’image à tester, ici clairctl analyze -l vulnerables/web-dvwa.

Vous pouvez maintenant analyser l’image Docker avec Clair. Créez ensuite un rapport HTML de l’analyse, comme illustré à la figure 2. Les rapports HTML de ce type contiennent les CVE de l’image analysée et une description succincte de chaque vulnérabilité.

Un rapport HTML Clair
Figure 2

Pour créer un rapport, lancez de nouveau la commande clairctl, mais en indiquant l’option report, comme suit :

	docker-compose exec clairctl clairctl report -l infoslack/dvwa

Les rapports sont enregistrés dans le dossier reports de l’hôte Docker, sous docker-compose-data. Si l’instance Clair Docker est sur une machine virtuelle distante, installez Lynx, un navigateur en mode texte, pour lire les rapports sur l’hôte. Cette étape vous évite de devoir copier les fichiers depuis la VM. Lancez la commande :

	sudo apt install lynx -y

Ouvrez le dossier reports et lancez la commande :

	Lynx "html file to view".html

Au besoin, entrez la commande scp pour le copier sur votre bureau. Les administrateurs peuvent également configurer un serveur web comme composant supplémentaire du groupe Docker Compose.

Pour approfondir sur Gestion des vulnérabilités et des correctifs (patchs)