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.