איסוף יומנים של Auth0
גרסת מנתח הנתונים: 16.0
הכלי הזה מנתח אירועים ביומן Auth0 ומחלץ אותם מהודעות בפורמט JSON. הוא מאתחל שדות UDM, מנתח את מטען ה-JSON הייעודי, ממפה שדות רלוונטיים לסכימת UDM ומסווג אירועים על סמך השדה type, ומגדיר פעולות אבטחה וסוגי אירועים מתאימים.
לפני שמתחילים
חשוב לוודא שמתקיימות דרישות הסף הבאות:
- מופע של Google SecOps.
- חשבון Auth0 עם ההרשאות הנדרשות.
הגדרת פידים
כדי להגדיר פיד, מבצעים את השלבים הבאים:
- עוברים אל SIEM Settings > Feeds.
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה Feed name (שם הפיד), מזינים שם לפיד (לדוגמה, Auth0 Logs).
- בוחרים באפשרות Webhook בתור סוג המקור.
- בוחרים באפשרות AUTH_ZERO בתור סוג היומן.
- לוחצים על הבא.
- אופציונלי: מציינים ערכים לפרמטרים הבאים של הקלט:
- Split delimiter: התו או התווים שמשמשים להפרדה בין שורות ביומן, כמו
\n. - מרחב השמות של הנכס: מרחב השמות של הנכס.
- תוויות להעברה: התווית שמוחלת על האירועים מהפיד הזה.
- Split delimiter: התו או התווים שמשמשים להפרדה בין שורות ביומן, כמו
- לוחצים על הבא.
- בודקים את הגדרות הפיד במסך סיום ולוחצים על שליחה.
- לוחצים על יצירת מפתח סודי כדי ליצור מפתח סודי לאימות הפיד הזה.
- מעתיקים את המפתח הסודי ושומרים אותו. לא תהיה לך אפשרות לראות שוב את המפתח הסודי הזה. במקרה הצורך, אפשר ליצור מחדש מפתח סודי חדש, אבל הפעולה הזו מבטלת את התוקף של המפתח הסודי הקודם.
- בכרטיסייה פרטים, מעתיקים את כתובת ה-URL של נקודת הקצה של הפיד מהשדה פרטי נקודת הקצה. צריך לציין את כתובת ה-URL של נקודת הקצה הזו באפליקציית הלקוח.
- לוחצים על סיום.
יצירת מפתח API ל-Webhook Feed
עוברים אל Google Cloud מסוף > Credentials (פרטי כניסה).
לוחצים על Create credentials ואז על API key.
הגבלת הגישה של מפתח ה-API ל-Chronicle API.
מציינים את כתובת ה-URL של נקודת הקצה
- באפליקציית הלקוח, מציינים את כתובת ה-URL של נקודת הקצה מסוג HTTPS שמופיעה בפיד של ה-webhook.
כדי להפעיל אימות, מציינים את מפתח ה-API ואת המפתח הסודי כחלק מהכותרת המותאמת אישית בפורמט הבא:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRETהמלצה: כדאי לציין את מפתח ה-API ככותרת במקום לציין אותו בכתובת ה-URL. אם לקוח ה-webhook שלכם לא תומך בכותרות בהתאמה אישית, אתם יכולים לציין את מפתח ה-API ואת המפתח הסודי באמצעות פרמטרים של שאילתות בפורמט הבא:
ENDPOINT_URL?key=API_KEY&secret=SECRET
מחליפים את מה שכתוב בשדות הבאים:
-
ENDPOINT_URL: כתובת ה-URL של נקודת הקצה של הפיד. -
API_KEY: מפתח ה-API לאימות ב-Google Security Operations. -
SECRET: המפתח הסודי שיצרתם כדי לאמת את הפיד.
הגדרת webhook של Auth0 ל-Google SecOps
- נכנסים למרכז הבקרה של Auth0.
- עוברים אל Monitoring > Streams.
- לוחצים על יצירת מקור נתונים של יומן.
- לוחצים על הלחצן Custom Webhook (ווּבְּהוּק בהתאמה אישית) ונותנים לו שם לבחירתכם. לדוגמה: Google SecOps Webhook.
- מגדירים את ההגדרות הבאות:
- כתובת ה-URL של מטען הייעודי (payload): מזינים את כתובת נקודת הקצה ל-API של Google SecOps.
- Content-Type: מגדירים את הכותרת Content-Type לערך application/json. ההגדרה הזו מציינת ל-Google SecOps את פורמט הנתונים שנשלחים.
- אופציונלי: אסימון הרשאה: הגדרת סוד לאבטחה נוספת. הוא ישמש לאימות האותנטיות של בקשות ה-webhook.
התאמה אישית של המטען הייעודי (payload): אפשר להתאים אישית את המטען הייעודי שנשלח אל Google SecOps על ידי שינוי קטגוריית האירוע. כך תוכלו לבחור נקודות נתונים ספציפיות מאירוע Auth0 ולעצב אותן לפי הצורך עבור Google SecOps. פרטים על משתני ההקשר הזמינים ואפשרויות הסקריפטים זמינים במסמכי התיעוד של Auth0. מוודאים שהמטען הייעודי (payload) הסופי תואם לפורמט הצפוי של Google SecOps UDM.
- לוחצים על שמירה כדי ליצור את ה-webhook.
- מפעילים את האירוע שמשויך ל-hook (לדוגמה, רישום משתמש חדש, התחברות).
- כדי לוודא שהיומנים נשלחים ל-Google SecOps, בודקים את הפיד במסוף Google SecOps.
טבלת מיפוי UDM
| שדה היומן | מיפוי UDM | לוגיקה |
|---|---|---|
client_id |
principal.asset.product_object_id |
ממופה ישירות מהשדה client_id. |
client_name |
principal.hostname |
ממופה ישירות מהשדה client_name. |
connection |
security_result.description |
ממופה ישירות מהשדה connection. |
connection_id |
security_result.rule_id |
ממופה ישירות מהשדה connection_id. |
date |
metadata.event_timestamp |
הערך מנותח מהשדה date באמצעות הפורמט ISO8601. |
description |
metadata.description |
ממופה ישירות מהשדה description. |
details.error |
security_result.detection_fields |
ממופה מהשדה details.error. המפתח הוא Error. |
details.error.oauthError |
security_result.detection_fields |
ממופה מהשדה details.error.oauthError. המפתח הוא oauthError. |
details.error.type |
security_result.detection_fields |
ממופה מהשדה details.error.type. המפתח הוא oauth_error_type. |
details.ipOnAllowlist |
security_result.detection_fields |
ממופה מהשדה details.ipOnAllowlist. המפתח הוא ipOnAllowlist. |
details.link |
target.url |
ממופה ישירות מהשדה details.link אם הוא קיים, אחרת הוא נגזר משדות אחרים (ראו בהמשך). |
details.request.auth.strategy |
security_result.detection_fields |
ממופה מהשדה details.request.auth.strategy. המפתח הוא 'אסטרטגיה'. |
details.request.body.app_metadata.blockedReason |
security_result.detection_fields |
ממופה מהשדה details.request.body.app_metadata.blockedReason. המפתח הוא blockedReason. |
details.request.body.app_metadata.customer_id |
target.user.product_object_id |
ממופה ישירות מהשדה details.request.body.app_metadata.customer_id. |
details.request.body.app_metadata.migrated |
security_result.detection_fields |
ממופה מהשדה details.request.body.app_metadata.migrated. המפתח הוא 'הועבר'. |
details.request.channel |
security_result.detection_fields |
ממופה מהשדה details.request.channel. המפתח הוא 'ערוץ'. |
details.request.method |
network.http.method |
ממופה ישירות מהשדה details.request.method אחרי המרה לאותיות רישיות. |
details.request.path |
target.url |
ממופה ישירות מהשדה details.request.path אם השדה details.link לא קיים, אחרת נגזר משדות אחרים (ראו בהמשך). |
details.response.body.email |
target.user.email_addresses |
ממופה ישירות מהשדה details.response.body.email. |
details.response.body.email_verified |
security_result.detection_fields |
ממופה מהשדה details.response.body.email_verified. המפתח הוא email_verified. |
details.response.body.nickname |
target.user.user_display_name |
ממופה ישירות מהשדה details.response.body.nickname. |
details.response.body.user_id |
target.user.userid |
ממופה ישירות מהשדה details.response.body.user_id. |
details.response.statusCode |
network.http.response_code |
ממופה ישירות מהשדה details.response.statusCode אחרי המרה למספר שלם. |
details.return_to |
target.url |
ממופה ישירות מהשדה details.return_to אם השדות details.link ו-details.request.path לא קיימים, אחרת נגזר משדות אחרים (ראו בהמשך). |
details.session_id |
network.session_id |
ממופה ישירות מהשדה details.session_id. |
details.stats.loginsCount |
additional.fields |
ממופה מהשדה details.stats.loginsCount. המפתח הוא 'loginsCount'. |
details.requiresVerification |
security_result.detection_fields |
ממופה מהשדה details.requiresVerification. המפתח הוא requiresVerification. |
details.to |
target.user.email_addresses |
ממופה ישירות מהשדה details.to. |
hostname |
target.hostname |
ממופה ישירות מהשדה hostname. |
ip |
principal.ip |
ממופה ישירות מהשדה ip. |
js_data.audience |
target.url |
ממופה ישירות מהשדה js_data.audience אם השדות details.link, details.request.path ו-details.return_to לא קיימים. |
js_data.details.body.email_verified |
security_result.detection_fields |
ממופה מהשדה js_data.details.body.email_verified. המפתח הוא email_verified. |
js_data.details.body.is_signup |
security_result.detection_fields |
ממופה מהשדה js_data.details.body.is_signup. המפתח הוא 'is_signup'. |
js_data.details.body.transaction.redirect_uri |
target.url |
ממופה ישירות מהשדה js_data.details.body.transaction.redirect_uri אם השדות details.link, details.request.path, details.return_to ו-js_data.audience לא קיימים. |
js_data.scope |
security_result.detection_fields |
ממופה מהשדה js_data.scope. המפתח הוא 'היקף'. |
js_data.tracking_id |
security_result.detection_fields |
ממופה מהשדה js_data.tracking_id. המפתח הוא 'tracking_id'. |
log_id |
metadata.product_log_id |
ממופה ישירות מהשדה log_id. |
metadata.log_type |
metadata.log_type |
ממופה ישירות מהשדה log_type. |
metadata.product_name |
metadata.product_name |
הערך שמוגדר הוא AUTH_ZERO. |
metadata.vendor_name |
metadata.vendor_name |
הערך שמוגדר הוא AUTH_ZERO. |
metadata.product_event_type |
metadata.product_event_type |
ממופה ישירות מהשדה type. |
network.http.parsed_user_agent |
network.http.parsed_user_agent |
מנותח מהשדה user_agent. |
network.http.user_agent |
network.http.user_agent |
ממופה ישירות מהשדה user_agent. |
security_result.action |
security_result.action |
הערך נקבע לפי השדה type (ALLOW או BLOCK). אפשר לראות את קוד הניתוח למיפויים ספציפיים. |
strategy |
security_result.detection_fields |
ממופה מהשדה strategy. המפתח הוא 'אסטרטגיה'. |
strategy_type |
security_result.detection_fields |
ממופה מהשדה strategy_type. המפתח הוא 'strategy_type'. |
target.user.email_addresses |
target.user.email_addresses |
ממופה ישירות מהשדה user_name אם הוא כתובת אימייל, אחרת הוא נגזר משדות אחרים (ראו למעלה). |
target.user.userid |
target.user.userid |
ממופה ישירות מהשדה user_id, או details.response.body.user_id או user_name אם השדה user_id לא קיים. |
user_agent |
network.http.user_agent |
ממופה ישירות מהשדה user_agent. |
user_id |
target.user.userid |
ממופה ישירות מהשדה user_id. |
user_name |
target.user.email_addresses |
ממופה ישירות מהשדה user_name. הערך הוא MACHINE אם security_result.action הוא ALLOW ו-type הוא slo, sapi, s, ss או ssa. הערך שמוגדר הוא OTP אם extensions.auth.type הוא MACHINE ו-type הוא slo. הערך נקבע לפי שילוב של שדות, כולל type, client_name, ip, hostname ו-has_user. אפשר לראות את קוד הניתוח למיפויים ספציפיים. |
שנה רישום
צפייה ביומן השינויים של כלי הניתוח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.