איסוף יומנים של 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.
כדי להפעיל מרחב שמות היררכי, לוחצים על החץ להרחבת הקטע Optimize for file oriented and data-intensive workloads ובוחרים באפשרות Enable Hierarchical namespace on this bucket.
כדי להוסיף תווית לקטגוריה, לוחצים על החץ להרחבת הקטע Labels.
לוחצים על Add label ומציינים מפתח וערך בשביל התווית.
בקטע Choose where to store your data מבצעים את הפעולות הבאות:
- בוחרים Location type.
בתפריט של סוג המיקום, בוחרים מיקום שבו נתוני האובייקטים בקטגוריה יאוחסנו באופן קבוע.
כדי להגדיר שכפול בין קטגוריות, מרחיבים את הקטע Set up cross-bucket replication.
בקטע 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.
מציינים את פרמטרי ההגדרה הבאים:
- Sink Name: מזינים שם בעל משמעות, לדוגמה
google-cloud-ids-logs-sink. - Sink Destination: בוחרים באפשרות Cloud Storage ומזינים את ה-URI של קטגוריית האחסון ב- Google Cloud , לדוגמה
gs://gcp-ids-logs. מסנן יומנים:
logName="projects/<your-project-id>/logs/cloud-ids"
- Sink Name: מזינים שם בעל משמעות, לדוגמה
לוחצים על יצירה.
הגדרת הרשאות ל-Cloud Storage
- נכנסים לדף IAM & Admin > IAM.
- מאתרים את חשבון השירות של Cloud Logging.
- מקצים את התפקיד roles/storage.admin בקטגוריה.
הגדרת פידים
כדי להגדיר פיד:
- עוברים אל הגדרות > ניהול נתונים > פידים. אם אתם משתמשים בפלטפורמה של SIEM בלבד, עוברים אל הגדרות > פידים.
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה Feed name, מזינים שם לפיד, לדוגמה GCP IDS Logs.
- בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
- בוחרים באפשרות GCP IDS בתור Log type.
- לוחצים על Get Service Account ליד השדה Chronicle Service Account.
- לוחצים על הבא.
- מציינים ערכים לפרמטרים הבאים של הקלט:
- 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 | Logic (פונקציה לוגית) |
|---|---|---|
| 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: OUTBOUND – server-to-client: INBOUND |
| 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.