1. Livres & vidéos
  2. Le DevOps en pratique avec GitLab
  3. Sécuriser son code source : le volet DevSecOps
Extrait - Le DevOps en pratique avec GitLab Gestion de projets et pipelines CI/CD
Extraits du livre
Le DevOps en pratique avec GitLab Gestion de projets et pipelines CI/CD
2 avis
Revenir à la page d'achat du livre

Sécuriser son code source : le volet DevSecOps

Introduction

La sécurité est un élément clé du développement logiciel et GitLab facilite l’intégration de scans de sécurité directement dans les pipelines CI/CD. L’ajout de ces tests permet de détecter les vulnérabilités de manière automatisée, sans autre impact qu’une légère augmentation du temps d’exécution du pipeline.

Ce chapitre explore le volet DevSecOps de GitLab dont nous avons déjà parlé dans le chapitre Comprendre le cycle de développement logiciel de cet ouvrage. Il présente les sept principaux types de tests disponibles : l’analyse statique du code (Static Application Security Testing, SAST), la détection de secrets, les tests dynamiques (Dynamic Application Security Testing, DAST), l’analyse des dépendances, la sécurité des conteneurs, la conformité des licences et l’analyse des fichiers de configuration issus de l’IaC.

Nous verrons comment activer et configurer ces analyseurs pour s’adapter aux besoins spécifiques de vos projets. Nous aborderons également trois fonctionnalités essentielles qui simplifient leur utilisation : la lecture des rapports de scan, le suivi des vulnérabilités et l’intégration de scanners tiers.

À l’issue...

Le fonctionnement des analyseurs de sécurité

Lors de la configuration des analyseurs de sécurité, il est important de savoir que la plupart d’entre eux offrent de nombreuses options que nous ne pourrons pas couvrir entièrement dans ce chapitre. Nous allons donc nous concentrer sur leur activation de base, en présentant quelques paramètres essentiels à leur fonctionnement.

La plupart des scanners sont réservés à l’abonnement GitLab Ultimate, mais certains d’entre eux sont accessibles dans les éditions Premium ou « community ». En date de rédaction de cet ouvrage, les scans de type SAST, la détection des secrets, l’analyse des conteneurs et celle de l’IaC sont disponibles pour tous les types de licences, bien que certaines fonctionnalités avancées restent limitées.

L’illustration suivante montre la différence entre les menus Sécurisation des abonnements community et Ultimate. Bien que des onglets existent pour Capacités de sécurité et Événements d’audit dans la version gratuite, si vous les ouvrez, vous verrez que GitLab vous invite à mettre à niveau votre forfait pour les activer…

images/10EI01.png

Dans ce chapitre, nous avons activé notre essai gratuit de GitLab Ultimate de 60 jours pour faire une présentation plus complète des outils de sécurité offerts par la plateforme. Nous tenterons le plus possible de donner des exemples qui s’appuient sur la version gratuite de GitLab.

1. Le mode d’exécution...

L’analyse de type SAST

Le SAST examine le code source d’un projet sans l’exécuter. Cette approche, souvent appelée white box testing, permet d’identifier les vulnérabilités potentielles en analysant le code source, les fichiers de configuration et la logique interne de l’application sans l’exécuter.

1. Fonctionnement de l’analyseur

Contrairement aux tests dynamiques qui évaluent le comportement d’une application en cours d’exécution, le SAST détecte des erreurs pouvant entraîner des failles de sécurité très tôt dans le processus de développement.

Ce type de scanner repère notamment les mauvaises pratiques de programmation, les anti-patterns et les code smells qui sont des constructions potentiellement risquées ou non sécurisées.

Un anti-pattern est une solution courante à un problème de conception qui semble correcte, mais qui entraîne des conséquences négatives à long terme, comme une complexité excessive ou une mauvaise maintenabilité.

Le code smell est un indicateur de problèmes potentiels dans le code source, comme des fonctions trop longues ou un couplage excessif, qui peuvent rendre le code plus difficile à comprendre et à modifier.

