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.