איסוף יומנים של מערכת ניהול התוכן (CMS) של WordPress

נתמך ב:

הכלי הזה מחלץ יומנים של מערכת ניהול התוכן של WordPress מהודעות בפורמט JSON או בפורמט טקסט פשוט. הוא מטפל ביומנים בפורמט JSON וביומנים בפורמטים אחרים, מנתח שדות רלוונטיים וממפה אותם ל-UDM, כולל פרטי משתמשים, מידע על הרשת, מאפייני משאבים ופרטים על תוצאות אבטחה. הכלי לניתוח מבנה גם מבצע כמה טרנספורמציות של נתונים, כמו המרה של סוגי נתונים, מיזוג שדות וטיפול בדפוסי יומן ספציפיים עבור Kubernetes ומשאבים אחרים.

לפני שמתחילים

חשוב לוודא שמתקיימות דרישות הסף הבאות:

  • מופע של Google SecOps.
  • גישה עם הרשאות לאתר WordPress.
  • פלאגין שמאפשר פונקציונליות של Webhook (לדוגמה, WP Webhooks).

הגדרת פידים

כדי להגדיר פיד, מבצעים את השלבים הבאים:

  1. עוברים אל SIEM Settings > Feeds.
  2. לוחצים על הוספת פיד חדש.
  3. בדף הבא, לוחצים על הגדרת פיד יחיד.
  4. בשדה Feed name (שם הפיד), מזינים שם לפיד, למשל Wordpress CMS Logs (יומני מערכת ניהול התוכן של וורדפרס).
  5. בוחרים באפשרות Webhook בתור סוג המקור.
  6. בוחרים באפשרות Wordpress בתור סוג היומן.
  7. לוחצים על הבא.
  8. אופציונלי: מציינים ערכים לפרמטרים הבאים של הקלט:
    • Split delimiter: התו המפריד שמשמש להפרדה בין שורות ביומן, כמו \n.
  9. לוחצים על הבא.
  10. בודקים את הגדרות הפיד במסך סיום ולוחצים על שליחה.
  11. לוחצים על יצירת מפתח סודי כדי ליצור מפתח סודי לאימות הפיד הזה.
  12. מעתיקים את המפתח הסודי ושומרים אותו. לא תהיה לך אפשרות לראות שוב את המפתח הסודי הזה. במקרה הצורך, אפשר ליצור מחדש מפתח סודי חדש, אבל הפעולה הזו מבטלת את התוקף של המפתח הסודי הקודם.
  13. בכרטיסייה פרטים, מעתיקים את כתובת ה-URL של נקודת הקצה של הפיד מהשדה פרטי נקודת הקצה. צריך לציין את כתובת ה-URL של נקודת הקצה הזו באפליקציית הלקוח.
  14. לוחצים על סיום.

יצירת מפתח API ל-Webhook feed

  1. עוברים אל Google Cloud מסוף > Credentials.

    כניסה לדף Credentials

  2. לוחצים על Create credentials ואז על API key.

  3. הגבלת הגישה למפתח ה-API ל-Google Security Operations API.

מציינים את כתובת ה-URL של נקודת הקצה

  1. באפליקציית הלקוח, מציינים את כתובת ה-URL של נקודת הקצה מסוג HTTPS שמופיעה בפיד של ה-webhook.
  2. כדי להפעיל אימות, מציינים את מפתח ה-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

  1. מתקינים ומפעילים את הפלאגין WP Webhooks (או פלאגין אחר של Webhook שבחרתם) דרך ספריית הפלאגינים של WordPress.
  2. בתפריט האדמין של WordPress, עוברים לתפריט המשנה WP Webhooks, שנמצא בדרך כלל בקטע ההגדרות.
  3. לוחצים על שליחת נתונים בתפריט שבסרגל העליון.
  4. בוחרים את פעולת WordPress שתפעיל את ה-webhook. דוגמאות נפוצות כוללות את publish_post (כשפוסט חדש מתפרסם), user_register (כשמשתמש חדש נרשם) או comment_post (כשמתפרסמת תגובה חדשה). הפעולה הזו תלויה בנתונים שאתם בוחרים ושולחים ל-Google SecOps.
  5. לוחצים על הוספת Webhook URL.
  6. מגדירים את ה-Webhook:
    • שם: נותנים ל-Webhook שם תיאורי (למשל, Google SecOps Feed).
    • Webhook URL: מדביקים את כתובת נקודת הקצה של Google SecOps.
  7. לוחצים על שמירת ה-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.