איסוף יומנים של Cisco Identity Intelligence
במאמר הזה מוסבר איך להגדיר את Cisco Identity Intelligence כדי לשלוח יומנים ל-Google Security Operations באמצעות תגובות לפעילות אינטרנט.
Cisco Identity Intelligence (לשעבר Oort Security) היא פלטפורמה לזיהוי איומים על זהות ולתגובה להם, שעוקבת באופן רציף אחרי התנהגות המשתמשים, דפוסי האימות, השימוש במכשירים והרשאות הגישה אצל ספקי הזהויות. הוא מנתח את פעילות המשתמשים, בדיקות אבטחה שנכשלו, ציוני מהימנות והתנהגויות מסוכנות כדי לזהות איומים מבוססי-זהות, הגדרות שגויות והפרות של תאימות.
לפני שמתחילים
חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:
- מכונה של Google SecOps
- גישה מורחבת לדייר (tenant) ב-Cisco Identity Intelligence
- הרשאות אדמין לניהול שילובים ב-Cisco Identity Intelligence
- גישה למסוף Google Cloud (כדי ליצור מפתח API)
יצירת פיד של webhook ב-Google SecOps
יצירת הפיד
- עוברים אל SIEM Settings > Feeds.
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
Cisco Identity Intelligence Events). - בוחרים באפשרות Webhook בתור סוג המקור.
- בוחרים באפשרות Cisco Identity Intelligence בתור סוג היומן.
- לוחצים על הבא.
- מציינים ערכים לפרמטרים הבאים של הקלט:
- תו מפריד לפיצול (אופציונלי): מזינים
\nכדי לפצל אירועים מרובי שורות. - מרחב השמות של הנכס: מרחב השמות של הנכס
- תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה
- תו מפריד לפיצול (אופציונלי): מזינים
- לוחצים על הבא.
- בודקים את הגדרות הפיד החדש במסך סיום ולוחצים על שליחה.
יצירה ושמירה של מפתח סודי
אחרי שיוצרים את הפיד, צריך ליצור מפתח סודי לאימות:
- בדף הפרטים של הפיד, לוחצים על יצירת מפתח סודי.
- תיפתח תיבת דו-שיח עם המפתח הסודי.
- מעתיקים ושומרים את המפתח הסודי באופן מאובטח.
קבלת כתובת ה-URL של נקודת הקצה של הפיד
- עוברים לכרטיסייה פרטים של הפיד.
- בקטע Endpoint Information, מעתיקים את כתובת ה-URL של נקודת הקצה של הפיד.
הפורמט של כתובת ה-URL הוא:
https://{region}-chronicle.googleapis.com/v1/{parent}/logs:importכאשר
{region}הוא האזור של מופע Google SecOps (לדוגמה,us,europeאוasia-southeast1), ו-{parent}הוא נתיב המשאב בפורמטprojects/<PROJECT_ID>/locations/<LOCATION>/instances/<INSTANCE_ID>/logTypes/<LOG_TYPE>.שומרים את כתובת ה-URL הזו לשלבים הבאים.
לוחצים על סיום.
יצירת מפתח API של Google Cloud
כדי לבצע אימות ב-Chronicle, צריך מפתח API. יוצרים מפתח API מוגבל במסוף Google Cloud.
יצירת מפתח API
- נכנסים אל הדף Credentials במסוף Google Cloud.
- בוחרים את הפרויקט (הפרויקט שמשויך למכונה של Chronicle).
- לוחצים על Create credentials > מפתח API.
- מפתח API נוצר ומוצג בתיבת דו-שיח.
- לוחצים על Edit API key כדי להגביל את המפתח.
הגבלת מפתח ה-API
- בדף ההגדרות מפתח API:
- שם: מזינים שם תיאורי (לדוגמה,
Chronicle Webhook API Key)
- שם: מזינים שם תיאורי (לדוגמה,
- בקטע API restrictions (הגבלות על API):
- בוחרים באפשרות Restrict key.
- בתפריט הנפתח Select APIs (בחירת ממשקי API), מחפשים את Google SecOps API (או Chronicle API) ובוחרים אותו.
- לוחצים על Save.
- מעתיקים את הערך של מפתח ה-API מהשדה API key שבחלק העליון של הדף.
- שומרים את מפתח ה-API בצורה מאובטחת.
הגדרת ה-webhook של Cisco Identity Intelligence
יצירת כתובת ה-URL של ה-webhook
משלבים את כתובת ה-URL של נקודת הקצה ב-Chronicle ואת מפתח ה-API:
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>לדוגמה:
https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234...
מחליפים את מה שכתוב בשדות הבאים:
-
<ENDPOINT_URL>: כתובת ה-URL של נקודת הקצה של הפיד ב-Chronicle שהעתקתם קודם -
<API_KEY>: מפתח Google Cloud API שנוצר קודם -
<SECRET_KEY>: המפתח הסודי של ה-webhook ב-Chronicle שנוצר קודם לכן
יצירת יעד התראה של תגובה לפעולה מאתר אחר (webhook) ב-Cisco Identity Intelligence
- נכנסים אל Cisco Identity Intelligence.
- עוברים אל שילובים.
- לוחצים על Add Integration (הוספת שילוב).
- גוללים למטה לקטע Webhook.
- לוחצים על Add Webhook Target.
- מספקים את פרטי ההגדרה הבאים:
- שם: מזינים שם תיאורי (לדוגמה,
Chronicle SIEM Integration). - Webhook URL: מדביקים את כתובת ה-URL המלאה של נקודת הקצה עם מפתח ה-API והמפתח הסודי שצוינו למעלה.
- Authorization Type (סוג ההרשאה): בוחרים באפשרות API Key (מפתח API).
- שם מפתח ה-API: מזינים שם למפתח (לדוגמה,
x-goog-chronicle-auth). - API Key Value: מזינים את מפתח ה-API של Google Cloud.
- שם: מזינים שם תיאורי (לדוגמה,
- מרחיבים את הקטע Invocation HTTP Parameters.
- מוסיפים את הפרמטרים הבאים עם הסוג Header:
- מפתח:
Content-Type, ערך:application/json - מפתח:
Accept, ערך:application/json
- מפתח:
- בקטע Use this target for, בוחרים באפשרות Failed Check כדי לקבל התראות כשבדיקות הזהות נכשלות.
לוחצים על Save.
בדיקת החיבור של ה-webhook
- בדף Integrations (שילובים), מוצאים את יעד ההתראה של ה-webhook שיצרתם.
- לוחצים על סמל האפשרויות הנוספות (3 נקודות) בצד שמאל של השורה.
- לוחצים על בדיקת הקישוריות.
- מוודאים שהודעת הבדיקה נמסרה בהצלחה.
הפעלת ה-webhook לבדיקות זהות
אחרי שיוצרים את יעד ההתראה של ה-webhook, צריך להפעיל אותו עבור בדיקות הזהות הספציפיות שרוצים לעקוב אחריהן.
- עוברים לדף הפרטים של הבדיקה הרצויה ב-Cisco Identity Intelligence.
- מרחיבים את התפריט הנפתח בפינה השמאלית העליונה של הדף.
- מסמנים את התיבה של יעד ההתראות של ה-webhook שיצרתם.
חוזרים על הפעולה הזו לכל בדיקה שרוצים לשלוח ל-Google SecOps.
מידע נוסף זמין במסמכי התיעוד של Cisco Identity Intelligence בנושא webhook.
מידע על שיטות אימות
פידים של Chronicle webhook תומכים בכמה שיטות אימות. בוחרים את השיטה שבה הספק תומך.
שיטה 1: כותרות בהתאמה אישית (מומלץ)
אם הספק תומך בכותרות HTTP בהתאמה אישית, כדאי להשתמש בשיטה הזו כדי לשפר את האבטחה.
פורמט הבקשה:
POST <ENDPOINT_URL> HTTP/1.1 Content-Type: application/json x-goog-chronicle-auth: <API_KEY> x-chronicle-auth: <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
היתרונות:
- מפתח ה-API והסוד לא גלויים בכתובת ה-URL
- מאובטח יותר (הכותרות לא מתועדות ביומני הגישה של שרת האינטרנט)
- השיטה המועדפת אם הספק תומך בה
שיטה 2: פרמטרים של שאילתה
אם הספק לא תומך בכותרות מותאמות אישית, צריך לצרף את פרטי הכניסה לכתובת ה-URL.
פורמט כתובת ה-URL:
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>לדוגמה:
https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234...פורמט הבקשה:
POST <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY> HTTP/1.1 Content-Type: application/json { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
החסרונות:
- פרטי כניסה שגלויים בכתובת ה-URL
- יכול להיות שהם יתועדו ביומני הגישה של שרת האינטרנט
- פחות מאובטח מכותרות
שיטה 3: היברידית (כתובת URL + כותרת)
בחלק מההגדרות, מפתח ה-API נמצא בכתובת ה-URL והמפתח הסודי נמצא בכותרת.
פורמט הבקשה:
POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1 Content-Type: application/json x-chronicle-auth: <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
שמות של כותרות אימות
מערכת Chronicle מקבלת את שמות הכותרות הבאים לאימות:
למפתח API:
x-goog-chronicle-auth(מומלץ)X-Goog-Chronicle-Auth(לא תלוי-רישיות)
למפתח סודי:
x-chronicle-auth(מומלץ)X-Chronicle-Auth(לא תלוי-רישיות)
מגבלות ושיטות מומלצות לשימוש ב-webhook
מגבלות על בקשות
| הגבלה | ערך |
|---|---|
| גודל בקשה מקסימלי | 4MB |
| מספר מקסימלי של שאילתות לשנייה (QPS) | 15,000 |
| פסק זמן של בקשה | 30 שניות |
| התנהגות של ניסיון חוזר | אוטומטי עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff) |
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | היגיון |
|---|---|---|
| חשבון | account_label.value | הערך הועתק ישירות |
| חשבון | account_label.key | צריך להגדיר את הערך "account" |
| account_label | security_result.detection_fields | מוזג ל-detection_fields |
| additional_detaildescription.key | additional_detaildescription.key | הוגדר כ'תיאור מפורט' |
| detaildescription | additional_detaildescription.value.list_value.values | מוזג מ-detaildescription |
| additional_detaildescription | event.idm.read_only_udm.additional.fields | מוזג לתוך additional.fields |
| additional_recommendedaction.key | additional_recommendedaction.key | מוגדר כ'פעולה מומלצת' |
| recommendedAction | additional_recommendedaction.value.list_value.values | Merged from recommendedAction |
| additional_recommendedaction | event.idm.read_only_udm.additional.fields | מוזג לתוך additional.fields |
| data1 | usersFailing_label | הערך הועתק ישירות |
| data.login | login_label | הערך הועתק ישירות |
| detail-type | security_result.summary | הערך הועתק ישירות |
| detail.id | security_result.rule_id | הערך הועתק ישירות |
| detail.title | security_result.rule_name | הערך הועתק ישירות |
| detail.severity | security_result.severity | הערך מ-detail.severity אם הוא נמצא ב-[CRITICAL,ERROR,HIGH,INFORMATIONAL,LOW,MEDIUM], אחרת הערך הוא MEDIUM אם הוא מתון |
| detaildescription | value_array.string_value | הערך הועתק ישירות |
| detailsdata.key | add_label.value, add_label.key | הערך מ-detailsdata.value, המפתח הוא loginDetails %{index} details %{detailindex} %{detailsdata.key} אם לא מדובר ב-failedSigninDetails או ב-ips |
| detailsdata.value | add_label.value, add_label.key | |
| detailsdata.key | security_result.detection_fields | התג add_label מוזג אם התנאים התקיימו |
| detailsdata.value | security_result.detection_fields | |
| field_.value | security_result.detection_fields | מוזגו לשדות שונים בתצוגת עץ ב-json_array (msg, ipInfo, asn, coordinates, first_event, second_event, locations) עם מפתחות כמו "%{index} %{detailindex} %{index1} %{key}" וכו', לא כולל ipAddress, ip וכו'. |
| field_.key | security_result.detection_fields | |
| id | metadata.product_log_id | הערך הועתק ישירות |
| login_label | principal.user.email_addresses | מיזוג אם יש התאמה לביטוי הרגולרי של כתובת אימייל |
| msg.ipAddress | principal.ip | מיזוג אם לא ריק |
| msg.first_event.ip_address | principal.ip | אם הוא לא ריק, הוא ימוזג |
| msg.second_event.ip_address | principal.ip | אם הוא לא ריק, הוא ימוזג |
| msg_travels_first_event_ip_address | principal.ip | מיזוג אם לא ריק |
| msg_travels_second_event_ip_address | principal.ip | |
| recommendedAction | value_array.string_value | הערך הועתק ישירות |
| security_result | event.idm.read_only_udm.security_result | מוזג ל-security_result |
| מקור | source_label.value | הערך הועתק ישירות |
| מקור | source_label.key | הגדרה ל "מקור" |
| source_label | event.idm.read_only_udm.src.labels | מוזגה ל-src.labels |
| פעם | @timestamp | הניתוח מתבצע באמצעות מסנן תאריכים עם ISO8601, RFC 3339, yyyy-MM-ddTHH:mm:ss.SSSSSSZ |
| usersFailing_label | principal.user.email_addresses | מיזוג אם יש התאמה לביטוי הרגולרי של כתובת אימייל |
| גרסה | metadata.product_version | הערך הועתק ישירות |
| has_principal | event.idm.read_only_udm.metadata.event_type | הערך שמוגדר הוא STATUS_UPDATE אם has_principal הוא true, אחרת USER_UNCATEGORIZED אם has_user הוא true, אחרת GENERIC_EVENT |
| has_user | event.idm.read_only_udm.metadata.event_type | |
| metadata.product_name | metadata.product_name | הגדרה ל-"OORT" |
| metadata.vendor_name | metadata.vendor_name | ההגדרה היא OORT |
detail.published |
event.idm.read_only_udm.metadata.collected_timestamp |
מופה מיומן השינויים |
detail.login |
event.idm.read_only_udm.principal.user.userid |
מופה מיומן השינויים |
detail.userTrustLevel |
event.idm.read_only_udm.principal.user.attribute.labels |
מופה מיומן השינויים |
detail.login |
event.idm.read_only_udm.principal.user.user_display_name |
מופה מיומן השינויים |
detail.checkTopics |
event.idm.read_only_udm.security_result.category_details |
מופה מיומן השינויים |
region |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
detail.checkId |
event.idm.read_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
detail.checkScope |
event.idm.read_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
detail.frameworks |
event.idm.read_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
detail.explainabilityEventIds |
event.idm.read_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
data.value |
event.idm.read_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
יומן שינויים
צפייה ביומן השינויים של המנתח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.