איסוף יומני DDI של EfficientIP
גרסת המנתח: 9.0
במאמר הזה מוסבר איך להטמיע יומני EfficientIP DDI ב-Google Security Operations באמצעות סוכן Bindplane.
EfficientIP SOLIDserver הוא פתרון מקיף של DDI (DNS-DHCP-IPAM) שמספק מכשירי חומרה ווירטואליים חזקים, מאובטחים וניתנים להרחבה לשירותי רשת קריטיים, כולל DNS, DHCP, ניהול כתובות IP, NTP ו-TFTP. הפלטפורמה מספקת ניהול מרכזי ואוטומציה של תשתית הרשת, עם יכולות מתקדמות של מעקב ואבטחה.
לפני שמתחילים
חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:
- מכונה של Google SecOps
- Windows Server 2016 ואילך, או מארח Linux עם
systemd - קישוריות לרשת בין סוכן Bindplane לבין מכשיר EfficientIP SOLIDserver
- אם מריצים את הסוכן מאחורי שרת proxy, מוודאים שיציאות חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane.
- הרשאת אדמין למסוף האינטרנט של EfficientIP SOLIDserver
- SOLIDserver בגרסה 8.0 ואילך (נבדק בגרסאות 8.3.x ו-8.4.x)
קבלת פרטי כניסה ל-Google SecOps עבור סוכן Bindplane
כדי לאמת את סוכן Bindplane ב-Google SecOps, בוחרים אחת מהשיטות הבאות:
- פריסות חדשות: משתמשים ב-Chronicle API (אפשרות 1).
- פריסות קודמות: ממשיכים להשתמש בקובץ האימות להטמעת נתונים (אפשרות 2) עד שה-Ingestion API יופסק ב-20 ביולי 2027.
אפשרות 1: יצירת חשבון שירות עבור Chronicle API (מומלץ)
- נכנסים אל Google Cloud המסוף ובוחרים את Google Cloud הפרויקט שמקושר למופע של Google SecOps.
- נכנסים לדף IAM & Admin > Service Accounts.
- לוחצים על יצירת חשבון שירות.
- מספקים את פרטי ההגדרה הבאים:
- Service account name: מזינים שם לחשבון (לדוגמה,
bindplane-ingest). - תיאור חשבון השירות: מזינים תיאור (לדוגמה,
Bindplane agent log ingestion).
- Service account name: מזינים שם לחשבון (לדוגמה,
- לוחצים על Create and continue.
- בקטע Grant this service account access to project, לוחצים על Select a role ובוחרים באפשרות Chronicle Editor.
- לוחצים על המשך ואז על סיום.
- לוחצים על חשבון השירות שיצרתם ועוברים לכרטיסייה Keys.
- לוחצים על Add key > Create new key.
- בוחרים באפשרות JSON ולוחצים על Create. קובץ המפתח יורד למחשב.
- שומרים את קובץ המפתח בשם
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כך שיתאים לנתיב שבו שומרים את הקובץ. - עוברים אל IAM & Admin > Settings (ניהול הרשאות גישה ואדמין > הגדרות) ומעתיקים את מספר הפרויקט. תצטרכו אותו כדי להגדיר את כלי הייצוא.
אפשרות 2: הורדה של קובץ האימות להטמעת נתונים (מדור קודם)
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Collection Agents (הגדרות SIEM > סוכני איסוף).
- מורידים את קובץ האימות להטמעת נתונים.
- שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן סוכן Bindplane.
איך מוצאים את מספר הלקוח ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Profile.
מעתיקים את מספר הלקוח מהקטע פרטי הארגון ושומרים אותו.
התקנת הסוכן של Bindplane
מתקינים את הסוכן של Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.
התקנת חלונות
- פותחים את שורת הפקודה או את 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סטטוס השירות צריך להיות פעיל (פועל).
מקורות מידע נוספים להתקנה
אפשרויות התקנה נוספות ופתרון בעיות מפורטים במדריך להתקנת סוכן Bindplane.
הגדרת סוכן Bindplane להטמעת syslog ושליחה ל-Google SecOps
מאתרים את קובץ התצורה
Linux:
sudo nano /opt/observiq-otel-collector/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
עריכת קובץ תצורה
מחליפים את כל התוכן של
config.yamlבהגדרות הבאות:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/efficientip_ddi: 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: 'YOUR_CUSTOMER_ID' endpoint: chronicle.googleapis.com log_type: EFFICIENTIP_DDI raw_log_field: body ingestion_labels: env: production source: solidserver service: pipelines: logs/efficientip_to_chronicle: receivers: - udplog exporters: - chronicle/efficientip_ddiמחליפים את ה-placeholders הבאים:
הגדרת המקלט:
-
listen_address: מוגדר ל-0.0.0.0:514כדי להאזין לכל הממשקים ביציאת UDP 514.- בפריסות של Linux ללא הרשאות בסיס, צריך להשתמש ביציאה
1514ומעלה. - מוודאים שהיציאה תואמת להגדרות ב-SOLIDserver.
- בפריסות של Linux ללא הרשאות בסיס, צריך להשתמש ביציאה
-
הגדרת הייצוא:
creds_file_path: הנתיב המלא לקובץ המפתח בפורמט JSON של חשבון השירות (אפשרות 1):- Linux:
/opt/observiq-otel-collector/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id: מחליפים אתYOUR_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: מוגדר ל-EFFICIENTIP_DDI(נדרשת התאמה מדויקת).
ingestion_labels: תוויות אופציונליות לסיווג יומנים (אפשר להתאים אישית לפי הצורך).
מייצא API להטמעה מדור קודם
אם אתם משתמשים בקובץ האימות להטמעת נתונים מאפשרות 2, החליפו את הבלוק
exportersבקוד הבא. מגדירים אתcreds_file_pathלנתיב של קובץ האימות להטמעת נתונים. אם המכונה נמצאת מחוץ לארה"ב, מחליפים אתmalachiteingestion-pa.googleapis.comבנקודת הקצה האזורית (לדוגמה,europe-malachiteingestion-pa.googleapis.com).exporters: chronicle/efficientip_ddi: compression: gzip creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: EFFICIENTIP_DDI raw_log_field: body ingestion_labels: env: production source: solidserver
שמירת קובץ התצורה
אחרי שמסיימים לערוך, שומרים את הקובץ:
- Linux: מקישים על
Ctrl+O, אחר כך עלEnterואז עלCtrl+X. - Windows: לוחצים על קובץ > שמירה.
מפעילים מחדש את סוכן 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 של EfficientIP DDI
- נכנסים למסוף האינטרנט של EfficientIP SOLIDserver.
- בחלונית הניווט הימנית, לוחצים על ניהול.
- בקטע מעקב, לוחצים על הגדרה.
- בתפריט, לוחצים על + הוספה.
- ברשימה Services, בוחרים את השירותים הבאים: named (ליומני DNS)
- בשדה Target server (שרת יעד), מזינים את כתובת ה-IP והיציאה של מארח סוכן Bindplane בפורמט
<ip-address>:<port>.- לדוגמה:
192.168.1.100:514 - אם משתמשים ביציאה לא סטנדרטית ב-Linux, צריך לציין את היציאה בהתאם (לדוגמה,
192.168.1.100:1514)
- לדוגמה:
לוחצים על אישור כדי לשמור את ההגדרה.
אימות העברת היומנים
- בודקים את היומנים של סוכן Bindplane כדי לוודא שהיומנים מתקבלים:
- Linux:
sudo journalctl -u observiq-otel-collector -f - Windows:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Linux:
- מחפשים רשומות ביומן שמכילות אירועים של שאילתות DNS ותשובות מ-SOLIDserver.
- נכנסים למסוף Google SecOps ומוודאים שהיומנים של EfficientIP DDI מופיעים בדף Events.
סוגי היומנים הנתמכים
השילוב הזה אוסף את סוגי היומנים הבאים מ-EfficientIP SOLIDserver:
- יומני שאילתות DNS: שאילתות DNS של לקוחות עם סוג השאילתה, שם הדומיין וכתובת ה-IP של הלקוח
- יומני תשובות של DNS: תשובות DNS עם רשומות תשובה, TTL וקודי תגובה
- יומני DHCP: פעולות DHCP, כולל DISCOVER, OFFER, REQUEST, ACK, NAK, RELEASE ו-INFORM
- יומנים של DNS Guardian: אירועי אבטחה, כולל זיהוי התנהגות חשודה, הפעלה/השבתה של טריגרים
- יומני העברות של תחום DNS: פעולות והתראות של העברות תחומים
- יומני שגיאות DNS: שגיאות פורמט, SERVFAIL, REFUSED ושגיאות DNS אחרות
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | היגיון |
|---|---|---|
| ip_version | additional.fields | אם הוא לא ריק, הוא מוזג כתווית עם המפתח "ip_version" |
| message_size | additional.fields | אם השדה לא ריק, הוא ימוזג כתווית עם המפתח message_size |
| domain_name | additional.fields | אם הערך לא ריק, הוא ימוזג כתווית עם המפתח domain_name |
| לא רלוונטי | מתווך | מוזג מאובייקט מתווך |
| description | metadata.description | הערך מועתק ישירות אם הוא לא ריק |
| msg2 | metadata.description | צריך להגדיר את msg2 אם הערך של event_type הוא GENERIC_EVENT והתיאור ריק |
| su_cmd | metadata.event_type | הערך הוא PROCESS_OPEN אם su_cmd הוא sudo |
| activity_type | metadata.event_type | צריך להגדיר את הערך "NETWORK_DNS" אם activity_type תואם ל-dns והערך של has_dns_questions הוא true |
| הודעה | metadata.event_type | אם ההודעה תואמת ל-dhcp, צריך להגדיר את הערך "NETWORK_DHCP" |
| inner_message | metadata.event_type | ההגדרה תהיה NETWORK_UNCATEGORIZED אם inner_message תואם לתבניות ספציפיות, וגם has_principal ו-has_target הם true |
| תהליך דיפוזיה הפוך | metadata.event_type | צריך להגדיר את הערך "NETWORK_DNS" אם התהליך הוא "named" והערך של has_dns_questions הוא true; צריך להגדיר את הערך "STATUS_UPDATE" אם התהליך הוא "named" והערך של has_principal הוא true; צריך להגדיר את הערך "GENERIC_EVENT" אם התהליך הוא "named"; צריך להגדיר את הערך "NETWORK_DHCP" אם התהליך הוא "dhcpd" |
| PWD | metadata.event_type | צריך להגדיר את הערך "PROCESS_OPEN" אם השדה PWD לא ריק והערך של has_target או has_principal הוא True |
| activity_type | metadata.product_event_type | הערך הועתק ישירות |
| לא רלוונטי | metadata.vendor_name | מגדירים את הערך "EFFICIENTIP_DDI" |
| לא רלוונטי | metadata.product_name | מגדירים את האפשרות "EFFICIENTIP_DDI DHCP" |
| activity_type | network.application_protocol | צריך להגדיר את הערך "DNS" אם activity_type תואם ל-dns והערך של has_dns_questions הוא true |
| הודעה | network.application_protocol | אם ההודעה תואמת ל-DHCP, צריך להגדיר את האפשרות "DHCP" |
| תהליך דיפוזיה הפוך | network.application_protocol | הערך הוא DNS אם התהליך הוא named, והוא DHCP אם התהליך הוא dhcpd |
| src_mac | network.dhcp.chaddr | הערך מועתק ישירות אם התהליך הוא dhcpd |
| src_ip | network.dhcp.ciaddr | הערך מועתק ישירות אם dhcp_info הוא REQUEST |
| giaddr | network.dhcp.giaddr | הערך הועתק ישירות |
| dhcp_info | network.dhcp.opcode | הערך צריך להיות BOOTREQUEST אם dhcp_info הוא INFORM, DISCOVER או REQUEST. הערך צריך להיות BOOTREPLY אם dhcp_info הוא OFFER או ACK. |
| siaddr | network.dhcp.siaddr | הערך הועתק ישירות |
| transaction_id | network.dhcp.transaction_id | הערך מומר ל-uinteger אם הוא לא ריק או לא '0' |
| dhcp_info | network.dhcp.type | הערך הוא INFORM אם dhcp_info הוא INFORM, הערך הוא DISCOVER אם dhcp_info הוא DISCOVER, הערך הוא OFFER אם dhcp_info הוא OFFER, הערך הוא REQUEST אם dhcp_info הוא REQUEST, הערך הוא ACK אם dhcp_info הוא ACK. |
| yiaddr | network.dhcp.yiaddr | הערך הועתק ישירות |
| src_ip | network.dhcp.yiaddr | מוגדר ל-src_ip אם התהליך הוא dhcpd והשדה yiaddr ריק |
| answer_rrs | network.dns.answers | מוזג מאובייקט התשובה לכל rd ב-answer_rrs |
| לא רלוונטי | network.dns.questions | המידע ממוזג מאובייקט השאלות אם הערך של has_dns_questions הוא True |
| rcode | network.dns.response_code | הערך הומר למספר שלם חיובי |
| response_code | network.dns.response_code | הערך ממופה לקוד מספרי ומומר ל-uinteger |
| תחבורה | network.ip_protocol | הערך מומר לאותיות רישיות אם הוא תואם ל-udp או ל-tcp |
| הישות שזיהתה את האירוע | observer.ip | הערך הומר לכתובת IP |
| su_cmd | principal.application | הערך מועתק ישירות אם su_cmd הוא "sudo" |
| תהליך דיפוזיה הפוך | principal.application | הגדרה לתהליך אם התהליך הוא "named" או "dhcpd" |
| מארח | principal.asset.hostname | הערך מועתק ישירות אם הוא לא ריק |
| שם המארח | principal.asset.hostname | הערך מועתק ישירות אם הוא לא ריק והמארח ריק |
| src_ip | principal.asset.ip | הערך הועתק ישירות |
| asset_id | principal.asset_id | משורשר כ-"ID:" + asset_id |
| מארח | principal.hostname | הערך מועתק ישירות אם הוא לא ריק |
| שם המארח | principal.hostname | הערך מועתק ישירות אם הוא לא ריק והמארח ריק |
| domain_name | principal.hostname | הערך מועתק ישירות אם התיאור מכיל שם מארח והשדות host או hostname ריקים |
| src_ip | principal.ip | הערך מועתק ישירות אם ההמרה ל-ipaddress מצליחה. הוא נשלף מהתיאור אם src_ip ריק |
| src_mac | principal.mac | הערך הועתק ישירות |
| src_port | principal.port | הערך הומר למספר שלם |
| process_id | principal.process.pid | הערך הועתק ישירות |
| source_user | principal.user.userid | הערך הועתק ישירות |
| לא רלוונטי | security_result | התוצאות הממוזגות מ-sec_result |
| dst_ip | target.asset.ip | הערך הועתק ישירות |
| file_path | target.file.full_path | הערך הועתק ישירות |
| dst_ip | target.hostname | הערך מועתק ישירות אם הוא לא כתובת IP תקינה |
| מארח | target.hostname | הערך מועתק ישירות אם inner_message תואם לתבניות ספציפיות |
| dst_ip | target.ip | הערך הועתק ישירות |
| dst_port | target.port | הערך הומר למספר שלם |
| target_cmd_line | target.process.command_line | הערך הועתק ישירות |
| target_user | target.user.userid | הערך הועתק ישירות |
RR_msg |
event.idm.read_only_udm.metadata.description |
מופה מיומן השינויים |
client_id |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
key_office |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
rrset_type |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
syslog_priority |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
updating_zone |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
view_office |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
יומן שינויים
צפייה ביומן השינויים של כלי הניתוח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.