תיעוד

סיסמאות שנחשפו

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

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

מה נסרק?

  • כל שינוי: שינויים של כל pull request, כחלק מ- Coroid Security בדיקה, ושינויים של הסוכנים של Coroid לפני שהם נדחפים.
  • ענף ברירת המחדל: כל דחיפה, ופעם אחת דרך כל ההיסטוריה שלו. סריקת ההיסטוריה מתחילה כאשר מאגר מחובר או כאשר תכונת סיסמאות שנחשפו מופעלת.
  • ענפי בקשות משיכה: פרטי אישור שנדחפו לענף pull request יפתחו גם הם תוצאת זיהוי, מכיוון שהם כבר נמצאים במאגר.

ענף שנדחף ללא pull request אינו נסרק.

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

מה מזוהה?

פרטי אישור של ספקים בפורמטים המוכרים שלהם (מפתחות גישה של AWS, טוקנים של GitHub ו־GitLab, מפתחות OpenAI ואחרים), טוקנים של הרשאה, פרטי אישור שמוקצים לשמות כגון password או api_key, מפתחות פרטיים, פרטי אישור בתוך כתובות URL, ושרשראות ארוכות בעלות אנטרופיה גבוהה. פרטי אישור שמוקצים בקוד נמצאים רק כאשר הערך הוא ליטרלי, ולא משתנה או קריאה לפונקציה.

Coroid אינו שומר את הערך לעולם.

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

בכל מקום שבו סיסמה הייתה מופיעה בדרך כלל (תוצאות זיהוי, בדיקות, תגובות סקירה, לוגים), Coroid מציג רק את הכלל, האורך והמיקום, למשל [redacted secret: named_credential, 40 characters]. אף חלק מהערך אינו מוצג, אפילו לא התווים הראשונים שלו.

Coroid אינו מנסה לבדוק האם פרטי האישור שהוא מוצא עובדים.

סיסמה אחת, תוצאת זיהוי אחת

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

סיסמה נסגרת רק באמצעות אישור

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

  • הוחלפה או בוטלה;
  • התאריך שבו זה נעשה;
  • הערה אופציונלית.

תכונת אבטחה רושמת מי אישר ומתי, ומציגה זאת על תוצאת הזיהוי: "הוחלפה ב־28 באוקטובר, אושרה על ידי אלכס ב־29 באוקטובר". תוצאת הזיהוי עוברת ל־ החלפה שאושרה.

תיקון סיסמה שנחשפה

יצירת משימה ברשימת הבדיקה יוצרת משימה בפרויקט עם השלבים הבאים:

  1. החלף או בטל את פרטי האישור אצל הספק שלהם.
  2. העביר אותם למקום שבו הפרויקט שומר את הסיסמאות שלו.
  3. הסר אותם מהקוד.
  4. אשר את ההחלפה בתכונת אבטחה.

המשימה אינה חוזרת על עצמה או מנסה את פרטי האישור. היא אינה כותבת מחדש את ההיסטוריה של Git: הסרת פרטי אישור מההיסטוריה היא החלטה של הצוות שלך, ואינה הופכת סיסמה שנחשפה לבטוחה שוב.

פרטי אישור אמיתיים או שאינם בעיה

על תוצאת זיהוי של סיסמה, בעלי זכויות ומנהלים עונים האם זה היה פרטי אישור אמיתי?

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

תשובות אלו גם מסייעות בכיול הגלאים.

חסימה

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

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

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

התראות

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

GitHub סריקת סודות

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