Blindez votre DevOps : Sécurité de la Chaîne Logicielle

Plongez au cœur des défenses modernes de la chaîne d'approvisionnement logicielle. Maîtrisez les SBOM, SLSA et Notary pour une sécurité CI/CD inébranlable et une confiance totale dans vos déploiements critiques.

Pourquoi la vitesse de déploiement ne suffit plus

Tu as probablement passé tes dernières années à maîtriser les pipelines CI/CD, à orchestrer des conteneurs avec une agilité déconcertante et à réduire tes cycles de déploiement de quelques jours à quelques minutes. C'est un accomplissement formidable. Pourtant, le champ de bataille a changé. La nouvelle frontière n'est plus seulement la vitesse, mais la confiance absolue que nous pouvons accorder au code que nous expédions en production.

Aujourd'hui, les attaques ne visent plus seulement tes serveurs en production ; elles s'infiltrent bien plus tôt, au cœur même de tes processus de développement. Elles corrompent une dépendance, empoisonnent une image de base ou manipulent un artefact de build. C'est pourquoi la sécurisation de la chaîne d'approvisionnement logicielle n'est plus une option, mais une nécessité vitale pour tout projet sérieux.

Le nouveau champ de bataille : votre pipeline de build

Qu'est-ce que la chaîne d'approvisionnement logicielle ?

Imagine une chaîne de montage industrielle. Pour assembler une voiture, tu as besoin de pièces venant de dizaines de fournisseurs : le moteur, les pneus, l'électronique. Ta chaîne d'approvisionnement logicielle, c'est exactement la même chose. Ton code source est la pièce maîtresse, mais il s'appuie sur des librairies open source, des images Docker de base, des compilateurs et des outils de build.

Chacun de ces éléments est un maillon de la chaîne. Si un seul de ces maillons est compromis, c'est l'intégrité de ton application finale qui est en danger. Le problème est que nous avons longtemps fait une confiance aveugle à ces composants externes, en partant du principe qu'ils étaient sûrs. Cette époque est révolue.

Pourquoi est-elle devenue une cible privilégiée ?

Les attaquants sont pragmatiques. Plutôt que de tenter de forcer la porte blindée de ton infrastructure de production, il est bien plus efficace de corrompre une petite dépendance utilisée par des milliers de projets. Une fois cette dépendance infectée et intégrée dans ton build, leur code malveillant se retrouve avec un accès direct à ton système, légitimement déployé par ton propre pipeline.

Cette approche, dite de "l'empoisonnement de la source", est redoutablement efficace car elle contourne de nombreuses défenses traditionnelles. Elle exploite la confiance implicite que nous accordons à notre propre processus de fabrication logicielle. Pour contrer cela, nous avons besoin d'outils qui apportent de la transparence, de la traçabilité et une preuve d'intégrité à chaque étape.

Votre arsenal pour une chaîne logicielle blindée

SBOM : La liste d'ingrédients de votre application

Le premier outil de notre arsenal est le SBOM, ou "Software Bill of Materials". Pense à lui comme la liste des ingrédients et des informations nutritionnelles que tu trouves sur un produit alimentaire. Il s'agit d'un fichier standardisé qui inventorie de manière exhaustive tous les composants qui constituent ton logiciel : chaque librairie, chaque framework, et même les dépendances transitives.

Concrètement, un outil comme Syft peut scanner ton projet ou ton image de conteneur et générer automatiquement ce manifeste. Le format le plus courant est CycloneDX, un standard ouvert qui facilite l'analyse par d'autres outils de sécurité. Voici à quoi ressemble un extrait pour une application simple.

bomFormat: "CycloneDX"
specVersion: "1.4"
serialNumber: "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79"
version: 1
components:
  - type: "library"
    name: "express"
    version: "4.17.1"
    purl: "pkg:npm/express@4.17.1"
  - type: "library"
    name: "lodash"
    version: "4.17.21"
    purl: "pkg:npm/lodash@4.17.21"

Grâce à ce fichier, tu ne navigues plus à l'aveugle. Tu peux instantanément croiser cette liste avec des bases de données de vulnérabilités (comme la NVD) pour savoir si tu utilises un composant avec une faille de sécurité connue. C'est la fondation de toute stratégie de sécurité logicielle moderne.

Avantages du SBOM Points de vigilance
Visibilité complète sur les dépendances La génération doit être intégrée au pipeline
Détection rapide des vulnérabilités (CVEs) Le SBOM doit être stocké et versionné de manière sécurisée
Gestion simplifiée des licences logicielles Ne garantit pas l'intégrité du processus de build lui-même

SLSA : Le framework de contrôle qualité pour votre pipeline

