Pular para o conteúdo
DevSecOps 12 min read

Supply Chain Security: SBOM, Sigstore e Proteção do Pipeline

Entenda como proteger sua supply chain de software com SBOM, assinatura de artefatos com Sigstore/Cosign, e boas práticas de segurança em CI/CD.

Por Equipe Integr8 12/01/2025

O Problema da Supply Chain

Ataques à supply chain de software aumentaram 742% nos últimos 3 anos (Sonatype). Incidentes como SolarWinds, Log4Shell e compromissos do npm demonstram que a segurança não pode mais ser uma reflexão tardia.

⚠️Estatística Alarmante

96% das vulnerabilidades em aplicações vêm de dependências de terceiros, não do código que você escreve.

Pilares da Supply Chain Security

📋

SBOM

Software Bill of Materials - inventário de todos os componentes

✍️

Assinatura

Verificação criptográfica de artefatos com Sigstore/Cosign

🔍

Scanning

Análise contínua de vulnerabilidades em dependências

🔒

Provenance

Rastreabilidade de onde e como artefatos foram criados

SBOM: Software Bill of Materials

Um SBOM é como a lista de ingredientes de um produto alimentício - documenta todos os componentes de um software.

Formatos de SBOM

FormatoOrigemUso Principal
SPDXLinux FoundationCompliance, licenciamento
CycloneDXOWASPSegurança, vulnerabilidades
SWIDISO/IECEnterprise, governo

Gerando SBOM com Syft

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

# Gerar SBOM de uma imagem Docker
syft myapp:latest -o spdx-json > sbom.spdx.json

# Gerar em formato CycloneDX
syft myapp:latest -o cyclonedx-json > sbom.cdx.json

# Gerar de um diretório de código
syft dir:. -o spdx-json > sbom.spdx.json

Exemplo de SBOM CycloneDX

{
  "bomFormat": "CycloneDX",
  "specVersion": "1.5",
  "version": 1,
  "metadata": {
    "timestamp": "2025-01-12T10:00:00Z",
    "tools": [{ "name": "syft", "version": "0.100.0" }],
    "component": {
      "name": "my-application",
      "version": "1.0.0",
      "type": "application"
    }
  },
  "components": [
    {
      "type": "library",
      "name": "express",
      "version": "4.18.2",
      "purl": "pkg:npm/express@4.18.2",
      "licenses": [{ "license": { "id": "MIT" } }]
    },
    {
      "type": "library",
      "name": "lodash",
      "version": "4.17.21",
      "purl": "pkg:npm/lodash@4.17.21"
    }
  ]
}

Assinatura com Sigstore/Cosign

Sigstore é um projeto da Linux Foundation que torna a assinatura de artefatos acessível e sem fricção.

Como Funciona o Sigstore

Cosign assina, Fulcio emite certificados, Rekor mantém log de transparência
100%
Ecossistema Sigstore

Cosign assina, Fulcio emite certificados, Rekor mantém log de transparência

Assinando Imagens com Cosign

# Instalar Cosign
brew install cosign  # ou via releases

# Login no registry
cosign login ghcr.io

# Assinar imagem (keyless - usa OIDC)
cosign sign ghcr.io/myorg/myapp:v1.0.0

# Assinar com chave privada
cosign generate-key-pair
cosign sign --key cosign.key ghcr.io/myorg/myapp:v1.0.0

# Verificar assinatura
cosign verify ghcr.io/myorg/myapp:v1.0.0 \
  --certificate-identity=user@example.com \
  --certificate-oidc-issuer=https://github.com/login/oauth

# Anexar SBOM à imagem
cosign attach sbom --sbom sbom.cdx.json ghcr.io/myorg/myapp:v1.0.0

# Assinar o SBOM anexado
cosign sign --attachment sbom ghcr.io/myorg/myapp:v1.0.0

Assinatura em GitHub Actions

name: Build and Sign

