Chromium Chronicle #23: builds verificados na infraestrutura do Chrome

Episódio 23:por Akash Mukherjee em Mountain View, Califórnia (julho de 2021)
Episódios anteriores

Quando criamos o Chrome, muitas peças contribuem para o ambiente que influencia a saída de um artefato. No SO, bibliotecas de suporte instaladas, dependências de terceiros ferramentas instaladas e o próprio ambiente de execução; cada um deles é construído com vários níveis de higiene de segurança.

Historicamente, o Google usa a autorização binária, uma verificação interna de aplicação do tempo de execução que minimize o risco de pessoas com informações privilegiadas garantindo que o software e a configuração de produção implantados no Google seja devidamente revisado e tenha procedência rastreável.

Garantindo que nenhuma pessoa possa comprometer a criação e a cadeia de suprimentos de artefatos criados com base na LUCI sem serem detectados, O Google reduz o risco nos softwares que enviamos aos usuários.

A partir do ano passado, para cada build, o sistema produz um build verificável manifesto: um JWT assinado. que descreve completamente as origens que entraram no build, hashes criptográficos de binários e artefatos produzidos e parâmetros completos de build. Esse manifesto de build permite rastrear um artefato até as origens, o que torna o processo de build e as saídas verificáveis.

Além disso, o manifesto também permite verificar se o artefato criado não foi modificado porque qualquer mudança invalidaria a assinatura. No total, Isso proporciona uma cadeia de custódia para artefatos conforme eles passam entre sistemas confiáveis.

A autorização binária é implementada como um sistema de duas etapas. O sistema gera uma provenance com informações sobre o tempo de criação, a aplicação da política ocorre antes da assinatura ou instalação do software.

def CreateProvenance(self, build_manifest: Mapping[str, Any]):
  """Builder generates and signs provenance given build manifest. Signed JWT is placed
  alongside built artifact."""

Para o Chrome, antes de assinar os artefatos de software produzidos usando a infraestrutura de assinatura do Google, a política é aplicada para atender a requisitos mínimos específicos de segurança do build.

def VerifyProvenance(self, artifact_hash: str, provenance: str):
  """Provenance is verified using a policy engine service before signing an artifact."""

Os requisitos são divididos em cerca de quatro áreas:

  • Controle de origem:protege os dados enviados para o build.
  • Build:protege o processo que converte a origem em binário.
  • Procedência:atestado que contém um manifesto de build verificável.
  • Política:regras que determinam se um artefato se qualifica em um determinado contexto.

Implementar uma verificação de aplicação da política como parte dos processos de CI e CD do Chrome e da infraestrutura nos permitiu verificar se o código e configuração atendem a certos padrões mínimos de segurança. Esse é um controle essencial usado para limitar a capacidade de uma pessoa com informações privilegiadas potencialmente maliciosa ou comprometida para modificar o software que distribuímos aos usuários.