איסוף יומנים של פגיעויות ב-Armis

גרסת כלי הניתוח: 2.0

נתמך ב:

במאמר הזה מוסבר איך להטמיע יומני Armis Vulnerabilities ב-Google Security Operations באמצעות Google Cloud Functions. הכלי לניתוח נתונים הופך יומני נקודות חולשה באבטחה בפורמט JSON גולמי לפורמט מובנה שתואם ל-UDM של Google SecOps. הוא מחלץ שדות שונים מהיומן הגולמי, ממפה אותם לשדות UDM תואמים, מבצע המרות של סוגי נתונים ומבנה את הפלט להטמעה בפלטפורמת Google SecOps.

לפני שמתחילים

חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:

  • מופע Google SecOps עם מספר לקוח ופרטי כניסה לחשבון שירות
  • גישה מועדפת לפלטפורמת Armis Centrix
  • מפתח API Secret וכתובת URL של שרת ב-Armis
  • גישה אל Google Cloud עם הרשאות ליצירת Cloud Functions, סודות ב-Secret Manager ומשימות ב-Cloud Scheduler
  • רישיון או גישה למודול של Armis Asset Vulnerability Management (AVM)

איך מוצאים את מספר הלקוח ב-Google SecOps

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל SIEM Settings > Profile (הגדרות SIEM > פרופיל).
  3. מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.

קבלת פרטי כניסה לחשבון שירות של Google SecOps

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל SIEM Settings > Collection Agents.
  3. מורידים את קובץ אימות להטמעת נתונים (קובץ JSON של חשבון השירות).
  4. שומרים את הקובץ בצורה מאובטחת כי תצטרכו להעלות אותו אל Google Secret Manager.

קבלת מפתח API Secret של Armis

  1. נכנסים לפלטפורמת Armis Centrix.
  2. עוברים אל הגדרות > ניהול API.
  3. לוחצים על Create (יצירה) אם צריך ליצור מפתח סודי חדש של API.
  4. לוחצים על הצגה כדי לראות את המפתח הסודי.
  5. מעתיקים את המפתח הסודי ושומרים אותו בצורה מאובטחת.

הגדרת Google Secret Manager

בקטע הזה מוסבר איך להשתמש ב-Google Secret Manager כדי לאחסן בצורה מאובטחת את המפתח של חשבון השירות שנדרש לשילוב.

הוספת הסוד של חשבון השירות של Google SecOps

  1. נכנסים לGoogle Cloud מסוף.
  2. עוברים אל אבטחה > Secret Manager.
  3. לוחצים על Create Secret (יצירת סוד).
  4. מספקים את פרטי ההגדרה הבאים:
    • שם: מזינים שם לסוד (לדוגמה, secops-service-account).
    • ערך סודי: מעלים את קובץ ה-JSON של חשבון השירות של Google SecOps שהורדתם קודם, או מדביקים את התוכן שלו ישירות.
  5. לוחצים על Create Secret (יצירת סוד).
  6. מעתיקים את מזהה המשאב של הסוד שנוצר בפורמט הבא:

    projects/{project_id}/secrets/{secret_id}/versions/{version_id}
    

