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

נתמך ב:

במאמר הזה מוסבר איך להטמיע יומנים של LogonBox ב-Google Security Operations באמצעות Bindplane.

‫LogonBox היא פלטפורמה לניהול סיסמאות ולאימות זהות בשירות עצמי. הוא יוצר יומני ביקורת לאיפוס סיסמאות, לאירועים של אימות זהות ולפעולות של אדמינים. המנתח ממפה את נתוני הביקורת של LogonBox למודל הנתונים המאוחד (UDM), ומתעד את זהות המשתמש, אירועי אימות, שינויים במשאבים ופעולות ניהול קבוצות.

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

חשוב לוודא שיש לכם את הדברים הבאים:

  • מופע של Google SecOps
  • ‫Windows Server 2016 ואילך, או מארח Linux עם systemd
  • קישוריות רשת בין סוכן Bindplane לבין שרת LogonBox
  • אם מריצים את הסוכן מאחורי שרת proxy, מוודאים שיציאות חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane
  • גישת אדמין למסוף הניהול של LogonBox

קבלת פרטי כניסה ל-Google SecOps בשביל סוכן Bindplane

כדי לאמת את סוכן Bindplane ב-Google SecOps, בוחרים אחת מהשיטות הבאות:

  • פריסות חדשות: משתמשים ב-Chronicle API (אפשרות 1).
  • פריסות קודמות: ממשיכים להשתמש בקובץ האימות להטמעת נתונים (אפשרות 2) עד שה-Ingestion API יופסק ב-20 ביולי 2027.
  1. נכנסים אל Google Cloud המסוף ובוחרים את Google Cloud הפרויקט שמקושר למופע של Google SecOps.
  2. נכנסים לדף IAM & Admin > Service Accounts.
  3. לוחצים על Create service account.
  4. מזינים את פרטי ההגדרה הבאים:
    • שם חשבון השירות: מזינים שם לחשבון (לדוגמה, bindplane-ingest).
    • תיאור חשבון השירות: מזינים תיאור (לדוגמה, Bindplane agent log ingestion).
  5. לוחצים על Create and continue.
  6. בקטע Grant this service account access to project לוחצים על Select a role ובוחרים באפשרות Chronicle Editor.
  7. לוחצים על המשך ואז על סיום.
  8. לוחצים על חשבון השירות שיצרתם ואז עוברים לכרטיסייה Keys.
  9. לוחצים על Add key > Create new key.
  10. בוחרים באפשרות JSON ולוחצים על Create. קובץ המפתח יורד למחשב.
  11. שומרים את קובץ המפתח בשם ingestion-auth.json בספריית Bindplane Collector (/opt/observiq-otel-collector/ingestion-auth.json ב-Linux או C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json ב-Windows), או מעדכנים את creds_file_path ב-config.yaml כך שיתאים לנתיב שבו שומרים את הקובץ.
  12. עוברים אל IAM & Admin > Settings (ניהול הרשאות גישה ואדמין > הגדרות) ומעתיקים את מספר הפרויקט. תצטרכו אותו כדי להגדיר את הייצוא.

אפשרות 2: הורדת קובץ אימות להטמעת נתונים (גרסה מדור קודם)

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל SIEM Settings > Collection Agents (הגדרות SIEM > סוכני איסוף).
  3. מורידים את קובץ האימות להטמעת נתונים.
  4. שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן הסוכן של Bindplane.

איך מקבלים את מספר הלקוח ב-Google SecOps

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל SIEM Settings > Profile.
  3. מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.

התקנת הסוכן של Bindplane

מתקינים את הסוכן של Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.

התקנה ב-Windows

  1. פותחים את שורת הפקודה או את PowerShell כאדמין.
  2. מריצים את הפקודה הבאה:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. מחכים שההתקנה תסתיים.

  4. כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:

    sc query observiq-otel-collector
    

השירות אמור להופיע כ-RUNNING.

התקנה ב-Linux

  1. פותחים טרמינל עם הרשאות root או sudo.
  2. מריצים את הפקודה הבאה:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. מחכים שההתקנה תסתיים.

  4. מאמתים את ההתקנה על ידי הרצת:

    sudo systemctl status observiq-otel-collector
    

השירות אמור להופיע כ-active (running).

מקורות מידע נוספים להתקנה

אפשרויות התקנה נוספות ופתרון בעיות מפורטים במדריך להתקנת סוכן Bindplane.

הגדרה של סוכן Bindplane לקליטת syslog ושליחה ל-Google SecOps

מאתרים את קובץ התצורה

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

