איסוף יומני CEF של Imperva
במאמר הזה מוסבר איך להטמיע יומני CEF של Imperva ב-Google Security Operations באמצעות סוכן Bindplane.
המנתח מחלץ שדות מיומנים בפורמט Imperva syslog ב-CEF (פורמט אירועים נפוץ). הוא משתמש ב-grok או ב-kv כדי לנתח את הודעת ה-CEF, ואז ממפה את הערכים האלה למודל הנתונים המאוחד (UDM). בנוסף, הוא מגדיר ערכי ברירת מחדל של מטא-נתונים למקור ולסוג האירוע.
לפני שמתחילים
חשוב לוודא שיש לכם את הדברים הבאים:
- מופע של Google SecOps
- מארח עם Windows 2016 ואילך או Linux עם
systemd - אם השרת פועל מאחורי שרת proxy, צריך לוודא שהיציאות של חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane.
- גישה עם הרשאות למסוף הניהול או למכשיר של Imperva
קבלת פרטי כניסה ל-Google SecOps בשביל סוכן Bindplane
כדי לאמת את סוכן Bindplane ב-Google SecOps, בוחרים באחת מהשיטות הבאות:
- פריסות חדשות: משתמשים ב-Chronicle API (אפשרות 1).
- פריסות מדור קודם: אפשר להמשיך להשתמש בקובץ האימות של ה-API להעברת נתונים (אפשרות 2) עד שה-API להעברת נתונים יפסיק לפעול ב-20 ביולי 2027.
אפשרות 1: יצירת חשבון שירות עבור Chronicle API (מומלץ)
- נכנסים למסוףGoogle Cloud ובוחרים את הפרויקט ב- Google Cloud שמקושר למכונה של Google SecOps.
- נכנסים לדף IAM & Admin > Service Accounts.
- לוחצים על יצירת חשבון שירות.
- מזינים את פרטי ההגדרה הבאים:
- Service account name: מזינים שם לחשבון (לדוגמה,
bindplane-ingest). - Service account description: מזינים תיאור (לדוגמה,
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 ומעתיקים את הערך של Project number. תצטרכו אותו כדי להגדיר את הייצוא.
אפשרות 2: הורדת קובץ אימות להטמעת נתונים (גרסה מדור קודם)
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Collection Agents (הגדרות SIEM > סוכני איסוף).
- מורידים את קובץ האימות להטמעת נתונים.
- שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן סוכן Bindplane.
איך מוצאים את מספר הלקוח ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings (הגדרות SIEM) > Profile (פרופיל).
- מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.
התקנת סוכן Bindplane
מתקינים את הסוכן של Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.
התקנה ב-Windows
- פותחים את שורת הפקודה או את PowerShell כאדמין.
מריצים את הפקודה הבאה:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
התקנה ב-Linux
- פותחים טרמינל עם הרשאות root או sudo.
מריצים את הפקודה הבאה:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
מקורות מידע נוספים להתקנה
אפשרויות התקנה נוספות מפורטות במדריך להתקנת סוכן Bindplane.
הגדרה של סוכן Bindplane להטמעה של Syslog ושליחה אל Google SecOps
ניגשים לקובץ התצורה:
- מאתרים את הקובץ
config.yaml. בדרך כלל, הוא נמצא בספרייה/opt/observiq-otel-collector/ב-Linux או בספריית ההתקנה ב-Windows. - פותחים את הקובץ באמצעות כלי לעריכת טקסט (לדוגמה,
nano,viאו פנקס הרשימות).
- מאתרים את הקובץ
עורכים את הקובץ
config.yamlבאופן הבא:receivers: udplog: # Replace the port and IP address as required 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 # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <CUSTOMER_ID> endpoint: chronicle.googleapis.com # Add optional ingestion labels for better organization log_type: 'IMPERVA_CEF' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels- מחליפים את היציאה ואת כתובת ה-IP לפי הצורך בתשתית.
- מחליפים את
<LOCATION>באזור של מכונת Google SecOps (לדוגמה,us,europeאוasia-southeast1). המייצא מוסיף את הערך הזה בתחילתchronicle.googleapis.com. - מחליפים את
<PROJECT_NUMBER>במספר הפרויקט שמופיע בקטע IAM & Admin > Settings. - מחליפים את
<CUSTOMER_ID>במספר הלקוח בפועל. - מעדכנים את
/path/to/ingestion-authentication-file.jsonלנתיב הקובץ שבו נשמר קובץ המפתח של חשבון השירות (אפשרות 1) בשלב 1.
מייצא API להטמעה מדור קודם
אם אתם משתמשים בקובץ האימות להטמעת נתונים מאפשרות 2, החליפו את הבלוק
exportersבקוד הבא. מגדירים אתcreds_file_pathלנתיב של קובץ האימות להטמעת נתונים. אם המכונה נמצאת מחוץ לארה"ב, מחליפים אתmalachiteingestion-pa.googleapis.comבנקודת הקצה האזורית (לדוגמה,europe-malachiteingestion-pa.googleapis.com).exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <CUSTOMER_ID> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'IMPERVA_CEF' raw_log_field: body ingestion_labels:
מפעילים מחדש את סוכן Bindplane כדי להחיל את השינויים.
כדי להפעיל מחדש את הסוכן של Bindplane ב-Linux, מריצים את הפקודה הבאה:
sudo systemctl restart observiq-otel-collectorכדי להפעיל מחדש את הסוכן של Bindplane ב-Windows, אפשר להשתמש במסוף Services או להזין את הפקודה הבאה:
net stop observiq-otel-collector && net start observiq-otel-collector
הגדרת Imperva WAF Gateway (SecureSphere) לשליחת CEF דרך syslog
במסוף MX, יוצרים קבוצת פעולות:
- עוברים אל Policies > Action Sets.
- לוחצים על חדש ונותנים לו שם (לדוגמה,
Google SecOps CEF).
מוסיפים את ממשק הפעולה של CEF syslog:
- בקטע Available Action Interfaces (ממשקי פעולות זמינים), פותחים את System Log (יומן מערכת) ומוסיפים אחת או יותר מהאפשרויות הבאות (לפי הצורך):
- רישום אירוע אבטחה ביומן המערכת (syslog) באמצעות תקן CEF
- רישום אירוע של אבטחת רשת ביומן המערכת (syslog) באמצעות תקן CEF
- רישום אירוע מערכת ביומן המערכת (syslog) באמצעות תקן CEF
- רישום אירוע אבטחה מותאם אישית ביומן המערכת (syslog) באמצעות תקן CEF
- בקטע Available Action Interfaces (ממשקי פעולות זמינים), פותחים את System Log (יומן מערכת) ומוסיפים אחת או יותר מהאפשרויות הבאות (לפי הצורך):
מגדירים את הפרמטרים של ממשק הפעולה:
- Syslog Host: מזינים את כתובת ה-IP של סוכן Bindplane. כדי להשתמש ביציאה שאינה ברירת המחדל, מוסיפים
:PORT(ברירת המחדל היא 514 אם לא מציינים יציאה). לדוגמה:10.0.0.10:514. - מתקן / רמת יומן: הגדרה בהתאם לדרישות המדיניות.
- הודעה: משאירים את ברירות המחדל של הספק ל-CEF, אלא אם יש לכם מיפוי בהתאמה אישית.
- Syslog Host: מזינים את כתובת ה-IP של סוכן Bindplane. כדי להשתמש ביציאה שאינה ברירת המחדל, מוסיפים
מצרפים את קבוצת הפעולות לכללי המדיניות:
- לאירועים מסוג Security / אבטחת רשת: פותחים את המדיניות הרלוונטית ומגדירים את Followed Action ל-Action Set שלכם.
- עבור System Events: יוצרים או מאמתים מדיניות של System Events ומגדירים את Followed Action לקבוצת הפעולות שלכם, כדי שהאירועים האלה יישלחו גם דרך CEF.
(אופציונלי) מגדירים יעדים ספציפיים לשער:
- אם קבוצות שונות של שערים צריכות לשלוח לשרתי syslog שונים, מגדירים כל קבוצת שערים > כלי רישום חיצוני ומפעילים את האפשרות "שימוש בהגדרת השער אם היא קיימת" במדיניות.
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | היגיון |
|---|---|---|
act |
security_result.action |
נגזרת. אם הערך של act הוא "allowed", "alert", מתחיל ב-"REQ_PASSED" או מתחיל ב-"REQ_CACHED", אז הערך של action הוא "ALLOW". אם act הוא deny, blocked, מתחיל ב-REQ_BLOCKED או מתחיל ב-REQ_CHALLENGE, אז action הוא BLOCK. אם act תואם לביטוי הרגולרי (?i)REQ_BAD, אז action הוא "FAIL". אחרת, הערך של action הוא "UNKNOWN_ACTION". הערך של security_result.action מוגדר לערך של action. |
act |
security_result.action_details |
נגזרת. המערכת יוצרת תיאור מפורט על סמך הערך של act. דוגמאות: REQ_CACHED_FRESH: response was returned from the data center's cache, REQ_BLOCKED: the request was blocked. |
app |
network.application_protocol |
ממופה ישירות אחרי ההמרה לאותיות רישיות. |
cs1 |
security_result.detection_fields.value |
מיפוי מותנה אם השדה cs1 לא ריק או לא מכיל את הערך "NA". הערך של security_result.detection_fields.key מוגדר כ-cs1Label. |
cs1Label |
security_result.detection_fields.key |
מיפוי מותנה אם השדה cs1 לא ריק או לא מכיל את הערך "NA". הערך של security_result.detection_fields.value מוגדר כ-cs1. |
cs2 |
security_result.detection_fields.value |
אם השדה לא ריק, הוא ממופה באופן מותנה. הערך של security_result.detection_fields.key מוגדר כ-cs2Label. |
cs2Label |
security_result.detection_fields.key |
אם התא cs2 לא ריק, המיפוי מתבצע על סמך תנאי. הערך של security_result.detection_fields.value מוגדר כערך של cs2. |
cs3 |
security_result.detection_fields.value |
מיפוי מותנה אם השדה לא ריק או לא מכיל "-". הערך של security_result.detection_fields.key מוגדר לערך של cs3Label. |
cs3Label |
security_result.detection_fields.key |
מיפוי מותנה אם cs3 לא ריק או לא מכיל את הערך '-'. הערך של security_result.detection_fields.value מוגדר לערך של cs3. |
cs4 |
security_result.detection_fields.value |
מיפוי מותנה אם השדה לא ריק. הערך של security_result.detection_fields.key מוגדר כ-cs4Label. |
cs4Label |
security_result.detection_fields.key |
מיפוי מותנה אם cs4 לא ריק. הערך של security_result.detection_fields.value מוגדר כערך של cs4. |
cs5 |
security_result.detection_fields.value |
אם השדה לא ריק, הוא ממופה באופן מותנה. הערך של security_result.detection_fields.key מוגדר כערך של cs5Label. |
cs5Label |
security_result.detection_fields.key |
מיפוי מותנה אם השדה cs5 לא ריק. הערך של security_result.detection_fields.value מוגדר כ-cs5. |
cs6 |
security_result.detection_fields.value |
אם השדה לא ריק, הוא ממופה באופן מותנה. הערך של security_result.detection_fields.key מוגדר כערך של cs6Label. |
cs6Label |
security_result.detection_fields.key |
מיפוי מותנה אם cs6 לא ריק. הערך של security_result.detection_fields.value מוגדר כ-cs6. |
cs7 |
principal.location.region_latitude |
מיפוי מותנה אם הערך של cs7Label הוא "latitude". |
cs8 |
principal.location.region_longitude |
מיפוי מותנה אם cs8Label הוא "קו אורך". |
cn1 |
security_result.detection_fields.value |
ממופה באופן מותנה אם הוא לא ריק ו-cn1Label לא ריק. הערך של security_result.detection_fields.key מוגדר כערך של cn1Label. |
cn1Label |
security_result.detection_fields.key |
מיפוי מותנה אם השדות cn1 ו-cn1Label לא ריקים. הערך של security_result.detection_fields.value מוגדר כערך של cn1. |
fileType |
security_result.detection_fields.value |
אם השדה לא ריק, הוא ממופה באופן מותנה. הערך של security_result.detection_fields.key מוגדר כ-"fileType". |
filePermission |
security_result.detection_fields.value |
אם השדה לא ריק, הוא ממופה באופן מותנה. הערך של security_result.detection_fields.key הוא "filePermission". |
request |
target.url |
מיפוי ישיר. |
requestClientApplication |
network.http.user_agent |
מיפוי מותנה אם השדה לא ריק. הפעולה הזו מחליפה את הערך שממופה מהשדה user_agent שחולץ מצמדי המפתח/ערך requestContext או requestClientApplication ב-CEF payload. |
requestMethod |
network.http.method |
ממופים ישירות. |
siteid |
security_result.detection_fields.value |
מיפוי מותנה אם השדה לא ריק. הערך של security_result.detection_fields.key מוגדר כ-"siteid". |
sourceServiceName |
target.hostname |
מיפוי ישיר. מחליף את הערך של dhost אם הוא קיים. |
src |
principal.ip |
ממופים ישירות. |
start |
metadata.event_timestamp.seconds |
חולץ באמצעות תבנית grok והומר לחותמת זמן. הוא משמש כגיבוי ל-deviceReceiptTime אם הוא לא קיים. אם גם deviceReceiptTime וגם start ריקים, המערכת משתמשת בחותמת הזמן של היומן. |
suid |
principal.user.userid |
מיפוי מותנה אם השדה לא ריק. |
| לא רלוונטי | metadata.event_type |
מקודד באופן קשיח ל-"NETWORK_HTTP". |
| לא רלוונטי | metadata.log_type |
ממופה ישירות מהשדה log_type ברמה העליונה. |
| לא רלוונטי | metadata.product_event_type |
ממופה מ-csv.event_id אם לא ריק. |
| לא רלוונטי | metadata.product_name |
מקודד באופן קשיח ל-"Web Application Firewall". |
| לא רלוונטי | metadata.vendor_name |
מקודד באופן קשיח ל-Imperva. |
kv.act |
event.idm.read_only_udm.security_result.action_details |
מופה מיומן השינויים |
kv.sourceServiceName |
event.idm.read_only_udm.target.resource.name |
מופה מיומן השינויים |
cicode |
event.idm.read_only_udm.principal.location.city |
מופה מיומן השינויים |
ccode |
event.idm.read_only_udm.principal.location.country_or_region |
מופה מיומן השינויים |
Customer |
event.idm.read_only_udm.network.organization_name |
מופה מיומן השינויים |
tls_cipher |
event.idm.read_only_udm.network.tls.cipher |
מופה מיומן השינויים |
cpt |
event.idm.read_only_udm.target.port |
מופה מיומן השינויים |
fileId |
event.idm.read_only_udm.target.resource.product_object_id |
מופה מיומן השינויים |
dproc |
event.idm.read_only_udm.security_result.category_details |
מופה מיומן השינויים |
deviceFacility |
event.idm.read_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
deviceExternalId |
event.idm.read_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
end |
event.idm.read_only_udm.metadata.collected_timestamp |
מופה מיומן השינויים |
יומן שינויים
צפייה ביומן השינויים של המנתח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.