Par exemple, en Python, définir un répertoire temporaire via temp_dir = " /tmp" peut sembler anodin, mais il est préférable d’utiliser le module intégré « tempfile » pour garantir la création sécurisée de fichiers temporaires et leur suppression automatique après usage afin de réduire les risques de fuite de données sensibles. Le SAST est conçu pour repérer ce type d’erreurs avant qu’elles ne deviennent des failles exploitables.

GitLab utilise différents analyseurs SAST adaptés aux langages de programmation...

La détection de secrets

La détection de secrets permet d’identifier des informations sensibles qui ne devraient pas être présentes dans un dépôt Git. Ce scanner recherche des éléments tels que des clés API, des jetons d’accès et des identifiants stockés accidentellement dans le code source.

1. Fonctionnement de l’analyseur

Contrairement au SAST qui se concentre sur les failles de sécurité dans la logique du code, la détection de secrets vise à prévenir l’exposition involontaire de données confidentielles.

Ce scanner repose sur des expressions régulières (regex) pour identifier les secrets parmi plus de 50 types connus, tels que :

  • les jetons d’accès personnel GitLab ;

  • les clés SSH privées ;

  • les clés API Google Cloud (GCP) ;

  • les jetons d’authentification Kubernetes (Kubeconfig) ;

  • les identifiants (service principals) AWS ou Azure.

Ces éléments sont souvent utilisés dans des scripts ou des fichiers de configuration et ils ne devraient jamais être stockés en clair dans un dépôt Git.

L’un des avantages de cette approche est qu’elle est indépendante du langage et du type de fichier. Que le secret soit contenu dans un fichier Python, un fichier JSON, un README ou un fichier...

L’analyse de type DAST

Le DAST évalue la sécurité des applications web en testant leurs URL ou points de terminaison (endpoints) API.

1. Fonctionnement de l’analyseur

Le DAST est aussi appelé black box testing, car il teste l’application en cours d’exécution sans connaître son code interne. Il simule des attaques externes pour identifier des failles exploitables, comme les injections SQL ou les failles XSS.

Une injection SQL est une faille de sécurité qui permet à un attaquant d’injecter des requêtes malveillantes dans une base de données via un champ de saisie non sécurisé, ce qui peut entraîner le vol, la modification ou la suppression de données sensibles.

Une faille XSS permet à un acteur malintentionné d’injecter du code JavaScript malveillant dans une page web consultée par d’autres utilisateurs. Ce type d’attaque peut servir à voler des cookies, détourner des sessions ou manipuler l’affichage du site.

Lorsqu’il est configuré pour analyser un site web, le DAST explore chaque page en suivant les liens et les interactions détectés, tout en vérifiant la présence de vulnérabilités. Voici quelques problèmes qu’il peut détecter :

  • la transmission d’informations confidentielles via des paramètres d’URL ;...

L’analyse des dépendances

L’analyse des dépendances examine les bibliothèques et frameworks utilisés dans un projet afin de détecter des vulnérabilités connues. Cet outil est disponible seulement pour l’abonnement GitLab Ultimate.

1. Fonctionnement de l’analyseur

Ce type de scanner analyse les fichiers de configuration des gestionnaires de paquets comme Gemfile.lock pour Ruby, requirements.txt pour Python ou pom.xml  pour Java. Il identifie aussi bien les dépendances directes que transitives, ce qui permet de signaler des failles dans des bibliothèques utilisées indirectement par votre projet.

Une dépendance transitive est une bibliothèque dont dépend une autre bibliothèque utilisée dans un projet, mais qui n’est pas directement incluse par le développeur. GitLab analyse ce type de dépendances même si elles ne sont pas référencées directement dans le code.

L’outil d’analyse des dépendances consulte une base de données de vulnérabilités connues pour alerter sur les versions problématiques. Contrairement au SAST, il n’analyse pas le code des dépendances, mais vérifie simplement si des failles ont déjà été signalées pour une version donnée.

Une fonctionnalité intéressante...

L’analyse des conteneurs

L’analyse des conteneurs permet de détecter des vulnérabilités dans les images Docker et les distributions Linux sous-jacentes.

