PT

SLSA: o que é, por que importa e como começar pelo nível 1

SLSA é um framework de segurança que estabelece critérios verificáveis para o processo de build de software, organizados em níveis progressivos. Este artigo explica o que é SLSA, por que ele importa para a segurança da cadeia de suprimentos de software e como implementar o nível 1, o ponto de entrada do framework.

Security Researcher

Heitor Gouvêa

A segurança da cadeia de suprimentos de software deixou de ser um tema exclusivo de grandes empresas para se tornar uma preocupação estrutural de qualquer organização que produz ou consome software. Incidentes como SolarWinds, Codecov e comprometimentos em pacotes npm demonstraram que o risco não está apenas no código da aplicação, mas em todo o processo que transforma código em artefato executável.

SLSA (Supply-chain Levels for Software Artifacts, pronunciado "salsa") é um framework de segurança criado pelo Google e hoje mantido pela OpenSSF (Open Source Security Foundation) que endereça exatamente essa lacuna. Em vez de tratar segurança como uma inspeção pontual do binário final, SLSA estabelece critérios verificáveis para o processo de build, organizados em níveis progressivos de maturidade.

Este artigo foca no nível 1, o ponto de entrada do framework e o passo mais acessível para organizações que querem começar a tratar proveniência de artefatos com seriedade.

O problema

Quando uma equipe faz deploy de uma imagem de container ou publica um pacote, há uma cadeia de etapas entre o commit no repositório e o artefato em produção: checkout do código, resolução de dependências, compilação, empacotamento, publicação. Cada etapa é um ponto onde a adulteração pode ocorrer.

A pergunta fundamental que SLSA endereça é: como demonstrar que um artefato foi construído a partir do código esperado, pelo processo esperado, na infraestrutura esperada?

Sem um modelo formal para responder essa pergunta, a confiança no artefato é implícita. A organização confia que o pipeline não foi alterado, que ninguém fez um build manual fora do processo, que as dependências resolvidas são as mesmas que estavam no lock file. Essa confiança implícita é exatamente o que ataques de supply chain exploram.

SLSA transforma essa confiança implícita em confiança verificável, substituindo suposição por evidência documentada e, nos níveis mais altos, criptograficamente assinada.

Os três níveis de SLSA 

O framework SLSA é organizado em tracks, sendo o Build Track o mais maduro e amplamente adotado. Ele define três níveis de garantia, cada um construindo sobre o anterior.

Build L1 - Proveniência existe: o artefato possui um registro de proveniência que descreve como foi construído: qual plataforma de build, qual processo e quais foram os inputs. A proveniência pode ser incompleta ou não assinada. O objetivo é estabelecer rastreabilidade básica.

Build L2 - Plataforma de build hospedada: os builds rodam em uma plataforma hospedada (não na máquina pessoal de um desenvolvedor), e essa plataforma gera e assina a proveniência. A assinatura digital impede adulteração após o build e permite verificação de autenticidade por consumidores.

Build L3 - Builds hardened: a plataforma de build implementa controles rígidos: isolamento entre execuções (mesmo dentro do mesmo projeto), proteção do material criptográfico usado para assinar a proveniência, e garantias de que o processo de build não pode ser influenciado por agentes não autorizados.

Os níveis são cumulativos. L2 inclui todos os requisitos de L1, e L3 inclui todos os de L2. Essa estrutura permite adoção incremental sem exigir reestruturação completa dos pipelines existentes.

Este artigo concentra-se no nível 1. Os próximos artigos desta série abordarão L2 e L3 em profundidade.

Build L1 em detalhe: o que significa proveniência

Proveniência, no contexto de SLSA, é um documento que descreve a origem e o processo de construção de um artefato. Em termos práticos, é um registro estruturado que responde três perguntas:

  1. Qual foi o input? 

    1. repositório de origem, branch, commit hash

  2. Qual foi o processo?

    1. Exemplo: pipeline de CI/CD, build steps, configuração utilizada);

  3. Qual foi o output?

    1.  digest criptográfico do artefato produzido.

No nível 1, os requisitos são intencionalmente acessíveis. A especificação exige três coisas:

O produtor de software segue um processo de build consistente, de forma que outros possam formar expectativas sobre como um build correto se parece. Existe proveniência descrevendo como o artefato foi construído, incluindo a plataforma de build, o processo e os inputs de alto nível. E o produtor distribui essa proveniência aos consumidores, preferencialmente usando uma convenção definida pelo ecossistema de pacotes.

