Chromium Chronicle #23: ساخت‌های تأیید شده در Chrome Infra

قسمت 23: توسط آکاش موکرجی در Mountain View، CA (ژوئیه، 2021)
قسمت های قبلی

وقتی کروم را می‌سازیم، قطعات زیادی به محیطی کمک می‌کنند که بر خروجی یک مصنوع تأثیر می‌گذارد. از سیستم عامل، کتابخانه های پشتیبانی کننده، وابستگی های شخص ثالث، ابزارهای نصب شده و خود محیط زمان اجرا نصب شده است. هر کدام از این ها با سطوح مختلف بهداشتی امنیتی ساخته شده اند.

از لحاظ تاریخی، Google از مجوز باینری استفاده می‌کند، یک بررسی اجرای داخلی زمان اجرا که با اطمینان از اینکه نرم‌افزار تولید و پیکربندی مستقر در Google به درستی بازبینی شده و دارای منشأ قابل ردیابی است، ریسک داخلی را به حداقل می‌رساند.

Google با حصول اطمینان از اینکه هیچ فردی نمی تواند ساخت و زنجیره تامین مصنوعات ساخته شده بر روی LUCI را بدون شناسایی به خطر بیاندازد، خطر نرم افزاری را که برای کاربران ارسال می کنیم کاهش می دهد.

از سال گذشته، برای هر ساخت، سیستم یک مانیفست ساخت قابل تأیید تولید می‌کند - یک 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 حوزه تقسیم می شوند:

  • کنترل منبع: از داده هایی که وارد ساخت شده اند محافظت می کند.
  • Build: از فرآیندی که منبع را به باینری تبدیل می کند محافظت می کند.
  • منشأ: گواهی که حاوی مانیفست ساخت قابل تأیید است.
  • خط مشی: قوانینی که تعیین می کنند آیا یک مصنوع خاص در یک زمینه خاص واجد شرایط است یا خیر.

اجرای بررسی اجرای خط‌مشی به عنوان بخشی از فرآیندهای CI و CD برای Chrome و زیرساخت، ما را قادر می‌سازد تأیید کنیم که کد و پیکربندی با حداقل استانداردهای امنیتی مطابقت دارد. این یک کنترل حیاتی است که برای محدود کردن توانایی یک حساب داخلی مخرب بالقوه یا حساب داخلی در معرض خطر برای اصلاح نرم افزاری که ما بین کاربران توزیع می کنیم، استفاده می شود.