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

נתמך ב:

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

‫pfSense היא הפצת תוכנה של חומת אש ונתב בקוד פתוח שמבוססת על FreeBSD. הוא מספק סינון מנות עם שמירת מצב, VPN, עיצוב תנועה, NAT, שרת DHCP, העברת DNS ויכולות זיהוי פריצות, והכול מנוהל דרך ממשק מבוסס-אינטרנט. המנתח מחלץ שדות מיומנים בפורמט syslog של pfSense. הוא משתמש ב-grok כדי לנתח את הודעת היומן, ואז ממפה את הערכים האלה למודל הנתונים המאוחד (UDM). בנוסף, הוא מגדיר ערכי ברירת מחדל של מטא-נתונים למקור ולסוג האירוע.

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

חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:

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

קבלת קובץ אימות להטמעת נתונים ב-Google SecOps

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל SIEM Settings > Collection Agents.
  3. מורידים את קובץ האימות להטמעת נתונים. שומרים את הקובץ בצורה מאובטחת במערכת שבה תותקן 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 /etc/bindplane-agent/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/chronicle_w_labels:
            compression: gzip
            creds_file_path: '/path/to/ingestion-authentication-file.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: 'PFSENSE'
            raw_log_field: body
            ingestion_labels:
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    

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

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

    • הגדרת מקלט:

      • ‫udplog: משתמשים ב-udplog עבור UDP syslog או ב-tcplog עבור TCP syslog
      • ‫0.0.0.0: כתובת ה-IP להאזנה (0.0.0.0 להאזנה בכל הממשקים)
      • ‫514: מספר היציאה להאזנה (יציאת syslog רגילה)
    • הגדרת כלי הייצוא:

      • ‫creds_file_path: הנתיב המלא לקובץ האימות להטמעת נתונים:
        • Linux: /etc/bindplane-agent/ingestion-auth.json
        • ‫Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • ‫YOUR_CUSTOMER_ID: מספר הלקוח מהקטע 'איך מאתרים את מספר הלקוח'
      • endpoint: כתובת ה-URL של נקודת הקצה האזורית:
      • ‫log_type: סוג היומן בדיוק כמו שהוא מופיע ב-Chronicle‏ (PFSENSE)

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

  • אחרי שמסיימים לערוך, שומרים את הקובץ:
    • 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 ב-pfSense

‫pfSense פועל ב-FreeBSD ומספק ממשק מבוסס-אינטרנט לכל משימות ההגדרה, כולל העברה של syslog מרחוק.

  1. נכנסים לממשק האינטרנט של pfSense.
  2. עוברים אל סטטוס > יומני מערכת > הגדרות.
  3. עוברים לקטע אפשרויות של רישום מרחוק.
  4. בוחרים באפשרות הפעלת רישום ביומן מרחוק.
  5. מזינים את פרטי ההגדרה הבאים:
    • כתובת המקור: בוחרים באפשרות כל (או בממשק ספציפי).
    • פרוטוקול IP: בוחרים באפשרות IPv4.
    • שרתי יומן מרוחקים: מזינים BINDPLANE_IP:514 בשדה הראשון שזמין. מחליפים את BINDPLANE_IP בכתובת ה-IP של המארח של סוכן Bindplane.
  6. בקטע Remote Syslog Contents (תוכן של Syslog מרוחק), בוחרים את קטגוריות היומן להעברה:
    • אירועי מערכת
    • אירועים בחומת האש
    • אירועי DNS (Resolver/unbound, Forwarder/dnsmasq)
    • אירועי DHCP (שירות DHCP)
    • אירועי PPP
    • אירועי אימות (Portal Auth, ‏ RADIUS)
    • אירועי VPN (IPsec, ‏ OpenVPN, ‏ L2TP)
    • אירועי שער (מעקב אחר שער)
    • אירועי ניתוב (Routing daemon)
    • אירועי NTP
    • חבילות (חבילות מותקנות)
  7. לוחצים על Save.
  8. כדי לוודא שהודעות syslog נשלחות, בודקים את היומנים של סוכן Bindplane.

טבלת מיפוי UDM

