Chromium Chronicle #23: builds verificados na infraestrutura do Chrome

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

Quando criamos o Chrome, muitas partes contribuem para o ambiente que influencia a saída de um artefato. A partir do SO, bibliotecas de suporte instaladas, dependências de terceiros, ferramentas instaladas e o próprio ambiente de execução. Cada um é criado com vários níveis de integridade de segurança.

Historicamente, o Google usa a autorização binária, uma verificação de aplicação interna do ambiente de execução que minimiza o risco de pessoas com informações privilegiadas, garantindo que o software e a configuração de produção implantados no Google sejam analisados adequadamente e tenham procedência rastreável.

Ao garantir que nenhuma pessoa possa comprometer o build e a cadeia de suprimentos de artefatos criados na LUCI sem serem detectados, o Google reduz o risco do software enviado aos usuários.

A partir do ano passado, para cada build, o sistema produz um manifesto de build verificável, um JWT assinado que descreve totalmente as origens integradas ao build, hashes criptográficos de binários e artefatos produzidos e parâmetros de build completos. Esse manifesto de build permite rastrear um artefato de volta às origens, tornando 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 nos fornece uma cadeia de custódia para artefatos à medida que eles transitam entre sistemas confiáveis.

A autorização binária é implementada como um sistema de duas etapas. O sistema gera uma provenance com informações de tempo de build. A aplicação da política ocorre antes de assinar ou instalar o software.

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

No caso do 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 de segurança específicos 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 quatro áreas:

  • Controle de origem:protege os dados que foram inseridos no 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.

Com a implementação de uma verificação de aplicação da política como parte dos processos de CI e CD para o Chrome e a infraestrutura, pudemos verificar se o código e a configuração atendem a determinados padrões mínimos de segurança. Esse é um controle crítico usado para limitar a capacidade de uma conta com informações privilegiadas possivelmente mal-intencionada ou de uma conta com informações privilegiadas comprometida de modificar o software que distribuímos aos usuários.