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

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

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

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

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

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

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

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

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

ב-Chrome, לפני חתימה על פריטי מידע שנוצרו בתהליך הפיתוח (Artifact) של התוכנה באמצעות תשתית החתימה של 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 ובתשתית שאפשרה לנו לאמת שהקוד וההגדרות האישיות עומדות בסטנדרטים מינימליים מסוימים של אבטחה. זו אמצעי בקרה חיוני שעוזר להגביל את היכולת של חשבון פנימי שעשוי להיות זדוני או שנפרץ כדי לשנות את התוכנות שאנחנו מפיצים למשתמשים.