איסוף יומנים של LogonBox
במאמר הזה מוסבר איך להטמיע יומנים של LogonBox ב-Google Security Operations באמצעות Bindplane.
LogonBox היא פלטפורמה בשירות עצמי לניהול סיסמאות ולאימות זהויות. הוא יוצר יומני ביקורת לאיפוס סיסמאות, לאירועי אימות זהות ולפעולות של אדמינים. הכלי לניתוח נתונים ממפה את נתוני הביקורת של LogonBox למודל הנתונים המאוחד (UDM), ומתעד את זהות המשתמש, אירועי אימות, שינויים במשאבים ופעולות ניהול קבוצות.
לפני שמתחילים
חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:
- מופע של Google SecOps
- Windows Server 2016 ואילך, או מארח Linux עם
systemd - קישוריות לרשת בין סוכן Bindplane לבין שרת LogonBox
- אם מריצים מאחורי שרת proxy, מוודאים שיציאות חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane
- גישת אדמין למסוף הניהול של LogonBox
קבלת קובץ אימות להטמעת נתונים ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Collection Agents.
מורידים את קובץ האימות להטמעת נתונים. שומרים את הקובץ בצורה מאובטחת במערכת שבה תותקן Bindplane.
איך מוצאים את מספר הלקוח ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Profile (הגדרות SIEM > פרופיל).
מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.
התקנת סוכן Bindplane
מתקינים את סוכן Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.
התקנה ב-Windows
- פותחים את שורת הפקודה או את PowerShell כאדמין.
מריצים את הפקודה הבאה:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietמחכים שההתקנה תסתיים.
כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:
sc query observiq-otel-collector
השירות צריך להופיע עם הערך RUNNING.
התקנה ב-Linux
- פותחים טרמינל עם הרשאות root או sudo.
מריצים את הפקודה הבאה:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shמחכים שההתקנה תסתיים.
כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:
sudo systemctl status observiq-otel-collector
השירות צריך להופיע כפעיל (פועל).
מקורות מידע נוספים להתקנה
אפשרויות התקנה נוספות ופתרון בעיות מפורטים במדריך להתקנת סוכן Bindplane.
הגדרה של סוכן Bindplane לקליטת syslog ושליחה ל-Google SecOps
איתור קובץ ההגדרות
Linux:
sudo systemctl status observiq-otel-collectorWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
עריכת קובץ ההגדרות
מחליפים את כל התוכן של
config.yamlבהגדרה הבאה:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/logonbox: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.googleapis.com log_type: LOGONBOX raw_log_field: body service: pipelines: logs/logonbox: receivers: - udplog exporters: - chronicle/logonbox
פרמטרים להגדרה
מחליפים את ה-placeholders הבאים:
הגדרת מקלט:
-
udplog: סוג הנמען על סמך הפרוטוקול:udplogעבור UDP syslog-
tcplogfor TCP syslog -
syslogעבור syslog RFC 3164/5424
-
0.0.0.0: כתובת ה-IP להאזנה:-
0.0.0.0כדי להאזין בכל הממשקים (מומלץ) - כתובת IP ספציפית להאזנה בממשק אחד
-
-
514: מספר היציאה להאזנה (לדוגמה,514, 1514, 6514)
-
הגדרת כלי הייצוא:
-
<customer_id>: מספר הלקוח מהשלב הקודם -
malachiteingestion-pa.googleapis.com: כתובת ה-URL של נקודת הקצה האזורית:- ארה"ב:
malachiteingestion-pa.googleapis.com - אירופה:
europe-malachiteingestion-pa.googleapis.com - אסיה:
asia-southeast1-malachiteingestion-pa.googleapis.com - רשימה מלאה מופיעה במאמר בנושא נקודות קצה אזוריות.
- ארה"ב:
- משנים את
creds_file_pathבהתאם לפלטפורמה:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
-
שמירת קובץ ההגדרות
- אחרי שמסיימים לערוך, שומרים את הקובץ:
- Linux: מקישים על
Ctrl+O, אחר כך עלEnterואז עלCtrl+X. - Windows: לוחצים על קובץ > שמירה.
- Linux: מקישים על
מפעילים מחדש את סוכן Bindplane כדי להחיל את השינויים.
כדי להפעיל מחדש את סוכן Bindplane ב-Linux:
מריצים את הפקודה הבאה:
sudo systemctl restart observiq-otel-collectorמוודאים שהשירות פועל:
sudo systemctl status observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
sudo journalctl -u observiq-otel-collector -f
כדי להפעיל מחדש את סוכן Bindplane ב-Windows:
בוחרים אחת מהאפשרויות האלה:
- שורת הפקודה או PowerShell כאדמין:
net stop observiq-otel-collector && net start observiq-otel-collector- מסוף השירותים:
- מקישים על
Win+R, מקלידיםservices.mscומקישים על Enter. - מחפשים את observIQ OpenTelemetry Collector.
- לוחצים לחיצה ימנית ובוחרים באפשרות הפעלה מחדש.
- מקישים על
מוודאים שהשירות פועל:
sc query observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
הגדרת העברת syslog ב-LogonBox
- נכנסים למסוף הניהול של LogonBox כאדמינים.
- מנווטים אל דוחות > יומן ביקורת.
- מגדירים את הגדרות הייצוא של syslog:
- שרת Syslog: מזינים את כתובת ה-IP של המארח של סוכן Bindplane (לדוגמה,
192.168.1.100). - יציאה: מזינים
514(חייב להיות זהה ליציאת המקלט של Bindplane). - פרוטוקול: בוחרים באפשרות UDP (חייב להיות זהה לסוג המקלט של Bindplane).
- שרת Syslog: מזינים את כתובת ה-IP של המארח של סוכן Bindplane (לדוגמה,
- בוחרים את קטגוריות האירועים להעברה (לדוגמה, איפוס סיסמאות, אימות זהות, ניהול משתמשים וקבוצות).
- לוחצים על Save.
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | היגיון |
|---|---|---|
| additional.fields | בוצע מיזוג מהמאפיינים attr_associatedPrincipals_label, sAMAccountName_label, attr_local_label, msDS-PrincipalName_label, attr_realmType_label, attr_selfCreated_label, attr_administrative_label על סמך תנאים | |
| attr_principalDesc, desc | metadata.description | הערך מ-attr_principalDesc אם product_event_type תואם ל-changePassword|SessionService, אחרת מ-attr_principalDesc אם הוא לא ריק, אחרת מ-desc |
| event_type | metadata.event_type | הערך מועתק ישירות מ-event_type אחרי שהלוגיקה מותנית מגדירה אותו על סמך product_event_type ודגלי נוכחות |
| product_event_type | metadata.product_event_type | הערך הועתק ישירות |
| metadata.product_name | ההגדרה היא LogonBox | |
| metadata.vendor_name | ההגדרה היא LOGONBOX | |
| network.application_protocol | הערך שמוגדר הוא DNS אם product_event_type תואם ל-AnswerService והתנאים מתקיימים | |
| dns_answer | network.dns.answers | מוזג מ-dns_answer |
| dns_question | network.dns.questions | מוזג מ-dns_question |
| attr_userAgent, attr_userAgentVersion | network.http.parsed_user_agent | הערך משורשר מ-attr_userAgent ומ-attr_userAgentVersion אם שניהם קיימים, אחרת מ-attr_userAgent, ואז מומר ל-parseduseragent ומשנה את השם |
| attr_userAgent, attr_userAgentVersion | network.http.user_agent | מחובר מ-attr_userAgent ומ-attr_userAgentVersion אם שניהם קיימים, אחרת מ-attr_userAgent |
| שם המארח | principal.asset.hostname | הערך הועתק ישירות |
| attr_ipAddress | principal.asset.ip | הערך הועתק ישירות |
| שם המארח | principal.hostname | הערך הועתק ישירות |
| attr_ipAddress | principal.ip | הערך הועתק ישירות |
| attr_os | principal.platform | באותיות רישיות ומוגדר אם יש התאמה ל- (?i)LINUX|MAC|WINDOWS |
| attr_osVersion | principal.platform_version | הערך מועתק ישירות אם הוא לא תואם ל-unknown (?i) |
| attr_principalRealm_label, attr_unassignedRoles_label, attr_assignedRoles_label, attr_oldResourceName_label, attr_roles_label, attr_resumedPrincipalName_label, attr_resumedPrincipalRealm_label, attr_resumedPrincipal_label, attr_module_label, reconcile_map_label, users_map_label, groups_map_label, createUser_map_label, user_map_label, mobile_map_label | principal.resource.attribute.labels | מוזגו מתוויות שונות שנוצרו מ-attr_principalRealm, attr_unassignedRoles, attr_assignedRoles, attr_oldResourceName, attr_roles, attr_resumedPrincipalName, attr_resumedPrincipalRealm, attr_resumedPrincipal, attr_module וממיפויים מ-reconcile, users, groups, createUser, user, mobile על סמך תנאים |
| attr_resourceName | principal.resource.name | הערך הועתק ישירות |
| attr_resourceId | principal.resource.product_object_id | הערך הועתק ישירות |
| כתובת אימייל | principal.user.email_addresses | המיזוג מתבצע אם כתובת האימייל תקינה |
| ImmutableID, attr_uuid | principal.user.product_object_id | הערך מ-ImmutableID אם product_event_type תואם ל-changePassword|userUpdated|userCreated|setPassword|answer|accountUnlockNoSuspension, אחרת מ-attr_uuid |
| attr_scheme | principal.user.role_name | הערך הועתק ישירות |
| attr_principalDesc | principal.user.user_display_name | הערך מועתק ישירות אם product_event_type תואם ל-changePassword|SessionService |
| attr_principalName | principal.user.userid | הערך הועתק ישירות |
| authy_code_length_label, authy_window_length_label, authy_step_size_label, msauthenticator_code_length_label, msauthenticator_window_length_label, msauthenticator_step_size_label, googleUser_code_length_label, googleUser_window_length_label, googleUser_step_size_label | security_result.detection_fields | מוזגו מתוויות שנוצרו מ-authy.code.length, authy.window.length, authy.step.size, msauthenticator.code.length, msauthenticator.window.length, msauthenticator.step.size, googleUser.code.length, googleUser.window.length, googleUser.step.size אם קיימות |
| cn | target.resource.attribute.labels | בוצע מיזוג מ-full_name_label שנוצר מ-cn, ומ-attr_disabledRealm_label מ-attr_disabledRealm |
| attr_lastModified | target.resource.attribute.last_update_time | התאריך שנותח מהמאפיין attr_lastModified באמצעות ISO8601 או d MMM yyyy HH:mm:ss |
| attr_created | target.resource.attribute.creation_time | התאריך שנותח מהמאפיין attr_created באמצעות ISO8601 או d MMM yyyy HH:mm:ss |
| givenName | target.user.first_name | הערך הועתק ישירות |
| ou | target.user.group_identifiers | מוזג מ-ou אם product_event_type תואם ל-userUpdated|userCreated|changePassword|setPassword|answer|accountUnlockNoSuspension |
| sn | target.user.last_name | הערך הועתק ישירות |
| attr_uuid, attr_disabledPrincipal | target.user.product_object_id | הערך מ-attr_uuid אם product_event_type תואם ל-userUpdated|userCreated|changePassword|setPassword|answer|accountUnlockNoSuspension או ל-groupCreated|groupUpdated או ל-attr_group או ל-group, אחרת מ-attr_disabledPrincipal אם accountDisabled |
| displayName, description | target.user.user_display_name | הערך מ-displayName אם הוא לא ריק, אחרת מ-description אם product_event_type תואם ל-userUpdated|userCreated|changePassword|setPassword|answer|accountUnlockNoSuspension |
| userPrincipalName, attr_user, attr_associatedPrincipals, attr_disabledPrincipalName | target.user.userid | הערך מ-userPrincipalName אם product_event_type תואם ל-userUpdated|userCreated|changePassword|setPassword|answer|accountUnlockNoSuspension, אחרת attr_user אם לא מוגדר, אחרת attr_associatedPrincipals אם groupCreated|groupUpdated או attr_group, אחרת attr_user אם group, אחרת attr_disabledPrincipalName אם accountDisabled |
| attr_group | target.group.group_display_name | הערך מועתק ישירות אם הערך של product_event_type תואם ל-groupCreated|groupUpdated או אם קיים attr_group |
| attr_uuid | target.group.product_object_id | הערך מועתק ישירות אם הערך של product_event_type תואם ל-groupCreated|groupUpdated או אם קיים attr_group |
יומן שינויים
צפייה ביומן השינויים של מנתח התוכן הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.