איסוף יומנים של פגיעויות ב-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
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Profile (הגדרות SIEM > פרופיל).
- מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.
קבלת פרטי כניסה לחשבון שירות של Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Collection Agents.
- מורידים את קובץ אימות להטמעת נתונים (קובץ JSON של חשבון השירות).
- שומרים את הקובץ בצורה מאובטחת כי תצטרכו להעלות אותו אל Google Secret Manager.
קבלת מפתח API Secret של Armis
- נכנסים לפלטפורמת Armis Centrix.
- עוברים אל הגדרות > ניהול API.
- לוחצים על Create (יצירה) אם צריך ליצור מפתח סודי חדש של API.
- לוחצים על הצגה כדי לראות את המפתח הסודי.
- מעתיקים את המפתח הסודי ושומרים אותו בצורה מאובטחת.
הגדרת Google Secret Manager
בקטע הזה מוסבר איך להשתמש ב-Google Secret Manager כדי לאחסן בצורה מאובטחת את המפתח של חשבון השירות שנדרש לשילוב.
הוספת הסוד של חשבון השירות של Google SecOps
- נכנסים לGoogle Cloud מסוף.
- עוברים אל אבטחה > Secret Manager.
- לוחצים על Create Secret (יצירת סוד).
- מספקים את פרטי ההגדרה הבאים:
- שם: מזינים שם לסוד (לדוגמה,
secops-service-account). - ערך סודי: מעלים את קובץ ה-JSON של חשבון השירות של Google SecOps שהורדתם קודם, או מדביקים את התוכן שלו ישירות.
- שם: מזינים שם לסוד (לדוגמה,
- לוחצים על Create Secret (יצירת סוד).
מעתיקים את מזהה המשאב של הסוד שנוצר בפורמט הבא:
projects/{project_id}/secrets/{secret_id}/versions/{version_id}
הוספת הסוד Armis API Secret Key
- ב-Secret Manager, לוחצים על Create Secret (יצירת סוד).
- מספקים את פרטי ההגדרה הבאים:
- שם: מזינים שם לסוד (לדוגמה,
armis-api-secret). - ערך הסוד: מדביקים את מפתח ה-API Secret של Armis שהתקבל קודם.
- שם: מזינים שם לסוד (לדוגמה,
- לוחצים על Create Secret (יצירת סוד).
מעתיקים את מזהה המשאב של הסוד שנוצר בפורמט הבא:
projects/{project_id}/secrets/{secret_id}/versions/{version_id}`
הורדה והכנה של סקריפט ההטמעה
- אפשר לגשת למאגר הרשמי של סקריפטים להעברת נתונים של Google SecOps בכתובת https://github.com/chronicle/ingestion-scripts.
- מורידים את התוכן של ספריית armis מהמאגר.
- מורידים את ספריית common מהמאגר (תלות נדרשת).
- יוצרים ספרייה חדשה לפריסת Cloud Function במחשב המקומי.
- מעתיקים את התוכן של התיקיות armis ו-common לתיקיית הפריסה.
הגדרת משתני סביבה
- פותחים את הקובץ
.env.ymlבכלי לעריכת טקסט. עורכים את הקובץ עם ההגדרות הבאות:
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
פריסה באמצעות Cloud Functions Gen2 (מומלץ)
- פותחים את Cloud Shell או את הטרמינל המקומי שבו מותקן ה-CLI של gcloud.
- עוברים לספרייה שמכילה את קובצי הסקריפט של ההעלאה.
מריצים את הפקודה הבאה:
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
- נכנסים אל Cloud Scheduler במסוף Google Cloud .
- לוחצים על Create Job (יצירת משימה).
- מספקים את פרטי ההגדרה הבאים:
- שם: מזינים שם למשימה (לדוגמה,
armis-vulnerabilities-scheduler). - אזור: בוחרים את אותו אזור שבו נמצאת הפונקציה של Cloud Functions (לדוגמה,
us-central1). - תדירות: מזינים את לוח הזמנים באמצעות תחביר cron (לדוגמה,
*/10 * * * *לכל 10 דקות). - אזור זמן: בוחרים את אזור הזמן המועדף (לדוגמה, UTC).
- שם: מזינים שם למשימה (לדוגמה,
- לוחצים על Continue.
- בוחרים באפשרות HTTP כסוג היעד.
- מספקים את פרטי ההגדרה הבאים:
- כתובת URL: במסוף Cloud Functions, עוברים לכרטיסייה TRIGGER של הפונקציה ומעתיקים את כתובת ה-URL של הטריגר. מדביקים אותו כאן.
- שיטת HTTP: בוחרים באפשרות POST.
- לוחצים על Auth header > Add OIDC token (כותרת אימות > הוספת טוקן OIDC).
- בוחרים את חשבון השירות שבו נעשה שימוש בפונקציה של Cloud Functions.
- לוחצים על יצירה.
טבלת מיפוי 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.