עריכת קובץ התצורה

  • מחליפים את כל התוכן של config.yaml בהגדרה הבאה:

    receivers:
      udplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/logonbox:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: chronicle.googleapis.com
        log_type: LOGONBOX
        raw_log_field: body
    
    service:
      pipelines:
        logs/logonbox:
          receivers:
            - udplog
          exporters:
            - chronicle/logonbox
    

פרמטרים להגדרה

מחליפים את ה-placeholders הבאים:

  • הגדרת מקלט:

    • ‫udplog: סוג המקלט לפי הפרוטוקול:
      • ‫udplog ל-UDP syslog
      • ‫tcplog for TCP syslog
      • ‫syslog עבור syslog RFC 3164/5424
    • ‫0.0.0.0: כתובת ה-IP להאזנה:
      • 0.0.0.0 כדי להאזין בכל הממשקים (מומלץ)
      • כתובת IP ספציפית להאזנה בממשק אחד
    • ‫514: מספר היציאה להאזנה (לדוגמה, 514, ‏ 1514, ‏ 6514)
  • הגדרת הייצוא:

    • ‫<customer_id>: מספר הלקוח מהשלב הקודם
    • ‫location: מחליפים את <LOCATION> באזור של מופע Google SecOps (לדוגמה, us,‏ europe או asia-southeast1). ערך זה מתווסף לתחילית chronicle.googleapis.com של הכלי לייצוא. רשימה מלאה של נקודות הקצה האזוריות מופיעה במאמר Regional Endpoints.
    • ‫project: מחליפים את <PROJECT_NUMBER> במספר הפרויקט שמופיע בקטע IAM & Admin > Settings.
    • ‫endpoint: צריך להשאיר את ההגדרה chronicle.googleapis.com.
    • משנים את creds_file_path לנתיב של קובץ המפתח בפורמט JSON של חשבון השירות (אפשרות 1), בהתאם לפלטפורמה:
      • Linux: /opt/observiq-otel-collector/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json

מייצא API להטמעה מדור קודם

  • אם משתמשים בקובץ האימות של ההעלאה מאפשרות 2, מחליפים את הבלוק exporters בבלוק הבא. מגדירים את creds_file_path לנתיב של קובץ האימות להטמעת נתונים. אם המכונה נמצאת מחוץ לארה"ב, מחליפים את malachiteingestion-pa.googleapis.com בנקודת הקצה האזורית (לדוגמה, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/logonbox:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: LOGONBOX
        raw_log_field: body
    

שמירת קובץ התצורה

  • אחרי שמסיימים לערוך, שומרים את הקובץ:
    • ‫Linux: מקישים על Ctrl+O, אחר כך על Enter ואז על Ctrl+X.
    • Windows: לוחצים על קובץ > שמירה

מפעילים מחדש את הסוכן של Bindplane כדי להחיל את השינויים.

כדי להפעיל מחדש את הסוכן של Bindplane ב-Linux:

  1. מריצים את הפקודה הבאה:

    sudo systemctl restart observiq-otel-collector
    
  2. מוודאים שהשירות פועל:

    sudo systemctl status observiq-otel-collector
    
  3. בודקים אם יש שגיאות ביומנים:

    sudo journalctl -u observiq-otel-collector -f
    

כדי להפעיל מחדש את סוכן Bindplane ב-Windows:

  1. בוחרים אחת מהאפשרויות האלה:

    • שורת הפקודה או PowerShell כאדמין:
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • מסוף השירותים:
      1. מקישים על Win+R, מקלידים services.msc ומקישים על Enter.
      2. מאתרים את observIQ OpenTelemetry Collector.
      3. לוחצים לחיצה ימנית ובוחרים באפשרות הפעלה מחדש.
  2. מוודאים שהשירות פועל:

    sc query observiq-otel-collector
    
  3. בודקים אם יש שגיאות ביומנים:

    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    

הגדרת העברת syslog ב-LogonBox

  1. נכנסים למסוף הניהול של LogonBox כאדמינים.
  2. עוברים אל דוחות > יומן ביקורת.
  3. קובעים את הגדרות הייצוא של syslog:
    • שרת Syslog: מזינים את כתובת ה-IP של המארח של סוכן Bindplane (לדוגמה, 192.168.1.100).
    • יציאה: מזינים 514 (חייבת להתאים ליציאת המקלט של Bindplane).
    • ‫Protocol: בוחרים באפשרות UDP (צריך להתאים לסוג המקלט של Bindplane).
  4. בוחרים את קטגוריות האירועים להעברה (לדוגמה, איפוס סיסמאות, אימות זהות, ניהול משתמשים וקבוצות).
  5. לוחצים על 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 Merged from 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.