התפשטות סודות (Secrets Sprawl): איך תיקנו 412 טוקנים שדלפו

תהליך CI נכשל בשעה 02:13 בבוקר ב-3 במרץ. מצאנו 412 טוקנים של API שדלפו ב-37 מאגרים (repositories). השגיאה הזו העמידה בסכנה עלויות פריצה פוטנציאליות של 1.2 מיליון דולר.

רוב הצוותים חושבים ש-Vault פותר הכל. במציאות, Vault יכול להפוך לנקודת כשל יחידה (single point of failure) בגלל שיהוי (latency). כשטוקנים חיים מחוץ ל-Vault, הם משתמשים בערכים קשיחים (hard-coded) או במשתני סביבה (environment variables). ברירות המחדל הללו אינן מופיעות ביומני הביקורת (audit logs).

המדדים שלנו הראו את המחיר של ההתפשטות הזו:

  • שליפת סוד רגילה: 48 ms לבקשה.
  • בזמן הדליפה: 187 ms לבקשה.

סוכני בנייה (Build agents) משכו 12 טוקנים לכל משימה (job) מ-Vault cluster מרוחק. זה גרם ל-timeouts ואילץ מפתחים לבצע rollback לשינויים באופן ידני. שיהוי (latency) הוא לא רק תהליך איטי. הוא מרכז עלות (cost center) שמנפח את חשבונות הענן ומאט את המפתחים.

מפתח AWS אחד שדלף במאגר staging עלול לעלות 120 דולר לשעה אם תוקף ישתמש בו. שעה אחת של שימוש לרעה עולה יותר מביקורת אבטחה רבעונית.

סורקים סטטיים (Static scanners) אכזבו אותנו. הם פספסו 78% מהטוקנים שלנו. למה? כי הטוקנים הללו נוצרו תוך כדי תנועה (on the fly) והיו קיימים ב-build artifacts, ולא בקוד המקור. שלב אחד ב-GitHub Actions כתב טוקן לתוך Docker layer. הסורק לא ראה דבר, אך הטוקן ישב ב-registry שלנו במשך שבועות.

אתם זקוקים לנראות בזמן ריצה (runtime visibility), לא רק לבדיקה סטטית.

בנינו מנוע Lambda כדי לתקן זאת. הוא עוקב אחרי CloudTrail עבור סודות חדשים ומשווה אותם ל-Vault שלנו. להלן תהליך העבודה (workflow) החדש:

  • זיהוי סוד באמצעות webhook.
  • שאילתה ל-Vault עבור מטא-דאטה (metadata).
  • ביטול התוקף (invalidate) של הטוקן באמצעות ה-API של הספק.
  • פתיחת PR להסרת הסוד מהקובץ.
  • מיזוג (merge) ה-PR באופן אוטומטי אם הוא עובר CI.

המנוע הזה ביצע rotation ל-412 טוקנים ב-27 דקות עם שיעור הצלחה של 99.97%.

כעת אנו עוקבים אחר גיל הסוד (secret age). אם טוקן ישן מ-30 יום, הבנייה נכשלת. הכלל הפשוט הזה הפחית דליפות חדשות ב-62% ברבעון אחד. אנו משתמשים גם במודל isolation-forest כדי לסמן דפוסי שימוש מוזרים. אם טוקן מופיע מכתובת IP חדשה, המערכת מבצעת לו rotation באופן מיידי.

הפסיקו להתייחס לטוקנים כאל קבצים. התייחסו לגיל הסוד ולשיהוי השליפה (retrieval latency) כאל מדדים מרכזיים. אם תעשו זאת, ההתפשטות תצטמצם.

מקור: https://dev.to/isabelle_dubuis_d858453d7/secrets-sprawl-how-we-cleaned-up-412-leaked-tokens-and-stopped-the-latency-bleed-k71

קהילת למידה אופציונלית: https://t.me/GyaanSetuAi