Savoir ce qu'il y a dans ton application (grâce au SBOM) est essentiel, mais ce n'est que la moitié du combat. Comment prouver que l'artefact que tu déploies a bien été produit par ton pipeline de confiance, sans aucune altération ? C'est là qu'intervient le framework SLSA (Supply-chain Levels for Software Artifacts).

SLSA, prononcé "salsa", est un ensemble de standards et de contrôles qui visent à garantir l'intégrité de ta chaîne de production logicielle. Il ne s'agit pas d'un outil unique, mais d'un guide de maturité qui définit plusieurs niveaux de sécurité, de 1 à 4. Plus le niveau est élevé, plus les garanties contre la falsification sont fortes.

Atteindre les différents niveaux de SLSA implique de mettre en place des mesures de plus en plus strictes pour sécuriser ton processus de build.

  • Niveau 1 : Le processus de build est scripté et un SBOM est généré. C'est le point de départ.
  • Niveau 2 : Le build est exécuté dans un service CI/CD hébergé et la provenance des sources est authentifiée.
  • Niveau 3 : La plateforme de build elle-même est sécurisée pour empêcher toute altération, avec des builds hermétiques et éphémères.
  • Niveau 4 : Un processus de revue par deux personnes est obligatoire pour tout changement et le build est reproductible. C'est le niveau le plus exigeant.

En résumé, SLSA ne se contente pas de vérifier les ingrédients, il audite la recette et la cuisine. Il te fournit une "attestation de provenance" qui prouve comment ton binaire a été construit, à partir de quel code source, et par quelle machine.

Notary & Sigstore : Le sceau de confiance numérique

Nous avons la liste des ingrédients (SBOM) et un certificat de qualité du processus (SLSA). Il manque un dernier élément crucial : le sceau. Comment garantir que l'image Docker que tu tires de ta registry est bien celle qui a été validée par ton pipeline, et non une version malveillante injectée par un attaquant ? La réponse est la signature d'artefacts.

Historiquement, des projets comme Notary V2 ont pavé la voie. Aujourd'hui, l'écosystème gravite beaucoup autour de Sigstore, un projet de la Linux Foundation qui simplifie radicalement la signature et la vérification. L'outil principal de Sigstore est cosign. Il permet de signer numériquement n'importe quel artefact, comme une image de conteneur, en utilisant des certificats éphémères liés à une identité OIDC (comme ton compte GitHub ou Google).

Comment ça marche en pratique ?

La signature est stockée directement dans la registry aux côtés de l'image. Au moment du déploiement, ton orchestrateur (comme Kubernetes) peut utiliser une politique de sécurité pour vérifier automatiquement cette signature. Si la signature est absente ou invalide, le déploiement est tout simplement bloqué.

Signer une image devient aussi simple que d'exécuter une commande dans ton pipeline juste après le build. Cette étape garantit l'authenticité et l'intégrité de tes livrables, de la sortie du pipeline jusqu'à leur exécution en production.

# Signature de l'image avec Cosign
cosign sign your-registry/your-app:v1.2.3

La CI/CD fortifiée : Un flux de confiance de bout en bout

Anatomie d'un pipeline sécurisé

Assemblons maintenant toutes ces pièces. Un pipeline CI/CD moderne et sécurisé ne se contente plus de compiler et de déployer. Il devient un véritable flux de confiance, où chaque étape ajoute une couche de vérification et génère des preuves cryptographiques. Le but est de créer un enregistrement immuable de la vie de ton logiciel, de la ligne de code à l'instance en production.

Le flux commence dès la soumission du code, avec des analyses de sécurité statiques (SAST) pour détecter les failles avant même la compilation. Ensuite, le processus de build isolé génère non seulement l'artefact, mais aussi son SBOM. Immédiatement après, cet artefact et ses métadonnées sont signés numériquement. Enfin, avant le déploiement, un "policy controller" vérifie que toutes les attestations requises sont présentes et valides.

Schéma technique illustrant un pipeline CI/CD sécurisé, montrant le flux depuis le commit du développeur jusqu'au déploiement sur Kubernetes, en passant par les étapes de scan, de build, de génération de SBOM et de signature d'artefact.

Les limites et les coûts cachés à anticiper

Implémenter une telle chaîne n'est pas sans défis. Il est crucial d'être conscient des frictions que cela peut introduire. Premièrement, la complexité de l'outillage augmente. Tu dois gérer et maintenir les scanners, les outils de signature, et les contrôleurs de politiques, ce qui représente une charge de travail supplémentaire pour l'équipe DevOps.

