Sécurisez vos CI/CD avec Trivy

thumbernail Security

Sécurisez vos CI/CD avec Trivy

Des études récentes révèlent que 75 % des conteneurs contiennent des vulnérabilités critiques ou élevées, et 85 % des images en production présentent au moins une vulnérabilité non corrigée. Source

Un pipeline CI/CD, c'est un ensemble d'outils qui automatisent le développement, les tests et le déploiement des applications. Ça permet de rendre tout ce processus plus rapide et plus fiable. Cependant, pour que cela soit véritablement efficace, il est nécessaire de considérer la sécurité dès le début. C'est ce qu'on appelle le "Shift Left Security".

C'est à ce moment précis que Trivy prend le relais ! Trivy est un outil de détection des vulnérabilités open source qui inspecte les conteneurs, le code et même les dépendances. Il est rapide, intuitif, et s'adapte à beaucoup d'outils DevOps connus. Trivy vous offre la possibilité de détecter des vulnérabilités dès leur apparition, améliorant ainsi considérablement la sécurité de vos applications.

Pourquoi utiliser Trivy dans une CI/CD ?

Je vais essayer de vous convaincre :

Identification anticipée des vulnérabilités : Trivy repère les failles de sécurité basé sur les CVE et les mauvaises configurations, dès les premières étapes du développement (selon votre CI). Les problèmes n'ont plus de retard, ils arrivent dès qu'on commence à respirer !

Prise en charge multi-cibles : Que vous utilisiez Docker, Kubernetes ou que vous développiez du code applicatif, Trivy répond à toutes vos exigences. Trivy peut aussi bien scanner votre repo pour savoir si un mot de passe y est en clair, comme scanner une image docker et y trouver des éventuelles vulnérabilités, ou encore scanner votre cluster. Une solution unique pour tous vos projets… et pas besoin de consulter 15 experts qui ne sont jamais d’accord !

Intégration transparente : Trivy se couple aisément avec vos outils de prédilection tels que GitHub Actions, GitLab CI, Jenkins, et bien d'autres. Pas besoin de changer vos habitudes, Trivy s'ajoute en douceur à votre workflow, comme un ninja discret… mais efficace !

Alors convaincu ? Aller on continue …

Tester rapidement Trivy avec Docker

Étape 1 : Télécharger Trivy (Docker)

Pour commencer, vous pouvez utiliser Docker pour télécharger rapidement Trivy. Ouvrez votre terminal et exécutez la commande suivante :

docker pull aquasec/trivy:0.18.3

Cette commande télécharge l'image Docker de Trivy version 0.18.3. Une fois le téléchargement terminé, vous êtes prêt à scanner !

Étape 2 : Scanner une image Docker

Pour scanner une image Docker, utilisez la commande suivante. Remplacez \<nom-image> par le nom de l'image que vous souhaitez analyser. Par exemple, pour scanner une image nommée nginx:latest :

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:0.18.3 image nginx:latest

Cette commande lance Trivy dans un conteneur Docker et scanne l'image nginx:latest pour détecter les vulnérabilités.

Tester Trivy en local

Installer Trivy

Il suffit de suivre la documentation officielle : https://trivy.dev/v0.18.3/installation/

Mais en résumé, sous linux un simple apt-get install trivy devrait suffire.

Scanner une image docker

trivy image nginx:latest

Tout simplement :)

Résultat avec un template

trivy image --format template --template "@contrib/html.tpl" -o report.html nginx:latest

Ici la commande va sortir le résultat sous forme de fichier html. Pour cela, il faut au préalable avoir le template sur sa machine grâce à la commande wget https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/html.tpl -P contrib/. Et voici le résultat :

Screenshot

Intégrer Trivy dans une CI/CD

Dans cet exemple, nous allons utiliser GitLab CI pour illustrer l'intégration d'une étape de scan de sécurité avec Trivy :

stages:
  - test
  - build
  - deploy

trivy-scan:
  stage: test
  image:
    name: docker.io/aquasec/trivy:latest
    entrypoint: [""]
  script:
    - trivy image --clear-cache
    - trivy image --download-db-only
    - trivy image --severity HIGH,CRITICAL nginx:latest

build:
  image: docker:latest
  stage: build
  script:
    - echo "Building the project..."
    - docker build -t nginx:latest .

