Chromium Chronicle #23: Chrome 인프라의 확인된 빌드

에피소드 23: 아카시 무케르지, 캘리포니아주 마운틴뷰 (2021년 7월)
이전 에피소드

Chrome을 빌드할 때는 아티팩트의 출력에 영향을 미치는 환경에 많은 요소가 기여합니다. OS에서 설치된 지원 라이브러리, 서드 파티 종속 항목 설치된 도구 및 런타임 환경 자체를 구성할 수 있습니다 이러한 각 서비스는 다양한 보안 관리 수준으로 구축됩니다.

지금까지 Google에서는 바이너리 승인을 사용하여 내부자 위험을 최소화하는 내부 런타임 시행 확인 프로덕션 소프트웨어 및 구성이 Google Cloud에 제대로 검토되고 추적 가능한 출처가 있는 경우

아무도 빌드를 침해할 수 없도록 보장 LUCI를 기반으로 구축된 아티팩트의 공급망을 탐지하기 위해 Google은 사용자에게 제공하는 소프트웨어에 대한 위험을 줄입니다.

작년부터 시스템은 각 빌드에 대해 검증 가능한 빌드를 생성하며 매니페스트: 서명된 JWT입니다. 빌드에 들어온 소스를 완전히 설명하고 생성된 바이너리 및 아티팩트의 암호화 해시와 전체 빌드 매개변수입니다. 이 빌드 매니페스트를 사용하면 아티팩트를 소스까지 추적할 수 있습니다. 따라서 빌드 프로세스와 출력을 검증할 수 있습니다.

또한 매니페스트를 사용하면 빌드된 아티팩트가 수정되지 않았는지 확인할 수도 있습니다. 서명이 무효화되기 때문입니다. 전체적으로 신뢰할 수 있는 시스템 사이를 오가는 아티팩트에 대한 보관 체인을 제공합니다.

Binary Authorization은 2단계 시스템으로 구현됩니다. 시스템에서 provenance를 생성합니다. 빌드 시간 정보와 함께 소프트웨어에 서명하거나 설치하기 전에 정책이 시행됩니다.

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

Chrome의 경우 생성된 소프트웨어 아티팩트에 Google의 서명 인프라를 사용하여 서명하기 전에 빌드의 특정 최소 보안 요구사항을 충족하도록 정책이 적용됩니다.

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

요구사항은 대략 4개 영역으로 나뉩니다.

  • 소스 제어: 빌드에 입력된 데이터를 보호합니다.
  • 빌드: 소스를 바이너리로 변환하는 프로세스를 보호합니다.
  • 출처: 검증 가능한 빌드 매니페스트가 포함된 증명입니다.
  • 정책: 특정 아티팩트가 특정 컨텍스트에서 적합한지 판단하는 규칙입니다.

Chrome 및 인프라에 대한 CI 및 CD 프로세스의 일부로 정책 시행 확인 구현 코드가 정상적으로 작동한다는 것을 구성 및 구성이 보안에 대한 특정 최소 기준을 충족해야 합니다. 이는 인코더-디코더 아키텍처를 기반으로 잠재적인 내부자 또는 침해된 내부자 계정의 Google에서 사용자에게 배포하는 소프트웨어를 수정할 수 있습니다.