2022-10-16 15:06 Temps de lecture : 7 min

Le moyen le plus simple de trouver des vulnérabilités dans les images Docker à l'aide de Snyk

Snyk, une entreprise spécialisée, se consacre à l'analyse des failles de sécurité présentes dans le code, notamment dans les fichiers de configuration des infrastructures, les conteneurs et les paquets applicatifs.

Snyk propose une plateforme cloud, ainsi qu'une gamme diversifiée de produits.

Snyk OpenSource s'intègre à travers l'interface en ligne de commande (CLI) de l'éditeur dans un flux Git. Une fois activé, le logiciel repère les vulnérabilités, les classe selon leur niveau de criticité et corrige automatiquement les erreurs de sécurité connues. Cette fonctionnalité peut être ajoutée au cycle des demandes de fusion pour une application sur le code envoyé aux référentiels.

Snyk Infrastructure as Code, pour sa part, examine et corrige les vulnérabilités dans les fichiers de configuration JSON et YAML de Kubernetes. Un moteur de règles permet ici de paramétrer la sensibilité des détections au sein des dépôts Git, en fonction des critères définis par les administrateurs.

Snyk Container offre la possibilité de tester les images Docker et les registres associés, tant lors de leur création qu'après. L'outil peut être intégré aux CLI, aux SCM, aux outils d'intégration continue (CI), aux registres de conteneurs et à Kubernetes.

Aujourd'hui, nous allons explorer l'utilisation de Snyk Container, qui s'intègre à Docker pour identifier les vulnérabilités.

Exemple de fichier Docker

Pour utiliser Snyk dans la détection de vulnérabilités, une image Docker est indispensable. Prenons comme exemple l'image Docker suivante :

FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
EXPOSE 8000 CMD
[“python”, “app.py”]

La première étape consiste à générer l'image localement à l'aide de la commande suivante :

docker build -t 0xyz0/python-app.

Nous disposons maintenant d'une image prête à être analysée.

Analyse de l'image via le client Docker

L'intégration de Snyk avec Docker simplifie grandement ce processus. Pour lancer l'analyse, il suffit d'exécuter la commande suivante :

docker scan 0***0/python-app

Cela déclenchera l'analyse, qui renverra un résultat plus ou moins détaillé en fonction des vulnérabilités détectées, accompagné d'un récapitulatif final.

L'analyse Docker met en évidence toutes les vulnérabilités présentes dans l'image.

Comme on peut le constater, le résultat ne se limite pas au nombre de vulnérabilités détectées. En parcourant le rapport, on peut également consulter la nature des vulnérabilités, leur niveau de criticité, et des recommandations concernant l'image de base à utiliser.

Il est également possible de vérifier les détails de chaque vulnérabilité dans la base de données des vulnérabilités de Snyk.

Dans mon cas, plusieurs alternatives sont proposées. Je vais donc modifier mon Dockerfile en utilisant la première option :

FROM python:3.7.11-slim

ADD . /code

WORKDIR /code

RUN pip install -r requirements.txt

EXPOSE 8000

CMD ["python", "app.py"]

Après avoir reconstruit et scanné l'image :

docker build -t 0***0/python-app . && docker scan 0***0/python-app

On constate que le résultat affiche moins de vulnérabilités, et précise que l'image de base utilisée est la plus sécurisée dans ce contexte.

L'analyse Docker assure l'utilisation de l'image de base la plus sécurisée.

Un rapport plus détaillé peut être obtenu en ajoutant le fichier Docker à la commande :

docker scan -f Dockerfile 0***0/python-app

Il est même possible d'exclure l'image de base de l'analyse, si l'on souhaite se concentrer sur d'autres aspects :

docker scan -f Dockerfile --exclude-base 0***0/python-app

Ce service peut également être intégré aux référentiels Docker Hub :

Cependant, cette fonctionnalité nécessite un abonnement payant. Il est néanmoins possible d'utiliser le plan gratuit localement, en étant connecté à Docker Hub (avec des limitations de scan), lors du développement ou pour vérifier la sécurité d'une image tierce.

Utilisation de Snyk avec les actions Github

La première étape consiste à créer un référentiel et un dossier à l'intérieur :

.github / worflows /

Pour utiliser Snyk Container dans Github, il faut créer une nouvelle image ou utiliser celle que nous avons créée dans Docker Hub. Un secret nommé SNYK_TOKEN doit être créé, et pour obtenir ce jeton, il faut créer un compte Snyk. Le jeton API est généré rapidement dans les paramètres généraux.

Ce jeton permet de créer un secret sur Github et de l'utiliser dans l'action. Il faut ensuite spécifier le nom du référentiel créé dans Docker Hub, ainsi que le message à envoyer. Les sorties des étapes peuvent être utilisées comme variables dans ce message.

with:
args: 'A new commit has been pushed. Please verify github action:
| worflow $ {{fromJson (steps.repo.outputs.result) .html_url}} / actions
| Exec: $ {{steps.prep.outputs.created}}
| Version: $ {{steps.prep.outputs.version}} '

Pour exécuter l'ensemble du flux de travail, il suffit de pousser sur la branche Master. Github Action détectera le fichier dans .github / workflows /.

Derniers mots 👈

Avec la popularité grandissante des conteneurs, les incidents de sécurité liés à des failles se multiplient, souvent dues à des erreurs de configuration lors du déploiement. Snyk propose un outil efficace et simple pour éviter ces erreurs et détecter les vulnérabilités les plus courantes dans les images Docker.

Auteur
France

Rédacteur tech, guides pratiques et astuces numériques.