Chromium Chronicle #23: Chrome Infra'daki doğrulanmış derlemeler

23. Bölüm: Akash Mukherjee, Mountain View, Kaliforniya'da (Temmuz 2021)
Önceki bölümler

Chrome'u geliştirirken, bir yapının çıktısını etkileyen ortama birçok parça katkıda bulunur. İşletim sisteminden, yüklü destekleyici kitaplıklar, üçüncü taraf bağımlılıkları, yüklü araçlar ve çalışma zamanı ortamının kendisinden, bunların her biri çeşitli güvenlik hijyeni seviyeleriyle oluşturulmuştur.

Geçmişte Google, ikili program yetkilendirmesi kullanmaktadır. Bu, Google'da dağıtılan üretim yazılımının ve yapılandırmanın düzgün bir şekilde incelenmesini ve izlenebilir kaynağa sahip olmasını sağlayarak kuruluş içinde çalışanların oluşturduğu riskleri en aza indiren dahili bir çalışma zamanı yaptırım denetimidir.

Google, tek bir kişinin tespit edilmeden LUCI üzerinde üretilen yapıların ve tedarik zincirinin tehlikeye atılmamasını sağlayarak kullanıcılara gönderdiğimiz yazılımlardaki riski azaltır.

Sistem, geçen yıldan itibaren her derleme için doğrulanabilir bir derleme manifesti oluşturur. Derlemeye katkıda bulunan kaynakları, üretilen ikili programların ve yapıların kriptografik karmalarını ve tam derleme parametrelerini tam olarak açıklayan imzalı bir JWT. Bu derleme manifesti, bir yapıyı kaynaklara kadar izleyerek derleme sürecini ve sonuçlarını doğrulanabilir hale getirmemizi sağlar.

Ayrıca, herhangi bir değişiklik imzayı geçersiz kılacağından, manifest dosyası bize derlenen eserin değiştirilmediğini doğrulama imkanı da sunar. Toplamda bu, güvenilir sistemler arasında geçiş yapan eserler için bir gözetim zinciri sağlıyor.

İkili Program Yetkilendirmesi iki adımlı bir sistem olarak uygulanır. Sistem, derleme süresi bilgileriyle bir provenance oluşturur. Politikanın uygulanması, yazılım imzalanmadan veya yüklenmeden önce gerçekleşir.

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

Chrome için, üretilen yazılım yapılarını Google'ın imzalama altyapısını kullanarak imzalamadan önce bu politika, derlemenin belirli minimum güvenlik gereksinimlerini karşılayacak şekilde uygulanır.

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

Gereksinimler yaklaşık 4 alana ayrılır:

  • Kaynak denetimi: Derlemeye alınan verileri korur.
  • Derleme: Kaynağı ikili biçime dönüştüren işlemi korur.
  • Kaynak: Doğrulanabilir derleme manifesti içeren onay.
  • Politika: Belirli bir eserin belirli bir bağlamda uygun olup olmadığını belirleyen kurallar.

Chrome ve altyapı için CI ve CD süreçlerinin bir parçası olarak politika uygulama denetimi uygulamak, kod ve yapılandırmanın belirli minimum güvenlik standartlarını karşıladığını doğrulamamıza olanak tanıdı. Bu, potansiyel olarak kötü amaçlı olabilecek kuruluş içinden bir kişinin veya güvenliği ihlal edilmiş kuruluş içinden bir hesabın, kullanıcılara dağıttığımız yazılımı değiştirme yetkisini sınırlandırmak için kullanılan önemli bir denetimdir.