מערכת למעקב CVE בזמן אמת אינה דורשת תקציבים של מיליונים או צוותים של 50 איש. עם פידים ב-JSON של NVD, כלים בקוד פתוח כמו Nuclei או OpenVAS, ומתן עדיפות חכם (CVSS + EPSS), צוות קטן יכול לסנן את הרעש ולהתמקד במה שחשוב. הנה הארכיטקטורה הטכנית שבדקנו בסביבות אמיתיות, עם צינורות התראות שלא מציפים את הצוות.

מדוע פיד ה-JSON של NVD הוא הבסיס (ולא ה-APIs בתשלום)?

הפיד ב-JSON של NVD הוא המקור המקיף והמעודכן ביותר של פגיעויות ציבוריות, עם למעלה מ-200,000 CVE רשומות עד 2024. בניגוד ל-APIs בתשלום (כמו VulnDB או Snyk), פיד ה-JSON הוא חינמי, מתוקנן (פורמט CVE JSON 5.0) ומתעדכן כל שעתיים. עבור צוותים קטנים, זה מספיק: לא צריך זמן תגובה של שניות, אלא מערכת שמעבדת את הנתונים ביעילות.

הפיד מורכב משני קבצים מרכזיים:

הורדת הקבצים האלה כל שעה (עם סקריפט ב-Python או Bash) יעילה יותר מאשר קריאות ל-APIs בתשלום, שלרוב יש להם מגבלות קצב ועלויות נסתרות. תיעדנו זאת בCyberShield, שם אנו משתמשים בגישה זו למעקב אחר מחסניות של עסקים קטנים ובינוניים באמריקה הלטינית עם פחות מ-10 אנשי צוות טכניים.

ארכיטקטורת הצינור: מהפיד ועד להתראה ממוקדת

מערכת למעקב CVE בזמן אמת צריכה לפתור שלוש בעיות:

  1. כיצד להוריד ולעבד את הפידים של NVD מבלי להציף משאבים?
  2. כיצד לסנן את ה-CVE הרלוונטיות למחסנית שלך?
  3. כיצד לתעדף התראות כך שהצוות לא יטבע באזעקות שווא?

הנה התהליך שאנו ממליצים עליו, המבוסס על הטמעות אמיתיות:

1. הורדה ואחסון

אנו משתמשים בסקריפט ב-Python (nvd_feed_downloader.py) שמוריד את הקבצים modified ו-recent כל שעה ומאחסן אותם בדלי S3 (או בספרייה מקומית אם התקציב מוגבל). הסקריפט בודק את תקינות הקבצים עם ה-hashes SHA256 שמספק NVD ומשחרר את הקבצים הדחוסים .gz כדי לעבד אותם.

דוגמה לקוד מינימלי להורדת הפיד:

import requests
import gzip
import json

def download_nvd_feed(feed_type="modified"):
    url = f"https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-{feed_type}.json.gz"
    response = requests.get(url)
    with open(f"nvdcve-1.1-{feed_type}.json.gz", "wb") as f:
        f.write(response.content)
    with gzip.open(f"nvdcve-1.1-{feed_type}.json.gz", "rb") as f_in:
        with open(f"nvdcve-1.1-{feed_type}.json", "wb") as f_out:
            f_out.write(f_in.read())

download_nvd_feed()

2. סינון לפי מחסנית טכנולוגית

לא כל ה-CVE רלוונטיות לסביבה שלך. לדוגמה, אם המחסנית שלך משתמשת ב-Apache Tomcat 9.0.x, CVE ב-Nginx 1.25 לא אמורה להפעיל התראה. כדי לסנן, אנו מנהלים מלאי תוכנה בקובץ stack.json עם הפורמט הבא:

{
  "software": [
    {"name": "Apache Tomcat", "version": "9.0.83"},
    {"name": "OpenSSL", "version": "1.1.1w"},
    {"name": "PostgreSQL", "version": "14.9"}
  ]
}

סקריפט שני (cve_filter.py) משווה כל CVE מהפיד למלאי זה. אנו משתמשים בשדה configurations.nodes ב-JSON של NVD, שמציין את המוצרים והגרסאות המושפעות. אם יש התאמה, ה-CVE מסומנת כרלוונטית.

3. מתן עדיפות עם CVSS ו-EPSS

