Chromium Chronicle מס' 23: גרסאות build מאומתות ב-Chrome Infra

פרק 23: מאת אקש מוחרג'י במאונטיין ויו, קליפורניה (יולי 2021)
פרקים קודמים

כשאנחנו בונים את Chrome, חלקים רבים תורמים לסביבה שמשפיעה על הפלט של פריט מידע שנוצר בתהליך פיתוח (Artifact). מערכת ההפעלה, ספריות תומכות מותקנות, יחסי תלות של צדדים שלישיים, כלים מותקנים וסביבת זמן הריצה עצמה. כל אחד מהכלים האלה מותאם לרמות שונות של תקינות אבטחה.

בעבר, Google משתמשת ב-binary authorization (הרשאה בינארית) – בדיקה פנימית לאכיפה בזמן הריצה, שמפחיתה את הסיכון של גורמים פנימיים, כי היא מבטיחה שתוכנות ייצור והגדרות אישיות נפרסו ב-Google ייבדקו כראוי ושהמקור שלהן יהיה במעקב.

בזכות העובדה שאדם אחד לא יכול לפגוע בדגם ובשרשרת האספקה של ארטיפקטים שנבנו ב-LUCI בלי שיזוהו, Google מפחיתה את הסיכון לתוכנות שאנחנו שולחים למשתמשים.

החל מהשנה שעברה, המערכת יוצרת מניפסט build מאומתJWT חתום שמתאר באופן מלא את המקורות שנכנסו ל-build, גיבובים קריפטוגרפיים של הקבצים הבינאריים והארטיפקטים שנוצרו ופרמטרים מלאים של ה-build. המניפסט ה-build הזה מאפשר לנו לעקוב אחרי פריט מידע שנוצר בתהליך פיתוח (Artifact) עד למקור שלו, וכך מאפשר לאמת את תהליך ה-build ואת הפלט שלו.

בנוסף, המניפסט מאפשר לנו גם לוודא שהארטיפקט המובנה לא השתנה, כי כל שינוי יגרום לביטול התוקף של החתימה. בסך הכול, כך אנחנו יוצרים שרשרת משמרות של ארטיפקטים במהלך המעבר בין מערכות מהימנות.

Binary Authorization מיושמת כמערכת דו-שלבית. המערכת יוצרת provenance עם מידע על מועד הבנייה, ואכיפת המדיניות מתבצעת לפני החתימה על התוכנה או התקנתה.

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, המדיניות נאכפת כך שתעמוד בדרישות אבטחה מינימליות מסוימות של ה-build.

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

הדרישות מחולקות בערך ל-4 תחומים:

  • בקרת מקור: נועדה להגן על הנתונים שנוספו ל-build.
  • Build: מגן על התהליך שממיר את המקור לבינארי.
  • מקור: אימות שמכיל מניפסט build מאומת.
  • מדיניות: כללים שקובעים אם פריט מידע שנוצר בתהליך פיתוח (Artifact) עומד בדרישות בהקשר נתון.

בעזרת ההטמעה של בדיקת אכיפת המדיניות כחלק מתהליכי ה-CI ו-CD ב-Chrome ובתשתית, הצלחנו לאמת שהקוד וההגדרות עומדים בסטנדרטים מינימליים מסוימים לאבטחה. אמצעי הבקרה הזה הוא אמצעי בקרה חיוניים שמגבילים את היכולת של גורמים פנימיים או חשבונות שנמצאים בסיכון לשנות את התוכנות שאנחנו מפיצים למשתמשים.