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

에피소드 23: 아카쉬 무커지(캘리포니아 마운틴 뷰)(2021년 7월)
이전 에피소드

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

지금까지 Google은 Google에 배포된 프로덕션 소프트웨어 및 구성이 적절하게 검토되고 추적 가능한 출처를 보유하도록 하여 내부자 위험을 최소화하는 내부 런타임 시행 확인인 Binary Authorization을 사용합니다.

Google은 단 한 명이 LUCI를 기반으로 빌드된 아티팩트의 빌드와 공급망을 감지하지 않고 손상시키는 것을 방지하여 사용자에게 제공되는 소프트웨어의 위험을 줄입니다.

작년부터 시스템은 각 빌드에 대해 빌드에 포함된 소스, 생성된 바이너리 및 아티팩트의 암호화 해시, 전체 빌드 매개변수를 설명하는 서명된 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에서 사용자에게 배포하는 소프트웨어를 수정하는 능력을 제한하는 데 사용되는 중요한 제어 기능입니다.