Chromium Chronicle #23: Build terverifikasi di Chrome Infra

Episode 23: oleh Akash Mukherjee di Mountain View, CA (Juli, 2021)
Episode sebelumnya

Saat kami membangun Chrome, banyak bagian berkontribusi pada lingkungan yang memengaruhi output sebuah artefak. Dari OS, menginstal library pendukung, dependensi pihak ketiga, alat terinstal, dan lingkungan runtime itu sendiri; masing-masing dibuat dengan berbagai tingkat kebersihan keamanan.

Secara historis, Google menggunakan otorisasi biner, pemeriksaan penegakan runtime internal yang meminimalkan risiko pihak internal dengan memastikan bahwa software produksi dan konfigurasi yang di-deploy di Google ditinjau dengan benar dan memiliki provenance yang dapat dilacak.

Dengan memastikan bahwa tidak ada satu orang pun yang dapat membahayakan build dan supply chain artefak yang dibangun di LUCI tanpa terdeteksi, Google mengurangi risiko software yang kami kirimkan kepada pengguna.

Mulai tahun lalu, untuk setiap build, sistem akan menghasilkan manifes build yang dapat diverifikasi, yaitu JWT yang ditandatangani, yang sepenuhnya menjelaskan sumber yang digunakan untuk build, hash kriptografis dari biner dan artefak yang dihasilkan, serta parameter build lengkap. Manifes build ini memungkinkan kami untuk melacak artefak kembali ke sumbernya, sehingga proses build dan output-nya dapat diverifikasi.

Selain itu, manifes juga memungkinkan kami memverifikasi bahwa artefak yang dibuat tidak diubah karena perubahan akan membatalkan tanda tangan. Secara total, hal ini memberi kami rantai penahanan untuk artefak saat artefak tersebut melintasi sistem tepercaya.

Otorisasi Biner diterapkan sebagai sistem dua langkah. Sistem menghasilkan provenance dengan informasi waktu build; pemberlakuan kebijakan dilakukan sebelum menandatangani atau menginstal software.

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

Untuk Chrome, sebelum menandatangani artefak software yang dihasilkan menggunakan infrastruktur penandatanganan Google, kebijakan diterapkan untuk memenuhi persyaratan keamanan minimum tertentu untuk build.

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

Persyaratan dibagi menjadi sekitar 4 area:

  • Kontrol sumber: melindungi data yang masuk ke build.
  • Build:melindungi proses yang mengonversi sumber menjadi biner.
  • Provenance: pengesahan yang berisi manifes build yang dapat diverifikasi.
  • Kebijakan: aturan yang menentukan apakah artefak tertentu memenuhi syarat dalam konteks tertentu.

Dengan menerapkan pemeriksaan penegakan kebijakan sebagai bagian dari proses CI dan CD untuk Chrome serta infrastruktur, kami dapat memverifikasi bahwa kode dan konfigurasi memenuhi standar keamanan minimum tertentu. Ini adalah kontrol penting yang digunakan untuk membatasi kemampuan orang dalam yang berpotensi berbahaya atau akun orang dalam yang disusupi untuk memodifikasi software yang kami distribusikan kepada pengguna.