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.
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
| Formato | Origem | Uso Principal |
|---|---|---|
| SPDX | Linux Foundation | Compliance, licenciamento |
| CycloneDX | OWASP | Segurança, vulnerabilidades |
| SWID | ISO/IEC | Enterprise, 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
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
Pre-Commit
Secrets scanning, linting, dependency check local
CI Build
SAST, SCA, container scan, gerar SBOM
Sign & Attest
Assinar artefatos, gerar provenance SLSA
Deploy Gate
Verificar assinaturas, policies, admission control
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.