Deuxièmement, il y a un impact sur les performances. Chaque nouvelle étape de vérification, de scan et de signature ajoute du temps à l'exécution de ton pipeline. Il faut trouver le bon équilibre pour ne pas ralentir excessivement les cycles de feedback pour les développeurs. Un pipeline qui prend une heure pour une simple modification de CSS sera rapidement contourné.

Enfin, le plus grand défi est culturel. Cela exige que les développeurs, les ops et la sécurité travaillent en étroite collaboration. La sécurité ne peut plus être une réflexion après coup ; elle doit être intégrée dans les pratiques quotidiennes, ce qui demande de la formation, de la patience et une volonté de changer les habitudes.

Au-delà des outils, un état d'esprit

Tu l'auras compris, sécuriser ta chaîne d'approvisionnement logicielle est un voyage, pas une destination. Les outils comme les SBOM, le framework SLSA et la signature avec Sigstore sont des piliers fondamentaux, mais ils ne sont que l'incarnation technique d'un principe plus profond : la "confiance zéro" appliquée à ton propre code.

Ne fais confiance à rien, vérifie tout, systématiquement. Chaque artefact doit pouvoir prouver son origine, son contenu et son intégrité. En adoptant cette mentalité, tu ne te contentes pas de construire des logiciels plus rapidement. Tu construis des logiciels sur lesquels tes utilisateurs et ton entreprise peuvent véritablement compter.

Espace commentaire

Écrire un commentaire

Rejoignez la discussion

Vous devez être connecté pour poster un message.

25 commentaires

baron-alexandre
Auteur Rédacteur
Avatar de baron-alexandre
baron-alexandre
Auteur Rédacteur

On continue d'itérer. La stack Syft + Cosign + Kyverno est devenue notre standard par défaut.

Si vous avez d'autres galères sur l'intégration en CI, balancez vos logs, on regarde ça.

01/04/2026 à 18:06
baron-alexandre
Auteur Rédacteur
Avatar de baron-alexandre
baron-alexandre
Auteur Rédacteur

Si le pipeline est bien fait, ils ne peuvent juste pas pousser en prod sans la signature.

C'est une question de permissions : le compte de service de build doit être le seul à pouvoir signer. Le développeur n'a pas accès à la clé.

01/04/2026 à 10:43
lvoisin
Membre
Avatar de lvoisin
lvoisin
Membre

Comment tu fais pour que tes devs ne contournent pas les contrôles dans le pipeline ?

01/04/2026 à 05:19
baron-alexandre
Auteur Rédacteur
Avatar de baron-alexandre
baron-alexandre
Auteur Rédacteur

Pour moi, oui. CycloneDX est plus orienté sécurité et SBOM dynamique.

SPDX est plus verbeux et complexe, souvent utilisé pour la compliance légale des licences.

31/03/2026 à 22:56
theophile47
Membre
Avatar de theophile47
theophile47
Membre

Le format CycloneDX est bien mieux supporté que SPDX dans l'écosystème cloud native, non ?

31/03/2026 à 18:22
baron-alexandre
Auteur Rédacteur
Avatar de baron-alexandre
baron-alexandre
Auteur Rédacteur

C'est le but. Montrer que le processus est industrialisé.

Le niveau 2 est souvent le sweet spot pour la plupart des boîtes. Ne cherche pas le niveau 4 si t'as pas les moyens humains derrière.

31/03/2026 à 11:04

On a testé SLSA niveau 2. C'est déjà un bon début, ça calme pas mal les auditeurs.

31/03/2026 à 06:52
baron-alexandre
Auteur Rédacteur
Avatar de baron-alexandre
baron-alexandre
Auteur Rédacteur

Utilise le Rekor de Sigstore pour l'audit log des signatures. Ça permet de prouver qu'une signature était valide au moment du build, même si le certificat est expiré depuis.

31/03/2026 à 02:24

Vous gérez comment la persistence des signatures dans le temps ?

Si le certificat expire, l'image n'est plus déployable ?

30/03/2026 à 19:00
baron-alexandre
Auteur Rédacteur
Avatar de baron-alexandre
baron-alexandre
Auteur Rédacteur

Carrément. Toujours monter /tmp en emptyDir avec medium: Memory et des contraintes de taille.

La sécurité c'est une somme de détails, à ne jamais négliger.

30/03/2026 à 13:46
omonnier
Membre
Avatar de omonnier
omonnier
Membre

Super article. Par contre, attention au /tmp dans les conteneurs, c'est souvent un vecteur d'attaque si mal configuré.

30/03/2026 à 09:11
baron-alexandre
Auteur Rédacteur
Avatar de baron-alexandre
baron-alexandre
Auteur Rédacteur

Le SBOM ne stoppe pas l'attaque, il donne la visibilité.