שדה ביומן מיפוי UDM היגיון
אפליקציה principal.application הערך מחולץ מהודעת היומן באמצעות דפוסי grok. בהודעות syslog, שם האפליקציה מופיע בדרך כלל אחרי שם המארח וחותמת הזמן.
פקודה principal.process.command_line הערך הזה מחולץ משדה התיאור כשהיומן מציין ביצוע של פקודה.
description metadata.description שדה התיאור ממופה לתיאור המטא-נתונים של UDM, חוץ מיומני האפליקציה syslog-ng שבהם הוא ממופה ל-metadata.description. באירועי DHCP, הערך של dhcp_type מתווסף לפני התיאור.
dhcp_type metadata.product_event_type סוג הודעת ה-DHCP (למשל, DHCPDISCOVER, ‏ DHCPOFFER) מחולץ וממופה.
מארח intermediary.hostname או intermediary.ip אם ערך המארח הוא כתובת IP תקינה, הוא ממופה ל-intermediary.ip. אחרת, הוא ממופה ל-intermediary.hostname.
מארח principal.hostname, principal.asset.hostname אם לא מצוינת כתובת IP של חשבון משתמש, המארח נחשב לשם המארח של החשבון.
Mac principal.mac, network.dhcp.chaddr כתובת ה-MAC שמשויכת לבקשת DHCP מחולצת וממופה.
src_ip principal.ip, principal.asset.ip הנתונים מחולצים מפורמטים ספציפיים של יומנים באמצעות תבנית grok.
src_mac principal.mac חולצו מפורמטים ספציפיים של יומנים באמצעות תבנית grok.
dst_mac target.mac חולצו מפורמטים ספציפיים של יומנים באמצעות תבנית grok.
חותמת זמן metadata.event_timestamp חותמת הזמן מחולצת מהודעת היומן ומומרת לפורמט חותמת זמן של UDM. אם יש מידע על אזור הזמן (tz), הוא מצורף לחותמת הזמן לפני ההמרה.
timestamp_no_year metadata.event_timestamp אם יש חותמת זמן בלי שנה, המערכת מנתחת אותה ומוסיפה את השנה הנוכחית במהלך הניתוח.
משתמש principal.user.userid המערכת מחלצת וממפה את שם המשתמש שמשויך לאירוע.
דףה 1 security_result.rule_id ממופה מהעמודה הראשונה בקובץ ה-CSV אם התיאור הוא בפורמט CSV.
column6 security_result.rule_type ממופה מהעמודה השישית בקובץ ה-CSV אם התיאור הוא בפורמט CSV.
column7 security_result.action ממופה מהעמודה השביעית בקובץ ה-CSV אם התיאור הוא בפורמט CSV. הומר ל-'BLOCK' או ל-'ALLOW'.
column8 network.direction ממופה מהעמודה השמינית בקובץ ה-CSV אם התיאור הוא בפורמט CSV. הומר ל-'INBOUND' או ל-'OUTBOUND'.
column13 network.ip_protocol (אם הפרוטוקול הוא UDP או ICMP) ממופה מהעמודה ה-13 בקובץ ה-CSV אם התיאור הוא בפורמט CSV והפרוטוקול הוא UDP או ICMP. באירועי TCP/UDP, השדה הזה משמש ליצירת שדה נוסף עם המפתח Id.
column16 principal.ip, principal.asset.ip (אם IPv6 ו-column9 הוא 6) ממופה מהעמודה ה-16 בקובץ ה-CSV אם התיאור הוא בפורמט CSV והערך של column9 הוא 6. עבור אירועי TCP/UDP, נעשה שימוש בערך הזה לזיהוי פרוטוקול אם הערך בעמודה 9 הוא 4.
column17 target.ip, target.asset.ip (אם מדובר ב-IPv6 ולא ב-ip_failure) ממופה מהעמודה ה-17 בקובץ ה-CSV אם התיאור הוא בפורמט CSV, הערך של column9 הוא 6 והערך הוא כתובת IP תקינה. באירועי TCP/UDP, הוא משמש לזיהוי הפרוטוקול.
column18 principal.port (אם מדובר ב-UDP) ממופה מהעמודה ה-18 בקובץ ה-CSV אם התיאור הוא בפורמט CSV והפרוטוקול הוא UDP. לאירועי TCP/UDP, הוא ממופה ל-network.received_bytes.
column19 target.port (אם UDP) ממופה מהעמודה ה-19 ב-CSV אם התיאור הוא בפורמט CSV והפרוטוקול הוא UDP. באירועי DHCP, הוא ממופה ל-network.dhcp.yiaddr. באירועים אחרים, המיפוי הוא ל-principal.ip, ‏ principal.asset.ip.
column20 ‫additional.fields (key: "data_length") (אם הפרוטוקול הוא UDP) ממופה מהעמודה ה-20 ב-CSV אם התיאור הוא בפורמט CSV והפרוטוקול הוא UDP. באירועים אחרים, הוא ממופה ל-target.ip, ‏ target.asset.ip.
column21 principal.port (אם מדובר ב-TCP/UDP) ממופה מהעמודה ה-21 בקובץ ה-CSV אם התיאור הוא בפורמט CSV והפרוטוקול הוא TCP או UDP.
column22 target.port (אם מדובר ב-TCP/UDP) ממופה מהעמודה ה-20 בקובץ ה-CSV אם התיאור הוא בפורמט CSV והפרוטוקול הוא TCP או UDP.
column23 ‫additional.fields (key: "data_length") (אם מדובר ב-TCP/UDP) ממופה מהעמודה ה-23 בקובץ ה-CSV אם התיאור הוא בפורמט CSV והפרוטוקול הוא TCP או UDP.
column24 ‫additional.fields (key: "tcp_flags") (אם הפרוטוקול הוא TCP) ממופה מהעמודה ה-24 בקובץ ה-CSV אם התיאור הוא בפורמט CSV והפרוטוקול הוא TCP.
column25 ‫additional.fields (key: "sequence_number") (אם מדובר ב-TCP/UDP) ממופה מהעמודה ה-25 בקובץ ה-CSV אם התיאור הוא בפורמט CSV והפרוטוקול הוא TCP או UDP.
column29 ‫additional.fields (key: "tcp_options") (אם מדובר ב-TCP) המיפוי מתבצע מהעמודה ה-29 בקובץ ה-CSV אם התיאור הוא בפורמט CSV והפרוטוקול הוא TCP.
compression_algo additional.fields (key: "Compression Algorithm") המידע הזה מחולץ משדה התיאור ומוסף כשדה נוסף.
desc metadata.description הערך הזה מחולץ משדה ההודעה ומשמש כתיאור.
principal_ip ‫principal.ip, ‏ principal.asset.ip השדה הזה נשלף משדה התיאור ומייצג את כתובת ה-IP של חשבון המשתמש.
principal_username principal.user.userid השם חולץ משדה התיאור ומייצג את שם המשתמש העיקרי.
סטטוס security_result.detection_fields (key: "status") הערך מחולץ משדה התיאור ומוסף כשדה זיהוי בתוצאת האבטחה.
target_host target.hostname, target.asset.hostname השדה הזה חולץ משדה התיאור והוא מייצג את שם המארח של היעד.
src_port principal.port הערך הזה מחולץ משדה התיאור ומייצג את יציאת המקור. נקבע על סמך שדות שונים ביומן והלוגיקה של המנתח. יכול להיות NETWORK_CONNECTION,‏ NETWORK_DHCP,‏ STATUS_UPDATE או GENERIC_EVENT. הקוד מוטמע ב-PFSENSE. הקוד מוטמע ב-PFSENSE. הקוד מוטמע ב-PFSENSE. צריך להגדיר את הערך "DHCP" לאירועי DHCP. מגדירים את הערך 'BOOTREQUEST' עבור DHCPDISCOVER ו-DHCPREQUEST, ואת הערך 'BOOTREPLY' עבור DHCPOFFER ו-DHCPACK. מוגדר כ-"DISCOVER",‏ "REQUEST",‏ "OFFER" או "ACK" על סמך השדה dhcp_type.
pid intermediary.process.pid מופה מיומן השינויים
application intermediary.application מופה מיומן השינויים
ipv4" and "ipv6 principal.ip מופה מיומן השינויים
security_result.category AUTH_VIOLATION מופה מיומן השינויים
method network.http.method מופה מיומן השינויים
referer network.http.referral_url מופה מיומן השינויים
response_code network.http.response_code מופה מיומן השינויים
user_agent network.http.user_agent מופה מיומן השינויים
sent_bytes network.sent_bytes מופה מיומן השינויים
url target.url מופה מיומן השינויים
http_version additional.fields מופה מיומן השינויים
column19" which is "source-address network.dhcp.yiaddr מופה מיומן השינויים
column17" which is "destination-address target.ip מופה מיומן השינויים
column16" which is "source-address principal.ip מופה מיומן השינויים
column12" which is "hop_limit additional.fields מופה מיומן השינויים
column13" which is "ip_protocol network.ip_protocol מופה מיומן השינויים
ttl additional.fields מופה מיומן השינויים
Offset additional.fields מופה מיומן השינויים
Data length additional.fields מופה מיומן השינויים
Length additional.fields מופה מיומן השינויים
Sequence-number additional.fields מופה מיומן השינויים

יומן שינויים

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

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