איסוף יומנים של 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 בשביל סוכן 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. לוחצים על יצירת חשבון שירות.
  4. מספקים את פרטי ההגדרה הבאים:
    • Service account name: מזינים שם לחשבון (לדוגמה, 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 בספריית ה-collector של Bindplane (/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 (הגדרות 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
    

השירות אמור להופיע כ-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/chronicle_w_labels:
        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: '/path/to/ingestion-authentication-file.json'
        customer_id: 'YOUR_CUSTOMER_ID'
        endpoint: chronicle.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: הנתיב המלא לקובץ המפתח של חשבון השירות בפורמט JSON (אפשרות 1):
        • Linux: /opt/observiq-otel-collector/ingestion-auth.json
        • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • ‫YOUR_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.
      • ‫log_type: סוג היומן בדיוק כמו שהוא מופיע ב-Chronicle‏ (PFSENSE)

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

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

    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:
    

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

  • אחרי שמסיימים לערוך, שומרים את הקובץ:
    • 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 (מפענח/לא מאוגד, מעביר/dnsmasq)
    • אירועי DHCP (שירות DHCP)
    • אירועי PPP
    • אירועי אימות (אימות פורטל, RADIUS)
    • אירועי VPN‏ (IPsec, ‏ OpenVPN, ‏ L2TP)
    • אירועי שער (מעקב אחר שער)
    • אירועי ניתוב (דמון ניתוב)
    • אירועי 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 והערך בעמודה 9 הוא 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 (מפתח: "tcp_flags") (אם TCP) ממופה מהעמודה ה-24 בקובץ ה-CSV אם התיאור הוא בפורמט CSV והפרוטוקול הוא TCP.
column25 ‫additional.fields (key: "sequence_number") (אם מדובר ב-TCP/UDP) ממופה מהעמודה ה-25 ב-CSV אם התיאור הוא בפורמט CSV והפרוטוקול הוא TCP או UDP.
column29 ‫additional.fields (מפתח: "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.