הCVSS (Common Vulnerability Scoring System) הוא התקן למדידת חומרת CVE, אך יש לו מגבלות: הוא לא לוקח בחשבון את ההקשר של הסביבה שלך או את הסבירות לניצול. לכן אנו משלבים CVSS עם EPSS (Exploit Prediction Scoring System), מודל של FIRST שמנבא את הסבירות שפגיעות תנוצל ב-30 הימים הקרובים.

כלל מתן העדיפות שלנו פשוט:

EPSS שימושי במיוחד להפחתת רעש. לדוגמה, ל-CVE-2023-4863 (פגיעות ב-libwebp) היה CVSS של 8.8, אך EPSS של 0.97 (97% סבירות לניצול). לעומת זאת, ל-CVE-2023-5217 (פגיעות נוספת ב-libwebp) היה CVSS דומה (8.8) אך EPSS של 0.01. הראשונה דרשה טלאי מיידי; השנייה יכלה להמתין.

כלים לאימות: OpenVAS מול Nuclei

לאחר סינון ה-CVE הרלוונטיות, השלב הבא הוא לאמת אם הן קיימות בסביבה שלך. ישנן שתי גישות:

1. OpenVAS (לסריקה מעמיקה)

OpenVAS הוא סורק פגיעויות בקוד פתוח המכסה למעלה מ-50,000 בדיקות. הוא אידיאלי לסביבות עם שרתים ורשתות מורכבות, אך יש לו שני חסרונות:

הגדרנו את OpenVAS כך שיסרוק רק את ה-CVE המסוננות בשלב הקודם. זה מקצר את זמן הסריקה משעות לדקות. לדוגמה, אם המסנן זיהה 10 CVE רלוונטיות, OpenVAS יבצע רק את הבדיקות הקשורות ל-10 ה-CVE האלה.

2. Nuclei (לאימות מהיר)

Nuclei הוא כלי סריקה קל משקל המבוסס על תבניות YAML. הוא אידיאלי לצוותים קטנים מכיוון:

דוגמה לתבנית Nuclei לאימות CVE-2023-4863 (libwebp):

id: CVE-2023-4863

info:
  name: libwebp Heap Buffer Overflow
  author: camila
  severity: critical
  description: |
    Heap buffer overflow in libwebp in Google Chrome prior to 116.0.5845.187.
  reference:
    - https://nvd.nist.gov/vuln/detail/CVE-2023-4863
  tags: cve,cve2023,libwebp,chrome

requests:
  - method: GET
    path:
      - "{{BaseURL}}/image.webp"

    matchers:
      - type: word
        words:
          - "RIFF"
          - "WEBP"
        condition: and

Nuclei הוא הכלי המועדף עלינו לאימות בסביבות עם מחסניות מודרניות (קונטיינרים, APIs, אפליקציות ווב). השתמשנו בו בCyberShield כדי לאמת CVE אצל לקוחות עם תשתית ב-AWS ו-Kubernetes.

צינור התראות: כיצד להימנע מעייפות

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

1. קיבוץ לפי רכיב

אם יש 5 CVE ב-Apache Tomcat 9.0.83, לא שולחים 5 התראות נפרדות. במקום זאת, מקבצים את ה-CVE לפי רכיב וגרסה, ושולחים התראה אחת עם רשימת ה-CVE המושפעות. זה מקטין את נפח ההתראות ב-70-80%.

2. הסלמה לפי חומרה

אנו משתמשים במערכת הסלמה המבוססת על מתן עדיפות CVSS + EPSS:

3. שילוב עם מערכת ניהול קריאות

התראות קריטיות מומרות אוטומטית לכרטיסים ב-Jira או GitHub Issues עם השדות הבאים:

זה מבטיח שההתראות לא יאבדו ברעש של ערוצי התקשורת.

מקרה אמיתי: מעקב CVE בעסק קטן ובינוני של מסחר אלקטרוני

הטמענו מערכת זו עבור עסק קטן ובינוני באמריקה הלטינית עם מחסנית המורכבת מ:

ב-30 הימים הראשונים, המערכת עיבדה 1,243 CVE מהפיד של NVD. מתוכן:

חמש ה-CVE הקריטיות התאימו ל:

  1. CVE-2023-4863 (libwebp): תוקנה תוך 2 שעות.
  2. CVE-2023-38545 (curl): תוקנה תוך יום.
  3. CVE-2023-44487 (HTTP/2 Rapid Reset): טופלה עם כללי WAF תוך 6 שעות.
  4. CVE-2023-5129 (libwebp, כפילות של CVE-2023-4863): התעלמו לאחר אימות.
  5. CVE-2023-4911 (Looney Tunables, glibc): תוקנה תוך 3 ימים.

