Chromium Chronicle #23: Проверенные сборки в Chrome Infra

Эпизод 23: Акаш Мукерджи, Маунтин-Вью, Калифорния (июль 2021 г.)
Предыдущие серии

Когда мы создаем Chrome, многие элементы создают среду, влияющую на вывод артефакта. Из ОС установлены вспомогательные библиотеки, сторонние зависимости, установленные инструменты и сама среда выполнения; каждый из них построен с различными уровнями безопасности и гигиены.

Исторически Google использует двоичную авторизацию — внутреннюю проверку соблюдения требований во время выполнения, которая сводит к минимуму инсайдерский риск, гарантируя, что производственное программное обеспечение и конфигурация, развернутые в Google, проходят надлежащую проверку и имеют отслеживаемое происхождение.

Гарантируя, что ни один человек не сможет скомпрометировать сборку и цепочку поставок артефактов, созданных на основе LUCI, не будучи обнаруженным, Google снижает риски в отношении программного обеспечения, которое мы поставляем пользователям.

Начиная с прошлого года, для каждой сборки система создает проверяемый манифест сборки — подписанный JWT , полностью описывающий исходные коды, использованные в сборке, криптографические хеши созданных двоичных файлов и артефактов, а также полные параметры сборки. Этот манифест сборки позволяет нам отследить артефакт до источников, что делает процесс сборки и его результаты проверяемыми.

Кроме того, манифест также позволяет нам убедиться, что построенный артефакт не был изменен, поскольку любые изменения сделают подпись недействительной. В целом это обеспечивает нам цепочку хранения артефактов при их перемещении между доверенными системами.

Бинарная авторизация реализована как двухэтапная система. Система генерирует происхождение с информацией о времени сборки; применение политики происходит до подписания или установки программного обеспечения.

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 области:

  • Контроль версий: защищает данные, вошедшие в сборку.
  • Сборка: защищает процесс преобразования исходного кода в двоичный файл.
  • Происхождение: аттестация, содержащая проверяемый манифест сборки.
  • Политика: правила, которые определяют, соответствует ли данный артефакт данному контексту.

Внедрение проверки соблюдения политики в рамках процессов CI и CD для Chrome и инфраструктуры позволило нам убедиться, что код и конфигурация соответствуют определенным минимальным стандартам безопасности. Это критически важный элемент управления, используемый для ограничения возможности потенциально злонамеренного инсайдера или скомпрометированной инсайдерской учетной записи изменять программное обеспечение, которое мы распространяем среди пользователей.