deploy:
  image: docker:latest
  stage: deploy
  script:
    - echo "Deploying the project..."
    - docker run -d --name my-app nginx:latest

Ce fichier .gitlab-ci.yml standard inclut un stage test, avec un job trivy-scan. Celui-ci utilise l'image Docker de Trivy pour analyser les vulnérabilités de l'image nginx:latest.

  • trivy image --clear-cache :
    • Efface le cache local de Trivy, ce qui garantit l'utilisation des dernières bases de données de vulnérabilités.
  • trivy image --download-db-only:
    • Télécharge uniquement la base de données des vulnérabilités sans effectuer de scan, pour s'assurer qu'elle est bien à jour.
  • trivy image --severity HIGH,CRITICAL nginx:latest :
    • Analyse l’image nginx:latest.
    • Ne signale que les vulnérabilités de sévérité HIGH et CRITICAL, pour se concentrer sur les plus critiques.

Note

Depuis la version 15.0 de GitLab CI, des composants officiels sont mis à disposition des développeurs. Parmi eux, on trouve le composant Container Scanning, qui permet d’analyser automatiquement les images Docker à la recherche de vulnérabilités.

Avant la version 15.0, cette fonctionnalité était exclusivement réservée aux utilisateurs de GitLab Ultimate. Désormais, elle est disponible gratuitement pour toutes les éditions de GitLab, offrant ainsi un accès élargi aux outils de sécurité des conteneurs.

Ce composant s’intègre facilement dans un pipeline GitLab CI/CD et repose sur des outils de sécurité comme Trivy ou Clair. Il offre une solution native pour renforcer la sécurité des conteneurs avant leur déploiement.

Bonus

  • --severity : Filtre les vulnérabilités par niveau de gravité. Par exemple, --severity CRITICAL,HIGH pour ne voir que les vulnérabilités critiques et élevées.
  • --ignore-unfixed : Ignore les vulnérabilités qui n'ont pas de correctif disponible. Utile pour se concentrer sur les problèmes que vous pouvez réellement résoudre.
  • --exit-code : Définit le code de sortie en fonction de la gravité des vulnérabilités trouvées. Par exemple, --exit-code 1 pour faire échouer le pipeline CI/CD si des vulnérabilités critiques sont détectées.
  • --format : Spécifie le format de sortie du rapport. Options incluent table, json, sarif, etc. Par exemple, --format json pour obtenir un rapport au format JSON.
  • --ignorefile : Spécifie un fichier contenant des vulnérabilités à ignorer. Par exemple, --ignorefile .trivyignore pour utiliser un fichier .trivyignore à la racine de votre projet.
  • Trivy a aussi sa propre extention Vscode, ça peut-être super utile en local !

Les bonnes pratiques

La règle numéro 1 : Scannez tôt et souvent ! Ajoutez Trivy dans votre pipeline CI/CD et faites un scan à chaque commit. Comme ça, vous repérez les vulnérabilités avant qu’elles ne fassent trop de dégâts. Votre code reste sécurisé et vous évitez les mauvaises surprises.

Ensuite, l’automatisation des corrections, c’est toujours une bonne idée. En automatisant les mises à jour et les corrections des dépendances vulnérables, vous réduisez la charge de travail manuelle et vous assurez que votre code est toujours au top sans devoir y penser à chaque instant.

Les pièges courants

Mais attention, il y a quelques pièges à éviter. Les faux positifs, par exemple, peuvent surgir comme des fantômes. Ne perdez pas de temps à les poursuivre ! Vérifiez chaque alerte pour ne pas partir dans une chasse aux chimères. Un bon processus pour trier les alertes est essentiel pour garder votre esprit clair.

Les performances, ça peut aussi devenir un casse-tête. Les scans de sécurité peuvent être gourmands en ressources. Mais pas de panique ! Avec des techniques comme le cache et les scans incrémentaux, vous pouvez accélérer tout ça et éviter que votre machine n'implose sous la pression.

Enfin, n’oubliez pas que Trivy, aussi puissant soit-il, ne doit pas être votre seul bouclier. Pour une sécurité à toute épreuve, n’hésitez pas à combiner plusieurs outils et pratiques. La défense multicouche, c’est la clé pour protéger vos applications des vilaines attaques !

Voilà, vous êtes prêt à déployer Trivy sans crainte et à garder un oeil sur les pièges !

Découvrez les technologies d'alter way