איסוף יומנים של NetApp ONTAP

נתמך ב:

במאמר הזה מוסבר איך להטמיע יומני NetApp ONTAP ב-Google Security Operations באמצעות סוכן Bindplane.

‫NetApp ONTAP היא מערכת הפעלה לאחסון שיוצרת הודעות syslog לאירועי אימות, סטטוס מערכת, פעילות ברשת ופעולות שקשורות לאבטחה. המנתח מחלץ שדות מהודעות syslog באמצעות ביטויים רגולריים וממפה אותם למודל הנתונים המאוחד (UDM).

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

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

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

קבלת פרטי כניסה ל-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. מזינים את פרטי ההגדרה הבאים:
    • 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 ומעתיקים את הערך של Project number. תצטרכו אותו כדי להגדיר את הייצוא.

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

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

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

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

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

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

התקנת חלונות

  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
    

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

מקורות מידע נוספים בנושא התקנה

לאפשרויות התקנה נוספות ולפתרון בעיות, עיינו במדריך להתקנת סוכן 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/netapp_ontap:
        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: NETAPP_ONTAP
        raw_log_field: body
    
    service:
      pipelines:
        logs/netapp_ontap_to_chronicle:
          receivers:
            - udplog
          exporters:
            - chronicle/netapp_ontap
    

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

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

  • הגדרת המקלט:

    • ‫listen_address: כתובת ה-IP והיציאה להאזנה:
      • ‫0.0.0.0 כדי להאזין בכל הממשקים (מומלץ)
      • יציאה 514 היא יציאת syslog הרגילה (נדרש root ב-Linux; צריך להשתמש ב-1514 ללא root)
  • הגדרת הייצוא:

    • ‫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: מספר הלקוח שהועתק ממסוף Google SecOps
    • ‫location: מחליפים את <LOCATION> באזור של המכונה של Google SecOps (לדוגמה, us,‏ europe או asia-southeast1). המייצא מוסיף את הערך הזה בתחילת chronicle.googleapis.com. לרשימה המלאה, ראו נקודות קצה אזוריות.
    • ‫project: מחליפים את <PROJECT_NUMBER> במספר הפרויקט שמופיע בקטע IAM & Admin > Settings.
    • ‫endpoint: משאירים את הערך chronicle.googleapis.com.

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

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

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

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

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

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

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

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

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

      sudo journalctl -u observiq-otel-collector -f
      
  • כדי להפעיל מחדש את הסוכן של Bindplane ב-Windows, בוחרים באחת מהאפשרויות הבאות:

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

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • מסוף השירותים:

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

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

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

הגדרת יעד ל-syslog ב-ONTAP

  1. ניגשים לאשכול ONTAP באמצעות SSH:

    ssh admin@<ontap-cluster-ip>
    
    • מחליפים את <ontap-cluster-ip> בכתובת ה-IP לניהול של אשכול ה-ONTAP.
  2. בודקים את מסנני האירועים וההתראות הקיימים:

    event filter show
    event notification show
    
  3. יוצרים יעד ל-syslog. מחליפים את <syslog-server-ip> ואת <syslog-server-port> בפרטי Bindplane:

    event notification destination create -name syslog-ems -syslog <syslog-server-ip> -syslog-port <syslog-server-port> -syslog-transport udp-unencrypted
    

    אפשרויות אחרות ל--syslog-transport:

    • udp-unencrypted (ברירת מחדל)
    • tcp-unencrypted
    • tcp-encrypted (ל-TLS)
  4. מאמתים את היעד של syslog:

    event notification destination show
    

הגדרת מסנני אירועים קיימים

  • מקשרים את מסנני ברירת המחדל ליעד של syslog:

    event notification create -filter-name no-info-debug-events -destinations syslog-ems
    event notification create -filter-name default-trap-events -destinations syslog-ems
    

אופציונלי: יצירה והגדרה של מסננים בהתאמה אישית

  1. מסנן אירועי אימות (התחברות/התנתקות):

    event filter create -filter-name auth_events
    event filter rule add -filter-name auth_events -type include -message-name *login* -severity info
    event filter rule add -filter-name auth_events -type include -message-name *logout* -severity info
    
  2. מסנן שדות של זיהוי אבטחה:

    event filter create -filter-name security_fields
    event filter rule add -filter-name security_fields -type include -message-name *nmsdk_language* -severity info
    
  3. מחילים כל מסנן על יעד ה-syslog:

    event notification create -filter-name auth_events -destinations syslog-ems
    event notification create -filter-name security_fields -destinations syslog-ems
    
  4. אימות ההתראות:

    event notification show
    

טבלת מיפוי UDM

