איסוף יומנים של מערכת ניהול התוכן (CMS) של WordPress
הכלי הזה מחלץ יומנים של מערכת ניהול התוכן של WordPress מהודעות בפורמט JSON או בפורמט טקסט פשוט. הוא מטפל ביומנים בפורמט JSON וביומנים בפורמטים אחרים, מנתח שדות רלוונטיים וממפה אותם ל-UDM, כולל פרטי משתמשים, מידע על הרשת, מאפייני משאבים ופרטים על תוצאות אבטחה. הכלי לניתוח מבנה גם מבצע כמה טרנספורמציות של נתונים, כמו המרה של סוגי נתונים, מיזוג שדות וטיפול בדפוסי יומן ספציפיים עבור Kubernetes ומשאבים אחרים.
לפני שמתחילים
חשוב לוודא שמתקיימות דרישות הסף הבאות:
- מופע של Google SecOps.
- גישה עם הרשאות לאתר WordPress.
- פלאגין שמאפשר פונקציונליות של Webhook (לדוגמה, WP Webhooks).
הגדרת פידים
כדי להגדיר פיד, מבצעים את השלבים הבאים:
- עוברים אל SIEM Settings > Feeds.
- לוחצים על הוספת פיד חדש.
- בדף הבא, לוחצים על הגדרת פיד יחיד.
- בשדה Feed name (שם הפיד), מזינים שם לפיד, למשל Wordpress CMS Logs (יומני מערכת ניהול התוכן של וורדפרס).
- בוחרים באפשרות Webhook בתור סוג המקור.
- בוחרים באפשרות Wordpress בתור סוג היומן.
- לוחצים על הבא.
- אופציונלי: מציינים ערכים לפרמטרים הבאים של הקלט:
- Split delimiter: התו המפריד שמשמש להפרדה בין שורות ביומן, כמו
\n.
- Split delimiter: התו המפריד שמשמש להפרדה בין שורות ביומן, כמו
- לוחצים על הבא.
- בודקים את הגדרות הפיד במסך סיום ולוחצים על שליחה.
- לוחצים על יצירת מפתח סודי כדי ליצור מפתח סודי לאימות הפיד הזה.
- מעתיקים את המפתח הסודי ושומרים אותו. לא תהיה לך אפשרות לראות שוב את המפתח הסודי הזה. במקרה הצורך, אפשר ליצור מחדש מפתח סודי חדש, אבל הפעולה הזו מבטלת את התוקף של המפתח הסודי הקודם.
- בכרטיסייה פרטים, מעתיקים את כתובת ה-URL של נקודת הקצה של הפיד מהשדה פרטי נקודת הקצה. צריך לציין את כתובת ה-URL של נקודת הקצה הזו באפליקציית הלקוח.
- לוחצים על סיום.
יצירת מפתח API ל-Webhook feed
עוברים אל Google Cloud מסוף > Credentials.
לוחצים על Create credentials ואז על API key.
הגבלת הגישה למפתח ה-API ל-Google Security Operations API.
מציינים את כתובת ה-URL של נקודת הקצה
- באפליקציית הלקוח, מציינים את כתובת ה-URL של נקודת הקצה מסוג HTTPS שמופיעה בפיד של ה-webhook.
כדי להפעיל אימות, מציינים את מפתח ה-API ואת המפתח הסודי כחלק מהכותרת המותאמת אישית בפורמט הבא:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRETהמלצה: כדאי לציין את מפתח ה-API ככותרת במקום לציין אותו בכתובת ה-URL. אם לקוח ה-webhook שלכם לא תומך בכותרות בהתאמה אישית, אתם יכולים לציין את מפתח ה-API ואת המפתח הסודי באמצעות פרמטרים של שאילתות בפורמט הבא:
ENDPOINT_URL?key=API_KEY&secret=SECRET
מחליפים את מה שכתוב בשדות הבאים:
-
ENDPOINT_URL: כתובת ה-URL של נקודת הקצה של הפיד. -
API_KEY: מפתח ה-API לאימות ב-Google Security Operations. -
SECRET: המפתח הסודי שיצרתם כדי לאמת את הפיד.
הגדרת webhook ב-WordPress
- מתקינים ומפעילים את הפלאגין WP Webhooks (או פלאגין אחר של Webhook שבחרתם) דרך ספריית הפלאגינים של WordPress.
- בתפריט האדמין של WordPress, עוברים לתפריט המשנה WP Webhooks, שנמצא בדרך כלל בקטע ההגדרות.
- לוחצים על שליחת נתונים בתפריט שבסרגל העליון.
- בוחרים את פעולת WordPress שתפעיל את ה-webhook. דוגמאות נפוצות כוללות את publish_post (כשפוסט חדש מתפרסם), user_register (כשמשתמש חדש נרשם) או comment_post (כשמתפרסמת תגובה חדשה). הפעולה הזו תלויה בנתונים שאתם בוחרים ושולחים ל-Google SecOps.
- לוחצים על הוספת Webhook URL.
- מגדירים את ה-Webhook:
- שם: נותנים ל-Webhook שם תיאורי (למשל, Google SecOps Feed).
- Webhook URL: מדביקים את כתובת נקודת הקצה של Google SecOps.
- לוחצים על שמירת ה-Webhook.
טבלת מיפוי UDM
| שדה היומן | מיפוי UDM | לוגיקה |
|---|---|---|
ClientIP |
principal.ip |
כתובת ה-IP של הלקוח מחולצת מהשדה ClientIP ביומן הגולמי. |
Code |
target.resource.attribute.labels.key |
הערך 'Code' מוקצה כמפתח באובייקט target.resource.attribute.labels. |
Code |
target.resource.attribute.labels.value |
הערך של השדה Code מיומן הגולמי מוקצה כערך באובייקט target.resource.attribute.labels. |
CurrentUserID |
target.user.userid |
הערך CurrentUserID מיומן הגולמי מומר למחרוזת וממופה לשדה target.user.userid. |
EditUserLink |
target.url |
השדה EditUserLink מיומן הגולמי ממופה לשדה target.url. |
EventType |
metadata.product_event_type |
השדה EventType מיומן הגולמי ממופה לשדה metadata.product_event_type. |
FirstName |
target.user.first_name |
השדה FirstName מיומן הגולמי ממופה לשדה target.user.first_name. |
insertId |
metadata.product_log_id |
השדה insertId מיומן הגולמי ממופה לשדה metadata.product_log_id. |
labels.compute.googleapis.com/resource_name |
additional.fields.key |
הערך Resource Name (שם המשאב) מוקצה כמפתח באובייקט additional.fields. |
labels.compute.googleapis.com/resource_name |
additional.fields.value.string_value |
הערך של labels.compute.googleapis.com/resource_name מהיומן הגולמי מוקצה כערך מחרוזת באובייקט additional.fields. |
labels.k8s-pod/app_kubernetes_io/instance |
target.resource.attribute.labels.key |
הערך 'Kubernetes IO Instance' מוקצה כמפתח באובייקט target.resource.attribute.labels. |
labels.k8s-pod/app_kubernetes_io/instance |
target.resource.attribute.labels.value |
הערך של labels.k8s-pod/app_kubernetes_io/instance מיומן הגולמי מוקצה כערך באובייקט target.resource.attribute.labels. |
labels.k8s-pod/app_kubernetes_io/managed-by |
target.resource.attribute.labels.key |
הערך Kubernetes IO Instance Manager מוקצה כמפתח באובייקט target.resource.attribute.labels. |
labels.k8s-pod/app_kubernetes_io/managed-by |
target.resource.attribute.labels.value |
הערך של labels.k8s-pod/app_kubernetes_io/managed-by מיומן הגולמי מוקצה כערך באובייקט target.resource.attribute.labels. |
labels.k8s-pod/app_kubernetes_io/name |
target.resource.attribute.labels.key |
הערך 'Kubernetes IO Instance Name' מוקצה כמפתח באובייקט target.resource.attribute.labels. |
labels.k8s-pod/app_kubernetes_io/name |
target.resource.attribute.labels.value |
הערך של labels.k8s-pod/app_kubernetes_io/name מיומן הגולמי מוקצה כערך באובייקט target.resource.attribute.labels. |
labels.k8s-pod/controller-revision-hash |
target.resource.attribute.labels.key |
הערך 'Controller Revision Hash' מוקצה כמפתח באובייקט target.resource.attribute.labels. |
labels.k8s-pod/controller-revision-hash |
target.resource.attribute.labels.value |
הערך של labels.k8s-pod/controller-revision-hash מיומן הגולמי מוקצה כערך באובייקט target.resource.attribute.labels. |
labels.k8s-pod/helm_sh/chart |
target.resource.attribute.labels.key |
הערך Kubernetes IO Instance Manager SH מוקצה כמפתח באובייקט target.resource.attribute.labels. |
labels.k8s-pod/helm_sh/chart |
target.resource.attribute.labels.value |
הערך של labels.k8s-pod/helm_sh/chart מיומן הגולמי מוקצה כערך באובייקט target.resource.attribute.labels. |
labels.k8s-pod/k8s-app |
target.resource.attribute.labels.key |
הערך Application מוקצה כמפתח באובייקט target.resource.attribute.labels. |
labels.k8s-pod/k8s-app |
target.resource.attribute.labels.value |
הערך של labels.k8s-pod/k8s-app מיומן הגולמי מוקצה כערך באובייקט target.resource.attribute.labels. |
labels.k8s-pod/pod-template-generation |
target.resource.attribute.labels.key |
הערך Pod Template Generation (יצירת תבנית של פוד) מוקצה כמפתח באובייקט target.resource.attribute.labels. |
labels.k8s-pod/pod-template-generation |
target.resource.attribute.labels.value |
הערך של labels.k8s-pod/pod-template-generation מיומן הגולמי מוקצה כערך באובייקט target.resource.attribute.labels. |
labels.k8s-pod/pod-template-hash |
target.resource.attribute.labels.key |
הערך Pod Template Hash (גיבוב של תבנית Pod) מוקצה כמפתח באובייקט target.resource.attribute.labels. |
labels.k8s-pod/pod-template-hash |
target.resource.attribute.labels.value |
הערך של labels.k8s-pod/pod-template-hash מיומן הגולמי מוקצה כערך באובייקט target.resource.attribute.labels. |
LastName |
target.user.last_name |
השדה LastName מיומן הגולמי ממופה לשדה target.user.last_name. |
logName |
target.resource.attribute.labels.key |
הערך 'שם היומן' מוקצה כמפתח באובייקט target.resource.attribute.labels. |
logName |
target.resource.attribute.labels.value |
הערך של השדה logName מיומן הגולמי מוקצה כערך באובייקט target.resource.attribute.labels. |
receiveTimestamp |
metadata.event_timestamp |
הערך receiveTimestamp מיומן הגולמי מנותח וממופה לשדה metadata.event_timestamp. |
resource.labels.cluster_name |
additional.fields.key |
הערך Cluster Name (שם האשכול) מוקצה כמפתח באובייקט additional.fields. |
resource.labels.cluster_name |
additional.fields.value.string_value |
הערך של resource.labels.cluster_name מהיומן הגולמי מוקצה כערך מחרוזת באובייקט additional.fields. |
resource.labels.cluster_name |
target.resource.resource_type |
אם resource.labels.cluster_name קיים, הערך 'CLUSTER' מוקצה ל-target.resource.resource_type. |
resource.labels.container_name |
metadata.product_event_type |
אם הערך של resource.type הוא k8s_container, הערך של resource.labels.container_name יחד עם resource.labels.namespace_name משמשים ליצירת metadata.product_event_type. |
resource.labels.container_name |
target.resource.name |
הערך של resource.labels.container_name מיומן הגולמי מוקצה לשדה target.resource.name. |
resource.labels.location |
target.location.country_or_region |
הערך של resource.labels.location מיומן הגולמי מוקצה לשדה target.location.country_or_region. |
resource.labels.namespace_name |
additional.fields.key |
הערך Namespace Name מוקצה כמפתח באובייקט additional.fields. |
resource.labels.namespace_name |
additional.fields.value.string_value |
הערך של resource.labels.namespace_name מהיומן הגולמי מוקצה כערך מחרוזת באובייקט additional.fields. |
resource.labels.namespace_name |
metadata.product_event_type |
אם הערך של resource.type הוא k8s_container, הערך של resource.labels.namespace_name יחד עם resource.labels.container_name משמשים ליצירת metadata.product_event_type. |
resource.labels.node_name |
metadata.product_event_type |
אם הערך של resource.type הוא k8s_node, הערך של resource.labels.node_name משמש ליצירת metadata.product_event_type. |
resource.labels.pod_name |
additional.fields.key |
הערך Pod Name מוקצה כמפתח באובייקט additional.fields. |
resource.labels.pod_name |
additional.fields.value.string_value |
הערך של resource.labels.pod_name מהיומן הגולמי מוקצה כערך מחרוזת באובייקט additional.fields. |
resource.labels.project_id |
additional.fields.key |
הערך 'מזהה הפרויקט' מוקצה כמפתח באובייקט additional.fields. |
resource.labels.project_id |
additional.fields.value.string_value |
הערך של resource.labels.project_id מהיומן הגולמי מוקצה כערך מחרוזת באובייקט additional.fields. |
resource.type |
target.resource.resource_subtype |
הערך של resource.type מיומן הגולמי מוקצה לשדה target.resource.resource_subtype. |
Roles |
target.user.user_role |
השדה Roles מיומן הגולמי מומר לאותיות רישיות וממופה לשדה target.user.user_role. |
SessionID |
network.session_id |
השדה SessionID מיומן הגולמי ממופה לשדה network.session_id. |
sev |
security_result.severity |
הערך של sev קובע את הערך של security_result.severity. "INFO" או "NOTICE" ממופים ל-"INFORMATIONAL", "WARN" ממופה ל-"MEDIUM", ו-"ERR" ממופה ל-"ERROR". |
TargetUsername |
target.user.user_display_name |
השדה TargetUsername מיומן הגולמי ממופה לשדה target.user.user_display_name. |
textPayload |
metadata.description |
אם הערך של resource.type הוא k8s_node, הערך של textPayload ממופה לשדה metadata.description. |
textPayload |
network.application_protocol |
הפרוטוקול (לדוגמה, HTTP) מחולץ מהשדה textPayload באמצעות תבניות grok. |
textPayload |
network.http.method |
שיטת ה-HTTP (לדוגמה, GET, POST) מחולצת מהשדה textPayload באמצעות דפוסי grok. |
textPayload |
network.http.referral_url |
כתובת ה-URL מחולצת מהשדה textPayload באמצעות דפוסי grok. |
textPayload |
network.http.response_code |
קוד תגובת ה-HTTP מחולץ מהשדה textPayload באמצעות דפוסי grok ומומר למספר שלם. |
textPayload |
network.received_bytes |
הבייטים שהתקבלו מחולצים מהשדה textPayload באמצעות דפוסי grok ומומרים למספר שלם לא מסומן. |
textPayload |
principal.ip |
כתובת ה-IP של המקור מחולצת מהשדה textPayload באמצעות דפוסי grok. |
textPayload |
security_result.description |
התיאור מחולץ מהשדה textPayload באמצעות דפוסי grok. |
textPayload |
target.file.full_path |
הנתיב מחולץ מהשדה textPayload באמצעות דפוסי grok. |
UserAgent |
network.http.user_agent |
השדה UserAgent מיומן היומן הגולמי ממופה לשדה network.http.user_agent. הערך USER_RESOURCE_ACCESS מוקצה לשדה metadata.event_type. |
שנה רישום
צפייה ביומן השינויים של כלי הניתוח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.