Episode 23: oleh Akash Mukherjee di Mountain View, CA (Juli 2021)
Episode sebelumnya
Saat kami membangun Chrome, banyak bagian yang berkontribusi pada lingkungan yang memengaruhi output sebuah artefak. Dari OS, pustaka pendukung yang diinstal, dependensi pihak ketiga, alat terinstal, dan lingkungan runtime itu sendiri; masing-masing dibangun dengan tingkat higiene keamanan yang berbeda.
Secara historis, Google menggunakan otorisasi biner, pemeriksaan penerapan runtime internal yang meminimalkan risiko pihak internal dengan memastikan bahwa software dan konfigurasi produksi yang di-deploy di Google ditinjau dengan benar dan memiliki asal yang dapat dilacak.
Dengan memastikan tidak ada seorang pun yang dapat menyusupi build dan supply chain artefak yang dibangun di LUCI tanpa terdeteksi, Google mengurangi risiko terhadap software yang kami kirimkan kepada pengguna.
Mulai tahun lalu, untuk setiap build, sistem menghasilkan build yang dapat diverifikasi manifes—JWT yang ditandatangani yang sepenuhnya menjelaskan sumber yang masuk ke dalam build, hash kriptografis dari biner dan artefak yang dihasilkan, dan parameter build lengkap. Manifes pembangunan ini memungkinkan kita untuk melacak artefak kembali ke sumbernya, sehingga proses build dan output-nya dapat diverifikasi.
Selain itu, manifes tersebut juga memungkinkan kita memverifikasi bahwa artefak yang dibangun tidak dimodifikasi karena setiap perubahan akan membatalkan tanda tangan. Secara total, ini memberi kita rantai-hak (chain-of-custody) untuk artefak saat mereka berpindah di antara sistem terpercaya.
Otorisasi Biner diterapkan sebagai sistem dua langkah. Sistem menghasilkan provenance dengan informasi waktu build; penegakan kebijakan dilakukan sebelum menandatangani atau menginstal perangkat lunak.
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 perangkat lunak yang dihasilkan dengan kebijakan diterapkan untuk memenuhi persyaratan keamanan minimum tertentu dari 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 dalam 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.
Menerapkan pemeriksaan penegakan kebijakan sebagai bagian dari proses CI dan CD untuk Chrome dan infrastruktur telah memungkinkan kita untuk memverifikasi bahwa kode dan konfigurasi memenuhi standar minimum tertentu untuk keamanan. Ini adalah kontrol penting yang digunakan untuk membatasi kemampuan orang dalam yang berpotensi berbahaya atau akun orang dalam yang disusupi memodifikasi perangkat lunak yang kita distribusikan ke pengguna.