Builds reprodutíveis
O que é Builds reprodutíveis?
Builds reprodutíveisPráticas de build que garantem que compilar o mesmo código-fonte com as mesmas instruções produz um artefacto idêntico bit a bit, independentemente de quando ou onde é construído.
Builds reprodutíveis eliminam o não determinismo para que qualquer pessoa com o código-fonte e a receita possa recriar de forma independente o mesmo binário e compará-lo byte a byte com uma release. Isto exige controlar timestamps, caminhos de build, variáveis de ambiente, aleatoriedade, locale, ordem de ficheiros e opções de compilador. O projeto Reproducible Builds, Debian, NixOS, Arch Linux, Tor, F-Droid e Bazel investem fortemente nesta área. Combinados com proveniência assinada, permitem que rebuilders independentes confirmem que um binário veio mesmo da fonte publicada, ajudando a detetar comprometimento de um único builder (como no caso SolarWinds). São condição para atingir os níveis SLSA mais altos e sustentam a confiança em software open source crítico.
● Exemplos
- 01
Rebuild independente de uma release do Tor Browser que coincide byte a byte com o binário oficial.
- 02
Serviço baseado em Bazel que produz o mesmo digest SHA-256 a partir do mesmo commit em qualquer worker.
● Perguntas frequentes
O que é Builds reprodutíveis?
Práticas de build que garantem que compilar o mesmo código-fonte com as mesmas instruções produz um artefacto idêntico bit a bit, independentemente de quando ou onde é construído. Pertence à categoria Segurança de aplicações da cibersegurança.
O que significa Builds reprodutíveis?
Práticas de build que garantem que compilar o mesmo código-fonte com as mesmas instruções produz um artefacto idêntico bit a bit, independentemente de quando ou onde é construído.
Como funciona Builds reprodutíveis?
Builds reprodutíveis eliminam o não determinismo para que qualquer pessoa com o código-fonte e a receita possa recriar de forma independente o mesmo binário e compará-lo byte a byte com uma release. Isto exige controlar timestamps, caminhos de build, variáveis de ambiente, aleatoriedade, locale, ordem de ficheiros e opções de compilador. O projeto Reproducible Builds, Debian, NixOS, Arch Linux, Tor, F-Droid e Bazel investem fortemente nesta área. Combinados com proveniência assinada, permitem que rebuilders independentes confirmem que um binário veio mesmo da fonte publicada, ajudando a detetar comprometimento de um único builder (como no caso SolarWinds). São condição para atingir os níveis SLSA mais altos e sustentam a confiança em software open source crítico.
Como se defender contra Builds reprodutíveis?
As defesas contra Builds reprodutíveis costumam combinar controles técnicos e práticas operacionais, conforme detalhado na definição acima.
Quais são outros nomes para Builds reprodutíveis?
Nomes alternativos comuns: Builds determinísticas, Builds bit a bit.
● Termos relacionados
- appsec№ 1053
SLSA Framework
Supply-chain Levels for Software Artifacts: conjunto escalonado de requisitos publicado pelo OpenSSF que endurece progressivamente a forma como o software é construído, assinado e verificado contra manipulação da cadeia de fornecimento.
- appsec№ 1069
Segurança da cadeia de fornecimento de software
Disciplina que protege cada elo da produção de software - código-fonte, dependências, build, assinatura, distribuição e deploy - contra manipulação, código malicioso e perda de integridade.
- appsec№ 870
Atestação de proveniência
Declaração assinada e verificável por máquina que descreve como um artefacto de software foi produzido - fonte, sistema de build, parâmetros e dependências - para os consumidores confiarem na sua origem.
- appsec№ 305
Pinning de dependências
Prática de declarar as dependências de software em versões exatas, frequentemente acompanhadas de hashes criptográficos, para que as builds consumam sempre os mesmos artefactos e resistam à manipulação da cadeia de fornecimento.
- appsec№ 166
Segurança de CI/CD
Conjunto de controlos que protegem os pipelines de integração e entrega contínuas contra comprometimento, injeção de código, fuga de segredos e deploys não autorizados.
- appsec№ 784
Assinatura de pacotes
Aplicação de uma assinatura criptográfica a um pacote de software para que os consumidores verifiquem a identidade do publicador e que o artefacto não foi alterado após a publicação.