Quand une CVE sort, tu sais en 2 secondes si tu es impacté sur tout ton parc. Sans ça, tu passes 3 jours à chercher où tu as utilisé la lib vulnérable.

30/03/2026 à 04:16
thibault38
Membre Actif
Avatar de thibault38
thibault38
Membre Actif

Est-ce que le SBOM aide vraiment contre les attaques zero-day ?

J'ai un doute sur la réactivité.

29/03/2026 à 21:25
baron-alexandre
Auteur Rédacteur
Avatar de baron-alexandre
baron-alexandre
Auteur Rédacteur

Les deux font le job. Kyverno est plus simple à prendre en main avec ses Policy en YAML.

Voici un exemple de règle pour bloquer les images non signées :

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: check-image-signature
spec:
  validationFailureAction: Enforce
  rules:
    - name: verify-signature
      match:
        resources:
          kinds:
            - Pod
      verifyImages:
        - imageReferences: ["*"]
          attestors:
            - entries:
                - keys: 
                    publicKeys: "..."
29/03/2026 à 17:11
theophile99
Membre
Avatar de theophile99
theophile99
Membre

Tu conseilles quoi comme outil pour vérifier les signatures dans Kubernetes ?

Gatekeeper ou Kyverno ?

29/03/2026 à 11:00
baron-alexandre
Auteur Rédacteur
Avatar de baron-alexandre
baron-alexandre
Auteur Rédacteur

La performance vs sécurité, c'est le débat éternel.

Optimise tes builds avec du cache distribué pour compenser le temps de scan. Si tu ne sécurises pas maintenant, tu paieras le prix fort le jour où tu te feras hacker par une dépendance empoisonnée.

29/03/2026 à 03:05
besson-joseph
Membre Actif Secouriste
Avatar de besson-joseph
besson-joseph
Membre Actif Secouriste

Franchement, le Zero Trust appliqué au build c'est bien beau, mais en pratique ça rajoute énormément de latence.

Mes devs vont gueuler si le pipeline passe de 5 à 15 minutes.

28/03/2026 à 21:17
baron-alexandre
Auteur Rédacteur
Avatar de baron-alexandre
baron-alexandre
Auteur Rédacteur

Oui, Syft scanne les headers et les symboles. C'est robuste.

Par contre, vérifie toujours la sortie avec un scanner de vulnérabilités derrière. Le SBOM seul ne te dit pas si la lib est vérolée.

28/03/2026 à 16:28
noel25
Membre Actif
Avatar de noel25
noel25
Membre Actif

Merci pour le rappel sur Syft. On l'utilise déjà, mais est-ce que ça détecte bien les dépendances compilées statiquement dans un binaire Go ?

28/03/2026 à 11:37
baron-alexandre
Auteur Rédacteur
Avatar de baron-alexandre
baron-alexandre
Auteur Rédacteur

C'est là que le mode Keyless de Sigstore change la donne.

Tu n'as plus de clé statique à gérer. Tu utilises des identités OIDC éphémères. Regarde cette commande pour signer sans gérer de fichier de clé :

cosign sign --yes --identity-token $OIDC_TOKEN my-image:latest
28/03/2026 à 04:49

T'as parlé de cosign, mais comment on gère la rotation des clés dans une infra distribuée ?

Si la clé privée fuit, tout le pipeline est compromis.

27/03/2026 à 21:02
baron-alexandre
Auteur Rédacteur
Avatar de baron-alexandre
baron-alexandre
Auteur Rédacteur

SLSA 4 c'est pour les systèmes critiques, pas pour ton blog perso.

Si t'es en finance ou santé, la revue n'est pas une option, c'est une obligation légale. Faut arrêter de voir ça comme une friction, mais comme une assurance vie.

27/03/2026 à 17:01

Le niveau SLSA 4 semble être un enfer logistique.

Qui fait vraiment de la revue à deux personnes pour chaque changement de commit en CI ?

27/03/2026 à 11:59
baron-alexandre
Auteur Rédacteur
Avatar de baron-alexandre
baron-alexandre
Auteur Rédacteur

C'est un problème classique. Le SBOM n'est pas censé être lu par un humain, c'est pour l'outillage.

Utilise des outils pour filtrer ou compresser tes manifestes cyclonedx. L'important c'est la traçabilité, pas la légèreté du fichier.

27/03/2026 à 06:31
etienne43
Membre
Avatar de etienne43
etienne43
Membre

Article intéressant, mais on fait comment quand les dépendances transitives explosent le SBOM ?

Générer un bom.json de 50 Mo par build, ça devient vite ingérable pour le stockage.

27/03/2026 à 00:58

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire