איסוף יומנים של F5 Shape
גרסת מנתח הנתונים: 1.0
במאמר הזה מוסבר איך להטמיע יומנים של F5 Shape ב-Google Security Operations באמצעות Google Cloud Storage V2.
הפתרון F5 Distributed Cloud Bot Defense (לשעבר Shape Security) מגן על אפליקציות מפני מתקפות אוטומטיות על ידי זיהוי בוטים זדוניים וצמצום הפעילות שלהם. התכונה Bot Defense משתמשת ב-JavaScript וב-SDK מקורי לנייד כדי לאסוף נתוני טלמטריה מדפדפני לקוח וממכשירים ניידים, ובודקת את נתוני הטלמטריה האלה לפני שהבקשות מגיעות לאפליקציה שלכם. השירות מספק לוחות בקרה ודוחות משולבים שמאפשרים לראות מידע מפורט על התנועה שנותחה, כולל אירועי אבטחה, יומני גישה ויומני ביקורת.
לפני שמתחילים
חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:
- מופע של Google SecOps
- פרויקט ב-GCP עם Cloud Storage API מופעל
- הרשאות ליצירה ולניהול של קטגוריות GCS
- הרשאות לניהול מדיניות IAM בקטגוריות GCS
- גישה עם הרשאות למסוף F5 Distributed Cloud
- חשבון F5 Distributed Cloud עם גישה לשירות Multi-Cloud Network Connect או לשירות Shared Configuration
יצירת קטגוריה של Google Cloud Storage
- נכנסים אל מסוף Google Cloud.
- בוחרים פרויקט או יוצרים פרויקט חדש.
- בתפריט הניווט, עוברים אל Cloud Storage > Buckets.
- לוחצים על Create bucket.
מזינים את פרטי ההגדרה הבאים:
הגדרה ערך Name your bucket (שם הקטגוריה) מזינים שם ייחודי בעולם (לדוגמה, f5-xc-logs).סוג מיקום בוחרים לפי הצרכים שלכם (אזור, שני אזורים, כמה אזורים). Location בוחרים את המיקום (לדוגמה, us-central1).סוג אחסון (storage class) רגיל (מומלץ ליומנים שניגשים אליהם לעיתים קרובות). בקרת גישה אחיד (מומלץ). כלים להגנה אופציונלי: הפעלת ניהול גרסאות של אובייקטים או מדיניות שמירת נתונים. לוחצים על יצירה.
יצירת פרטי כניסה ל-F5 Shape API
ב-F5 Distributed Cloud, המערכת משתמשת באימות באמצעות אישורים של API (mTLS) או אסימונים של API. מומלץ להשתמש באישור API כדי לשפר את האבטחה.
יצירת אישור API
- נכנסים ל-F5 Distributed Cloud Console.
- בדף הבית של המסוף, בוחרים באפשרות ניהול.
- בתפריט הניווט הימני, עוברים אל ניהול אישי > פרטי כניסה.
- לוחצים על הוספת פרטי כניסה.
- בקטע Metadata, מזינים Name לאישור (לדוגמה,
secops-integration). - מהרשימה סוג פרטי הכניסה בוחרים באפשרות אישור API.
- מזינים סיסמה ומאשרים אותה בשדה אישור סיסמה.
בוחרים תאריך תפוגה מהרשימה של היומן.
לוחצים על הורדה כדי ליצור ולהוריד את האישור בפורמט קובץ
.p12.שומרים את קובץ האישור שהורד ואת הסיסמה בצורה מאובטחת לשימוש מאוחר יותר.
יצירת פרטי כניסה ל-GCP Cloud ב-F5 Distributed Cloud
כדי לכתוב יומנים לקטגוריית GCS, צריך פרטי כניסה של חשבון שירות ב-F5 Distributed Cloud. Google Cloud
יצירה Google Cloud של חשבון שירות
- במסוף GCP, נכנסים אל IAM & Admin > Service Accounts.
- לוחצים על יצירת חשבון שירות.
- מזינים את פרטי ההגדרה הבאים:
- שם חשבון השירות: מזינים
f5-xc-log-writer(או שם אחר לבחירתכם). - תיאור חשבון השירות: מזינים
Service account for F5 Distributed Cloud to write logs to GCS.
- שם חשבון השירות: מזינים
- לוחצים על יצירה והמשך.
- בקטע Grant this service account access to project (הענקת גישה של חשבון השירות הזה לפרויקט):
- לוחצים על בחירת תפקיד.
- מחפשים את Storage Object Admin ובוחרים בו.
- לוחצים על Continue.
- לוחצים על סיום.
מתן הרשאות IAM בקטגוריית GCS
- נכנסים אל Cloud Storage > Buckets (קטגוריות).
- לוחצים על שם הקטגוריה (לדוגמה,
f5-xc-logs). - עוברים לכרטיסייה Permissions.
- לוחצים על הענקת גישה.
- מזינים את פרטי ההגדרה הבאים:
- Add principals (הוספת ישויות מורשות): מזינים את כתובת האימייל בחשבון השירות (לדוגמה,
f5-xc-log-writer@PROJECT_ID.iam.gserviceaccount.com). - הקצאת תפקידים: בוחרים באפשרות אדמין של אובייקטים באחסון.
- Add principals (הוספת ישויות מורשות): מזינים את כתובת האימייל בחשבון השירות (לדוגמה,
- לוחצים על Save.
יצירת מפתח לחשבון שירות
- במסוף GCP, נכנסים אל IAM & Admin > Service Accounts.
- מחפשים את חשבון השירות (לדוגמה,
f5-xc-log-writer) ולוחצים עליו. - עוברים לכרטיסייה Keys.
- לוחצים על Add Key > Create new key.
- בוחרים באפשרות JSON בתור סוג המפתח.
- לוחצים על יצירה.
- קובץ ה-JSON עם המפתח יורד באופן אוטומטי. שומרים את הקובץ באופן מאובטח.
הוספת פרטי כניסה ל-Cloud אל F5 Distributed Cloud Google Cloud
- במסוף F5 Distributed Cloud, בדף הבית, בוחרים באפשרות Multi-Cloud Network Connect (חיבור רשתות מרובות עננים) או Shared Configuration (הגדרה משותפת).
- בתפריט הניווט הימני, עוברים אל ניהול > ניהול אתרים > פרטי כניסה לענן.
- לוחצים על הוספת פרטי כניסה ל-Cloud.
- בקטע Metadata, מזינים Name (לדוגמה,
gcp-secops-logs). - מהרשימה Cloud Credentials Type (סוג פרטי הכניסה לענן), בוחרים באפשרות GCP Credentials (פרטי כניסה ל-GCP).
- בקטע GCP Credentials (פרטי הכניסה ל-GCP), לוחצים על Configure (הגדרה).
- בקטע Service Account Key (מפתח של חשבון שירות):
- ברשימה סוג הסוד, בוחרים באפשרות סוד עם כיסוי עיניים.
- ברשימה פעולה, בוחרים באפשרות Blindfold New Secret.
- ברשימה סוג המדיניות בוחרים באפשרות מוכללת.
- בשדה Secret to Blindfold, מדביקים את כל התוכן של קובץ מפתח ה-JSON שהורדתם.
- לוחצים על אישור.
- לוחצים על שמירה ויציאה.
הגדרת מקלט גלובלי של יומנים ב-GCS
הכלי F5 Distributed Cloud Global Log Receiver מעביר יומנים ל-GCS כל 5 דקות בפורמט NDJSON (JSON שמופרד בתו שורה חדשה).
יצירת מקלט יומנים גלובלי
- במסוף F5 Distributed Cloud, בדף הבית, בוחרים באפשרות Multi-Cloud Network Connect (חיבור רשתות מרובות עננים) או Shared Configuration (הגדרה משותפת).
- ב-Multi-Cloud Network Connect: עוברים אל Manage > Log Management > Global Log Receiver.
- בקטע Shared Configuration (הגדרה משותפת): עוברים אל Manage > Global Log Receiver (ניהול > מקלט יומנים גלובלי).
- לוחצים על הוספת מקלט גלובלי של יומנים.
- בקטע Metadata, מזינים Name (לדוגמה,
secops-gcs-receiver). - אפשר גם להוסיף תוויות ותיאור.
ברשימה Log Type (סוג היומן), בוחרים את סוגי היומנים שרוצים לאסוף:
- יומני בקשות: יומני גישה ל-HTTP ממאזני עומסים
- אירועי אבטחה: אירועי אבטחה של Bot Defense ו-WAF
- יומני ביקורת: יומני ביקורת של הגדרות ושל אדמינים
- יומני בקשות DNS: יומנים של שאילתות DNS
ברשימה Log Message Selection (בחירת הודעות ביומן):
- אם משתמשים בשירות Multi-Cloud Network Connect, בוחרים באפשרות Select logs from current namespace (מרחב שמות של המערכת).
- אם משתמשים בשירות Shared Configuration, בוחרים באחת מהאפשרויות הבאות:
- בחירת יומנים ממרחב השמות הנוכחי: שליחת יומנים רק ממרחב השמות המשותף.
- בחירת יומנים מכל מרחבי השמות: שליחת יומנים מכל מרחבי השמות.
- בחירת יומנים במרחבי שמות ספציפיים: מזינים שמות ספציפיים של מרחבי שמות ולוחצים על הוספת פריט כדי להוסיף עוד.
ברשימה Receiver Configuration (הגדרת מקלט), בוחרים באפשרות GCP Bucket (מאגר GCP).
בקטע GCP Bucket (מאגר GCP), מציינים את ההגדרות הבאות:
- GCP Bucket Name (שם קטגוריית GCS): מזינים את שם קטגוריית GCS (לדוגמה,
f5-xc-logs). - פרטי כניסה ל-GCP Cloud: בוחרים מהרשימה את פרטי הכניסה לענן שיצרתם (לדוגמה,
gcp-secops-logs).
- GCP Bucket Name (שם קטגוריית GCS): מזינים את שם קטגוריית GCS (לדוגמה,
הגדרת הגדרות מתקדמות (אופציונלי)
- לוחצים על המתג הצגת שדות מתקדמים.
בקטע Batch Options (אפשרויות להוספה בכמות גדולה), מגדירים את האפשרויות הבאות (אופציונלי):
- אפשרויות של זמן קצוב לתפוגה של אצווה: בוחרים באפשרות זמן קצוב לתפוגה בשניות ומזינים ערך (ברירת המחדל היא
300שניות). - Batch Max Events (מספר האירועים המקסימלי בחבילה): בוחרים באפשרות Max Events (מספר האירועים המקסימלי) ומזינים ערך בין 32 ל-2,000 (אופציונלי).
- Batch Bytes (בייטים של קבוצת פריטים): בוחרים באפשרות Max Bytes (בייטים מקסימליים) ומזינים ערך בין 4,096 ל-1,048,576 (ברירת מחדל:
10485760בייטים / 10MB).
- אפשרויות של זמן קצוב לתפוגה של אצווה: בוחרים באפשרות זמן קצוב לתפוגה בשניות ומזינים ערך (ברירת המחדל היא
השלמת ההגדרה ובדיקה שלה
- לוחצים על שמירה ויציאה כדי ליצור את הכלי Global Log Receiver.
- ברשימה Global Log Receiver, מחפשים את הרסיבר (לדוגמה,
secops-gcs-receiver). - בעמודה פעולות, לוחצים על סמל שלוש הנקודות ... ובוחרים באפשרות בדיקת החיבור.
מחכים שהבדיקה תסתיים. אם החיבור פועל, תוצג הודעה על כך.
מוודאים שהיומנים נכתבים ל-GCS:
- נכנסים אל Cloud Storage > Buckets במסוף GCP.
- לוחצים על שם הקטגוריה (לדוגמה,
f5-xc-logs). - תוך 5-10 דקות, אמורות להיווצר תיקיות עם המבנה הבא:
- תיקייה יומית:
YYYY-MM-DD/ - תיקיית משנה לפי שעה:
YYYY-MM-DD/HH/ - קובצי יומן:
YYYY-MM-DD/HH/logs_YYYYMMDDHHMMSS.ndjson.gz
- תיקייה יומית:
הגדרה של רשימת היתרים בחומת האש
כדי להעביר יומנים ל-F5 Distributed Cloud, צריך לאפשר טווחי כתובות IP ספציפיים בחומת האש.
מוסיפים את טווחי כתובות ה-IP הבאים לרשימת ההיתרים של חומת האש:
193.16.236.64/29185.160.8.152/29
אחזור חשבון השירות של Google SecOps
Google SecOps משתמש בחשבון שירות ייחודי כדי לקרוא נתונים ממאגר GCS שלכם. צריך להעניק לחשבון השירות הזה גישה לדלי.
קבלת כתובת האימייל בחשבון השירות
- עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
- לוחצים על הוספת פיד חדש.
- לוחצים על הגדרת פיד יחיד.
- בשדה שם הפיד, מזינים שם לפיד (לדוגמה,
F5 Distributed Cloud Bot Defense). - בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
- בוחרים באפשרות F5_SHAPE בתור סוג היומן.
לוחצים על Get Service Account (קבלת חשבון שירות). תוצג כתובת האימייל בחשבון שירות ייחודי, לדוגמה:
secops-12345678@secops-gcp-prod.iam.gserviceaccount.comמעתיקים את כתובת האימייל לשימוש בשלב הבא.
לוחצים על הבא.
מציינים ערכים לפרמטרים הבאים של הקלט:
כתובת ה-URL של קטגוריית האחסון: מזינים את ה-URI של קטגוריית GCS עם נתיב הקידומת:
gs://f5-xc-logs/- מחליפים את
f5-xc-logsבשם הקטגוריה שלכם ב-GCS. - אם הגדרתם קידומת ספציפית במקלט הגלובלי של היומן, צריך לכלול אותה בנתיב (לדוגמה,
gs://f5-xc-logs/bot-defense/).
- מחליפים את
אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:
- אף פעם: לא נמחקים קבצים אחרי ההעברה (מומלץ לבדיקות).
- מחיקת קבצים שהועברו: הקבצים נמחקים אחרי שההעברה מסתיימת בהצלחה.
מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.
הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 180 ימים).
מרחב השמות של הנכס: מרחב השמות של הנכס.
תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.
לוחצים על הבא.
בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.
הענקת הרשאות IAM לחשבון השירות של Google SecOps
לחשבון השירות של Google SecOps צריך להיות התפקיד צפייה באובייקט אחסון בקטגוריית GCS.
- נכנסים אל Cloud Storage > Buckets (קטגוריות).
- לוחצים על שם הקטגוריה (לדוגמה,
f5-xc-logs). - עוברים לכרטיסייה Permissions.
- לוחצים על הענקת גישה.
- מזינים את פרטי ההגדרה הבאים:
- Add principals (הוספת חשבונות משתמשים): מדביקים את כתובת האימייל של חשבון השירות של Google SecOps
- הקצאת תפקידים: בוחרים באפשרות צפייה באובייקטים באחסון.
- לוחצים על Save.
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | לוגיקה |
|---|---|---|
| msg.requestHeaders.Proxy-Client-IP, msg.requestHeaders.WF-Forwarded-For, msg.requestHeaders.X-Forwarded-For, msg.requestHeaders.wl-proxy-client-ip, msg.hashedUserAgent, msg.transactionId, msg.hashedUsername, msg.dcgShapeFailedOn, ShapeShifterId, eventType, eventId, latRequest, latResponse, latTotal, latRspWait, count, latEccWait | additional.fields | מיזוג של תוויות שנוצרו משדות שונים |
| מתווך | מתווך | הערך מועתק ישירות אם הוא לא ריק |
| description | metadata.description | הערך הועתק ישירות |
| target, has_principal_machine | metadata.event_type | הערך הוא NETWORK_HTTP אם היעד שונה מ-"", אחרת הערך הוא STATUS_UPDATE אם has_principal_machine == true, אחרת הערך הוא GENERIC_EVENT |
| אפליקציה | network.application_protocol | הערך הומר לאותיות רישיות |
| requestMethod, msg.method | network.http.method | הערך מ-requestMethod אם הוא לא ריק, אחרת msg.method |
| requestClientApplication, msg.requestHeaders.User-Agent | network.http.parsed_user_agent | הערך מ-requestClientApplication אם הוא לא ריק, אחרת msg.requestHeaders.User-Agent, שהומר לסוכן משתמש מנותח |
| requestContext, msg.requestHeaders.Referer | network.http.referral_url | הערך מ-requestContext אם הוא לא ריק, אחרת msg.requestHeaders.Referer |
| msg.sseResponseCode, prCode | network.http.response_code | הערך מ-msg.sseResponseCode אם הוא לא ריק, אחרת prCode, מומר למספר שלם |
| requestClientApplication, msg.requestHeaders.User-Agent | network.http.user_agent | הערך מ-requestClientApplication אם הוא לא ריק, אחרת msg.requestHeaders.User-Agent |
| requestHeader.x-shape-src-virtual | observer.ip | הערך הועתק ישירות |
| משתמש (principal) | משתמש (principal) | הערך הועתק ישירות |
| msg.host | principal.asset.hostname | הערך הועתק ישירות |
| src, msg.src, msg.trueClientIP, requestHeader.X-Forwarded-For | principal.asset.ip | הערך מ-src אם הוא לא ריק, אחרת msg.src, אחרת msg.trueClientIP, אחרת כתובת ה-IP הראשונה מ-X-Forwarded-For אם היא שונה מ-src |
| msg.host | principal.hostname | הערך הועתק ישירות |
| src, msg.src, msg.trueClientIP, requestHeader.X-Forwarded-For | principal.ip | הערך מ-src אם הוא לא ריק, אחרת msg.src, אחרת msg.trueClientIP, אחרת כתובת ה-IP הראשונה מ-X-Forwarded-For אם היא שונה מ-src |
| msg.requestHeaders | principal.resource.attribute.labels | מוזגו מצמדי מפתח/ערך ב-msg.requestHeaders |
| msg.uri | principal.url | הערך הועתק ישירות |
| security_result | security_result | הערך הועתק ישירות |
| deviceExternalId | security_result.about.asset_id | הערך הועתק ישירות |
| flowLabel, agentLabel, requestHeader.Content-Length, requestHeader.Content-Type, requestHeader.Accept, requestHeader.Accept-Encoding, browserType, accountInfo, requestHeader.Via, asn, tid, ctag, requestHeader.Cache-Control, transactionResult | security_result.about.labels | מיזוג של תוויות שנוצרו משדות שונים |
| act, msg.transactionResult | security_result.action | Set to ALLOW if act matches PASS and isAttack, else UNKNOWN_ACTION; or ALLOW if msg.transactionResult == Success, BLOCK if Failure |
| act, msg.transactionResult | security_result.action_details | הערך מ-act אם הוא לא ריק, אחרת msg.transactionResult |
| severity | security_result.severity | הערך הוא HIGH אם הוא תואם ל-Error, error, warning; CRITICAL אם הוא תואם ל-critical; MEDIUM אם הוא תואם ל-notice; LOW אם הוא תואם ל-information, info, INFO |
| severity | security_result.severity_details | הערך הועתק ישירות |
| attackCause | security_result.threat_name | הערך הועתק ישירות |
| יעד | יעד | הערך הועתק ישירות |
| appName | target.application | הערך הועתק ישירות |
| dst, msg.dst | target.asset.ip | הערך מ-dst אם הוא לא ריק, אחרת msg.dst |
| dhost | target.hostname | הערך הועתק ישירות |
| dst, msg.dst | target.ip | הערך מ-dst אם הוא לא ריק, אחרת msg.dst |
| countryName | target.location.country_or_region | הערך הועתק ישירות |
| dpt | target.port | הומר למספר שלם |
| msg.responseHeaders | target.resource.attribute.labels | מוזגו מצמדי מפתח/ערך ב-msg.responseHeaders |
| בקשה | target.url | הערך הועתק ישירות |
| requestHeader.X-Forwarded-For | intermediary.ip | הגדרה לכתובות IP עוקבות ממערך X-Forwarded-For |
| metadata.product_name | הגדרה כ'צורה' | |
| metadata.vendor_name | הגדרה כ-F5 | |
requestHeaders_id_array.User-Agent |
network.http.user_agent |
מופה מיומן השינויים |
requestHeaders_id_array.Referer |
network.http.referral_url |
מופה מיומן השינויים |
requestHeaders_id_array.Proxy-Client-IP", "requestHeaders_id_array.WF-Forwarded-For", "requestHeaders_id_array.X-Forwarded-For", and "requestHeaders_id_array.wl-proxy-client-ip |
additional.fields |
מופה מיומן השינויים |
שנה רישום
צפייה ביומן השינויים של כלי הניתוח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.