איסוף יומנים של הקשר משתמש ב-Duo

גרסת כלי הניתוח: 1.0

נתמך ב:

במאמר הזה מוסבר איך להטמיע יומני הקשר של משתמשי Duo ב-Google Security Operations באמצעות API. הכלי לניתוח נתונים מעבד נתוני JSON, ממפה את פרטי המשתמשים (כולל כינויים של שמות משתמשים לכתובות אימייל, לקבוצות, למספרי טלפון ולפרטי מכשירים) ל-UDM ומתעד את הסטטוס של חשבון המשתמש. בנוסף, הוא מטפל במבני נתונים מקוננים ומבצע כמה טרנספורמציות ומיזוגים של נתונים כדי ליצור את אירוע UDM הסופי.

לפני שמתחילים

חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:

הגדרת האפליקציה של Admin API וקבלת המפתחות

  1. נכנסים לDuo Admin Panel כאדמינים.
  2. בסרגל הצד השמאלי, לוחצים על Applications (אפליקציות) > Manage Applications (ניהול אפליקציות).
  3. לוחצים על הלחצן הוספת אפליקציה.
  4. בשדה החיפוש, כותבים Admin API ולוחצים על Add (הוספה) לצד Duo Admin API.
  5. במסך הבא מוצג המידע הבא:
    • מפתח שילוב: (מחרוזת כמו DIYYYYYYYYYYYYYY).
    • מפתח סודי: מחרוזת באורך 40 תווים.
    • שם המארח של ה-API: לדוגמה, api-abcd1234.duosecurity.com.
  6. מעתיקים ושומרים את מפתח השילוב, המפתח הסודי ושם המארח של ה-API במקום מאובטח.
  7. גוללים אל הגדרות ומגדירים את ההרשאות למתן הרשאת קריאה למשאב.
  8. לוחצים על שמירת השינויים.

הגדרת פידים

  1. עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
  2. לוחצים על + הוספת פיד חדש.
  3. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, Duo Users Logs).
  4. בוחרים באפשרות Third Party API (API של צד שלישי) בתור Source type (סוג המקור).
  5. בוחרים את סוג היומן Duo User Context.
  6. לוחצים על הבא.
  7. מציינים ערכים לפרמטרים הבאים של הקלט:
    • שם משתמש: מזינים את מפתח השילוב שהועתק קודם.
    • Secret: מזינים את המפתח הסודי שהועתק קודם.
    • שם המארח של ה-API: מזינים את כתובת ה-URL של שרת Duo API (לדוגמה, api-abcd1234.duosecurity.com).
    • מרחב השמות של הנכס: מרחב השמות של הנכס.
    • תוויות להוספה: התווית שמוחלת על האירועים מהפיד הזה.
  8. לוחצים על הבא.
  9. בודקים את הגדרות הפיד במסך סיום ולוחצים על שליחה.

טבלת מיפוי UDM

שדה ביומן מיפוי UDM היגיון
access_device.browser event.idm.entity.entity.resource.attribute.labels.value הערך נלקח ישירות מהשדה access_device.browser או מהשדה surfaced_auth.access_device.browser אם השדה הראשון ריק. המפתח מוגדר כ-access_device browser.
access_device.browser_version event.idm.entity.entity.resource.attribute.labels.value הערך נלקח ישירות מהשדה access_device.browser_version או מהשדה surfaced_auth.access_device.browser_version אם השדה הראשון ריק. המפתח מוגדר כ-access_device browser_version.
access_device.ip.address event.idm.entity.entity.ip הערך נלקח ישירות מהשדה access_device.ip.address או מהשדה surfaced_auth.access_device.ip אם השדה הראשון ריק.
access_device.location.city event.idm.entity.entity.location.city הערך נלקח ישירות מהשדה access_device.location.city או מהשדה surfaced_auth.access_device.location.city אם השדה הראשון ריק.
access_device.location.country event.idm.entity.entity.location.country_or_region הערך נלקח ישירות מהשדה access_device.location.country או מהשדה surfaced_auth.access_device.location.country אם השדה הראשון ריק.
access_device.location.state event.idm.entity.entity.location.state הערך נלקח ישירות מהשדה access_device.location.state או מהשדה surfaced_auth.access_device.location.state אם השדה הראשון ריק.
access_device.os event.idm.entity.entity.asset.platform_software.platform הערך נגזר מהשדה access_device.os או surfaced_auth.access_device.os אם השדה הראשון ריק. אם הערך תואם (לא תלוי באותיות רישיות) ל-ios או ל-mac, השדה UDM מוגדר כ-MAC. אם הוא תואם ל-'windows', השדה UDM מוגדר ל-'WINDOWS'. אם הוא תואם ל-'linux', השדה UDM מוגדר ל-'LINUX'.
access_device.os_version event.idm.entity.entity.asset.platform_software.platform_version הערך נלקח ישירות מהשדה access_device.os_version או מהשדה surfaced_auth.access_device.os_version אם השדה הראשון ריק.
action.details event.idm.entity.sec_result.action_details הערך נלקח מהשדה הזה אם השדה action ריק.
action.name event.idm.entity.sec_result.detection_fields.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-action_name.
activity_id event.idm.entity.sec_result.detection_fields.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-activity_id.
actor.details.created event.idm.entity.entity.user.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-'created'.
actor.details.email event.idm.entity.entity.user.email_addresses הערך נלקח ישירות מהשדה.
actor.details.groups.key event.idm.entity.entity.user.group_identifiers הערך נלקח ישירות מהשדה.
actor.details.groups.name event.idm.entity.entity.user.group_identifiers הערך נלקח ישירות מהשדה.
actor.details.last_login event.idm.entity.entity.user.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-last_login.
actor.details.status event.idm.entity.entity.user.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-'סטטוס'.
actor.key event.idm.entity.entity.resource.product_object_id הערך נלקח ישירות מהשדה.
actor.name event.idm.entity.entity.user.user_display_name הערך נלקח ישירות מהשדה או מ-surfaced_auth.user.name אם השדה ריק.
actor.type event.idm.entity.entity.user.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-'actor type'.
akey event.idm.entity.metadata.product_entity_id הערך נלקח ישירות מהשדה, או sekey אם akey ריק.
application event.idm.entity.entity.application הערך נלקח ישירות מהשדה.
collection_time.seconds, create_time.seconds event.idm.entity.metadata.collected_timestamp.seconds, event.timestamp.seconds הערך הגדול מבין collection_time.seconds ו-create_time.seconds משמש גם ל-collected_timestamp.seconds וגם ל-timestamp.seconds ברמה העליונה.
collection_time.nanos, create_time.nanos event.idm.entity.metadata.collected_timestamp.nanos, event.timestamp.nanos הערך בננו-שניות שמתאים לגדול מבין collection_time.seconds ו-create_time.seconds משמש גם ל-collected_timestamp.nanos וגם ל-timestamp.nanos ברמה העליונה.
email event.idm.entity.entity.user.email_addresses הערך נלקח ישירות מהשדה.
explanations event.idm.entity.entity.resource.attribute.labels צמדי המפתח/ערך בכל אובייקט במערך explanations מומרים לתוויות. לפני המפתח של כל תווית מופיע המחרוזת 'explanation '.
firstname event.idm.entity.entity.user.first_name הערך נלקח ישירות מהשדה.
from_common_netblock event.idm.entity.entity.resource.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-from_common_netblock.
from_new_user event.idm.entity.entity.resource.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר לערך from_new_user.
groups.N.name (N=0..10) event.idm.entity.entity.user.group_identifiers הערך נלקח ישירות מהשדה.
lastname event.idm.entity.entity.user.last_name הערך נלקח ישירות מהשדה.
low_risk_ip event.idm.entity.entity.resource.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-low_risk_ip.
phones.0.model event.idm.entity.relations.entity.asset.hardware.model הערך נלקח ישירות מהשדה.
phones.0.number event.idm.entity.entity.user.phone_numbers הערך נלקח ישירות מהשדה.
phones.0.phone_id event.idm.entity.relations.entity.asset.product_object_id הערך נלקח ישירות מהשדה.
phones.0.platform event.idm.entity.relations.entity.asset.hardware.manufacturer הערך נלקח ישירות מהשדה.
priority_event event.idm.entity.entity.resource.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-'priority_event'.
realname event.idm.entity.entity.user.user_display_name הערך נלקח ישירות מהשדה.
sekey event.idm.entity.metadata.product_entity_id הערך נלקח ישירות מהשדה אם akey ריק.
state event.idm.entity.entity.resource.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-state.
status event.idm.entity.entity.user.attribute.labels.value, event.idm.entity.entity.user.user_authentication_status הערך נלקח ישירות מהשדה. המפתח של התווית מוגדר כ-'סטטוס'. הערך הזה משמש גם לקביעת user_authentication_status. הערכים 'פעיל' ו'עקיפה' ממופים לערך 'ACTIVE', הערכים 'מושבת' ו'ממתין למחיקה' ממופים לערך 'SUSPENDED', והערך 'נעול' ממופה לערך 'NO_ACTIVE_CREDENTIALS'.
surfaced_auth.access_device.browser event.idm.entity.entity.resource.attribute.labels.value הערך נלקח מהשדה הזה אם השדה access_device.browser ריק. המפתח מוגדר כ-surfaced_auth access_device browser.
surfaced_auth.access_device.browser_version event.idm.entity.entity.resource.attribute.labels.value הערך נלקח מהשדה הזה אם השדה access_device.browser_version ריק. המפתח מוגדר כ-surfaced_auth access_device browser_version.
surfaced_auth.access_device.ip event.idm.entity.entity.ip הערך נלקח מהשדה הזה אם השדה access_device.ip.address ריק.
surfaced_auth.access_device.location.city event.idm.entity.entity.location.city הערך נלקח מהשדה הזה אם השדה access_device.location.city ריק.
surfaced_auth.access_device.location.country event.idm.entity.entity.location.country_or_region הערך נלקח מהשדה הזה אם השדה access_device.location.country ריק.
surfaced_auth.access_device.location.state event.idm.entity.entity.location.state הערך נלקח מהשדה הזה אם השדה access_device.location.state ריק.
surfaced_auth.access_device.os event.idm.entity.entity.asset.platform_software.platform הערך נלקח מהשדה הזה אם השדה access_device.os ריק. הלוגיקה של המיפוי לשדה UDM זהה ללוגיקה של access_device.os.
surfaced_auth.access_device.os_version event.idm.entity.entity.asset.platform_software.platform_version הערך נלקח מהשדה הזה אם השדה access_device.os_version ריק.
surfaced_auth.user.key event.idm.entity.entity.user.userid הערך נלקח מהשדה הזה אם השדה username ריק.
surfaced_auth.user.name event.idm.entity.entity.user.user_display_name הערך נלקח מהשדה הזה אם השדה actor.name ריק.
target.details.biometrics_status event.idm.entity.entity.asset.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-biometrics_status.
target.details.country_code event.idm.entity.entity.asset.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-country_code.
target.details.extension event.idm.entity.entity.asset.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-'extension'.
target.details.manufacturer event.idm.entity.entity.asset.hardware.manufacturer הערך נלקח ישירות מהשדה.
target.details.model event.idm.entity.entity.asset.hardware.model הערך נלקח ישירות מהשדה.
target.details.number event.idm.entity.entity.user.phone_numbers הערך נלקח ישירות מהשדה.
target.details.os event.idm.entity.entity.asset.software.name הערך נלקח ישירות מהשדה.
target.details.os_version event.idm.entity.entity.asset.software.version הערך נלקח ישירות מהשדה.
target.details.passcode_status event.idm.entity.entity.asset.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-passcode_status.
target.details.tampered_status event.idm.entity.entity.asset.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-tampered_status.
target.key event.idm.entity.entity.asset.asset_id הערך נלקח ישירות מהשדה.
target.name event.idm.entity.entity.asset.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-'name'.
target.type event.idm.entity.entity.asset.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-'type'.
triage_event_uri event.idm.entity.entity.url הערך נלקח ישירות מהשדה.
triaged_as_interesting event.idm.entity.entity.resource.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-triaged_as_interesting.
ts event.timestamp.seconds, event.idm.entity.metadata.collected_timestamp.seconds חותמת הזמן מנותחת מהשדה הזה אם הוא קיים, באמצעות פורמט ISO8601 או RFC 3339. השניות והננו-שניות שחולצו משמשות גם ל-timestamp ברמה העליונה וגם ל-collected_timestamp.
type event.idm.entity.entity.resource.attribute.labels.value הערך נלקח ישירות מהשדה. המפתח מוגדר כ-'type'.
user_id event.idm.entity.metadata.product_entity_id הערך נלקח ישירות מהשדה.
username event.idm.entity.entity.user.userid הערך נלקח ישירות מהשדה, או surfaced_auth.user.key אם username ריק.
(Parser Logic) event.idm.entity.metadata.vendor_name ההגדרה מוצפנת כ-Duo.
(Parser Logic) event.idm.entity.metadata.product_name מוגדר כ-Duo User Context (הקשר של משתמש Duo).
(Parser Logic) event.idm.entity.metadata.entity_type נקבע על סמך נוכחות של שדות אחרים. אם user_present מוגדר כ-True, הערך שלו הוא USER. אם asset_mid_present הוא true, הערך מוגדר כ-ASSET. אם הערך של ip_present הוא true, הערך מוגדר כ-IP_ADDRESS. אם resource_present הוא true, הערך מוגדר כ-RESOURCE. אחרת, הערך הוא UNKNOWN_ENTITYTYPE.
(Parser Logic) event.idm.entity.relations.entity_type אם phones[0] לא ריק, צריך להגדיר את הערך כ-ASSET.
(Parser Logic) event.idm.entity.relations.relationship אם phones[0] לא ריק, צריך להגדיר את הערך כ-OWNS.
(Parser Logic) event.idm.entity.relations.entity.asset.type אם phones[0] לא ריק, הערך שמוגדר הוא MOBILE.

יומן שינויים

צפייה ביומן השינויים של מנתח התוכן הזה

הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.