Auditoria de Integridade de Binários em Pipelines CI/CD com Assinaturas Criptográficas Baseadas em Sigstore
Aprenda a aplicar assinaturas criptográficas baseadas em Sigstore em pipelines CI/CD para garantir que nenhum software adulterado chegue à produção.
Resumo
- Assinaturas tradicionais com chaves de longa duração falham frequentemente devido à complexidade e riscos de vazamento de segredos na infraestrutura.
- O uso de identidades efêmeras conectadas a OIDC elimina o gerenciamento manual de chaves e vincula artefatos diretamente ao usuário ou pipeline correto.
- A transparência pública gerada por logs imutáveis garante auditabilidade rigorosa e impede ataques de repúdio em qualquer build executado.
- A verificação automatizada no ambiente de implantação bloqueia imediatamente a execução de binários que não possuam atestados criptográficos válidos.
- A adoção de padrões abertos de cadeia de suprimentos reduz drasticamente o impacto de comprometimentos na esteira de entrega de software.
O Problema da Confiança Cega em Pipelines de Entrega Contínua
No desenvolvimento de software moderno, confiamos cegamente nos servidores que compilam nossos programas. Um pipeline de CI/CD (o sistema automatizado que pega o código-fonte, testa e transforma em um programa executável) costuma ser tratado como uma caixa preta segura. Na prática, isso significa que, se um invasor conseguir modificar discretamente um arquivo de configuração ou injetar um passo malicioso na esteira de automação, ele pode alterar o binário final sem que ninguém perceba.
Historicamente, a resposta para esse risco tem sido o uso de chaves criptográficas privadas guardadas em cofres secretos. Os desenvolvedores usam essas chaves para assinar o programa compilado, provando que ele veio de uma fonte confiável. Contudo, na vida real, gerenciar essas chaves de longa duração é um pesadelo operacional. Chaves expiram, são roubadas ou acabam espalhadas por servidores de compilação sem controle rigoroso de acesso.
Como Funciona a Assinatura Baseada em Identidade Efêmera
O Sigstore surge como uma solução moderna para eliminar a dor de cabeça do gerenciamento manual de chaves de assinatura. Em vez de criar um arquivo de chave privada estática que dura anos, o sistema gera uma chave efêmera (que dura apenas alguns minutos) exatamente no momento em que o build está rodando. Na prática, o processo valida a identidade do sistema de CI através de um provedor de OIDC (OpenID Connect), como o GitHub Actions ou GitLab CI.
Quando a esteira termina de compilar o programa, ela se autentica no provedor de identidade, que emite um token seguro. O Sigstore recebe esse token, confere se a identidade é legítima e emite um certificado de curtíssima duração. Com esse certificado, a esteira assina o binário e descarta a chave privada imediatamente. Isso significa que não há chaves estáticas para roubar, tornando o processo muito mais seguro contra invasões prolongadas.
Registros Públicos de Transparência e a Prova Criptográfica
Outro pilar fundamental dessa tecnologia é o uso de um registro público de transparência, conhecido no ecossistema como Rekor. Pense nisso como um livro-razão imutável, muito parecido com a tecnologia por trás das criptomoedas, mas focado exclusivamente em registrar quem assinou o quê e quando. Na prática, cada assinatura gerada pelo seu pipeline é publicada nesse registro público, criando uma trilha de auditoria que não pode ser apagada ou modificada retroativamente.
Essa abordagem resolve um problema clássico de segurança chamado de ataque de repúdio, onde alguém mal-intencionado nega ter autorizado um determinado lançamento de software. Como o registro é público e criptografado, qualquer pessoa pode consultar a prova matemática de que o binário que está rodando em produção foi gerado exatamente pelo commit oficial e auditável, sem adulterações no meio do caminho.
Implementação Prática com Ferramentas Nativas
Para colocar essa auditoria de integridade para funcionar na prática, utilizamos ferramentas de linha de comando criadas especificamente para interagir com o ecossistema Sigstore, como o Cosign. O fluxo básico consiste em gerar o artefato, solicitar a assinatura baseada na identidade do pipeline e registrar a transação no servidor de transparência.
# Assinando um binário utilizando a identidade OIDC do ambiente de CI/CD
cosign sign-blob --bundle sigstore-bundle.json meu-aplicativo-binario
# Verificando a integridade e a assinatura do binário antes da implantação
cosign verify-blob \
--bundle sigstore-bundle.json \
--certificate-identity "https://github.com/organizacao/repositorio/.github/workflows/build.yml@refs/heads/main" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
meu-aplicativo-binarioNo exemplo acima, a primeira linha cria um pacote de assinatura criptográfica atrelado ao arquivo binário. A segunda linha realiza a verificação rigorosa antes de permitir que o programa seja executado na infraestrutura de destino, garantindo que o emissor e o repositório correspondem exatamente ao esperado.
Garantindo a Implantação Segura em Produção
A etapa final e mais crítica de toda essa arquitetura é a política de admissão no ambiente de produção. Não basta assinar o binário no pipeline se o servidor que vai executá-lo aceitar qualquer programa que aparecer pela frente. Na prática, configuramos os nós de execução ou ferramentas de orquestração para recusar categoricamente qualquer imagem ou binário que não possua um atestado válido emitido pelo Sigstore.
Essa barreira final impede que arquivos injetados manualmente por administradores desatentos ou invasores com acesso parcial aos servidores rodem em produção. A segurança deixa de ser baseada na confiança cega e passa a ser garantida por provas matemáticas automatizadas e auditáveis em tempo real.
Considerações Finais sobre a Cadeia de Suprimentos
A integridade de binários em pipelines de CI/CD deixou de ser um luxo corporativo para se tornar uma necessidade básica de engenharia de software. O uso de assinaturas baseadas em identidade e logs de transparência remove a complexidade operacional das chaves tradicionais e eleva o nível de segurança da cadeia de suprimentos. Ao adotar essas práticas, as equipes ganham velocidade sem abrir mão da previsibilidade e da confiança absoluta nos artefatos entregues aos usuários finais.