É importante notar que, no L1, a proveniência pode ser incompleta e não precisa ser assinada. Essa é uma decisão deliberada do framework: reduzir a barreira de entrada para que organizações possam obter benefícios imediatos sem precisar implementar infraestrutura de assinatura criptográfica.

O que L1 resolve na prática

O valor do nível 1 é frequentemente subestimado porque parece simples. Mas a existência de proveniência, mesmo que básica, resolve problemas concretos.

Rastreabilidade de artefatos

Sem proveniência, quando um incidente ocorre em produção, a investigação começa com perguntas básicas que deveriam ter respostas triviais: de qual commit essa imagem foi construída? Qual pipeline gerou esse artefato? Qual configuração de build foi utilizada? Quais inputs de alto nível participaram da construção? Sem um registro formal, essas respostas dependem de busca manual em logs de CI, correlação de timestamps e, não raramente, da memória de quem fez o último deploy.

Com proveniência L1, essas informações são parte do artefato. A investigação parte de dados estruturados, não de reconstrução manual.

Prevenção de erros no processo de release

A proveniência permite verificação automatizada contra expectativas definidas. Um artefato que foi construído a partir de um commit que não pertence à branch principal, ou que foi gerado por um pipeline diferente do esperado, pode ser identificado e bloqueado antes de chegar à produção.

Esse tipo de verificação não impede ataques sofisticados (isso é responsabilidade dos níveis superiores), mas elimina uma categoria inteira de erros humanos no processo de release: builds feitos localmente e publicados manualmente, commits errados promovidos por engano, artefatos gerados por pipelines de desenvolvimento que chegam a ambientes de produção.

Inventário de plataformas e processos de build

Em organizações com múltiplas equipes, cada time tende a configurar seu próprio pipeline. A proveniência L1 cria visibilidade sobre quais plataformas de build estão sendo utilizadas, quais processos são seguidos e onde existem inconsistências. Essa visibilidade é pré-requisito para qualquer iniciativa de padronização ou hardening.

Como implementar L1

A implementação do nível 1 não exige mudanças na infraestrutura de build. Exige, fundamentalmente, que o processo de build produza e distribua um documento de proveniência.

Estrutura de um documento de proveniência

O formato recomendado segue o modelo in-toto, que define a proveniência como um predicate associado a um subject (o artefato). Um exemplo simplificado:

Esse documento vincula o digest do artefato ao repositório, commit, pipeline e timestamp do build. É uma declaração factual sobre como o artefato foi produzido.

Newsletter Getup.

Atualizações sobre Kubernetes e Software Supply Chain Security todos os meses.

Gerando proveniência no pipeline

A maioria das plataformas de CI/CD modernas já disponibiliza as informações necessárias como variáveis de ambiente. GitHub Actions, GitLab CI, Jenkins e outros expõem repositório, commit, branch, ID da execução e outros metadados.

Um step simples no pipeline pode coletar esses dados e gerar o documento de proveniência, exemplo no GitHub Actions:

Para quem utiliza GitHub Actions, existe o `slsa-framework/slsa-github-generator`, que automatiza a geração de proveniência em conformidade com a especificação SLSA.

Associando proveniência ao artefato

Em ecossistemas de containers, a proveniência pode ser vinculada à imagem como um atestado OCI usando cosign:

Esse comando cria um atestado cujo subject é o digest imutável da imagem e cujo predicate contém a proveniência. O atestado fica associado à imagem no registry, disponível para verificação posterior.

Para outros ecossistemas (npm, PyPI, Maven), a distribuição da proveniência segue as convenções do ecossistema específico. O princípio é o mesmo: o documento de proveniência acompanha o artefato e está acessível a quem o consome.

Como o Quor já entrega proveniência verificável

Todas as imagens do catálogo Quor são distribuídas com atestados de proveniência SLSA assinados, vinculados ao digest da imagem via OCI. Isso significa que o consumidor não precisa implementar nenhuma etapa adicional para ter acesso à proveniência: ela já acompanha a imagem no momento do pull.

Cada imagem no catálogo possui quatro tipos de atestados disponíveis:

A proveniência SLSA do Quor registra o repositório de origem, o commit exato, o workflow responsável pelo build e a identidade da plataforma de CI. Essa informação permite rastrear qualquer imagem em produção até o código-fonte e o pipeline que a produziu.

Verificando a assinatura da imagem

A assinatura de cada imagem pode ser verificada com cosign. O comando abaixo valida que a imagem foi construída pelo pipeline oficial do Quor, usando a identidade OIDC do GitHub Actions:

Esse comando verifica que a assinatura corresponde a um build executado pelo workflow release.yaml na branch main do repositório de imagens do Quor, autenticado via GitHub Actions OIDC. Se a assinatura não corresponder a esses parâmetros, a verificação falha.

