איסוף יומנים של GitLab
גרסת מנתח הנתונים: 9.0
הכלי הזה מנתח את היומנים בפורמט JSON של GitLab, מבצע נרמול שלהם למודל הנתונים המאוחד (UDM) ומוסיף הקשר לנתונים. הוא מטפל בסוגים שונים של אירועים ב-GitLab, עם דגש על פעולות משתמשים, גישה למשאבים ותוצאות אבטחה, וגם מעבד מידע שקשור לרשת ולאפליקציה. הכלי לניתוח גם מבצע לוגיקה שמבוססת על תפקידים ופעולות ב-GitLab, מסווג אירועים ומקצה להם רמות חומרה מתאימות.
לפני שמתחילים
חשוב לוודא שמתקיימות דרישות הסף הבאות:
- מופע של Google SecOps.
- גישה מיוחדת ל-GitLab.
הגדרת פידים
כדי להגדיר פיד, מבצעים את השלבים הבאים:
- עוברים אל SIEM Settings > Feeds.
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה Feed name (שם הפיד), מזינים שם לפיד (לדוגמה, GitLab Logs).
- בוחרים באפשרות Webhook בתור סוג המקור.
- בוחרים באפשרות Gitlab בתור סוג היומן.
- לוחצים על הבא.
- אופציונלי: מציינים ערכים לפרמטרים הבאים של הקלט:
- 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 ב-GitLab ל-Google SecOps
- פותחים דפדפן אינטרנט ועוברים לפרויקט GitLab שרוצים להגדיר עבורו את ה-webhook.
- בפרויקט, עוברים אל הגדרות > Webhooks.
- לוחצים על הוספת webhook חדש.
- בשדה URL, מדביקים את כתובת ה-URL של נקודת הקצה של Google SecOps.
- לוחצים על הוספת כותרת בהתאמה אישית.
- מקלידים X-Webhook-Access-Key בשדה שם הכותרת.
- בשדה Header Value (ערך הכותרת), מעתיקים את המפתח הסודי שנוצר במהלך ההגדרה של הפיד ב-Google SecOps.
- לוחצים על הוספת כותרת בהתאמה אישית.
- מקלידים X-goog-api-key בשדה Header Name (שם הכותרת).
- בשדה Header Value (ערך הכותרת), מעתיקים את מפתח ה-API שנוצר במהלך ההגדרה של הפיד של Google SecOps. הערה: כדי לשפר את האבטחה, צריך ליצור טוקן סודי ולהוסיף אותו להגדרת ה-webhook של GitLab ולהגדרת הפיד התואמת של Google SecOps. כך אפשר לוודא שה-webhook הנכנס הוא אותנטי.
- בוחרים את האירועים ב-GitLab שיפעילו את ה-webhook. לדוגמה, אפשר לבחור באפשרות Push events כדי לשלוח נתונים ל-Google SecOps בכל פעם שמעבירים קוד למאגר. חשוב לשקול היטב אילו אירועים רלוונטיים לצורכי המעקב שלכם אחרי האבטחה. יותר מדי אירועים עלולים לגרום לעומס מיותר.
- כדי להבין טוב יותר את המטרה של ה-webhook, כדאי לתת לו שם משמעותי, כמו Google SecOps Webhook.
- מוודאים שתיבת הסימון Enable SSL verification מסומנת. זה חשוב מאוד לתקשורת מאובטחת.
- לוחצים על 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.