הוספת הסוד Armis API Secret Key

  1. ב-Secret Manager, לוחצים על Create Secret (יצירת סוד).
  2. מספקים את פרטי ההגדרה הבאים:
    • שם: מזינים שם לסוד (לדוגמה, armis-api-secret).
    • ערך הסוד: מדביקים את מפתח ה-API Secret של Armis שהתקבל קודם.
  3. לוחצים על Create Secret (יצירת סוד).
  4. מעתיקים את מזהה המשאב של הסוד שנוצר בפורמט הבא:

    projects/{project_id}/secrets/{secret_id}/versions/{version_id}`
    

הורדה והכנה של סקריפט ההטמעה

  1. אפשר לגשת למאגר הרשמי של סקריפטים להעברת נתונים של Google SecOps בכתובת https://github.com/chronicle/ingestion-scripts.
  2. מורידים את התוכן של ספריית armis מהמאגר.
  3. מורידים את ספריית common מהמאגר (תלות נדרשת).
  4. יוצרים ספרייה חדשה לפריסת Cloud Function במחשב המקומי.
  5. מעתיקים את התוכן של התיקיות armis ו-common לתיקיית הפריסה.

הגדרת משתני סביבה

  1. פותחים את הקובץ .env.yml בכלי לעריכת טקסט.
  2. עורכים את הקובץ עם ההגדרות הבאות:

    CHRONICLE_CUSTOMER_ID: <YOUR_CUSTOMER_ID>
    CHRONICLE_REGION: "us"
    CHRONICLE_SERVICE_ACCOUNT: projects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id}
    CHRONICLE_NAMESPACE: <YOUR_NAMESPACE>
    POLL_INTERVAL: "10"
    ARMIS_SERVER_URL: https://<your-armis-instance>.armis.com
    ARMIS_API_SECRET_KEY: projects/{project_id}/secrets/{armis-secret-id}/versions/{version_id}
    HTTPS_PROXY: 
    CHRONICLE_DATA_TYPE: ARMIS_VULNERABILITIES
    
    • מחליפים את הערכים הבאים:

      • ‫<YOUR_CUSTOMER_ID>: מספר הלקוח ב-Google SecOps
      • ‫projects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id}: נתיב המזהה המלא של משאב הסוד של חשבון השירות של Google SecOps מ-Secret Manager
      • ‫<YOUR_NAMESPACE>: מרחב שמות אופציונלי ליומנים של Google Security Operations (לדוגמה, armis-vulnerabilities)
      • ‫<your-armis-instance>: תת-הדומיין של הדייר ב-Armis (לדוגמה, אם כתובת ה-URL היא https://company.armis.com, משתמשים ב-company)
      • ‫projects/{project_id}/secrets/{armis-secret-id}/versions/{version_id}: נתיב מזהה המשאב המלא של ה-API Secret של Armis מ-Secret Manager

פריסת הפונקציה ב-Cloud Functions

  1. פותחים את Cloud Shell או את הטרמינל המקומי שבו מותקן ה-CLI של gcloud.
  2. עוברים לספרייה שמכילה את קובצי הסקריפט של ההעלאה.
  3. מריצים את הפקודה הבאה:

    gcloud functions deploy armis-vulnerabilities-ingestion \
      --gen2 \
      --entry-point main \
      --trigger-http \
      --runtime python39 \
      --env-vars-file .env.yml \
      --memory 512MB \
      --timeout 3600s \
      --region us-central1
    

פריסה באמצעות Cloud Function Gen1 (חלופה)

  • מריצים את הפקודה הבאה:

    gcloud functions deploy armis-vulnerabilities-ingestion \
      --entry-point main \
      --trigger-http \
      --runtime python39 \
      --env-vars-file .env.yml \
      --memory 512MB \
      --timeout 540s \
      --region us-central1
    

יצירת משימה ב-Cloud Scheduler

  1. נכנסים אל Cloud Scheduler במסוף Google Cloud .
  2. לוחצים על Create Job (יצירת משימה).
  3. מספקים את פרטי ההגדרה הבאים:
    • שם: מזינים שם למשימה (לדוגמה, armis-vulnerabilities-scheduler).
    • אזור: בוחרים את אותו אזור שבו נמצאת הפונקציה של Cloud Functions (לדוגמה, us-central1).
    • תדירות: מזינים את לוח הזמנים באמצעות תחביר cron (לדוגמה, */10 * * * * לכל 10 דקות).
    • אזור זמן: בוחרים את אזור הזמן המועדף (לדוגמה, UTC).
  4. לוחצים על Continue.
  5. בוחרים באפשרות HTTP כסוג היעד.
  6. מספקים את פרטי ההגדרה הבאים:
    • כתובת URL: במסוף Cloud Functions, עוברים לכרטיסייה TRIGGER של הפונקציה ומעתיקים את כתובת ה-URL של הטריגר. מדביקים אותו כאן.
    • שיטת HTTP: בוחרים באפשרות POST.
  7. לוחצים על Auth header > Add OIDC token (כותרת אימות > הוספת טוקן OIDC).
  8. בוחרים את חשבון השירות שבו נעשה שימוש בפונקציה של Cloud Functions.
  9. לוחצים על יצירה.

טבלת מיפוי UDM

שדה ביומן מיפוי UDM היגיון
affectedDevicesCount read_only_udm.security_result.detection_fields.value מיפוי ישיר, הומר למחרוזת.
attackComplexity read_only_udm.extensions.vulns.vulnerabilities.about.labels.value מיפוי ישיר.
attackVector read_only_udm.extensions.vulns.vulnerabilities.about.labels.value מיפוי ישיר.
availabilityImpact read_only_udm.extensions.vulns.vulnerabilities.about.labels.value מיפוי ישיר.
avmRating read_only_udm.security_result.detection_fields.value מיפוי ישיר.
בוטנטים read_only_udm.extensions.vulns.vulnerabilities.about.labels.value אם קיימות כמה רשתות בוטנט, הן משורשרות למחרוזת אחת.
cisaDueDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value מיפוי ישיר.
collection_time.nanos read_only_udm.metadata.event_timestamp.nanos מיפוי ישיר.
collection_time.seconds read_only_udm.metadata.event_timestamp.seconds מיפוי ישיר.
commonName read_only_udm.extensions.vulns.vulnerabilities.name מיפוי ישיר.
confidentialityImpact read_only_udm.security_result.detection_fields.value מיפוי ישיר.
cveUid read_only_udm.extensions.vulns.vulnerabilities.cve_id מיפוי ישיר.
cvssScore read_only_udm.extensions.vulns.vulnerabilities.cvss_base_score מיפוי ישיר, הומר לערך מסוג float.
description read_only_udm.metadata.description מיפוי ישיר.
epssPercentile read_only_udm.extensions.vulns.vulnerabilities.about.labels.value מיפוי ישיר, הומר למחרוזת.
epssScore read_only_udm.extensions.vulns.vulnerabilities.about.labels.value מיפוי ישיר, הומר למחרוזת.
exploitabilityScore read_only_udm.extensions.vulns.vulnerabilities.about.labels.value מיפוי ישיר, הומר למחרוזת.
firstReferencePublishDate read_only_udm.extensions.vulns.vulnerabilities.first_found הערך מנותח לחותמת זמן, והמערכת מטפלת בפורמטים עם מילישניות וגם בפורמטים בלי מילישניות.
firstWeaponizedReferencePublishDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value מיפוי ישיר.
hasRansomware read_only_udm.extensions.vulns.vulnerabilities.about.labels.value מיפוי ישיר, הומר למחרוזת.
id read_only_udm.metadata.product_log_id מיפוי ישיר.
impactScore read_only_udm.security_result.detection_fields.value מיפוי ישיר, הומר למחרוזת.
integrityImpact read_only_udm.security_result.detection_fields.value מיפוי ישיר.
isWeaponized read_only_udm.extensions.vulns.vulnerabilities.about.labels.value מיפוי ישיר, הומר למחרוזת.
latestExploitUpdate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value מיפוי ישיר.
numOfExploits read_only_udm.security_result.detection_fields.value מיפוי ישיר, הומר למחרוזת.
numberOfThreatActors read_only_udm.security_result.detection_fields.value מיפוי ישיר, הומר למחרוזת.
orgPriorityManualChangeReason read_only_udm.security_result.detection_fields.value מיפוי ישיר.
orgPriorityManualChangedBy read_only_udm.principal.user.userid מיפוי ישיר.
orgPriorityManualUpdateTime read_only_udm.principal.labels.value מיפוי ישיר.
privilegesRequired read_only_udm.security_result.detection_fields.value מיפוי ישיר.
publishedDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value מיפוי ישיר.
reportedByGoogleZeroDays read_only_udm.extensions.vulns.vulnerabilities.about.labels.value מיפוי ישיר, הומר למחרוזת.
היקף read_only_udm.extensions.vulns.vulnerabilities.about.labels.value מיפוי ישיר.
severity read_only_udm.extensions.vulns.vulnerabilities.severity ממופה לערכים CRITICAL, ‏ HIGH, ‏ MEDIUM, ‏ LOW על סמך הערך, והערך המקורי ממופה גם ל-severity_details.
סטטוס read_only_udm.extensions.vulns.vulnerabilities.about.labels.value מיפוי ישיר.
threatTags read_only_udm.extensions.vulns.vulnerabilities.about.labels.value אם קיימים כמה תגי איום, הם מחוברים למחרוזת אחת.
userInteraction read_only_udm.about.labels.value מיפוי ישיר.
vulnerabilities_matches read_only_udm.metadata.url_back_to_product מיפוי ישיר.
read_only_udm.metadata.event_type הערך שמוגדר הוא GENERIC_EVENT.
read_only_udm.metadata.product_name מגדירים את האפשרות 'ARMIS'.
read_only_udm.metadata.vendor_name מגדירים את האפשרות 'ARMIS'.
read_only_udm.metadata.log_type ההגדרה היא ARMIS_VULNERABILITIES.
read_only_udm.extensions.vulns.vulnerabilities.severity_details הערך בשדה 'חומרה' ממופה לשדה הזה

יומן שינויים

צפייה ביומן השינויים של מנתח התוכן הזה

הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.