איסוף יומנים של ManageEngine ADManager Plus

נתמך ב:

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

‫ManageEngine ADManager Plus מציע פתרון מבוסס-אינטרנט לניהול פשוט של AD, כולל יצירה ושינוי של משתמשים, אבטחה מבוססת-תפקידים ודוחות מפורטים. השילוב של ADManager Plus עם שרתי Splunk ו-Syslog מאפשר לארגונים להעביר יומנים של כל פעולות הניהול של Active Directory, ‏Microsoft 365 ו-Google Workspace שבוצעו ב-ADManager Plus.

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

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

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

קבלת פרטי כניסה ל-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 (ניהול הרשאות גישה (IAM) & אדמין > חשבונות שירות).
  3. לוחצים על Create service account.
  4. מזינים את פרטי ההגדרה הבאים:
    • Service account name: מזינים שם לחשבון (לדוגמה, bindplane-ingest).
    • Service account description: מזינים תיאור (לדוגמה, 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 > סוכני איסוף.
  3. מורידים את קובץ האימות להטמעת נתונים.
  4. שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן הסוכן של Bindplane.

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

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

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

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

התקנת חלונות

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

    msiexec /i "https://github.com/observIQ/bindplane-otel-collector/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-otel-collector/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"
    

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

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

    receivers:
      tcplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/admanager_plus:
        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: '<CREDS_FILE_PATH>'
        customer_id: '<CUSTOMER_ID>'
        endpoint: chronicle.googleapis.com
        log_type: ADMANAGER_PLUS
        raw_log_field: body
        ingestion_labels:
          log_source: admanager_plus
    
    service:
      pipelines:
        logs/admanager_to_chronicle:
          receivers:
            - tcplog
          exporters:
            - chronicle/admanager_plus
    
  2. מחליפים את ה-placeholders הבאים:

    • הגדרת מקלט:

      • המקלט משתמש ב-tcplog כדי לקבל נתוני syslog ביציאת TCP‏ 514.
      • ‫listen_address: מגדירים את הערך 0.0.0.0:514 כדי להאזין לכל הממשקים ביציאה 514.
    • הגדרת כלי הייצוא:

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

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

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

    exporters:
      chronicle/admanager_plus:
        compression: gzip
        creds_file_path: '<CREDS_FILE_PATH>'
        customer_id: '<CUSTOMER_ID>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: ADMANAGER_PLUS
        raw_log_field: body
        ingestion_labels:
          log_source: admanager_plus
    

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

אחרי העריכה, שומרים את הקובץ:

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

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

Linux

  1. כדי להפעיל מחדש את סוכן Bindplane ב-Linux, מריצים את הפקודה הבאה:

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

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

    sudo journalctl -u observiq-otel-collector -f
    

Windows

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

    • באמצעות שורת הפקודה או PowerShell כאדמין:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • שימוש במסוף Services:

      1. לוחצים על Win+R, מקלידים services.msc ולוחצים על Enter.
      2. מחפשים את observIQ Distro for OpenTelemetry Collector.
      3. לוחצים לחיצה ימנית ובוחרים באפשרות הפעלה מחדש.
  2. מוודאים שהשירות פועל:

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

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

הגדרת העברת syslog ב-ManageEngine ADManager Plus

  1. מתחברים ל-ADManager Plus.
  2. עוברים לכרטיסייה אדמין.
  3. בקטע System Settings (הגדרות המערכת), לוחצים על Integrations (שילובים).
  4. בקטע Log Forwarding, לוחצים על Syslog.

  5. מגדירים את השדות הבאים:

    • שרת Syslog: מזינים את שם שרת ה-Syslog. מזינים את כתובת ה-IP או את שם המארח של מארח הסוכן של Bindplane.
    • יציאה: מזינים את מספר היציאה. מזינים את הערך 514.
    • פרוטוקול: בוחרים את הפרוטוקול המתאים, TCP או UDP, להעברת יומנים. בוחרים באפשרות TCP.
    • תקן Syslog: בוחרים את פורמט ההודעה הרצוי של Syslog‏: RFC 3164,‏ RFC 5424 או RawLog. בוחרים באפשרות RFC 5424 (מומלץ).
    • פורמט נתונים: מזינים את פורמט הנתונים. מגדירים את פורמט הנתונים לפי הצורך בסביבה שלכם.
  6. לוחצים על שמירה כדי לשמור את ההגדרה.

אחרי ההגדרה, ADManager Plus יתחיל להעביר את יומני פעולות הניהול לסוכן Bindplane, שישלח אותם ל-Google SecOps.

טבלת מיפוי UDM

שדה ביומן מיפוי UDM היגיון
ipPhone event.idm.read_only_udm.additional.fields מוזג כתווית עם המפתח "ipPhone" והערך מ-ipPhone אם ipPhone != ""‎
l event.idm.read_only_udm.additional.fields המיזוג מתבצע כתווית עם המפתח 'l' והערך מ-l אם l != ""
lockoutTime event.idm.read_only_udm.additional.fields המיזוג מתבצע כתווית עם המפתח lockoutTime והערך מ-lockoutTime אם lockoutTime != ""
העברה מ- event.idm.read_only_udm.additional.fields מוזג כתווית עם המפתח "Move From" והערך מ-Move_From אם Move_From != ""
העברה אל event.idm.read_only_udm.additional.fields מוזג כתווית עם המפתח "Move To" והערך מ-Move_To אם Move_To != ""
msg event.idm.read_only_udm.additional.fields המיזוג מתבצע כתווית עם המפתח 'חבר' והערך מההודעה אם ההודעה שונה מ-''
sn event.idm.read_only_udm.additional.fields המיזוג מתבצע כתווית עם המפתח 'sn' והערך מ-sn אם sn != ""
st event.idm.read_only_udm.additional.fields מוזג כתווית עם המפתח "st" והערך מ-st אם st != ""‎
שם תבנית event.idm.read_only_udm.additional.fields מוזג כתווית עם המפתח "שם התבנית" והערך מ-Template_Name אם Template_Name != ""
סטטוס event.idm.read_only_udm.metadata.description הערך נלקח מהסטטוס אם הסטטוס שונה מ-""
פעם event.idm.read_only_udm.metadata.event_timestamp המרת השעה לפורמט חותמת זמן אם השעה != ""
event.idm.read_only_udm.metadata.event_type נגזר: אם has_principal_user == "true" אז "USER_UNCATEGORIZED"; אחרת אם has_principal == "true" אז "STATUS_UPDATE"; אחרת "GENERIC_EVENT"
TechnicianName event.idm.read_only_udm.metadata.product_event_type הערך נלקח מ-TechnicianName אם TechnicianName != ""
event.idm.read_only_udm.metadata.product_name ההגדרה היא ADMANAGER_PLUS
event.idm.read_only_udm.metadata.vendor_name ההגדרה היא ADMANAGER_PLUS
שם דומיין event.idm.read_only_udm.principal.administrative_domain הערך נלקח מ-Domain_Name אם Domain_Name != ""
שם המארח event.idm.read_only_udm.principal.asset.hostname הערך נלקח משם המארח אם שם המארח != ""
כתובת אימייל event.idm.read_only_udm.principal.email הערך נלקח מהאימייל אם האימייל שונה מ-""
שם המארח event.idm.read_only_udm.principal.hostname הערך נלקח משם המארח אם שם המארח != ""
co event.idm.read_only_udm.principal.location.city הערך נלקח מ-co אם co != ""
משימה event.idm.read_only_udm.principal.resource.name הערך נלקח מהמשימה אם Task != ""
wWWHomePage event.idm.read_only_udm.principal.url הערך נלקח מ-wWWHomePage אם wWWHomePage != ""
סוג הסיסמה event.idm.read_only_udm.principal.user.attribute.labels מוזג כתווית עם המפתח "סוג סיסמה" והערך מ-Password_Type אם Password_Type != ""
countryCode event.idm.read_only_udm.principal.user.attribute.labels מוזג כתווית עם המפתח "countryCode" והערך מ-countryCode אם countryCode != ""
סיסמה event.idm.read_only_udm.principal.user.attribute.labels מוזג כתווית עם המפתח "password" והערך מ-password אם password != ""‎
postalCode event.idm.read_only_udm.principal.user.attribute.labels המיזוג מתבצע כתווית עם המפתח postalCode והערך מ-postalCode אם postalCode != ""
primaryGroupID event.idm.read_only_udm.principal.user.attribute.labels המידע ימוזג כתווית עם המפתח primaryGroupID והערך מ-primaryGroupID אם primaryGroupID != ""
userAccountControl event.idm.read_only_udm.principal.user.attribute.labels המיזוג מתבצע כתווית עם המפתח userAccountControl והערך מ-userAccountControl אם userAccountControl != ""
userPrincipalName event.idm.read_only_udm.principal.user.attribute.labels מוזג כתווית עם המפתח "userPrincipalName" והערך מ-userPrincipalName אם userPrincipalName != ""‎
חברה event.idm.read_only_udm.principal.user.company_name הערך נלקח מהחברה אם החברה != ""
מחלקה event.idm.read_only_udm.principal.user.department מוזג עם המחלקה אם המחלקה != ""
givenName event.idm.read_only_udm.principal.user.first_name הערך נלקח מ-givenName אם givenName != ""
physicalDeliveryOfficeName event.idm.read_only_udm.principal.user.office_address.name הערך נלקח מ-physicalDeliveryOfficeName אם physicalDeliveryOfficeName != ""‎
streetAddress event.idm.read_only_udm.principal.user.personal_address.name הערך נלקח מ-streetAddress אם streetAddress != ""
homePhone event.idm.read_only_udm.principal.user.phone_numbers מוזג עם homePhone אם homePhone != ""
שם משתמש event.idm.read_only_udm.principal.user.user_display_name הערך נלקח מ-User_Name אם User_Name != ""; אחרת מ-Object_Name אם Object_Name != ""
sAMAccountName event.idm.read_only_udm.principal.user.userid הערך נלקח מ-sAMAccountName אם sAMAccountName != ""‎
פעולה event.idm.read_only_udm.security_result.action_details הערך נלקח מ-ACTION אם ACTION != ""‎
description event.idm.read_only_udm.security_result.description הערך נלקח מהתיאור אם התיאור שונה מ-""
שם המאגר event.idm.read_only_udm.security_result.detection_fields נגזר מ-container_Name grok: מוזג כתווית עם המפתח "Container_Name_DC_value1" והערך מ-dc_label_1 אם dc_label_1 != ""
שם המאגר event.idm.read_only_udm.security_result.detection_fields הערך נגזר מ-container_Name grok: בוצע מיזוג כתווית עם המפתח Container_Name_DC_value2 והערך מ-dc_label_2 אם dc_label_2 != ""
שם המאגר event.idm.read_only_udm.security_result.detection_fields נגזר מ-container_Name grok: מוזג כתווית עם המפתח "Container_Name_OU_value1" והערך מ-ou_label_1 אם ou_label_1 != ""
שם המאגר event.idm.read_only_udm.security_result.detection_fields נגזר מ-container_Name grok: מוזג כתווית עם המפתח "Container_Name_OU_value2" והערך מ-ou_label_2 אם ou_label_2 != ""
שם המאגר event.idm.read_only_udm.security_result.detection_fields נגזר מ-container_Name grok: מוזג כתווית עם המפתח "Container_Name_OU_value3" והערך מ-ou_label_3 אם ou_label_3 != ""
קבוצה ראשית event.idm.read_only_udm.security_result.detection_fields נגזר מ-Primary_Group grok: מוזג כתווית עם המפתח "Primary_Group_CN_value1" והערך מ-cn_label_1 אם cn_label_1 != ""
קבוצה ראשית event.idm.read_only_udm.security_result.detection_fields נגזר מ-Primary_Group grok: מוזג כתווית עם המפתח "Primary_Group_CN_value2" והערך מ-cn_label_2 אם cn_label_2 != ""
קבוצה ראשית event.idm.read_only_udm.security_result.detection_fields הערך נגזר מ-Primary_Group grok: הערך מוזג כתווית עם המפתח Primary_Group_DC_value1 והערך מ-primary_dc_label_1 אם primary_dc_label_1 != ""
קבוצה ראשית event.idm.read_only_udm.security_result.detection_fields Derived from Primary_Group grok: merged as label with key "Primary_Group_DC_value2" and value from primary_dc_label_2 if primary_dc_label_2 != ""
accountExpires event.idm.read_only_udm.security_result.detection_fields המידע מוזג כתווית עם המפתח accountExpires והערך מ-accountExpires אם accountExpires != ""
מנהל event.idm.read_only_udm.security_result.detection_fields נגזר מ-grok של המנהל: מוזג כתווית עם המפתח "manager_cn_value1" והערך מ-manager_cn_value1 אם manager_cn_value1 != ""
מנהל event.idm.read_only_udm.security_result.detection_fields Derived from manager grok: merged as label with key "manager_dc_value1" and value from manager_dc_value1 if manager_dc_value1 != ""
מנהל event.idm.read_only_udm.security_result.detection_fields נגזר מ-grok של המנהל: מוזג כתווית עם המפתח "manager_dc_value2" והערך מ-manager_dc_value2 אם manager_dc_value2 != ""
מנהל event.idm.read_only_udm.security_result.detection_fields Derived from manager grok: merged as label with key "manager_ou_value1" and value from manager_ou_value1 if manager_ou_value1 != ""
מנהל event.idm.read_only_udm.security_result.detection_fields נגזר מ-grok של המנהל: מוזג כתווית עם המפתח "manager_ou_value2" והערך מ-manager_ou_value2 אם manager_ou_value2 != ""
מנהל event.idm.read_only_udm.security_result.detection_fields הערך נגזר מ-manager grok: הערך אוחד כתווית עם המפתח manager_ou_value3 והערך מ-manager_ou_value3 אם manager_ou_value3 != ""
pwdLastSet event.idm.read_only_udm.security_result.detection_fields המיזוג מתבצע כתווית עם המפתח pwdLastSet והערך מ-pwdLastSet אם pwdLastSet != ""
ModuleName event.idm.read_only_udm.target.resource.name הערך נלקח מ-ModuleName אם ModuleName != ""
Object_Name event.idm.read_only_udm.target.user.user_display_name מופה מיומן השינויים
syslog_priority event.idm.read_only_udm.additional.fields מופה מיומן השינויים
syslog_version event.idm.read_only_udm.additional.fields מופה מיומן השינויים
product_app_id event.idm.read_only_udm.additional.fields מופה מיומן השינויים
User_Name event.idm.read_only_udm.target.user.user_display_name מופה מיומן השינויים
User_Name event.idm.read_only_udm.target.user.userid מופה מיומן השינויים
streetAddress event.idm.ready_only_udm.principal.user.personal_address.name מופה מיומן השינויים
physicalDeliveryOfficeName event.idm.ready_only_udm.principal.user.office_address.name מופה מיומן השינויים
postalCode event.idm.ready_only_udm.principal.user.attribute.labels מופה מיומן השינויים
countryCode event.idm.ready_only_udm.principal.user.attribute.labels מופה מיומן השינויים
company event.idm.ready_only_udm.principal.user.company_name מופה מיומן השינויים
department event.idm.ready_only_udm.principal.user.department מופה מיומן השינויים
accountExpires event.idm.ready_only_udm.security_result.detection_fields מופה מיומן השינויים
ou_label_1 event.idm.ready_only_udm.security_result.detection_fields מופה מיומן השינויים
ou_label_2 event.idm.ready_only_udm.security_result.detection_fields מופה מיומן השינויים
ou_label_3 event.idm.ready_only_udm.security_result.detection_fields מופה מיומן השינויים
dc_label_1 event.idm.ready_only_udm.security_result.detection_fields מופה מיומן השינויים
dc_label_2 event.idm.ready_only_udm.security_result.detection_fields מופה מיומן השינויים
cn_label_1 event.idm.ready_only_udm.security_result.detection_fields מופה מיומן השינויים
cn_label_2 event.idm.ready_only_udm.security_result.detection_fields מופה מיומן השינויים
primary_dc_label_1 event.idm.ready_only_udm.security_result.detection_fields מופה מיומן השינויים
primary_dc_label_2 event.idm.ready_only_udm.security_result.detection_fields מופה מיומן השינויים
manager_cn_value1 event.idm.ready_only_udm.security_result.detection_fields מופה מיומן השינויים
, event.idm.ready_only_udm.security_result.detection_fields מופה מיומן השינויים
and event.idm.ready_only_udm.security_result.detection_fields מופה מיומן השינויים
givenName event.idm.ready_only_udm.user.first_name מופה מיומן השינויים
sn event.idm.ready_only_udm.additional.fields מופה מיומן השינויים
st event.idm.ready_only_udm.additional.fields מופה מיומן השינויים
l event.idm.ready_only_udm.additional.fields מופה מיומן השינויים
wWWHomePage event.idm.ready_only_udm.principal.url מופה מיומן השינויים
homePhone event.idm.ready_only_udm.principal.user.phone_numbers מופה מיומן השינויים
co event.idm.ready_only_udm.principal.location.city מופה מיומן השינויים

יומן שינויים

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

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