איסוף יומנים של 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
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Collection Agents.
- מורידים את קובץ האימות להטמעת נתונים. שומרים את הקובץ בצורה מאובטחת במערכת שבה תותקן Bindplane.
איך מוצאים את מספר הלקוח ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Profile.
- מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.
התקנת הסוכן של Bindplane
מתקינים את הסוכן של Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.
התקנה ב-Windows
- פותחים את שורת הפקודה או את PowerShell כאדמין.
מריצים את הפקודה הבאה:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietמחכים שההתקנה תסתיים.
כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:
sc query observiq-otel-collector
השירות צריך להופיע עם הערך RUNNING.
התקנה ב-Linux
- פותחים טרמינל עם הרשאות root או sudo.
מריצים את הפקודה הבאה:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shמחכים שההתקנה תסתיים.
כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:
sudo systemctl status observiq-otel-collector
השירות אמור להופיע כ-active (running).
מקורות מידע נוספים להתקנה
אפשרויות התקנה נוספות ופתרון בעיות מפורטים במדריך להתקנת סוכן Bindplane.
הגדרת סוכן Bindplane להטמעת syslog ושליחה ל-Google SecOps
איתור קובץ ההגדרות
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
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
- Linux:
-
YOUR_CUSTOMER_ID: מספר הלקוח מהקטע 'איך מאתרים את מספר הלקוח' endpoint: כתובת ה-URL של נקודת הקצה האזורית:- ארה"ב:
malachiteingestion-pa.googleapis.com - אירופה:
europe-malachiteingestion-pa.googleapis.com - אסיה:
asia-southeast1-malachiteingestion-pa.googleapis.com - לרשימה המלאה של נקודות קצה אזוריות
- ארה"ב:
-
log_type: סוג היומן בדיוק כמו שהוא מופיע ב-Chronicle (PFSENSE)
-
שמירת קובץ התצורה
- אחרי שמסיימים לערוך, שומרים את הקובץ:
- Linux: מקישים על
Ctrl+O, אחר כך עלEnterואז עלCtrl+X - Windows: לוחצים על קובץ > שמירה.
- Linux: מקישים על
מפעילים מחדש את סוכן Bindplane כדי להחיל את השינויים.
כדי להפעיל מחדש את סוכן Bindplane ב-Linux, מריצים את הפקודה הבאה:
sudo systemctl restart observiq-otel-collectorמוודאים שהשירות פועל:
sudo systemctl status observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
sudo journalctl -u observiq-otel-collector -f
כדי להפעיל מחדש את סוכן Bindplane ב-Windows, בוחרים באחת מהאפשרויות הבאות:
שורת הפקודה או PowerShell כאדמין:
net stop observiq-otel-collector && net start observiq-otel-collectorמסוף השירותים:
- מקישים על
Win+R, מקלידיםservices.mscומקישים על Enter. - מאתרים את observIQ OpenTelemetry Collector.
לוחצים לחיצה ימנית ובוחרים באפשרות הפעלה מחדש.
מוודאים שהשירות פועל:
sc query observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- מקישים על
הגדרת העברה של Syslog ב-pfSense
pfSense פועל ב-FreeBSD ומספק ממשק מבוסס-אינטרנט לכל משימות ההגדרה, כולל העברה של syslog מרחוק.
- נכנסים לממשק האינטרנט של pfSense.
- עוברים אל סטטוס > יומני מערכת > הגדרות.
- עוברים לקטע אפשרויות של רישום מרחוק.
- בוחרים באפשרות הפעלת רישום ביומן מרחוק.
- מזינים את פרטי ההגדרה הבאים:
- כתובת המקור: בוחרים באפשרות כל (או בממשק ספציפי).
- פרוטוקול IP: בוחרים באפשרות IPv4.
- שרתי יומן מרוחקים: מזינים
BINDPLANE_IP:514בשדה הראשון שזמין. מחליפים אתBINDPLANE_IPבכתובת ה-IP של המארח של סוכן Bindplane.
- בקטע Remote Syslog Contents (תוכן של Syslog מרוחק), בוחרים את קטגוריות היומן להעברה:
- אירועי מערכת
- אירועים בחומת האש
- אירועי DNS (Resolver/unbound, Forwarder/dnsmasq)
- אירועי DHCP (שירות DHCP)
- אירועי PPP
- אירועי אימות (Portal Auth, RADIUS)
- אירועי VPN (IPsec, OpenVPN, L2TP)
- אירועי שער (מעקב אחר שער)
- אירועי ניתוב (Routing daemon)
- אירועי NTP
- חבילות (חבילות מותקנות)
- לוחצים על Save.
- כדי לוודא שהודעות 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.