1. Fonctionnement de l’analyseur

Cet outil fonctionne de la même manière que l’analyse des dépendances, mais il se concentre sur les packages système utilisés dans les images Docker.

Chaque image est construite à partir d’une distribution Linux de base (Ubuntu, Debian, Alpine, etc.) qui contient des paquets préinstallés. Ceux-ci sont régulièrement mis à jour pour corriger des failles de sécurité. L’analyse des conteneurs vérifie donc si votre image repose sur une version obsolète ou vulnérable d’un package système.

GitLab propose également une option permettant d’analyser les bibliothèques et les dépendances installées dans une image Docker, y compris celles ajoutées via un gestionnaire de paquets spécifique au langage (par exemple, avec pip install Flask pour installer Flask en Python). Cependant, comme cette fonctionnalité peut générer des doublons avec l’analyse des dépendances, elle est désactivée par défaut.

L’analyse des conteneurs cible toutes les images Docker stockées dans le registre de conteneurs de votre projet...

L’analyse de l’Infrastructure as Code

Comme nous l’avons déjà mentionné précédemment, l’IaC est une approche qui consiste à gérer et provisionner des composants d’infrastructure informatique de manière programmatique plutôt que par des configurations manuelles. Des outils comme Terraform, OpenTofu, Ansible, Azure Resource Manager (ARM) ou AWS CloudFormation permettent d’automatiser le déploiement et la gestion d’environnements.

Cependant, cette flexibilité introduit des risques de sécurité. Une mauvaise configuration peut exposer des données sensibles, ouvrir des accès non sécurisés ou rendre un composant ou un environnement vulnérables. C’est pourquoi GitLab propose un scanner IaC qui analyse les fichiers de configuration pour détecter les mauvaises pratiques et les failles de sécurité avant d’effectuer des déploiements.

1. Fonctionnement de l’analyseur

Le scanner IaC de GitLab agit comme un SAST, mais il est spécifiquement conçu pour analyser les fichiers de configuration d’infrastructure. Il détecte les failles de sécurité connues, notamment :

  • utilisation de protocoles non sécurisés (par exemple : HTTP au lieu de HTTPS pour un endpoint sensible) ;

  • manque de chiffrement des données...

L’analyse de conformité des licences

GitLab permet d’analyser automatiquement les licences logicielles des dépendances d’un projet pour s’assurer de leur compatibilité avec la licence du logiciel développé.

Les bibliothèques (libraries) open source sont publiées sous différentes licences logicielles qui définissent les conditions d’utilisation, de modification et de distribution. Il est donc important de s’assurer que les licences des dépendances de votre projet sont compatibles avec celle sous laquelle vous publiez votre propre logiciel. L’utilisation de bibliothèques sous une licence logicielle incompatible peut poser des problèmes juridiques ou commerciaux qui nécessitent le remplacement de ces dépendances.

Certaines licences sont permissives, comme les licences MIT (Massachusetts Institute of Technology) ou BSD (Berkeley Software Distribution) qui autorisent une utilisation et une redistribution sans restriction majeure. D’autres sont plus limitatives, comme GPL (General Public License) ou AGPL (Affero General Public License), car elles obligent tout projet utilisant les bibliothèques d’un produit qu’elles protègent à adopter la même licence logicielle. D’autres encore imposent des restrictions plus spécifiques comme des limitations pour certains pays.

1. Fonctionnement de l’analyseur

La fonctionnalité Conformité des licences (License Compliance) de GitLab est disponible seulement avec l’abonnement Ultimate. Elle permet d’analyser automatiquement les licences des bibliothèques utilisées...

Les autres types d’analyseurs de sécurité

Jusqu’à présent, nous avons travaillé avec les analyseurs les plus populaires de GitLab, mais il y en a d’autres que nous proposons de présenter brièvement. N’hésitez pas à en faire l’essai s’ils sont pertinents pour vos projets !

1. Test à données aléatoires guidées par couverture de code

