איסוף יומנים של GitLab

גרסת מנתח הנתונים: 9.0

נתמך ב:

הכלי הזה מנתח את היומנים בפורמט JSON של GitLab, מבצע נרמול שלהם למודל הנתונים המאוחד (UDM) ומוסיף הקשר לנתונים. הוא מטפל בסוגים שונים של אירועים ב-GitLab, עם דגש על פעולות משתמשים, גישה למשאבים ותוצאות אבטחה, וגם מעבד מידע שקשור לרשת ולאפליקציה. הכלי לניתוח גם מבצע לוגיקה שמבוססת על תפקידים ופעולות ב-GitLab, מסווג אירועים ומקצה להם רמות חומרה מתאימות.

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

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

  • מופע של Google SecOps.
  • גישה מיוחדת ל-GitLab.

הגדרת פידים

כדי להגדיר פיד, מבצעים את השלבים הבאים:

  1. עוברים אל SIEM Settings > Feeds.
  2. לוחצים על הוספת פיד חדש.
  3. בדף הבא, לוחצים על הגדרת פיד יחיד.
  4. בשדה Feed name (שם הפיד), מזינים שם לפיד (לדוגמה, GitLab Logs).
  5. בוחרים באפשרות Webhook בתור סוג המקור.
  6. בוחרים באפשרות Gitlab בתור סוג היומן.
  7. לוחצים על הבא.
  8. אופציונלי: מציינים ערכים לפרמטרים הבאים של הקלט:
    • Split delimiter: התו או התווים שמשמשים להפרדה בין שורות ביומן, כמו \n.
    • מרחב השמות של הנכס: מרחב השמות של הנכס.
    • תוויות להעברה: התווית שמוחלת על האירועים מהפיד הזה.
  9. לוחצים על הבא.
  10. בודקים את הגדרות הפיד במסך סיום ולוחצים על שליחה.
  11. לוחצים על יצירת מפתח סודי כדי ליצור מפתח סודי לאימות הפיד הזה.
  12. מעתיקים את המפתח הסודי ושומרים אותו. לא תהיה לך אפשרות לראות שוב את המפתח הסודי הזה. במקרה הצורך, אפשר ליצור מחדש מפתח סודי חדש, אבל הפעולה הזו מבטלת את התוקף של המפתח הסודי הקודם.
  13. בכרטיסייה פרטים, מעתיקים את כתובת ה-URL של נקודת הקצה של הפיד מהשדה פרטי נקודת הקצה. צריך לציין את כתובת ה-URL של נקודת הקצה הזו באפליקציית הלקוח.
  14. לוחצים על סיום.

יצירת מפתח API ל-Webhook Feed

  1. עוברים אל Google Cloud מסוף > Credentials.

    כניסה לדף Credentials

  2. לוחצים על Create credentials ואז על API key.

  3. הגבלת הגישה של מפתח ה-API ל-Chronicle API.

מציינים את כתובת ה-URL של נקודת הקצה

  1. באפליקציית הלקוח, מציינים את כתובת ה-URL של נקודת הקצה מסוג HTTPS שמופיעה בפיד של ה-webhook.
  2. כדי להפעיל אימות, מציינים את מפתח ה-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 ב-GitLab ל-Google SecOps

  1. פותחים דפדפן אינטרנט ועוברים לפרויקט GitLab שרוצים להגדיר עבורו את ה-webhook.
  2. בפרויקט, עוברים אל הגדרות > Webhooks.
  3. לוחצים על הוספת webhook חדש.
  4. בשדה URL, מדביקים את כתובת ה-URL של נקודת הקצה של Google SecOps.
  5. לוחצים על הוספת כותרת בהתאמה אישית.
  6. מקלידים X-Webhook-Access-Key בשדה שם הכותרת.
  7. בשדה Header Value (ערך הכותרת), מעתיקים את המפתח הסודי שנוצר במהלך ההגדרה של הפיד ב-Google SecOps.
  8. לוחצים על הוספת כותרת בהתאמה אישית.
  9. מקלידים X-goog-api-key בשדה Header Name (שם הכותרת).
  10. בשדה Header Value (ערך הכותרת), מעתיקים את מפתח ה-API שנוצר במהלך ההגדרה של הפיד של Google SecOps. הערה: כדי לשפר את האבטחה, צריך ליצור טוקן סודי ולהוסיף אותו להגדרת ה-webhook של GitLab ולהגדרת הפיד התואמת של Google SecOps. כך אפשר לוודא שה-webhook הנכנס הוא אותנטי.
  11. בוחרים את האירועים ב-GitLab שיפעילו את ה-webhook. לדוגמה, אפשר לבחור באפשרות Push events כדי לשלוח נתונים ל-Google SecOps בכל פעם שמעבירים קוד למאגר. חשוב לשקול היטב אילו אירועים רלוונטיים לצורכי המעקב שלכם אחרי האבטחה. יותר מדי אירועים עלולים לגרום לעומס מיותר.
  12. כדי להבין טוב יותר את המטרה של ה-webhook, כדאי לתת לו שם משמעותי, כמו Google SecOps Webhook.
  13. מוודאים שתיבת הסימון Enable SSL verification מסומנת. זה חשוב מאוד לתקשורת מאובטחת.
  14. לוחצים על Add webhook (הוספת webhook) כדי לשמור את ההגדרה.

