C’est un fait les conteneurs sont de plus en plus utilisés, car ils facilitent
la création et déploiements des applications. Mais attention, la sécurité des
conteneurs est très importante, parce que vous pouvez rapidement créer de graves
failles dans votre SI. En effet, par exemple récemment il a été détecté des
conteneurs de la registry docker intégrant un ver de cryptojacking. Même si ces
conteneurs ont été retirés, il est plus sage de soit construire ces images, soit
de les scanner pour en connaître les vulnérabilités.
Il existe toute série de scanner dont voici la liste :
Nous allons nous intéresser à la version package et nous verrons plus tard
comment l’intégrer dans votre CI.
Le plus simple est de lancer la commande sur cette image. Avant, il faut créer
un dossier de cache :
Lors du premier run, trivy va installer en local une base de données de
vulnérabilités dans le répertoire : ~/.cache/trivy
Ensuite, il passe au scan à proprement parlé du contenu de l’image. En fait, il
liste tous les packages installés et recherche dans sa bdd les vulnérabilités de
ceux-ci.
Prenons exemple de l’image alpine:3.9.2
On voit qu’il y en a plusieurs dont une critique.
Faites le test par exemple sur l’image mysql et vous comprendrez pourquoi il
est plus sage de construire ses propres images en n’intégrant que les packages
nécessaires.
Il est possible de demander à trivy de ressortir en erreur sur la présence de
vulnérabilités de type CRITICAL ou HIGH.
Avec comme résultat :
Pratique pour l’intégrer dans votre CI.
Intégration dans Gitlab-CI
Comme vu précédemment, il existe une version sous forme de container qui peut
être intégré à votre CI. J’ai créé un runner dédié à trivy. En effet, j’ai décidé
de mettre le cache de trivy dans un répertoire de ma VM et de le monter sur le
volume /cache.
Dans mon gitlab-ci.yaml j’ai intégré le step suivant en indiquant que le cache
se trouve dans /cache/trivy.
Pour éviter les updates pendant le run du ci, j’ai créé un job cron qui vient
mettre à jour ce cache toutes les 2h.