Les « tests à données aléatoires guidés par la couverture de code » (Coverage Fuzzing ou Coverage-Guided Fuzz Testing) sont des tests basés sur le fuzzing intelligent. Ils génèrent des données d’entrée aléatoires tout en utilisant la couverture de code comme critère d’optimisation.

Contrairement aux tests fuzzing classiques, cette approche explore plus efficacement les chemins d’exécution du programme afin d’identifier des bugs, des plantages ou des vulnérabilités exploitables. Comme la plupart des analyseurs présentés dans ce chapitre, cette fonctionnalité s’inscrit dans une logique « shift left », car elle permet de tester les applications dès les premières phases du développement.

2. Test de l’API par injection de données aléatoires

Comme son nom l’indique, la fonctionnalité...

L’intégration d’analyseurs de sécurité tiers

Bien que GitLab propose une suite complète de scanners, il peut arriver que vous souhaitiez intégrer vos propres analyseurs de sécurité dans vos pipelines.

Les deux principales conditions pour que vous puissiez exécuter un outil tiers dans un pipeline sont qu’il soit disponible sous forme d’image Docker et qu’il puisse être lancé en ligne de commande.

Exemple simple d’intégration

Un exemple simple d’intégration pourrait ressembler à ceci :

my_sast_scanner: 
  stage: test 
  image: my_sast_scanner-image:latest 
  script: 
    - sast-scanner-cli --scan ./src --output results.json 
  artifacts: 
    reports: 
      sast: my_sast_scanner/scanner-results.json 

Vous pouvez aussi ajouter allow_failure: true pour éviter l’échec du pipeline si des vulnérabilités sont détectées.

Pour que GitLab affiche les résultats d’un analyseur externe dans ses rapports de sécurité, les résultats doivent être formatés en JSON selon un schéma spécifique. 

Comme nous le voyons dans l’exemple précédent, pour générer un rapport avec un analyseur...

Les outils de surveillance des vulnérabilités

L’abonnement Ultimate de GitLab fournit certains outils et rapports de sécurité pour regrouper et présenter les résultats des analyseurs dans l’interface utilisateur. Ces derniers permettent d’identifier et de suivre les vulnérabilités détectées à différentes étapes du développement.

Chaque outil propose une perspective unique sur la sécurité du projet de manière à faciliter le suivi des problèmes détectés selon leur contexte d’apparition. À l’exception des onglets des pipelines qui peuvent être consultés sous le menu Compilation, puis Pipeline, les différents outils de surveillance que nous allons présenter font tous partie du menu Sécurisation d’un projet ou d’un groupe.

1. Tableau de bord de sécurité

Le Tableau de bord de sécurité de GitLab fournit une vue globale des vulnérabilités détectées dans un projet (ou plusieurs, si le tableau est consulté à partir d’un groupe) à travers le temps. Il fournit un historique des vulnérabilités présentes sur la branche par défaut en fonction de certains statuts : critique, haute, moyenne, basse, info, inconnue.

2. Rapport de vulnérabilités...

Conclusion

Dans ce chapitre, nous avons exploré les principales fonctionnalités des scanners de sécurité de GitLab en couvrant l’analyse statique du code source (SAST), les tests dynamiques d’applications (DAST) ainsi que la détection des secrets, des dépendances, de l’IaC et des licences.

Chaque analyseur apporte une protection complémentaire en renforçant la sécurité à différents niveaux dans les projets. L’intégration de ces outils dans un pipeline CI/CD a un impact minimal sur les performances et elle offre une meilleure visibilité sur les vulnérabilités.

À travers notre présentation des différents analyseurs, nous avons également abordé les rapports de sécurité et le suivi des vulnérabilités en montrant comment GitLab centralise ces informations.

Grâce à ces fonctionnalités, les équipes de développement peuvent identifier et corriger les failles de sécurité plus efficacement, sans perturber l’avancement de leurs projets. La maîtrise de ces outils permet d’adopter une approche DevSecOps, laquelle  s’appuie sur le principe « shift left » qui se concrétise par l’ajout d’étapes de sécurisation dans la partie CI des pipelines. Dans le prochain...