שדה ביומן מיפוי UDM Logic (פונקציה לוגית)
code לא ממופה
description metadata.description חולץ מהודעת היומן באמצעות תבנית grok. מוצג רק כשהתיאור הוא "התנתקות" או "התחברות".
intermediary_host intermediary.hostname חולץ מהודעת היומן באמצעות תבנית grok.
nmsdk_language security_result.detection_fields.value חולץ מהודעת היומן באמצעות תבנית grok. הערך הזה מתווסף כ-"value" לאובייקט detection_fields עם "key" = "nmsdk_language".
nmsdk_platform security_result.detection_fields.value חולץ מהודעת היומן באמצעות תבנית grok. הערך הזה מתווסף כ-value לאובייקט detection_fields עם key‏ = nmsdk_platform.
nmsdk_version security_result.detection_fields.value חולץ מהודעת היומן באמצעות תבנית grok. הערך הזה מתווסף כ-"value" לאובייקט detection_fields עם "key" = "nmsdk_version".
netapp_version security_result.detection_fields.value חולץ מהודעת היומן באמצעות תבנית grok. הערך הזה מתווסף כ-"value" לאובייקט detection_fields עם "key" = "netapp_version".
product_event_type metadata.product_event_type חולץ מהודעת היומן באמצעות תבנית grok.
security_result.summary security_result.summary חולץ מהודעת היומן באמצעות תבנית grok.
severity security_result.severity אם רמת החומרה היא "info" (לא תלוי-רישיות), צריך להגדיר את הערך "INFORMATIONAL".
src_ip principal.ip חולץ מהודעת היומן באמצעות תבנית grok.
src_port principal.port חולץ מהודעת היומן באמצעות תבנית grok.
status security_result.summary חולץ מהודעת היומן באמצעות תבנית grok.
ts metadata.event_timestamp.seconds חולץ מהודעת היומן באמצעות תבנית grok והומר לחותמת זמן.
url target.url חולץ מהודעת היומן באמצעות תבנית grok.
user target.user.userid חולץ מהודעת היומן באמצעות תבנית grok.
extensions.auth.type צריך להגדיר את הערך "AUTHTYPE_UNSPECIFIED" אם התיאור הוא "Logging out" או "Logging in".
metadata.event_type אם התיאור הוא "Logging in", צריך להגדיר את הערך "USER_LOGIN".
metadata.event_type אם התיאור הוא "Logging out", צריך להגדיר את הערך "USER_LOGOUT".
metadata.event_type אם התיאור הוא לא "Logging in" או "Logging out", צריך להגדיר את הערך "SCAN_UNCATEGORIZED".
metadata.log_type צריך להגדיר את הערך NETAPP_ONTAP.
metadata.product_name צריך להגדיר את הערך NETAPP_ONTAP.
metadata.vendor_name צריך להגדיר את הערך NETAPP_ONTAP.
target.platform צריך להגדיר את הערך WINDOWS אם nmsdk_platform מכיל את הערך windows (לא תלוי רישיות).
accessLocation event.idm.read_only_udm.principal.ip מופה מיומן השינויים
accessLocation event.idm.read_only_udm.principal.asset.ip מופה מיומן השינויים
deviceId event.idm.read_only_udm.principal.asset_id מופה מיומן השינויים
deviceId event.idm.read_only_udm.principal.asset.asset_id מופה מיומן השינויים
deviceName event.idm.read_only_udm.principal.hostname מופה מיומן השינויים
deviceName event.idm.read_only_udm.principal.asset.hostname מופה מיומן השינויים
domain event.idm.read_only_udm.principal.administarative_domain מופה מיומן השינויים
entityName event.idm.read_only_udm.target.file.names מופה מיומן השינויים
entityPath event.idm.read_only_udm.target.file.full_path מופה מיומן השינויים
entityType event.idm.read_only_udm.target.resource.attribute.labels מופה מיומן השינויים
extension event.idm.read_only_udm.target.resource.attribute.labels מופה מיומן השינויים
entityAccessedTime event.idm.read_only_udm.metadata.event_timestamp מופה מיומן השינויים
alertTimestamp event.idm.read_only_udm.metadata.event_timestamp מופה מיומן השינויים
id event.idm.read_only_udm.metadata.product_log_id מופה מיומן השינויים
userDisplayName event.idm.read_only_udm.principal.user.user_display_name מופה מיומן השינויים
userId event.idm.read_only_udm.principal.user.userid מופה מיומן השינויים
volumeId event.idm.read_only_udm.additional.fields מופה מיומן השינויים
volumeName event.idm.read_only_udm.additional.fields מופה מיומן השינויים
alertType event.idm.read_only_udm.additional.fields מופה מיומן השינויים
attributes.dataDestructionDetectedEntityCount event.idm.read_only_udm.additional.fields מופה מיומן השינויים
attributes.changePercentage event.idm.read_only_udm.additional.fields מופה מיומן השינויים
severity security_result.severity_details מופה מיומן השינויים
file_extn security_result.detection_fields מופה מיומן השינויים
uid metadata.product_log_id מופה מיומן השינויים
product_name principal.hostname מופה מיומן השינויים

יומן שינויים

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

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