Chromium Chronicle n.o 23: Compilaciones verificadas en Chrome Infra

Episodio 23: de Akash Mukherjee en Mountain View, CA (julio de 2021)
Episodios anteriores

Cuando compilamos Chrome, muchas partes contribuyen al entorno que influyen en la salida de un artefacto. Desde el SO, instalar bibliotecas compatibles, dependencias de terceros las herramientas instaladas y el entorno de ejecución; cada uno de ellos está construido con varios niveles de higiene de seguridad.

Google siempre ha usado la autorización binaria, una verificación de aplicación del entorno de ejecución interna que minimiza el riesgo de usuarios con información privilegiada garantizando que el software de producción y la configuración implementada en Google se revise de manera adecuada y tenga una procedencia rastreable.

Asegúrate de que ninguna sola persona pueda comprometer la construcción. y la cadena de suministro de artefactos creada en LUCI sin ser detectados, Google reduce el riesgo en el software que enviamos a los usuarios.

A partir del año pasado, para cada compilación, el sistema produce una compilación verificable Manifiesto: un JWT firmado. con una descripción completa de las fuentes que se incluyeron en la compilación hashes criptográficos de objetos binarios y artefactos producidos y parámetros de compilación completos. Este manifiesto de compilación nos permite rastrear un artefacto hasta las fuentes, así, el proceso de compilación y sus resultados se pueden verificar.

Además, el manifiesto nos permite verificar que el artefacto compilado no se modificó ya que cualquier cambio invalidaría la firma. En total, lo que nos proporciona una cadena de custodia para los artefactos a medida que atraviesan sistemas confiables.

La autorización binaria se implementa como un sistema de dos pasos. El sistema genera una provenance. con información sobre el tiempo de compilación; la aplicación de la política ocurre antes de firmar o instalar el software.

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

En Chrome, antes de firmar los artefactos de software producidos con la infraestructura de firmas de Google, la política se aplique para cumplir con requisitos mínimos de seguridad específicos de la compilación.

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

Los requisitos se dividen en aproximadamente 4 áreas:

  • Control de fuente: Protege los datos que se incluyeron en la compilación.
  • Compilación: Protege el proceso que convierte la fuente en objeto binario.
  • Procedencia: Certificación que contiene un manifiesto de compilación verificable.
  • Política: Son reglas que determinan si un artefacto determinado califica en un contexto determinado.

Implementar una verificación de aplicación de políticas como parte de los procesos de CI y CD para Chrome y la infraestructura nos permitió verificar que el código y configuración cumplan con ciertos estándares mínimos de seguridad. Este es un control crítico que se usa para limitar la capacidad de un usuario con información privilegiada potencialmente malicioso o una cuenta de usuario con información privilegiada comprometida para modificar el software que distribuimos a los usuarios.