Pular para conteúdo

Aula 20 - Projeto Capstone: Pipeline DevSecOps Autônomo Hardened 🚀

Objetivo Pedagógico

Objetivo: Engenhar um pipeline DevSecOps integralmente blindado (Hardened): verificação de dependências (SCA), SAST com Semgrep, auditoria de imagens Docker com Trivy, geração de SBOM e assinatura criptográfica de artefatos com Sigstore Cosign atendendo aos níveis de conformidade SLSA.


📑 1. Fundamentos Teóricos & Análise Técnica

A segurança contemporânea da cadeia de suprimentos de software exige aderência a frameworks formais como o SLSA (Supply-chain Levels for Software Artifacts).

O Projeto Capstone de Desenvolvimento Seguro consolida uma esteira industrial de integridade de software: 1. Verificação de Proveniência e SLSA: - Garantir que o artefato binário ou contêiner foi comprovadamente gerado a partir do código-fonte auditado, dentro de um ambiente de compilação confiável e isolado, impedindo a injeção de binários adulterados por terceiros. 2. Varredura Completa de Contêineres com Trivy: - Auditoria não apenas das dependências de aplicação (npm, pip, go modules), mas de todas as camadas do sistema operacional do contêiner (pacotes debian/alpine, bibliotecas compartilhadas C, CVEs de kernel). 3. Software Bill of Materials (SBOM) Padronizado: - Geração automática de inventários em formato SPDX ou CycloneDX, permitindo consulta imediata de impacto caso novas vulnerabilidades zero-day (ex: Log4Shell) surjam na indústria. 4. Assinatura e Verificação Criptográfica com Sigstore Cosign: - As imagens de contêiner geradas pelo build são assinadas digitalmente com chaves transitórias no registry corporativo. - O cluster de produção (Kubernetes) utiliza controladores de admissão (ex: Kyverno) para rejeitar compulsóriamente qualquer imagem que não possua a assinatura válida do pipeline oficial de DevSecOps.

📐 Arquitetura Conceitual & Diagrama de Fluxo

graph TD
    Commit["Commit Assinado no Git"] --> SCA["SCA: Varredura de Dependências"]
    SCA --> SAST["SAST: Análise de Código e Segredos"]
    SAST --> Build["Build Seguro em Runner Isolado"]
    Build --> Scan["Trivy: Scanner de Vulnerabilidades da Imagem"]
    Scan --> SBOM["Geração de SBOM (CycloneDX / SPDX)"]
    SBOM --> Sign["Sigstore Cosign: Assinatura Criptográfica da Imagem"]
    Sign --> Registry["Push para Container Registry Corporativo"]
    Registry --> K8s["Kubernetes Admission Controller (Kyverno)"]
    K8s --> Deploy{"Assinatura Válida?"}
    Deploy -- Sim --> Pod["Execução do Pod em Produção"]
    Deploy -- Não --> Rejection["Bloqueio Imediato do Pod"]
    style Commit fill:#e1f5fe,stroke:#01579b
    style Scan fill:#fff3e0,stroke:#e65100
    style Sign fill:#f3e5f5,stroke:#7b1fa2
    style Pod fill:#e8f5e9,stroke:#2e7d32
    style Rejection fill:#ffebee,stroke:#c62828

🔍 Pilares e Diretrizes Técnicas

Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Assinatura Keyless com Sigstore: Uso de identidades OpenID Connect e transparência criptográfica pública (Rekor) para assinar contêineres sem gestão de chaves privadas locais. - Controle de Admissão em Runtime: Garantia de que contêineres não assinados ou com vulnerabilidades críticas sejam fisicamente impedidos de subir em produção. - Auditoria de Base Images Mínimas: Uso de imagens base distroless ou scratch sem shells interativos para reduzir drasticamente a superfície de ataque. - Conformidade SLSA Level 3: Prevenção de ataques de substituição de dependências e ataques de homem-no-meio no processo de compilação.


🛠️ 2. Implementação Prática em Engenharia de DevSecOps, SLSA Framework e Assinatura Cosign

Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:

// devsecops_hardened_capstone.yml (Pipeline DevSecOps Completo com Trivy, SBOM e Cosign)
name: Hardened DevSecOps Pipeline

on:
  push:
    branches: [main]

permissions:
  contents: read
  packages: write
  id-token: write

jobs:
  security-gate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Análise Estática de Segurança (Semgrep)
        uses: returntocorp/semgrep-action@v1
        with:
          config: >-
            p/security-audit
            p/owasp-top-ten

      - name: Build do Contêiner
        run: |
          docker build -t ghcr.io/${{ github.repository }}:latest .

      - name: Varredura de Imagem e Sistema Operacional com Trivy
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: ghcr.io/${{ github.repository }}:latest
          format: 'table'
          exit-code: '1' # Quebra o build se houver vulnerabilidade CRITICAL
          ignore-unfixed: true
          severity: 'CRITICAL'

      - name: Instalar Sigstore Cosign
        uses: sigstore/cosign-installer@v3.5.0

      - name: Assinar Imagem Criptograficamente (Keyless Signing)
        run: |
          echo "Assinando imagem com identidade OIDC do pipeline..."
          cosign sign --yes ghcr.io/${{ github.repository }}:latest 

💡 Análise Passo a Passo do Código

  1. Qualificação com Semgrep: Interrompe o fluxo caso vulnerabilidades arquiteturais de código sejam detectadas.
  2. Trivy com exit-code: 1: Impõe barreira absoluta contra publicação de contêineres contendo vulnerabilidades críticas não corrigidas.
  3. Assinatura com Cosign: Garante rastreabilidade matemática de proveniência para validação em runtime por admission controllers.

🎯 3. Próximos Passos & Sequência Didática