הצוות הטכני (2 אנשים) קיבל רק 12 התראות קריטיות ב-30 יום, במקום 1,243 ה-CVE המקוריות. זה אפשר להם להתמקד במה שחשוב מבלי להציף אותם.

טעויות נפוצות (וכיצד להימנע מהן)

במהלך הטמעת המערכת הזו, נתקלנו בטעויות חוזרות ונשנות:

1. אי-עדכון מלאי התוכנה

מסנן ה-CVE עובד רק אם מלאי התוכנה (stack.json) מעודכן. במקרה אחד, לקוח לא עדכן את המלאי שלו לאחר מעבר מ-Apache Tomcat 8 ל-9. במשך 3 חודשים, המערכת התעלמה מכל ה-CVE של Tomcat 9, כולל אחת קריטית (CVE-2023-41080).

פתרון: אוטומציה של עדכון המלאי עם כלים כמו osquery או Ansible.

2. תלות רק ב-CVSS

CVSS מודד חומרה טכנית, אך לא את הסבירות לניצול. ב-2023, ל-40% מה-CVE עם CVSS ≥ 7.0 היה EPSS < 0.1 (לפי נתוני FIRST). התעלמות מ-EPSS מובילה לתעדוף פגיעויות שלעולם לא ינוצלו.

פתרון: תמיד לשלב CVSS עם EPSS.

3. אי-אימות ה-CVE המסוננות

המסנן לפי מחסנית מפחית רעש, אך אינו מבטיח שה-CVE קיימת בסביבה שלך. במקרה אחד, לקוח קיבל התראה על CVE-2023-22515 (Atlassian Confluence), אך המופע של Confluence שלו כבר היה מתוקן. ההתראה הייתה חיובית שגויה.

פתרון: לאמת את כל ה-CVE המסוננות עם OpenVAS או Nuclei.

4. התראות ללא הקשר

שליחת התראה עם רק מזהה ה-CVE (למשל: "CVE-2023-4863") חסרת תועלת. הצוות צריך לדעת:

פתרון: לכלול בהתראה סיכום של ה-CVE, קישור ל-NVD וצעדי טיפול.

מערכת למעקב CVE בזמן אמת אינה מותרות השמורים לחברות עם תקציבים של שבעה ספרות. עם פידים ב-JSON של NVD, כלים בקוד פתוח ומתן עדיפות חכם, צוות קטן יכול לבנות צינור שמסנן רעש ומספק התראות שניתן לפעול לפיהן. המפתח הוא באוטומציה של עיבוד הנתונים, אימות הפגיעויות בסביבה שלך והסלמת ההתראות בצורה חכמה. בCyberShield, אנו מפעילים מערכות מסוג זה 24/7 עבור עסקים קטנים ובינוניים באמריקה הלטינית, ומוכיחים שאבטחת סייבר לא חייבת להיות יקרה או מורכבת כדי להיות יעילה.

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

מקורות

  1. NIST National Vulnerability Database (NVD). "NVD JSON Feeds Documentation". https://nvd.nist.gov/vuln/data-feeds. נבדק באוקטובר 2024.
  2. FIRST. "Exploit Prediction Scoring System (EPSS)". https://www.first.org/epss/. גרסה 3.0, 2024.
  3. Nuclei. "Nuclei Templates Documentation". https://nuclei.projectdiscovery.io/templating-guide/. נבדק באוקטובר 2024.
  4. OpenVAS. "OpenVAS Documentation". https://www.openvas.org/. Greenbone Networks, 2024.
  5. NIST. "Common Vulnerability Scoring System (CVSS) v3.1". https://nvd.nist.gov/vuln-metrics/cvss. 2021.
  6. CISA. "Known Exploited Vulnerabilities Catalog". https://www.cisa.gov/known-exploited-vulnerabilities-catalog. עודכן באוקטובר 2024.
  7. ProjectDiscovery. "Nuclei GitHub Repository". https://github.com/projectdiscovery/nuclei. נבדק באוקטובר 2024.
  8. Atlassian. "CVE-2023-22515 - Confluence Security Advisory". https://confluence.atlassian.com/security/cve-2023-22515. 4 באוקטובר 2023.
  9. Google. "Chrome Releases: Stable Channel Update for Desktop". https://chromereleases.googleblog.com/2023/09/stable-channel-update-for-desktop_11.html. 11 בספטמבר 2023.
  10. Jain, A., et al. "EPSS: Exploit Prediction Scoring System". arXiv:2104.08977. 2021.