תיעוד

תלותיות פגיעות

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

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

הרשימה

בכל ראש חדש של הענף ברירת המחדל, ולפחות פעם ביום, Coroid קוראת את קבצי הנעילה של הפרויקט באמצעות OSV-Scanner, מקובעת לגרסה אחת ונבדקת מול סיכום הבדיקה שלה. הסורק מקבל רק את קבצי התלות, תצורה ש־Coroid יוצרת, ואין לו גישה לרשת או לפרטי אישורים. ה־ osv-scanner.toml של מאגר הקוד אינו משפיע.

בתפריט אבטחה → תלויות מוצגת רשימת החבילות של כל פרויקט: החבילות והגרסאות המותקנות שלהן, איזה קובץ מניפסט מכריז על כל אחת, אילו מהן פגיעות, כיסוי כל קובץ, ומתי נקראו נתוני העצות לאחרונה. ייצוא CycloneDX מפיק את הרשימה כקובץ CycloneDX 1.5. הקובץ מציג רק פגיעויות שכבר פורסמו לציבור. ראו גילוי.

מה Coroid קוראת במלואו

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

קובץמערכת אקולוגיתגרסאות מדויקותתלויות נגזרות מלאותכיסוי
package-lock.jsonnpmכןכןמלא
npm-shrinkwrap.jsonnpmכןכןמלא
pnpm-lock.yamlnpmכןכןמלא
yarn.locknpmכןכןמלא
requirements.txtPyPIכןלאחלקי
go.modGoכןלאחלקי

טבלה זו נוצרה מתצורות הבדיקה של Coroid עצמו שרצו דרך הסורק, כך שהיא משתנה רק כשהבדיקות משתנות.

  • מרחבי עבודה של npm, pnpm ו־Yarn: ה־ package.json של מרחב עבודה ללא קובץ נעילה משלו מכוסה על ידי קובץ הנעילה של השורש. ה־ package.json שכבר אינו תואם את קובץ הנעילה שלו הוא חלקי עד שייווצר מחדש קובץ נעילה.
  • קבצי נעילה של npm חייבים להיות בגרסה 2 או 3. רשומות של pnpm ו־Yarn שמקורן בגיט, קובץ מקומי או תיקון הן חלקיות.
  • requirements.txt מכסה רק גרסאות שנקבעו עם ==.
  • קבצי תלות אחרים (package.json ללא קובץ נעילה, pyproject.toml, poetry.lock, Pipfile, Cargo.lock, Gemfile.lock, pom.xml, Gradle, Composer, NuGet ואחרים) נמצאים ומוצגים כחלקיים, תוך ציון שם הקובץ, כך שפרויקט לעולם לא ייראה מכוסה כשהוא אינו כזה.

עצות

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

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

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

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

על בקשות משיכה

הבדיקה Coroid Security סורקת את קבצי הנעילה ש־pull request משנה, בבסיס ובראש, וסופרת רק את הגרסאות הפגיעות שהשינוי מכניס:

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

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

התראות

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