טבלת מיפוי UDM

שדה היומן מיפוי UDM לוגיקה
author_id principal.user.userid הומר למחרוזת.
author_name principal.user.email_addresses אם הערך תואם לביטוי רגולרי של כתובת אימייל.
author_name principal.user.user_display_name אם הערך לא תואם לביטוי רגולרי של כתובת אימייל.
details.as principal.resource.attribute.labels נוסף כתווית עם מפתח 'as'.
details.add principal.resource.attribute.labels נוסף כתווית עם מילת המפתח add.
details.as principal.user.role_name הערך הגולמי של שדה היומן.
details.as principal.user.attribute.roles.type הערך הוא ADMINISTRATOR אם details.as הוא Owner,‏ SERVICE_ACCOUNT אם details.as הוא Developer,‏ Maintainer או Reporter, ו-TYPE_UNSPECIFIED אם details.as הוא Guest.
details.custom_message security_result.description הערך הגולמי של שדה היומן.
details.custom_message.action security_result.summary הערך הגולמי של שדה היומן.
details.entity_path target.file.full_path הערך הגולמי של שדה היומן.
details.target_id target.resource.id הומר למחרוזת.
entity_path target.file.full_path הערך הגולמי של שדה היומן.
entity_type target.resource.attribute.labels נוסף כתווית עם המפתח Entity Type.
event_type metadata.product_event_type הערך הגולמי של שדה היומן.
insertId metadata.product_log_id הערך הגולמי של שדה היומן.
ip_address principal.ip, principal.asset.ip הערך הגולמי של שדה היומן.
jsonPayload.action additional.fields הפרמטר נוסף כשדה עם המפתח 'action' וערך מחרוזת.
jsonPayload.controller additional.fields הפרמטר נוסף כשדה עם המפתח controller וערך מחרוזת.
jsonPayload.correlation_id principal.asset_id התחילית היא id:‎.
jsonPayload.cpu_s additional.fields הנתון מתווסף כשדה עם המפתח cpu_s וערך מחרוזת.
jsonPayload.details.custom_message.protocol network.application_protocol הערך מוגדר כ-UNKNOWN_APPLICATION_PROTOCOL אם הערך הוא web, אחרת הוא מומר לאותיות רישיות. הערך מתווסף גם כשדה נוסף עם המפתח Application Protocol (פרוטוקול אפליקציה) אם הערך הוא web (אינטרנט).
jsonPayload.mem_total_bytes additional.fields התווסף כשדה עם המפתח mem_total_bytes וערך מחרוזת.
jsonPayload.meta_caller_id additional.fields המידע מתווסף כשדה עם המפתח 'מזהה המתקשר' וערך מחרוזת.
jsonPayload.meta_client_id target.user.userid הערך הגולמי של שדה היומן.
jsonPayload.meta_feature_category additional.fields נוסף כשדה עם המפתח Feature Category והערך שלו הוא מחרוזת.
jsonPayload.meta_remote_ip principal.ip, principal.asset.ip הערך של שדה היומן הגולמי, אחרי ניתוח כמערך JSON ומיזוג עם שדות ה-IP.
jsonPayload.meta_user principal.user.userid משמש כברירת מחדל אם jsonPayload.username ריק.
jsonPayload.method network.http.method הערך הגולמי של שדה היומן.
jsonPayload.path target.process.file.full_path הערך הגולמי של שדה היומן.
jsonPayload.pid target.process.pid הומר למחרוזת.
jsonPayload.remote_ip principal.ip, principal.asset.ip הערך הגולמי של שדה היומן.
jsonPayload.request_urgency additional.fields הפרמטר מתווסף כשדה עם המפתח Request Urgency (דחיפות הבקשה) וערך מחרוזת.
jsonPayload.severity security_result.severity הערך הוא INFORMATIONAL אם הערך הוא INFO,‏ ERROR אם הערך הוא ERROR, ו-MEDIUM אם הערך הוא NOTICE.
jsonPayload.status network.http.response_code אם הערך הוא לא ACTIVE, הוא מומר למספר שלם.
jsonPayload.ua network.http.user_agent הערך הגולמי של שדה היומן.
jsonPayload.username principal.user.userid הערך הגולמי של שדה היומן.
jsonPayload.worker_id principal.application הערך הגולמי של שדה היומן.
labels.instance_name principal.hostname, principal.asset.hostname הערך של שדה היומן הגולמי, שמשמש אם ההודעה מכילה את המחרוזת 'Removing user'.
logName security_result.category_details הערך הגולמי של שדה היומן.
message security_result.summary הערך של שדה היומן הגולמי, שמשמש אם jsonPayload.severity הוא ERROR.
protoPayload.@type additional.fields נוסף כשדה עם המפתח protoPayload type והערך string.
protoPayload.authenticationInfo.principalEmail principal.user.email_addresses, principal.user.userid הערך הגולמי של שדה היומן.
protoPayload.authenticationInfo.principalSubject additional.fields נוסף כשדה עם המפתח authenticationInfo principalSubject והערך string.
protoPayload.authenticationInfo.serviceAccountKeyName additional.fields נוסף כשדה עם המפתח authenticationInfo serviceAccountKeyName והערך הוא מחרוזת.
protoPayload.authorizationInfo target.resource.attribute.labels, security_result.action הערכים בשדה הזה מתווספים כתוויות עם מפתחות שמתחילים ב-'authenticationInfo'. הערך של security_result.action מוגדר כ-ALLOW אם ערך ב-granted הוא true, וכ-BLOCK אם הוא false. שדות מקוננים כמו resourceAttributes נוספים גם הם כתוויות עם מפתחות שמתחילים ב-'authenticationInfo_resourceAttributes'.
protoPayload.methodName additional.fields נוסף כשדה עם המפתח protoPayload methodName והערך string.
protoPayload.request.@type additional.fields נוסף כשדה עם המפתח Request Type והערך string.
protoPayload.request.resource target.resource.attribute.labels נוסף כתווית עם המפתח Request resource.
protoPayload.requestMetadata.callerIp additional.fields הערך מתווסף כשדה עם המפתח requestMetadata callerIp והערך הוא מחרוזת.
protoPayload.requestMetadata.callerSuppliedUserAgent additional.fields הפרמטר מתווסף כשדה עם המפתח requestMetadata callerSuppliedUserAgent והערך שלו הוא מחרוזת.
protoPayload.serviceName additional.fields נוסף כשדה עם המפתח serviceName וערך מחרוזת.
protoPayload.status.code additional.fields נוסף כשדה עם המפתח protoPayload status code והערך מחרוזת.
protoPayload.status.message additional.fields, target.user.email_addresses, target.user.userid נוסף כשדה עם המפתח protoPayload status message והערך string. אם אפשר לחלץ כתובת אימייל מההודעה, היא מתווספת אל target.user.email_addresses ואל target.user.userid.
receiveTimestamp metadata.event_timestamp, timestamp הערך הזה מנותח כחותמת הזמן של האירוע.
resource.labels.project_id target.resource.attribute.labels נוסף כתווית עם המפתח Project id.
resource.labels.zone target.cloud.availability_zone הערך הגולמי של שדה היומן.
resource.type target.cloud.environment הערך צריך להיות 'GOOGLE_CLOUD_PLATFORM' אם הוא תואם לערך 'gce'.
security_result.action security_result.action מקור הנתונים הוא protoPayload.authorizationInfo.granted.
security_result.category_details security_result.category_details מוזגה עם logName.
security_result.description security_result.description מקור הנתונים הוא jsonPayload.details.custom_message.
security_result.severity security_result.severity מבוסס על severity או jsonPayload.severity.
security_result.summary security_result.summary מבוסס על jsonPayload.details.custom_message.action או jsonPayload.message.
severity security_result.severity הערך הוא INFORMATIONAL אם הערך הוא INFO,‏ ERROR אם הערך הוא ERROR, ו-MEDIUM אם הערך הוא NOTICE.
sourceLocation principal.resource.attribute.labels הערכים בשדה הזה מתווספים כתוויות.
target_details target.resource.attribute.labels נוסף כתווית עם מילת המפתח Target Details.
target_type target.resource.attribute.labels נוספה כתווית עם מילת המפתח 'סוג היעד'.
timestamp timestamp הערך הגולמי של שדה היומן. ההגדרה מתבצעת על סמך הנוכחות של שדות היעד והשדות העיקריים. אם לא מתקיים תנאי ספציפי, ברירת המחדל היא GENERIC_EVENT. הערכים האפשריים הם USER_RESOURCE_UPDATE_CONTENT,‏ USER_RESOURCE_ACCESS ו-USER_UNCATEGORIZED. מגדירים את הערך GITLAB. מגדירים את הערך GITLAB.

שנה רישום

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

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