איסוף יומנים של Cloud IDS
במאמר הזה מוסבר איך לייצא יומנים של Cloud IDS ולייבא אותם אל Google Security Operations באמצעות Cloud Storage. הכלי לניתוח הנתונים הופך יומנים גולמיים של Cloud IDS בפורמט JSON מ- Google Cloud לפורמט UDM מובנה. הוא מחלץ שדות רלוונטיים, ממפה אותם לסכימת UDM, מסווג אירועים ומעשיר את הנתונים בהקשר נוסף כמו כיוון הרשת וסוגי המשאבים.
לפני שמתחילים
חשוב לוודא שמתקיימות דרישות הסף הבאות:
- מופע של Google SecOps.
- Cloud IDS מוגדר ופעיל בסביבת Google Cloud .
- גישת אדמין ל- Google Cloud והרשאות מתאימות לגישה ל-Cloud IDS.
יצירת קטגוריה של Cloud Storage
- נכנסים למסוףGoogle Cloud .
נכנסים לדף Cloud Storage Buckets.
לוחצים על Create.
ממלאים את פרטי הקטגוריה בדף Create a bucket. אחרי כל אחד מהשלבים הבאים, לוחצים על המשך כדי לעבור לשלב הבא:
בקטע Get started (תחילת העבודה), מבצעים את הפעולות הבאות:
- מזינים שם ייחודי שעומד בדרישות לשמות של קטגוריות. לדוגמה, gcp-ids-logs.
כדי להפעיל את מרחב השמות ההיררכי, לוחצים על חץ ההרחבה כדי להרחיב את הקטע אופטימיזציה לעומסי עבודה שמתמקדים בקבצים ובעיבוד נתונים, ואז בוחרים באפשרות הפעלת מרחב שמות היררכי בדלי הזה.
כדי להוסיף תווית של מאגר, לוחצים על החץ להרחבה כדי להרחיב את הקטע תוויות.
לוחצים על הוספת תווית ומציינים מפתח וערך לתווית.
בקטע Choose where to store your data, מבצעים את הפעולות הבאות:
- בוחרים סוג מיקום.
בתפריט של סוג המיקום, בוחרים מיקום שבו נתוני האובייקטים בקטגוריה יישמרו באופן קבוע.
כדי להגדיר שכפול בין מאגרי מידע, מרחיבים את הקטע הגדרת שכפול בין מאגרי מידע.
בקטע Choose a storage class for your data, בוחרים default storage class לקטגוריה, או בוחרים ב-Autoclass לניהול אוטומטי של סוג האחסון (storage class) של נתוני הקטגוריה.
בקטע Choose how to control access to objects, בוחרים באפשרות not כדי לא לאכוף public access prevention, ובוחרים access control model לאובייקטים של הקטגוריה.
בקטע Choose how to protect object data:
- בוחרים באחת מהאפשרויות בקטע הגנה על נתונים שרוצים להגדיר לקטגוריה.
- כדי לבחור איך להצפין את נתוני האובייקט, לוחצים על החץ להרחבה של Data encryption ובוחרים Data encryption method.
לוחצים על יצירה.
הגדרת ייצוא של יומנים מ-Cloud IDS
- נכנסים למסוףGoogle Cloud .
- עוברים אל Logging > Log Router.
- לוחצים על Create Sink.
מציינים את פרמטרי ההגדרה הבאים:
- שם מאגר: מזינים שם בעל משמעות, לדוגמה,
google-cloud-ids-logs-sink. - יעד של Sink: בוחרים באפשרות Cloud Storage ומזינים את ה-URI של קטגוריית האחסון, לדוגמה:
gs://gcp-ids-logs. Google Cloud מסנן יומן:
logName="projects/<your-project-id>/logs/cloud-ids"
- שם מאגר: מזינים שם בעל משמעות, לדוגמה,
לוחצים על יצירה.
הגדרת הרשאות ל-Cloud Storage
- נכנסים אל IAM & Admin > IAM.
- מאתרים את חשבון השירות של Cloud Logging.
- מקצים את התפקיד roles/storage.admin בקטגוריה.
הגדרת פידים
כדי להגדיר פיד, מבצעים את השלבים הבאים:
- עוברים אל SIEM Settings > Feeds.
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה Feed name (שם הפיד), מזינים שם לפיד, למשל GCP IDS Logs (יומני מערכת IDS של GCP).
- בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
- בוחרים באפשרות GCP IDS בתור Log type.
- לוחצים על קבלת חשבון שירות לצד השדה חשבון השירות של Chronicle.
- לוחצים על הבא.
- מציינים ערכים לפרמטרים הבאים של הקלט:
- Storage Bucket URI: כתובת URL של קטגוריה של Cloud Storage, לדוגמה,
gs://gcp-ids-logs. - אפשרויות למחיקת מקורות: בוחרים את אפשרות המחיקה לפי ההעדפה.
הערה: אם בוחרים באפשרות
Delete transferred filesאוDelete transferred files and empty directories, צריך לוודא שהענקתם לחשבון השירות את ההרשאות המתאימות. - הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון. ברירת המחדל היא 180 ימים.
- Storage Bucket URI: כתובת URL של קטגוריה של Cloud Storage, לדוגמה,
- לוחצים על הבא.
- בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.
טבלת מיפוי UDM
| שדה היומן | מיפוי UDM | לוגיקה |
|---|---|---|
| insertId | metadata.product_log_id | מיפוי ישיר. |
| jsonPayload.alert_severity | security_result.severity | מיפוי ישיר. |
| jsonPayload.alert_time | metadata.event_timestamp | מיפוי ישיר. |
| jsonPayload.application | principal.application | מיפוי ישיר, רק אם הכיוון הוא מהשרת ללקוח. |
| jsonPayload.application | target.application | מיפוי ישיר, רק אם הכיוון הוא מהלקוח לשרת או אם logName מכיל traffic. |
| jsonPayload.category | security_result.category | המיפוי מתבצע על סמך הערך של jsonPayload.category: – dos: NETWORK_DENIAL_OF_SERVICE – info-leak: NETWORK_SUSPICIOUS – protocol-anomaly: NETWORK_MALICIOUS – backdoor, spyware, trojan: SOFTWARE_MALICIOUS |
| jsonPayload.category | security_result.category_details | מיפוי ישיר. |
| jsonPayload.cves | extensions.vulns.vulnerabilities.cve_id | מיפוי ישיר, איטרציה על המערך. |
| jsonPayload.destination_ip_address | target.ip | מיפוי ישיר. |
| jsonPayload.destination_port | target.port | מיפוי ישיר. |
| jsonPayload.details | extensions.vulns.vulnerabilities.description | מיפוי ישיר. |
| jsonPayload.details | security_result.detection_fields.value | ממופה אם קיים jsonPayload.repeat_count. המפתח מוגדר כ-repeat_count. |
| jsonPayload.direction | network.direction | מיפוי על סמך הערך של 'jsonPayload.direction': - 'client-to-server': יוצא - 'server-to-client': נכנס |
| jsonPayload.elapsed_time | network.session_duration.seconds | מיפוי ישיר. |
| jsonPayload.ip_protocol | network.ip_protocol | מיפוי ישיר, המרה לאותיות רישיות ואז מיפוי למספר הפרוטוקול. |
| jsonPayload.name | security_result.threat_name | מיפוי ישיר. |
| jsonPayload.network | principal.resource.name | מיפוי ישיר, רק אם הכיוון הוא מהשרת ללקוח. |
| jsonPayload.network | target.resource.name | מיפוי ישיר, רק אם הכיוון הוא מהלקוח לשרת או אם logName מכיל traffic. |
| jsonPayload.repeat_count | security_result.detection_fields.value | ממופה אם הוא קיים. המפתח מוגדר ל-'repeat_count'. |
| jsonPayload.session_id | network.session_id | מיפוי ישיר. |
| jsonPayload.source_ip_address | principal.ip | מיפוי ישיר. |
| jsonPayload.source_port | principal.port | מיפוי ישיר. |
| jsonPayload.start_time | about.labels.value | ממופה אם הוא קיים. המפתח מוגדר ל-'start_time'. |
| jsonPayload.start_time | additional.fields.value.string_value | ממופה אם הוא קיים. המפתח מוגדר ל-'start_time'. |
| jsonPayload.threat_id | security_result.threat_id | מיפוי ישיר. |
| jsonPayload.total_bytes | about.labels.value | ממופה אם הוא קיים. המפתח מוגדר כ-'total_bytes'. |
| jsonPayload.total_bytes | additional.fields.value.string_value | ממופה אם הוא קיים. המפתח מוגדר כ-'total_bytes'. |
| jsonPayload.total_packets | about.labels.value | ממופה אם הוא קיים. המפתח מוגדר כ-'total_packets'. |
| jsonPayload.total_packets | additional.fields.value.string_value | ממופה אם הוא קיים. המפתח מוגדר כ-'total_packets'. |
| jsonPayload.type | security_result.detection_fields.value | ממופה אם הוא קיים. המפתח מוגדר כ-'type'. |
| jsonPayload.uri_or_filename | target.file.full_path | מיפוי ישיר. |
| logName | security_result.category_details | מיפוי ישיר. |
| receiveTimestamp | metadata.collected_timestamp | מיפוי ישיר. |
| resource.labels.id | observer.resource.product_object_id | מיפוי ישיר. |
| resource.labels.location | observer.location.name | מיפוי ישיר. |
| resource.labels.resource_container | observer.resource.name | מיפוי ישיר. |
| resource.type | observer.resource.resource_subtype | מיפוי ישיר. |
| metadata.event_type | הערך נקבע על ידי קבוצה של כללים מותנים שמבוססים על הנוכחות והערכים של שדות אחרים. ברירת המחדל היא GENERIC_EVENT. | |
| metadata.vendor_name | ערך סטטי: Google Cloud Platform. |
|
| metadata.product_name | ערך סטטי: GCP_IDS. |
|
| metadata.log_type | ערך סטטי: GCP_IDS. |
|
| extensions.vulns.vulnerabilities.vendor | ערך סטטי: GCP_IDS, מתווסף לכל CVE ב-'jsonPayload.cves'. |
|
| principal.resource.resource_type | ערך סטטי: VPC_NETWORK, מתווסף אם jsonPayload.network קיים והכיוון הוא מהשרת ללקוח. |
|
| target.resource.resource_type | ערך סטטי: VPC_NETWORK, מתווסף אם jsonPayload.network קיים והכיוון הוא מהלקוח לשרת או אם logName מכיל traffic. |
|
| observer.resource.resource_type | ערך סטטי: CLOUD_PROJECT, מתווסף אם קיים הערך resource.labels.resource_container או resource.type. |
|
| observer.resource.attribute.cloud.environment | ערך סטטי: GOOGLE_CLOUD_PLATFORM, מתווסף אם קיים הערך resource.labels.resource_container או resource.type. |
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.