O que isso significa para quem consome as imagens

Ao utilizar imagens do Quor, a organização herda a proveniência verificável sem custo de implementação. A equipe de plataforma ou de segurança pode integrar a verificação de assinatura e atestados no pipeline de deploy ou nos admission controllers do Kubernetes. Artefatos que não passem na verificação são rejeitados antes de chegar ao cluster.

Na prática, isso transforma a confiança nas imagens base implícita ("confiamos porque sempre usamos") em verificável ("confiamos porque a assinatura e a proveniência são válidas"). Essa é exatamente a mudança que SLSA propõe, aplicada à camada de infraestrutura que sustenta a aplicação.

O que muda para o negócio

A adoção de SLSA L1 tem impacto que vai além da engenharia. A proveniência de artefatos afeta diretamente métricas operacionais, postura de compliance e capacidade de resposta a incidentes.

Redução do tempo de resposta a incidentes

Quando uma vulnerabilidade crítica é divulgada, a primeira necessidade é identificar quais artefatos em produção são afetados. Com proveniência associada a cada artefato, a organização pode determinar rapidamente qual commit, pipeline e processo de build deram origem à imagem em execução. Quando essa proveniência é combinada com SBOM, também se torna possível identificar quais componentes e dependências compõem o artefato, reduzindo o tempo de análise do escopo de exposição.

Governança da cadeia de build

SLSA L1 cria a base para políticas de admissão. Ambientes de produção podem ser configurados para aceitar apenas artefatos que possuam proveniência válida, rejeitando builds manuais ou artefatos gerados fora do processo formal. Em Kubernetes, por exemplo, admission controllers podem verificar a presença de atestados de proveniência antes de permitir o deploy.

Compliance e auditoria

Regulamentações como a Executive Order 14028 (EUA), o Cyber Resilience Act (EU) e frameworks como NIST SSDF incorporam requisitos de software supply chain security que se alinham diretamente com SLSA. A proveniência de artefatos é parte da evidência necessária para demonstrar conformidade. Começar pelo L1 posiciona a organização para atender a esses requisitos de forma progressiva.

Limitações do nível 1

O L1 é deliberadamente o nível mais permissivo do framework. É importante ter clareza sobre o que ele não resolve.

Na especificação, a proveniência no L1 pode ser incompleta e não é obrigatoriamente assinada. Isso significa que, em uma implementação mínima, um ator malicioso com acesso ao pipeline poderia forjar ou modificar o documento de proveniência sem que isso fosse detectado. O L1 padrão protege contra erros e processos informais, não contra ataques deliberados.

A proteção completa contra adulteração do build, incluindo requisitos formais de plataforma hospedada, é tema do L2. A proteção contra comprometimento da plataforma de build começa no L3, com isolamento e hardening da infraestrutura.

SLSA também não substitui scanning de vulnerabilidades, análise de código ou gestão de dependências. O framework endereça a integridade do processo de build, não a segurança do código ou de seus componentes. Quando combinado com SBOM (para inventário de composição) e VEX (para contextualização de vulnerabilidades), SLSA compõe uma camada complementar de um modelo de segurança mais amplo.

Conclusão

SLSA L1 é o ponto de entrada para tratar a integridade da cadeia de build como disciplina de engenharia. O investimento é baixo: gerar e distribuir um documento de proveniência no pipeline existente. O retorno é imediato: rastreabilidade de artefatos, prevenção de erros no processo de release, visibilidade sobre plataformas de build e fundação para políticas de admissão.

Para organizações que utilizam imagens do Quor, essa camada já está resolvida na infraestrutura de base. Cada imagem do catálogo é distribuída com proveniência SLSA assinada, SBOM em dois formatos e documentação VEX, tudo verificável. O trabalho restante é integrar a verificação desses atestados ao pipeline de deploy e, progressivamente, estender o mesmo modelo às imagens e artefatos produzidos internamente.

A confiança em artefatos de software não pode ser presumida. Ela precisa ser documentada, e progressivamente, verificada. SLSA L1 é o primeiro passo concreto nessa direção.

Referências

1. https://slsa.dev

2. https://slsa.dev/spec/v1.0/levels

3. https://slsa.dev/spec/v1.0/requirements

4. https://github.com/slsa-framework/slsa

5. https://github.com/slsa-framework/slsa-github-generator

6. https://in-toto.readthedocs.io/en/latest/

Há mais de 13 anos operando Kubernetes em produção. Com o Quor, essa experiência alcança também a segurança da cadeia de software.