Security
Difficulte: Advanced
20 min de lecture

Supply Chain Security : SBOM, SCA et Hardening CI/CD

Apprenez à sécuriser votre chaîne logicielle de bout en bout : générez des SBOM avec Syft, scannez les dépendances avec Trivy et Grype, durcissez vos pipelines GitHub Actions et GitLab CI, signez vos artefacts avec Cosign et atteignez les niveaux SLSA.

Retour aux tutoriels
Contexte de menace réel
SolarWinds (2020), Codecov (2021), Log4Shell (2021), XZ Utils (2024) : les attaques ciblant la chaîne d'approvisionnement logicielle sont devenues le vecteur d'attaque le plus dévastateur. Un seul composant compromis peut affecter des milliers d'organisations simultanément.

Pourquoi la supply chain logicielle est la cible prioritaire

En décembre 2020, des attaquants ont compromis les systèmes de build de SolarWinds et inséré une backdoor dans les mises à jour légitimes de la suite Orion. Plus de 18 000 organisations ont téléchargé la mise à jour empoisonnée, dont des agences gouvernementales américaines. L'attaque est restée indétectée pendant 9 mois.

En décembre 2021, la CVE-2021-44228 (Log4Shell) a révélé une vulnérabilité critique dans Log4j, une bibliothèque Java utilisée dans des centaines de milliers d'applications. Le problème : la plupart des équipes ne savaient même pas qu'elles utilisaient Log4j — elle était présente en tant que dépendance transitive, cachée plusieurs niveaux en profondeur.

Ces deux incidents illustrent les deux vecteurs principaux des attaques supply chain :

  • Compromission de la chaîne de build : un attaquant altère le processus de compilation ou les outils de build
  • Vulnérabilités dans les dépendances : des bibliothèques tierces contiennent des failles inconnues ou volontairement introduites

Ce tutoriel couvre les quatre piliers défensifs : inventaire (SBOM), détection (SCA), durcissement du pipeline (CI/CD) et vérification des artefacts (signature + provenance).

SBOM : Software Bill of Materials

Un SBOM est l'équivalent logiciel de la liste des ingrédients d'un produit alimentaire. Il liste exhaustivement tous les composants d'une application : bibliothèques directes, dépendances transitives, versions exactes, licences et relations entre composants.

CycloneDX vs SPDX : choisir son format

Deux standards dominent le marché :

  • SPDX (Software Package Data Exchange) — Standard ISO 5962:2021, maintenu par la Linux Foundation. Orienté conformité de licences. Format XML, JSON ou RDF. Recommandé pour les analyses légales et la distribution open source.
  • CycloneDX — Standard OWASP, orienté sécurité. Supporte les SBOM, HBOM (hardware), MBOM (modèles ML) et les documents VEX. Format JSON, XML ou Protocol Buffers. Recommandé pour les usages DevSecOps.
Recommandation
Utilisez CycloneDX pour la sécurité opérationnelle (CVE tracking, VEX) et SPDX si votre équipe légale a besoin d'analyses de conformité de licences. Les deux formats sont interopérables et Syft génère les deux.

Générer un SBOM avec Syft

Syft (Anchore) est l'outil de référence pour générer des SBOM depuis des images Docker, des répertoires de code source ou des archives.

# Installation de Syft
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin

# Vérifier l'installation
syft version

# Générer un SBOM depuis une image Docker (format CycloneDX JSON)
syft image:my-app:latest -o cyclonedx-json=sbom.cdx.json

# Générer un SBOM depuis une image avec tag complet
syft registry:myregistry.io/my-app:v1.2.3 -o cyclonedx-json=sbom.cdx.json

# Générer depuis un répertoire (analyse le code source)
syft dir:/path/to/project -o cyclonedx-json=sbom.cdx.json

# Format SPDX JSON
syft image:my-app:latest -o spdx-json=sbom.spdx.json

# Format SPDX tag-value (pour les toolchains légaux)
syft image:my-app:latest -o spdx-tag-value=sbom.spdx

# Affichage en tableau pour inspection rapide
syft image:my-app:latest -o table

# Inclure les paquets de dev dans le SBOM
syft dir:/project -o cyclonedx-json --scope all-layers

Un SBOM CycloneDX JSON ressemble à ceci (extrait simplifié) :

{
  "bomFormat": "CycloneDX",
  "specVersion": "1.6",
  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
  "version": 1,
  "metadata": {
    "timestamp": "2026-02-20T10:00:00Z",
    "tools": [{"vendor": "anchore", "name": "syft", "version": "1.4.0"}],
    "component": {
      "type": "container",
      "name": "my-app",
      "version": "1.2.3"
    }
  },
  "components": [
    {
      "type": "library",
      "name": "log4j-core",
      "version": "2.17.1",
      "purl": "pkg:maven/org.apache.logging.log4j/log4j-core@2.17.1",
      "licenses": [{"expression": "Apache-2.0"}]
    }
  ]
}

Intégration du SBOM dans votre pipeline CI

Le SBOM doit être généré à chaque build et archivé comme artefact. Voici un exemple GitHub Actions :

# .github/workflows/sbom.yml
name: SBOM Generation

on:
  push:
    branches: [main]
  release:
    types: [published]

jobs:
  sbom:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      packages: read

    steps:
      - name: Checkout
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11  # v4.1.1

      - name: Build image
        run: docker build -t my-app:${{ github.sha }} .

      - name: Install Syft
        uses: anchore/sbom-action/download-syft@fd74a6fb98a204a1ad35bbfae0122c1a302ff88d  # v0.15.0

      - name: Generate SBOM
        uses: anchore/sbom-action@fd74a6fb98a204a1ad35bbfae0122c1a302ff88d  # v0.15.0
        with:
          image: my-app:${{ github.sha }}
          format: cyclonedx-json
          output-file: sbom-${{ github.sha }}.cdx.json
          artifact-name: sbom-${{ github.sha }}.cdx.json

      - name: Upload SBOM as release asset
        if: github.event_name == 'release'
        uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5  # v1.0.2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ github.event.release.upload_url }}
          asset_path: sbom-${{ github.sha }}.cdx.json
          asset_name: sbom.cdx.json
          asset_content_type: application/json

Contenu Premium

Ce tutoriel avancé est réservé aux membres premium.

9,90€ / mois
  • Tous les tutoriels avancés
  • Nouveaux contenus chaque semaine
  • Suivi de progression
  • Annulation à tout moment
Morgann Riu

Écrit par

Morgann Riu

Expert en cybersécurité et administration Linux. Je partage mes connaissances à travers des tutoriels gratuits et des formations pour aider les administrateurs systèmes et développeurs à sécuriser leurs infrastructures.

Partager ce tutoriel

Cet article vous a plu ?

Commentaires

Checklist Sécurité Linux

30 points essentiels pour sécuriser un serveur Linux. Recevez aussi les nouveaux tutoriels par email.

Pas de spam. Désabonnement en 1 clic.