on:
  push:
    tags: ['v*']

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
      id-token: write  # Necessário para keyless signing

    steps:
      - uses: actions/checkout@v4

      - name: Install Cosign
        uses: sigstore/cosign-installer@v3

      - name: Install Syft
        uses: anchore/sbom-action/download-syft@v0

      - name: Login to GHCR
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Build and push
        id: build
        uses: docker/build-push-action@v5
        with:
          push: true
          tags: ghcr.io/${{ github.repository }}:${{ github.ref_name }}

      - name: Generate SBOM
        run: |
          syft ghcr.io/${{ github.repository }}:${{ github.ref_name }} \
            -o cyclonedx-json > sbom.cdx.json

      - name: Sign image
        run: |
          cosign sign --yes \
            ghcr.io/${{ github.repository }}@${{ steps.build.outputs.digest }}

      - name: Attach and sign SBOM
        run: |
          cosign attach sbom --sbom sbom.cdx.json \
            ghcr.io/${{ github.repository }}@${{ steps.build.outputs.digest }}
          cosign sign --yes --attachment sbom \
            ghcr.io/${{ github.repository }}@${{ steps.build.outputs.digest }}

SLSA: Supply Chain Levels for Software Artifacts

SLSA (pronuncia-se “salsa”) define níveis de maturidade para supply chain security.

    Gerando Provenance SLSA

    # GitHub Actions com SLSA provenance
    name: SLSA Build
    
    on:
      push:
        tags: ['v*']
    
    jobs:
      build:
        runs-on: ubuntu-latest
        outputs:
          digest: ${{ steps.build.outputs.digest }}
    
        steps:
          - uses: actions/checkout@v4
          - id: build
            uses: docker/build-push-action@v5
            with:
              push: true
              tags: ghcr.io/${{ github.repository }}:${{ github.ref_name }}
    
      provenance:
        needs: build
        permissions:
          actions: read
          id-token: write
          packages: write
    
        uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.9.0
        with:
          image: ghcr.io/${{ github.repository }}
          digest: ${{ needs.build.outputs.digest }}
          registry-username: ${{ github.actor }}
        secrets:
          registry-password: ${{ secrets.GITHUB_TOKEN }}

    Scanning de Vulnerabilidades

    Trivy para Container Scanning

    # Scan de imagem
    trivy image myapp:latest
    
    # Scan com SBOM
    trivy sbom sbom.cdx.json
    
    # Scan de filesystem
    trivy fs .
    
    # Scan de IaC (Terraform, Kubernetes)
    trivy config ./terraform/
    
    # Integração com CI - falhar em vulnerabilidades críticas
    trivy image --exit-code 1 --severity CRITICAL myapp:latest

    Grype para Análise de SBOM

    # Instalar Grype
    curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin
    
    # Analisar SBOM
    grype sbom:sbom.cdx.json
    
    # Output em JSON para processamento
    grype sbom:sbom.cdx.json -o json > vulnerabilities.json

    Policy Enforcement com OPA/Gatekeeper

    # Kyverno policy para exigir imagens assinadas
    apiVersion: kyverno.io/v1
    kind: ClusterPolicy
    metadata:
      name: require-signed-images
    spec:
      validationFailureAction: Enforce
      rules:
        - name: verify-signature
          match:
            any:
              - resources:
                  kinds:
                    - Pod
          verifyImages:
            - imageReferences:
                - "ghcr.io/myorg/*"
              attestors:
                - entries:
                    - keyless:
                        subject: "https://github.com/myorg/*"
                        issuer: "https://token.actions.githubusercontent.com"
                        rekor:
                          url: https://rekor.sigstore.dev

    Pipeline Seguro Completo

    1️⃣

    Pre-Commit

    Secrets scanning, linting, dependency check local

    2️⃣

    CI Build

    SAST, SCA, container scan, gerar SBOM

    3️⃣

    Sign & Attest

    Assinar artefatos, gerar provenance SLSA

    4️⃣

    Deploy Gate

    Verificar assinaturas, policies, admission control

    Compliance

    Organizações que implementam SBOM e assinatura de artefatos estão preparadas para regulamentações como a Executive Order 14028 (EUA) e requisitos similares em outros países.


    Quer implementar supply chain security na sua organização? Fale com nossos especialistas em DevSecOps.