איסוף יומנים של המערכת לגילוי חדירות של Google Cloud (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 (הפעלת מרחב שמות היררכי בדלי הזה).
כדי להוסיף תווית של מאגר, לוחצים על החץ להרחבה כדי להרחיב את הקטע תוויות.
לוחצים על הוספת תווית ומציינים מפתח וערך לתווית.
בקטע 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 protection (הגנה על נתונים) שרוצים להגדיר לקטגוריה.
- כדי לבחור איך להצפין את נתוני האובייקט, לוחצים על החץ להרחבה של Data encryption ובוחרים Data encryption method.
לוחצים על יצירה.
הגדרת ייצוא של יומנים מ-Cloud IDS
- נכנסים לGoogle Cloud מסוף.
- עוברים אל Logging > Log Router.
- לוחצים על Create Sink.
מציינים את פרמטרי ההגדרה הבאים:
- שם יעד: מזינים שם בעל משמעות, לדוגמה,
google-cloud-ids-logs-sink. - יעד להעברה: בוחרים באפשרות Cloud Storage ומזינים את Google Cloud ה-URI של קטגוריית האחסון, לדוגמה,
gs://gcp-ids-logs. מסנן יומן:
logName="projects/<your-project-id>/logs/cloud-ids"
- שם יעד: מזינים שם בעל משמעות, לדוגמה,
לוחצים על יצירה.
הגדרת הרשאות ל-Cloud Storage
- נכנסים אל IAM & Admin > IAM.
- מאתרים את חשבון השירות של Cloud Logging.
- מקצים את התפקיד roles/storage.admin בקטגוריה.
הגדרת פידים
כדי להגדיר פיד:
- עוברים אל SIEM Settings (הגדרות SIEM) > Feeds (פידים).
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה Feed name (שם הפיד), מזינים שם לפיד, למשל GCP IDS Logs (יומני מערכת IDS של GCP).
- בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
- בוחרים באפשרות GCP IDS בתור סוג היומן.
- לוחצים על Get Service Account (קבלת חשבון שירות) לצד השדה Chronicle Service Account (חשבון השירות של Chronicle).
- לוחצים על הבא.
- מציינים ערכים לפרמטרים הבאים של הקלט:
- URI של קטגוריית אחסון: כתובת URL של קטגוריית Cloud Storage, לדוגמה,
gs://gcp-ids-logs. - אפשרויות למחיקת המקור: בוחרים את אפשרות המחיקה בהתאם להעדפות.
הערה: אם בוחרים באפשרות
Delete transferred filesאוDelete transferred files and empty directories, צריך לוודא שהענקתם לחשבון השירות את ההרשאות המתאימות. - הגיל המקסימלי של הקובץ: כולל קבצים שעברו שינוי במספר הימים האחרון. ברירת המחדל היא 180 ימים
- 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.