איסוף יומני Gmail
גרסת המנתח: 7.0
במאמר הזה מוסבר איך להטמיע יומנים של Gmail ב-Google Security Operations באמצעות Google Cloud Storage V2.
Gmail הוא שירות האימייל של Google Workspace שמספק אימייל מאובטח וחכם עם הגנה מובנית מפני ספאם והגנה מפישינג. יומני Gmail כוללים מידע מפורט על מסירת אימיילים, אירועי אבטחה וזרימת הודעות דרך התשתית של Gmail.
לפני שמתחילים
חשוב לוודא שמתקיימות דרישות הסף הבאות:
- מופע של Google SecOps
- פרויקט GCP עם Cloud Storage API ו-BigQuery API מופעלים
- חשבון Google Workspace עם מהדורה מתאימה (Enterprise Standard, Enterprise Plus, Education Standard או Education Plus)
- גישת סופר-אדמין למסוף Admin ב-Google Workspace
- הרשאות ליצירה ולניהול של מאגרי GCS
- הרשאות לניהול מדיניות IAM בקטגוריות של GCS
- הרשאות ליצירת שאילתות מתוזמנות ב-BigQuery
- לחשבון השירות gapps-reports@system.gserviceaccount.com צריכה להיות הרשאת עריכה בפרויקט BigQuery
יצירת קטגוריה של Google Cloud Storage
שימוש במסוף Google Cloud
- נכנסים אל מסוף Google Cloud.
- בוחרים את הפרויקט או יוצרים פרויקט חדש.
- בתפריט הניווט, נכנסים ל-Cloud Storage > Buckets.
- לוחצים על Create bucket.
מספקים את פרטי ההגדרה הבאים:
הגדרה ערך Name your bucket (שם הקטגוריה) מזינים שם ייחודי גלובלית (לדוגמה, gmail-logs-export)סוג המיקום בוחרים לפי הצרכים (אזור, שני אזורים, מספר אזורים) Location בוחרים את המיקום (לדוגמה, us-central1)סוג האחסון (storage class) רגיל (מומלץ ליומנים שצריך לגשת אליהם לעיתים קרובות) בקרת גישה אחיד (מומלץ) כלים להגנה אופציונלי: הפעלת ניהול גרסאות של אובייקטים או מדיניות שמירת נתונים לוחצים על יצירה.
שימוש בכלי שורת הפקודה של Google Cloud
לחלופין, אפשר ליצור קטגוריה באמצעות הפקודה
gcloud:gcloud storage buckets create gs://gmail-logs-export \ --location=us-central1 \ --default-storage-class=STANDARD- מחליפים את:
-
gmail-logs-export: שם הקטגוריה הרצוי (ייחודי בכל העולם). -
us-central1: האזור המועדף (לדוגמה,us-central1, europe-west1).
-
- מחליפים את:
הגדרת Google Workspace לייצוא יומנים ל-BigQuery
יומני Google Workspace, כולל יומני Gmail, מיוצאים ל-BigQuery באמצעות התכונה המאוחדת של יומנים ודוחות של Workspace.
הפעלת ייצוא ל-BigQuery של יומנים ב-Workspace
- נכנסים עם חשבון סופר-אדמין למסוף Google Admin.
- נכנסים אל התפריט > דיווח > שילובים של נתונים.
- מעבירים את העכבר מעל הכרטיס BigQuery Export ולוחצים על עריכה.
- מסמנים את התיבה הפעלת ייצוא נתונים של Google Workspace ל-Google BigQuery.
- בקטע מזהה פרויקט ב-BigQuery, בוחרים את הפרויקט שבו רוצים לאחסן את היומנים.
- בקטע New dataset within project, מזינים את השם של מערך הנתונים שבו רוצים לאחסן את היומנים (לדוגמה,
workspace_logs). - אופציונלי: מסמנים את התיבה הגבלת מערך הנתונים למיקום גיאוגרפי ספציפי ובוחרים את המיקום מהתפריט.
לוחצים על Save.
אחרי שמפעילים את הייצוא, אירועים ביומן הפעילות זמינים בדרך כלל תוך 10 דקות. הנתונים מיוצאים לטבלאות בשם activity_YYYYMMDD במערך הנתונים שצוין.
יצירת שאילתה מתוזמנת לייצוא מ-BigQuery ל-GCS
כדי לייצא אוטומטית יומני Gmail מ-BigQuery ל-Cloud Storage לפי לוח זמנים חוזר, יוצרים שאילתה מתוזמנת באמצעות ההצהרה EXPORT DATA.
שימוש במסוף BigQuery
- במסוף Google Cloud, עוברים אל BigQuery.
- בחלונית הניווט הימנית, לוחצים על Scheduled queries (שאילתות מתוזמנות).
- לוחצים על יצירת שאילתה מתוזמנת.
בעורך השאילתות, מזינים את ה-SQL הבא:
EXPORT DATA OPTIONS( uri='gs://gmail-logs-export/gmail-logs/*.json', format='JSON', overwrite=false ) AS SELECT * FROM `PROJECT_ID.workspace_logs.activity_*` WHERE record_type = 'gmail' AND _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))- מחליפים את:
-
gmail-logs-export: השם של קטגוריית GCS -
PROJECT_ID: מזהה הפרויקט ב-GCP -
workspace_logs: השם של מערך הנתונים ב-BigQuery
-
- מחליפים את:
בקטע אפשרויות תזמון:
- חזרה: בוחרים באפשרות שעות.
- כל: מזינים
1. - התאריך והשעה של התחלת ההרצה: בוחרים את התאריך והשעה הנוכחיים.
בקטע Destination for query results (יעד לתוצאות השאילתה):
- מערך נתונים: בוחרים מערך נתונים למטא-נתונים של השאילתה (לא הנתונים המיוצאים).
לוחצים על Save.
שימוש בכלי שורת הפקודה של BigQuery
אפשר גם ליצור שאילתה מתוזמנת באמצעות הפקודה
bq:bq mk \ --transfer_config \ --project_id=PROJECT_ID \ --data_source=scheduled_query \ --display_name='Gmail Logs Export to GCS' \ --schedule='every 1 hours' \ --params='{ "query":"EXPORT DATA OPTIONS(uri=\"gs://gmail-logs-export/gmail-logs/*.json\", format=\"JSON\", overwrite=false) AS SELECT * FROM `PROJECT_ID.workspace_logs.activity_*` WHERE record_type = \"gmail\" AND _TABLE_SUFFIX = FORMAT_DATE(\"%Y%m%d\", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))", "destination_table_name_template":"gmail_export_metadata", "write_disposition":"WRITE_TRUNCATE" }'- מחליפים את:
-
PROJECT_ID: מזהה הפרויקט ב-GCP -
gmail-logs-export: השם של קטגוריית GCS -
workspace_logs: השם של מערך הנתונים ב-BigQuery
-
- מחליפים את:
אחזור חשבון השירות של Google SecOps
Google SecOps משתמש בחשבון שירות ייחודי כדי לקרוא נתונים מהקטגוריה של GCS. אתם צריכים לתת לחשבון השירות הזה גישה לקטגוריה שלכם.
הגדרת פיד ב-Google SecOps כדי להטמיע יומני Gmail
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על הוספת פיד חדש.
- לוחצים על Configure a single feed (הגדרת פיד יחיד).
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
Gmail Logs). - בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
בוחרים באפשרות GMAIL Logs (יומנים של Gmail) בתור Log type (סוג היומן).
לוחצים על Get Service Account (קבלת חשבון שירות). מוצגת כתובת אימייל ייחודית של חשבון השירות, לדוגמה:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comמעתיקים את כתובת האימייל הזו לשימוש בשלב הבא.
לוחצים על הבא.
מציינים ערכים לפרמטרים הבאים של הקלט:
כתובת ה-URL של קטגוריית האחסון: מזינים את ה-URI של קטגוריית GCS עם נתיב הקידומת:
gs://gmail-logs-export/gmail-logs/- מחליפים את:
-
gmail-logs-export: השם של קטגוריית GCS -
gmail-logs: הקידומת או הנתיב לתיקייה שבה מאוחסנים היומנים
-
- מחליפים את:
אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה המועדפת:
- אף פעם: לא נמחקים קבצים אחרי ההעברה (מומלץ לבדיקות).
- מחיקת קבצים שהועברו: הקבצים נמחקים אחרי שההעברה מסתיימת.
מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת.
גיל מקסימלי של קובץ: כולל קבצים ששונו במספר הימים האחרונים. ברירת המחדל היא 180 ימים.
מרחב השמות של הנכס: מרחב השמות של הנכס.
תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.
לוחצים על הבא.
בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.
הקצאת הרשאות IAM לחשבון השירות של Google SecOps
לחשבון השירות של Google SecOps צריך להיות התפקיד צפייה באובייקט אחסון בקטגוריה של GCS.
שימוש במסוף Google Cloud
- עוברים אל Cloud Storage > Buckets (קטגוריות).
- לוחצים על שם הקטגוריה.
- עוברים לכרטיסייה Permissions.
- לוחצים על הענקת גישה.
- מספקים את פרטי ההגדרה הבאים:
- Add principals (הוספת ישויות מורשות): מדביקים את כתובת האימייל בחשבון של חשבון השירות של Google SecOps.
- הקצאת תפקידים: בוחרים באפשרות צפייה באובייקט אחסון.
- לוחצים על Save.
שימוש בכלי שורת הפקודה של Google Cloud
לחלופין, אפשר לתת הרשאות באמצעות הפקודה
gcloud:gcloud storage buckets add-iam-policy-binding gs://gmail-logs-export \ --member="serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL" \ --role="roles/storage.objectViewer"- מחליפים את:
-
gmail-logs-export: שם הקטגוריה. -
SECOPS_SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות של Google SecOps.
-
- מחליפים את:
שימוש בכלי שורת הפקודה gsutil (גרסה קודמת)
נותנים לחשבון השירות של SecOps גישה מסוג "צפייה באובייקטים" לקטגוריית הייצוא של יומני Gmail.
gsutil iam ch serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL:objectViewer \ gs://gmail-logs-export
אימות ההרשאות
כדי לוודא שההרשאות ניתנו בצורה נכונה:
gcloud storage buckets get-iam-policy gs://gmail-logs-export \ --flatten="bindings[].members" \ --filter="bindings.role:roles/storage.objectViewer"
כתובת האימייל של חשבון השירות של Google SecOps אמורה להופיע בפלט.
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | היגיון |
|---|---|---|
| attachment.file_extension_type, attachment.sha256, attachment.file_name, domains | מידע כללי | מיזוג עם פרטי קבצים מצורפים ודומיינים של קישורים |
| message_info.post_delivery_info.action_type, gmail.message_info.post_delivery_info.action_type, event_info.mail_event_type, gmail.event_info.mail_event_type, tok.product_bucket, tok.scope_name, record_type, token.client_type, message_info.num_message_attachments, gmail.message_info.num_message_attachments | additional.fields | מוזגו עם שדות שונים של מטא-נתונים נוספים |
| action_type, description, rule_id | metadata.description | מוגדר לתיאורים ספציפיים על סמך ערכי action_type, או מתוך description, או 'תוכן מעורר התנגדות' אם rule_id == 7 |
| metadata.event_type | ההגדרה היא EMAIL_TRANSACTION | |
| event_name | metadata.product_event_type | הערך הועתק ישירות |
| metadata.product_name | צריך להגדיר את הערך "GMAIL" | |
| metadata.vendor_name | הגדרה ל-Google | |
| __incoming_message, __outcoming_message | network.direction | צריך להגדיר את הערך "INBOUND" אם זוהתה הודעה נכנסת, או "OUTBOUND" אם זוהתה הודעה יוצאת |
| destination.address | network.email.cc | המיזוג בוצע מכתובות יעד שבהן האינדקס > 0 |
| message_info.source.from_header_address, message_info.source.address | network.email.from | הערך מ-from_header_address אם הוא לא ריק, אחרת הערך מ-source.address |
| message_info.rfc2822_message_id, gmail.message_info.rfc2822_message_id | network.email.mail_id | חולץ מ-rfc2822_message_id, הסרת < >, באמצעות grok |
| message_info.subject, gmail.message_info.subject | network.email.subject | הערך מ-message_info.subject אם הוא לא ריק, אחרת הערך מ-gmail.message_info.subject |
| destination.address | network.email.to | מוזג מכתובת היעד הראשונה |
| network.ip_protocol | מגדירים את האפשרות "TCP" | |
| _payload_size | network.received_bytes | מוגדר לערך _payload_size אם ההודעה נכנסת |
| _payload_size | network.sent_bytes | אם ההודעה יוצאת, הערך הוא _payload_size |
| token.app_name, message_info.source.service, message_info.source.selector, gmail.message_info.source.service, gmail.message_info.source.selector | principal.application | הערך מ-token.app_name אם הוא לא ריק, אחרת הערך הוא שרשור של source.service ו-source.selector |
| message_info.connection_info.client_host_zone, gmail.message_info.connection_info.client_host_zone | principal.asset.hostname | ערך מ-client_host_zone |
| client_ip | principal.asset.ip | הערך הועתק ישירות |
| message_info.connection_info.client_host_zone, gmail.message_info.connection_info.client_host_zone | principal.hostname | ערך מ-client_host_zone |
| client_ip | principal.ip | הערך הועתק ישירות |
| message_info.connection_info.ip_geo_country, gmail.message_info.connection_info.ip_geo_country | principal.location.country_or_region | ערך מ-ip_geo_country |
| email, source_address | principal.user.email_addresses | המיזוג בוצע מ-email_address ומ-source_address |
| token.client_id | principal.user.group_identifiers | הערך הועתק ישירות |
| message_info.source.from_header_displayname, gmail.message_info.source.from_header_displayname | principal.user.user_display_name | ערך מתוך from_header_displayname |
| source_address | principal.user.userid | הערך הועתק ישירות |
| פעולה | security_result.action | הערך הועתק ישירות |
| קטגוריה | security_result.category | הערך הועתק ישירות |
| category_details | security_result.category_details | הערך הועתק ישירות |
| message_info.connection_info.smtp_response_reason, gmail.message_info.connection_info.smtp_response_reason, rule_description, reason | security_result.description | הערך מוגדר כסיבה לתגובה של ה-SMTP, כתיאור הכלל או כסיבת הסיווג |
| stringMatch.predefined_detector_name, stringMatch.matched_string, stringMatch.match_expression, stringMatch.source, stringMatch.type | security_result.detection_fields | מוזג עם אובייקטים של שדה זיהוי |
| rule_id | security_result.rule_id | הערך הועתק ישירות |
| rule_name | security_result.rule_name | הערך הועתק ישירות |
| _err_summary, rule_id, description | security_result.summary | ההגדרה היא סיכום שגיאות, סיכום ספציפי לכלל או תיאור |
| _target_host | target.administrative_domain | הערך הועתק ישירות |
| message_info.destination.0.service, message_info.destination.0.selector, gmail.message_info.destination.0.service, gmail.message_info.destination.0.selector | target.application | הערך הזה הוא שרשור של השירות והסלקטור |
gmail.message_info.link_domain |
about.labels |
מופה מיומן השינויים |
gmail.message_info.description |
metadata.description |
מופה מיומן השינויים |
gmail.message_info.attachment.sha256 |
about.file.sha256 |
מופה מיומן השינויים |
gmail.message_info.destination.address |
network.email.to |
מופה מיומן השינויים |
gmail.message_info.attachment.file_name |
about.file.full_path |
מופה מיומן השינויים |
gmail.message_info.source.from_header_address |
network.email.from |
מופה מיומן השינויים |
gmail.message_info.attachment.file_extension_type |
about.file.mime_type |
מופה מיומן השינויים |
gmail.message_info.triggered_rule_info.rule_type |
security_result.rule_id |
מופה מיומן השינויים |
gmail.message_info.triggered_rule_info.rule_name |
security_result.rule_name |
מופה מיומן השינויים |
gmail.message_info.source.service", "gmail.message_info.source.selector |
principal.application |
מופה מיומן השינויים |
gmail.message_info.payload_size |
network.sent_bytes |
מופה מיומן השינויים |
gmail.message_info.payload_size |
network.received_bytes |
מופה מיומן השינויים |
gmail.message_info.destination.0.service", "gmail.message_info.destination.0.selector |
target.application |
מופה מיומן השינויים |
gmail.message_info.post_delivery_info.action_type", "gmail.message_info.num_message_attachments", and "gmail.event_info.mail_event_type |
additional.fields |
מופה מיומן השינויים |
event_info.success |
security_result.action |
מופה מיומן השינויים |
attachment.file_name |
about.file.full_path |
מופה מיומן השינויים |
message_info.post_delivery_info.action_type", "message_info.post_delivery_info.interaction.link_url", "event_info.mail_event_type |
additional.fields |
מופה מיומן השינויים |
יומן שינויים
צפייה ביומן השינויים של המנתח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.