איסוף יומנים של אימות מונע
במאמר הזה מוסבר איך להטמיע יומני Preempt Auth ב-Google Security Operations באמצעות סוכן Bindplane.
Preempt Auth הוא פתרון לניטור אירועי אימות, שיוצר יומני אימות מפורטים לסביבות Active Directory. הוא מתעד אירועי התחברות מוצלחים ונכשלים, חיפושים ב-LDAP, גישה לשירותים וסוגי אימות בנקודות קצה שונות.
לפני שמתחילים
חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:
- מכונה של Google SecOps
- Windows Server 2016 ואילך, או מארח Linux עם
systemd - קישוריות רשת בין סוכן Bindplane לבין שרת Preempt
- אם השרת פועל מאחורי שרת proxy, צריך לוודא שהיציאות של חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane.
- גישה מורשית ל-Preempt Auth (CrowdStrike Identity Protection) עם הרשאות אדמין
קבלת פרטי כניסה ל-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 (ניהול הרשאות גישה (IAM) & אדמין > חשבונות שירות).
- לוחצים על Create service account.
- מספקים את פרטי ההגדרה הבאים:
- 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בספריית ה-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כך שיתאים לנתיב שבו שמרתם אותו. - עוברים אל IAM & Admin > Settings ומעתיקים את הערך של Project number. תצטרכו אותו כדי להגדיר את כלי הייצוא.
אפשרות 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: tcplog: listen_address: "0.0.0.0:514" exporters: chronicle/preempt_auth: 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: '<CREDS_FILE_PATH>' customer_id: '<CUSTOMER_ID>' endpoint: chronicle.googleapis.com log_type: PREEMPT_AUTH raw_log_field: body ingestion_labels: env: production service: pipelines: logs/preempt_auth_to_chronicle: receivers: - tcplog exporters: - chronicle/preempt_auth
פרמטרים להגדרה
מחליפים את ה-placeholders הבאים:
הגדרת המקלט:
-
tcplog: קבלת syslog דרך TCP. אם הפריסה של Preempt מעבירה נתונים דרך UDP, צריך להשתמש ב-udplog. -
0.0.0.0:514: האזנה לכל הממשקים ביציאה 514. אם צריך, משנים את היציאה (לדוגמה,1514ל-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>: מספר הלקוח משלב קבלת מספר הלקוח ב-Google SecOps. -
location: מחליפים את<LOCATION>באזור של מופע Google SecOps (לדוגמה,us,europeאוasia-southeast1). ערך זה מתווסף לתחיליתchronicle.googleapis.comשל הכלי לייצוא. לרשימה המלאה, ראו נקודות קצה אזוריות. -
project: מחליפים את<PROJECT_NUMBER>במספר הפרויקט שמופיע בקטע IAM & Admin > Settings. -
endpoint: משאירים את הערךchronicle.googleapis.com.
-
כלי לייצוא נתונים מ-Legacy ingestion API
אם משתמשים בקובץ האימות של ההעלאה מאפשרות 2, מחליפים את הבלוק
exportersבבלוק הבא. מגדירים אתcreds_file_pathלנתיב של קובץ האימות להטמעת נתונים. אם המכונה נמצאת מחוץ לארה"ב, מחליפים אתmalachiteingestion-pa.googleapis.comבנקודת הקצה האזורית (לדוגמה,europe-malachiteingestion-pa.googleapis.com).exporters: chronicle/preempt_auth: compression: gzip creds_file_path: '<CREDS_FILE_PATH>' customer_id: '<CUSTOMER_ID>' endpoint: malachiteingestion-pa.googleapis.com log_type: PREEMPT_AUTH raw_log_field: body ingestion_labels: env: production
שמירת קובץ התצורה
- אחרי שמסיימים לערוך, שומרים את הקובץ:
- 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 לאימות עם עדיפות
- נכנסים למסוף הניהול של Preempt.
- עוברים אל הגדרות > שילוב SIEM.
- מפעילים העברה של syslog לאירועי אימות.
- מזינים את פרטי ההגדרה הבאים:
- Protocol: בוחרים באפשרות TCP (צריך להתאים להגדרת המקלט של סוכן Bindplane).
- כתובת שרת Syslog: מזינים את כתובת ה-IP של המארח של סוכן Bindplane (לדוגמה,
192.168.1.100). - יציאה: מזינים
514(חייבת להתאים ליציאת המקלט של סוכן Bindplane).
- בוחרים את סוגי אירועי האימות שרוצים להעביר:
- אירועי אימות מוצלחים
- אירועי אימות שנכשלו
- חיפושים ב-LDAP
- אירועים של גישה לשירות
- לוחצים על שמירה או על אישור.
- כדי לוודא שהיומנים נשלחים, בודקים את היומנים של סוכן Bindplane.
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | היגיון |
|---|---|---|
| authenticationType | extensions.auth.type | הערך הוא SSO אם authenticationType תואם ל-SSO_LOGIN או ל-LDAP_AUTHENTICATION; הערך הוא MACHINE אם DOMAIN_LOGIN; הערך הוא AUTHTYPE_UNSPECIFIED אם NTLM_AUTHENTICATION |
| extensions.auth.mechanism | ההגדרה היא MECHANISM_UNSPECIFIED | |
| inter_ip | intermediary.hostname | צריך להגדיר אם inter_ip היא לא כתובת IP חוקית |
| inter_ip | intermediary.ip | הגדרה אם inter_ip היא כתובת IP חוקית |
| eventLabel | metadata.description | הערך הועתק ישירות |
| eventType | metadata.event_type | הערך צריך להיות USER_LOGIN אם eventType הוא SUCCESSFUL_AUTHENTICATION או FAILED_AUTHENTICATION, ו-SERVICE_UNSPECIFIED אם eventType הוא SERVICE_ACCESS או LDAP_SEARCH והערך של principal_host_set הוא true. |
| eventType | metadata.product_event_type | הערך הועתק ישירות |
| endpointDisplayName, ipAddress | principal.hostname | צריך להגדיר אם endpointDisplayName != ipAddress וגם endpointDisplayName != "" |
| ipAddress, inter_ip | principal.ip | הערך מ-ipAddress אם ipAddress != inter_ip, אחרת מ-inter_ip |
| networkType | principal.resource.name | הערך הועתק ישירות |
| principal.resource.type | הגדרה של 'סוג הרשת' | |
| userDisplayName | principal.user.email_addresses | הגדרה אם userDisplayName תואם לביטוי הרגולרי של כתובת אימייל |
| userDisplayName | principal.user.user_display_name | הערך הועתק ישירות |
| userEntity.secondaryDisplayName, userDisplayName | principal.user.userid | הערך מ-userEntity.secondaryDisplayName אם הוא לא ריק, אחרת הערך מ-userDisplayName אם userEntity.secondaryDisplayName ריק |
| eventType | security_result.action | צריך להגדיר את הערך ALLOW אם SUCCESSFUL_AUTHENTICATION, ואת הערך BLOCK אם FAILED_AUTHENTICATION |
| eventSeverity | security_result.severity_details | הערך הועתק ישירות |
| authenticationType | security_result.summary | הערך הועתק ישירות |
| targetEntity.primaryDisplayName, targetServiceIdentifier, eventType, targetEntity.type | target.application | הערך מ-targetEntity.primaryDisplayName אם targetEntity.type == "CLOUD_SERVICE"; אחרת מ-targetServiceIdentifier אם targetServiceIdentifier != "" ולא הוגדר קודם; אחרת "LDAP" אם eventType == "LDAP_SEARCH" ולא הוגדר קודם |
| targetEntity.primaryDisplayName, targetEntity.type | target.hostname | Set if targetEntity.type == "ENDPOINT" |
| targetServiceType | target.resource.name | מוגדר אם targetServiceType != "" וגם != "UNKNOWN" |
| targetServiceType | target.resource.type | צריך להגדיר את הערך "Service Type" אם targetServiceType != "" וגם != "UNKNOWN" |
| targetEntity.primaryDisplayName, targetEntity.type | target.user.user_display_name | Set if targetEntity.type == "USER" |
| targetEntity.secondaryDisplayName, targetEntity.type | target.user.userid | מוגדר אם targetEntity.type == "USER" |
| metadata.product_name | צריך להגדיר את הערך "PREEMPT_AUTH" | |
| metadata.vendor_name | הגדרה כ'קדימות' |
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.