איסוף יומנים של Elastic Defend

גרסת כלי הניתוח: 5.0

נתמך ב:

במאמר הזה מוסבר איך להטמיע יומנים של Elastic Defend ב-Google Security Operations באמצעות Google Cloud Storage V2 עם פונקציית Cloud Run.

‫Elastic Defend הוא פתרון לזיהוי ותגובה בנקודות קצה (EDR) בתוך Elastic Security, שמספק יכולות מניעה, זיהוי ותגובה עם שקיפות מלאה במערכות ההפעלה Windows,‏ macOS ו-Linux. הוא עוקב אחרי ביצוע תהליכים, פעילות בקבצים, חיבורים לרשת, שינויים ברישום וטעינות של ספריות כדי לזהות איומים ולמנוע אותם ברמת נקודת הקצה. הנתונים מאוחסנים ב-Elasticsearch ואפשר לאחזר אותם באמצעות Elasticsearch Search API.

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

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

  • מופע של Google SecOps
  • פרויקט ב-Google Cloud עם ממשקי ה-API הבאים שמופעלים בו:
    • Cloud Storage
    • פונקציות Cloud Run
    • Cloud Scheduler
    • Pub/Sub
    • IAM
  • גישה לאשכול Elasticsearch עם Elastic Defend שפרוס
  • הרשאות ליצירת מפתחות API ב-Elasticsearch (manage_security,‏ manage_api_key או הרשאת אשכול manage_own_api_key)
  • קישוריות רשת מפונקציות Cloud Run לאשכול Elasticsearch

יצירת קטגוריה של Google Cloud Storage

  1. נכנסים למסוף Google Cloud.
  2. בוחרים פרויקט או יוצרים פרויקט חדש.
  3. בתפריט הניווט, עוברים אל Cloud Storage > Buckets.
  4. לוחצים על Create bucket.
  5. מספקים את פרטי ההגדרה הבאים:

    הגדרה ערך
    Name your bucket (שם הקטגוריה) מזינים שם ייחודי גלובלית (לדוגמה, elastic-defend-logs)
    סוג המיקום בוחרים לפי הצרכים (אזור, שני אזורים, מספר אזורים)
    Location בוחרים את המיקום (לדוגמה, us-central1).
    סוג אחסון (storage class) רגיל (מומלץ ליומנים שמתבצעת אליהם גישה לעיתים קרובות)
    בקרת גישה אחיד (מומלץ)
    כלים להגנה אופציונלי: הפעלת ניהול גרסאות של אובייקטים או מדיניות שמירת נתונים
  6. לוחצים על יצירה.

איסוף פרטי כניסה של Elastic Defend

כדי לאפשר לפונקציית Cloud Run לאחזר אירועים של Elastic Defend, צריך ליצור מפתח API עם הרשאות קריאה בזרמי הנתונים של logs-endpoint.

יצירת מפתח API באמצעות Kibana

  1. נכנסים אל Kibana.
  2. בתפריט הניווט או בשדה החיפוש הגלובלי, עוברים אל Stack Management > API Keys.
  3. לוחצים על Create API key (יצירת מפתח API).
  4. בשדה Name, מזינים Google SecOps Cloud Storage Integration.
  5. בשדה Expiration (תפוגה), אפשר להגדיר תאריך תפוגה. כברירת מחדל, התוקף של מפתחות API לא פג.
  6. לוחצים על Control security privileges (שליטה בהרשאות אבטחה).
  7. בקטע Indices (אינדקסים), לוחצים על Add index privilege (הוספת הרשאת אינדקס).
  8. מגדירים את הרשאת האינדקס:
    • מדדים: מזינים logs-endpoint.*
    • הרשאות: בוחרים באפשרות קריאה
  9. משאירים את הקטע הרשאות לאשכול ריק (לא נדרשות הרשאות לאשכול).
  10. לוחצים על Create API key (יצירת מפתח API).

תיעוד פרטי הכניסה ל-API

אחרי שיוצרים את מפתח ה-API, מוצגות פרטי הכניסה בתיבת דו-שיח:

  • Encoded: מפתח ה-API בקידוד Base64 (לדוגמה, VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw==)

    צריך גם לתעד את כתובת ה-URL של נקודת הקצה של Elasticsearch:

  • ב-Elastic Cloud: נקודת הקצה מוצגת במסוף Cloud בקטע Elasticsearch של הפריסה (לדוגמה, https://my-deployment.es.us-central1.gcp.cloud.es.io:443)

  • במקרה של Elasticsearch בניהול עצמי: משתמשים בשם המארח או בכתובת ה-IP של אשכול Elasticsearch עם יציאה (לדוגמה, https://elasticsearch.example.com:9200)

יצירת מפתח API באמצעות כלי הפיתוח (שיטה חלופית)

אפשר גם ליצור מפתח API באמצעות כלי הפיתוח של Kibana:

  1. נכנסים אל Kibana.
  2. עוברים אל ניהול > כלים למפתחים.
  3. במסוף, מריצים את הפקודה הבאה:

    POST /_security/api_key
    {
      "name": "Google SecOps Cloud Storage Integration",
      "role_descriptors": {
        "chronicle_reader": {
          "indices": [
            {
              "names": ["logs-endpoint.*"],
              "privileges": ["read"]
            }
          ]
        }
      },
      "metadata": {
        "application": "google-chronicle-gcs",
        "environment": "production"
      }
    }
    
  4. התשובה מכילה את פרטי הכניסה של מפתח ה-API:

    {
      "id": "VuaCfGcBCdbkQm-e5aOx",
      "name": "Google SecOps Cloud Storage Integration",
      "api_key": "ui2lp2axTNmsyakw9tvNnw",
      "encoded": "VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw=="
    }
    
  5. מעתיקים את הערך encoded ושומרים אותו. זהו מפתח ה-API בקידוד Base64 שבו תשתמשו לאימות.

יצירת חשבון שירות

יוצרים חשבון שירות ייעודי לפונקציית Cloud Run.

  1. במסוף Google Cloud, עוברים אל IAM & Admin > Service Accounts.
  2. לוחצים על יצירת חשבון שירות.
  3. מספקים את פרטי ההגדרה הבאים:
    • שם חשבון השירות: מזינים elastic-defend-collector
    • תיאור חשבון השירות: מזינים Service account for Elastic Defend log collection to GCS
  4. לוחצים על יצירה והמשך.
  5. בקטע Grant this service account access to project (מתן גישה של חשבון השירות הזה לפרויקט), מוסיפים את התפקידים הבאים:
    1. לוחצים על Select a role (בחירת תפקיד) ובוחרים באפשרות Storage Object Admin (אדמין של אובייקטים ב-Storage) ‏(roles/storage.objectAdmin).
    2. לוחצים על Add another role ובוחרים באפשרות Cloud Run Invoker (roles/run.invoker).
  6. לוחצים על Continue.
  7. לוחצים על סיום.

יצירת נושא Pub/Sub

יוצרים נושא Pub/Sub כדי להפעיל את פונקציית Cloud Run מ-Cloud Scheduler.

  1. במסוף Google Cloud, עוברים אל Pub/Sub > Topics.
  2. לוחצים על יצירת נושא.
  3. מספקים את פרטי ההגדרה הבאים:
    • מזהה הנושא: מזינים elastic-defend-trigger
    • הוספת מינוי ברירת מחדל: משאירים את התיבה מסומנת
  4. לוחצים על יצירה.

יצירת פונקציית Cloud Run

יצירה של פונקציית Cloud Run שמחלצת אירועים מ-Elasticsearch וכותבת אותם ל-GCS.

יצירת הפונקציה

  1. במסוף Google Cloud, עוברים אל Cloud Run functions.
  2. לוחצים על יצירת פונקציה.
  3. מספקים את פרטי ההגדרה הבאים:

    הגדרה ערך
    סביבה דור שני
    שם הפונקציה elastic-defend-to-gcs
    אזור בוחרים את אותו אזור שבו נמצא מאגר GCS
    סוג הטריגר Cloud Pub/Sub
    נושא ב-Cloud Pub/Sub בחירת elastic-defend-trigger
    הזיכרון שהוקצה ‫512MiB (הגדלה לנפחי נתונים גדולים)
    פסק זמן ‫540 שניות
    חשבון שירות בזמן ריצה בחירת elastic-defend-collector
  4. לוחצים על הבא.

הוספת משתני סביבה

  • מוסיפים את משתני הסביבה הבאים בקטע Runtime, build, connections and security settings (הגדרות של זמן ריצה, build, חיבורים ואבטחה):

    משתנה ערך
    GCS_BUCKET השם של קטגוריית ה-GCS (לדוגמה, elastic-defend-logs)
    GCS_PREFIX תחילית לקובצי יומן (לדוגמה, elastic-defend)
    STATE_KEY שם קובץ תמונת המצב (לדוגמה, state.json)
    ES_HOST כתובת ה-URL של Elasticsearch (לדוגמה, https://my-deployment.es.us-central1.gcp.cloud.es.io:443)
    ES_API_KEY מפתח API מקודד משלב יצירת פרטי הכניסה
    MAX_RECORDS המספר המקסימלי של רשומות לכל הפעלה (לדוגמה, 100000)
    PAGE_SIZE מספר הרשומות לכל בקשת חיפוש (לדוגמה, 1000)
    LOOKBACK_HOURS מספר השעות שצריך להמתין עד שניתן יהיה לצפות בשידור החוזר (לדוגמה, 24)

הוספת קוד הפונקציה

  1. בוחרים באפשרות Python 3.11 בתור סביבת זמן הריצה.
  2. מגדירים את Entry point ל-main.
  3. בקטע Source code (קוד מקור), בוחרים באפשרות Inline Editor (עורך בשורה).
  4. מחליפים את התוכן של main.py בקוד הבא:

    import os
    import json
    import datetime
    import base64
    import requests
    from google.cloud import storage
    
    GCS_BUCKET = os.environ["GCS_BUCKET"]
    GCS_PREFIX = os.environ.get("GCS_PREFIX", "elastic-defend")
    STATE_KEY = os.environ.get("STATE_KEY", "state.json")
    ES_HOST = os.environ["ES_HOST"]
    ES_API_KEY = os.environ["ES_API_KEY"]
    MAX_RECORDS = int(os.environ.get("MAX_RECORDS", "100000"))
    PAGE_SIZE = int(os.environ.get("PAGE_SIZE", "1000"))
    LOOKBACK_HOURS = int(os.environ.get("LOOKBACK_HOURS", "24"))
    
    INDEX_PATTERN = "logs-endpoint.*"
    SEARCH_PATH = f"/{INDEX_PATTERN}/_search"
    
    def _gcs_client():
        return storage.Client()
    
    def _load_state(bucket):
        blob = bucket.blob(f"{GCS_PREFIX}/{STATE_KEY}")
        if blob.exists():
            return json.loads(blob.download_as_text())
        return {}
    
    def _save_state(bucket, state):
        blob = bucket.blob(f"{GCS_PREFIX}/{STATE_KEY}")
        blob.upload_from_string(
            json.dumps(state),
            content_type="application/json",
        )
    
    def _build_query(gte_ts, sort_after=None):
        body = {
            "size": PAGE_SIZE,
            "query": {
                "range": {
                    "@timestamp": {
                        "gte": gte_ts,
                        "format": "strict_date_optional_time",
                    }
                }
            },
            "sort": [
                {"@timestamp": {"order": "asc"}},
                {"_shard_doc": "asc"},
            ],
        }
        if sort_after:
            body["search_after"] = sort_after
        return body
    
    def _search(session, body):
        url = f"{ES_HOST.rstrip('/')}{SEARCH_PATH}"
        resp = session.post(
            url,
            json=body,
            headers={
                "Authorization": f"ApiKey {ES_API_KEY}",
                "Content-Type": "application/json",
            },
            timeout=120,
        )
        resp.raise_for_status()
        return resp.json()
    
    def _write_ndjson(bucket, records, ts_label):
        if not records:
            return
        now = datetime.datetime.utcnow().strftime("%Y%m%dT%H%M%SZ")
        blob_name = f"{GCS_PREFIX}/{ts_label}/{now}.ndjson"
        blob = bucket.blob(blob_name)
        ndjson = "\n".join(json.dumps(r, separators=(",", ":")) for r in records)
        blob.upload_from_string(ndjson, content_type="application/x-ndjson")
        print(f"Wrote {len(records)} records to gs://{GCS_BUCKET}/{blob_name}")
    
    def main(event, context):
        """Cloud Run function entry point triggered by Pub/Sub."""
        client = _gcs_client()
        bucket = client.bucket(GCS_BUCKET)
    
        state = _load_state(bucket)
        sort_after = state.get("sort_after")
    
        if state.get("last_timestamp"):
            gte_ts = state["last_timestamp"]
        else:
            gte_ts = (
                datetime.datetime.utcnow()
                - datetime.timedelta(hours=LOOKBACK_HOURS)
            ).strftime("%Y-%m-%dT%H:%M:%S.%fZ")
    
        session = requests.Session()
        total = 0
        batch = []
        last_ts = gte_ts
        ts_label = datetime.datetime.utcnow().strftime("%Y/%m/%d/%H")
    
        while total < MAX_RECORDS:
            body = _build_query(gte_ts, sort_after)
            result = _search(session, body)
            hits = result.get("hits", {}).get("hits", [])
    
            if not hits:
                break
    
            for hit in hits:
                doc = hit.get("_source", {})
                doc["_id"] = hit.get("_id")
                doc["_index"] = hit.get("_index")
                batch.append(doc)
    
                hit_ts = doc.get("@timestamp", last_ts)
                if hit_ts > last_ts:
                    last_ts = hit_ts
    
            sort_after = hits[-1].get("sort")
            total += len(hits)
    
            if len(batch) >= PAGE_SIZE:
                _write_ndjson(bucket, batch, ts_label)
                batch = []
    
            if len(hits) < PAGE_SIZE:
                break
    
        if batch:
            _write_ndjson(bucket, batch, ts_label)
    
        new_state = {
            "last_timestamp": last_ts,
            "sort_after": sort_after,
        }
        _save_state(bucket, new_state)
        print(f"Done. Fetched {total} records. State: {json.dumps(new_state)}")
        return f"OK: {total} records"
    
  5. מחליפים את התוכן של requirements.txt בתוכן הבא:

    functions-framework==3.*
    google-cloud-storage==2.*
    requests==2.*
    
  6. לוחצים על פריסה.

  7. מחכים שהפריסה תסתיים בהצלחה.

יצירת משימה ב-Cloud Scheduler

יוצרים משימה של Cloud Scheduler כדי להפעיל את הפונקציה של Cloud Run לפי לוח זמנים קבוע.

  1. במסוף Google Cloud, עוברים אל Cloud Scheduler.
  2. לוחצים על Create Job (יצירת משימה).
  3. מספקים את פרטי ההגדרה הבאים:

    הגדרה ערך
    שם elastic-defend-scheduler
    אזור בוחרים את אותו אזור כמו פונקציית Cloud Run
    תדירות */5 * * * * (כל 5 דקות)
    אזור זמן בוחרים את אזור הזמן (לדוגמה, UTC)
  4. לוחצים על Continue.

  5. בקטע Configure the execution (הגדרת ההפעלה):

    • Target type (סוג היעד): בוחרים באפשרות Pub/Sub.
    • נושא ב-Cloud Pub/Sub: בוחרים באפשרות elastic-defend-trigger
    • גוף ההודעה: מזינים {"run": true}
  6. לוחצים על יצירה.

אחזור חשבון השירות של Google SecOps והגדרת הפיד

‫Google SecOps משתמש בחשבון שירות ייחודי כדי לקרוא נתונים מהקטגוריה של GCS. צריך להעניק לחשבון השירות הזה גישה לדלי.

קבלת כתובת האימייל בחשבון השירות

  1. עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
  2. לוחצים על הוספת פיד חדש.
  3. לוחצים על Configure a single feed (הגדרת פיד יחיד).
  4. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, Elastic Defend Events).
  5. בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
  6. בוחרים באפשרות Elastic Defend בתור סוג היומן.
  7. לוחצים על קבלת חשבון שירות. תוצג כתובת האימייל בחשבון שירות ייחודי, לדוגמה:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. מעתיקים את כתובת האימייל הזו לשימוש בשלב הבא.

הגדרת הפיד

  1. לוחצים על הבא.
  2. מציינים ערכים לפרמטרים הבאים של הקלט:

    • כתובת ה-URL של קטגוריית האחסון: מזינים את ה-URI של קטגוריית GCS עם נתיב הקידומת:

      gs://elastic-defend-logs/elastic-defend/
      

      מחליפים את elastic-defend-logs בשם של קטגוריית GCS.

    • אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:

      • אף פעם: לא נמחקים קבצים אחרי ההעברה (מומלץ לבדיקות).
      • מחיקת קבצים שהועברו: הקבצים נמחקים אחרי שההעברה מסתיימת.
      • מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.

    • הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 180 ימים)

    • מרחב השמות של הנכס: מרחב השמות של הנכס

    • תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה

  3. לוחצים על הבא.

  4. בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.

הענקת הרשאות IAM לחשבון השירות של Google SecOps

לחשבון השירות של Google SecOps צריך להיות התפקיד צפייה באובייקט אחסון בקטגוריה של GCS.

  1. עוברים אל Cloud Storage > Buckets (קטגוריות).
  2. לוחצים על שם הקטגוריה (לדוגמה, elastic-defend-logs).
  3. עוברים לכרטיסייה Permissions.
  4. לוחצים על הענקת גישה.
  5. מספקים את פרטי ההגדרה הבאים:
    • Add principals (הוספת ישויות מורשות): מדביקים את כתובת האימייל בחשבון של חשבון השירות של Google SecOps
    • הקצאת תפקידים: בוחרים באפשרות צפייה באובייקטים באחסון.
  6. לוחצים על Save.

טבלת מיפוי UDM

שדה ביומן מיפוי UDM היגיון
‪_source.agent.id, _source.agent.type, _source.agent.version, _source.host.architecture, _source.event.agent_id_status, _source.event.id, _source.user.id, _source.group.id, _source.data_stream.type, _source.agent.build.original additional.fields המיזוג מתבצע עם אובייקטים של תוויות שמכילים ערכים מהשדות שמופיעים ברשימה
_source.process.Ext.session_info.logon_type extensions.auth.auth_details הערך הועתק ישירות
_source.host.os.full hardware.cpu_platform הערך הועתק ישירות
_source.host.id hardware.serial_number הערך הועתק ישירות
_source.rule.description metadata.description הערך הועתק ישירות
_source.@timestamp metadata.event_timestamp ההמרה מתבצעת באמצעות מסנן תאריכים עם הפורמטים ISO8601, ‏ yyyy-MM-ddTHH:mm:ss.SSSSSSSSSZ, ‏ yyyy-MM-ddTHH:mm:ss.SSSSSSZ, ‏ yyyy-MM-ddTHH:mm:ss.SSSZ, ‏ yyyy-MM-ddTHH:mm:ssZ
metadata.event_type מוגדר על סמך תנאים של index, event.action ו-has*
metadata.log_type ההגדרה היא ELASTIC_DEFEND
metadata.product_event_type הערך צריך להיות File Events אם _index ~ events.file;‏ Library Events אם events.library;‏ Network Events אם events.network;‏ Process Events אם events.process;‏ Registry Events אם events.registry;‏ Security Events אם events.security;‏ API Events אם events.api;‏ Alerts אם .alert
_id metadata.product_log_id הערך מ-‎_id אם הוא לא נמצא ב-‎["", " ", "null", "N/A"]
_source.ecs.version metadata.product_version הערך הועתק ישירות
_source.network.type network.application_protocol_version הערך הועתק ישירות
_source.network.transport network.ip_protocol הערך הוא TCP אם יש התאמה ל- (?i)tcp;‏ UDP אם יש התאמה ל- (?i)udp;‏ ICMP אם יש התאמה ל- (?i)icmp; אחרת הערך הוא UNKNOWN_IP_PROTOCOL
_source.destination.as.organization.name network.organization_name הערך הועתק ישירות
_source.Endpoint.policy.applied.artifacts.global.identifiers observer.file.names מוזג מתוך _source.Endpoint.policy.applied.artifacts.global.identifiers
_source.Endpoint.policy.applied.artifacts.global.version, _source.Endpoint.policy.applied.artifacts.global.snapshot observer.resource.attribute.labels המיזוג מתבצע עם אובייקטים של תוויות שמכילים ערכים מהשדות שמופיעים ברשימה
_source.Endpoint.policy.applied.artifacts.user.version observer.user.attribute.labels מוזג עם אובייקט התווית שמכיל את הערך מתוך _source.Endpoint.policy.applied.artifacts.user.version
_source.host.os.full principal.asset.hardware.cpu_platform הערך הועתק ישירות
_source.host.id principal.asset.hardware.serial_number הערך הועתק ישירות
_source.host.name principal.asset.hostname הערך הועתק ישירות
_source.host.ip principal.asset.ip מוזג מתוך _source.host.ip
_source.host.os.type principal.asset.platform_software.platform הערך הוא WINDOWS אם יש התאמה ל-‎ (?i)windows;‏ LINUX אם יש התאמה ל-‎ (?i)linux;‏ MAC אם יש התאמה ל-‎ (?i)mac;‏ IOS אם יש התאמה ל-‎ (?i)ios; אחרת הערך הוא UNKNOWN_PLATFORM
_source.host.os.kernel principal.asset.platform_software.platform_patch_level הערך הועתק ישירות
_source.event.created principal.domain.creation_time ההמרה מתבצעת באמצעות מסנן תאריכים עם הפורמטים ISO8601, ‏ yyyy-MM-ddTHH:mm:ss.SSSSSSSSSZ, ‏ yyyy-MM-ddTHH:mm:ss.SSSSSSZ, ‏ yyyy-MM-ddTHH:mm:ss.SSSZ, ‏ yyyy-MM-ddTHH:mm:ssZ
_source.user.domain principal.domain.name הערך הועתק ישירות
_source.process.thread.capabilities.effective principal.file.capabilities_tags בוצע מיזוג מתוך _source.process.thread.capabilities.effective
_source.process.executable principal.file.full_path הערך הועתק ישירות
_source.process.hash.md5 principal.file.md5 הערך הועתק ישירות
_source.file.name principal.file.names המיזוג בוצע מתוך _source.file.name
_source.process.hash.sha1 principal.file.sha1 הערך הועתק ישירות
_source.process.hash.sha256 principal.file.sha256 הערך הועתק ישירות
_source.host.hostname principal.hostname הערך הועתק ישירות
_source.host.ip principal.ip מוזג מתוך _source.host.ip
_source.host.mac principal.mac מוזג מתוך _source.host.mac אחרי החלפת המקף בנקודתיים
_source.host.os.Ext.variant principal.platform_version הערך הועתק ישירות
_source.source.port principal.port הומר למחרוזת ואז למספר שלם
_source.process.command_line, _source.process.name principal.process.command_line ערך מתוך _source.process.command_line אם הוא לא ריק, אחרת מתוך _source.process.name
_source.process.thread.capabilities.permitted principal.process.file.capabilities_tags בוצע מיזוג מתוך _source.process.thread.capabilities.permitted
_source.process.executable principal.process.file.full_path הערך הועתק ישירות
_source.process.hash.md5 principal.process.file.md5 הערך הועתק ישירות
_source.process.hash.sha1 principal.process.file.sha1 הערך הועתק ישירות
_source.process.hash.sha256 principal.process.file.sha256 הערך הועתק ישירות
_source.process.parent.executable principal.process.parent_process.file.full_path הערך הועתק ישירות
_source.process.pid principal.process.pid הומר למחרוזת ואז הועתק
_source.process.Ext.api.name principal.resource.attribute.labels המיזוג עם אובייקט התווית מכיל ערך מתוך _source.process.Ext.api.name
_source.event.code principal.resource.product_object_id הערך הועתק ישירות
_source.group.name principal.user.group_identifiers מוזג מתוך _source.group.name
_source.user.name principal.user.userid הערך הועתק ישירות
_source.user.id principal.user.windows_sid ערך מתוך ‎_source.user.id אם הוא תואם לביטוי הרגולרי ‎ ^S-\\d-(\\\\d+-){1,14}\\\\d+$‎
_source.file.Ext.malware_signature.primary.signature.hash.sha256 security_result.about.file.sha256 הערך הועתק ישירות
_source.event.outcome security_result.action הערך מתוך _source.event.outcome, באותיות רישיות, ואז מוגדר כ-ALLOW אם הוא נמצא ב-‎[SUCCESS, ALLOW]‎, כ-BLOCK אם הוא נמצא ב-‎[FAILURE, DENY, SKIPPED, RATE_LIMIT]‎, וכ-UNKNOWN_ACTION אם הוא UNKNOWN
_source.event.action security_result.action_details הערך הועתק ישירות
_source.destination.geo.region_iso_code security_result.associations בוצע מיזוג עם אובייקט שמכיל שם מתוך _source.destination.geo.region_iso_code
_source.kibana.alert.rule.parameters.threat.tactic.id, _source.kibana.alert.rule.parameters.threat.tactic.name security_result.attack_details.tactics מיזוג עם אובייקט שמכיל מזהה ושם מהשדות שמופיעים ברשימה
_source.kibana.alert.rule.parameters.threat.technique.id, _source.kibana.alert.rule.parameters.threat.technique.name, _source.kibana.alert.rule.parameters.threat.technique.subtechnique.id, _source.kibana.alert.rule.parameters.threat.technique.subtechnique.name security_result.attack_details.techniques אובייקט שמוזג עם אובייקטים שמכילים את השדות id, ‏ name, ‏ subtechnique_id, ‏ subtechnique_name מהשדות שמופיעים ברשימה
_source.event.category security_result.category_details מוזג מתוך _source.event.category
_source.kibana.alert.rule.description security_result.description הערך הועתק ישירות
‪_source.event.kind, _source.file.Ext.malware_signature.all_names, _source.file.Ext.malware_signature.identifier, _source.event.risk_score, _source.threat.tactic.reference, _source.threat.technique.reference, _source.threat.technique.subtechnique.reference security_result.detection_fields המיזוג מתבצע עם אובייקטים של תוויות שמכילים ערכים מהשדות שמופיעים ברשימה
_source.rule.id, _source.kibana.alert.rule.rule_id security_result.rule_id הערך מ-‎_source.rule.id אם הוא לא ריק, אחרת הערך מ-‎_source.kibana.alert.rule.rule_id
_source.rule.name, _source.kibana.alert.rule.name security_result.rule_name הערך מתוך _source.rule.name אם הוא לא ריק, אחרת מתוך _source.kibana.alert.rule.name
_source.rule.ruleset security_result.rule_set הערך הועתק ישירות
security_result.severity ‫LOW; if _index matches .alert, set to "HIGH"; if _source.kibana.alert.rule.parameters.severity matches (?i)LOW, set to "LOW"
_source.message security_result.summary הערך הועתק ישירות
_source.file.Ext.malware_signature.primary.signature.id security_result.threat_id הערך הועתק ישירות
_source.file.Ext.malware_signature.primary.signature.name security_result.threat_name הערך הועתק ישירות
_source.source.address, _source.source.ip src.asset.ip מוזג מתוך _source.source.address ו-‎_source.source.ip
_source.source.address, _source.source.ip src.ip מוזג מתוך _source.source.address ו-‎_source.source.ip
_source.host.name target.asset.hostname הערך הועתק ישירות
_source.destination.address, _source.destination.ip target.asset.ip מוזג מתוך _source.destination.address ו-‎_source.destination.ip
_source.file.path, _source.dll.path, _source.process.executable, _source.Target.process.executable target.file.full_path הערך מתוך _source.file.path אם events.file, מתוך _source.dll.path אם events.library, מתוך _source.process.executable אם events.process או events.api, מתוך _source.Target.process.executable אם events.api
_source.dll.hash.md5, _source.process.hash.md5 target.file.md5 ערך מתוך _source.dll.hash.md5 אם events.library,‏ _source.process.hash.md5 אם .alert
_source.dll.name, _source.process.name target.file.names מוזג מתוך _source.dll.name אם events.library, מתוך _source.process.name אם .alert
_source.dll.hash.sha1, _source.process.hash.sha1 target.file.sha1 ערך מתוך _source.dll.hash.sha1 אם events.library,‏ _source.process.hash.sha1 אם .alert
_source.dll.hash.sha256, _source.process.hash.sha256 target.file.sha256 ערך מתוך _source.dll.hash.sha256 אם events.library,‏ _source.process.hash.sha256 אם .alert
_source.host.name target.hostname הערך הועתק ישירות
_source.destination.address, _source.destination.ip target.ip מוזג מתוך _source.destination.address ו-‎_source.destination.ip
_source.destination.geo.city_name target.location.city הערך הועתק ישירות
_source.destination.geo.country_name target.location.country_or_region הערך הועתק ישירות
_source.destination.geo.continent_name target.location.name הערך הועתק ישירות
_source.destination.geo.location.lat target.location.region_coordinates.latitude הומר למחרוזת ואז למספר עשרוני
_source.destination.geo.location.lon target.location.region_coordinates.longitude הומר למחרוזת ואז למספר עשרוני
_source.destination.geo.region_name target.location.state הערך הועתק ישירות
_source.data_stream.namespace target.namespace הערך הועתק ישירות
_source.destination.port target.port הומר למחרוזת ואז למספר שלם
_source.process.command_line target.process.command_line הערך הועתק ישירות
_source.process.executable target.process.file.full_path הערך הועתק ישירות
_source.process.hash.md5 target.process.file.md5 הערך הועתק ישירות
_source.process.hash.sha1 target.process.file.sha1 הערך הועתק ישירות
_source.process.hash.sha256 target.process.file.sha256 הערך הועתק ישירות
_source.process.name target.process.file.names מוזג מתוך _source.process.name
_source.registry.key target.registry.registry_key הערך הועתק ישירות
_source.registry.path target.registry.registry_value_data הערך הועתק ישירות
_source.registry.value target.registry.registry_value_name הערך הועתק ישירות
_source.data_stream.dataset target.resource.name הערך הועתק ישירות
_source.process.entity_id target.user.userid הערך הועתק ישירות
metadata.product_name ההגדרה היא Elastic Defend
metadata.vendor_name הוגדר כ'גמיש'
_source.host.hostname event.idm.read_only_udm.intermediary.hostname מופה מיומן השינויים
_source.process.pid event.idm.read_only_udm.principal.process.pid מופה מיומן השינויים
_source.process.command_line event.idm.read_only_udm.principal.process.command_line מופה מיומן השינויים
_source.process.name event.idm.read_only_udm.principal.process.file.names מופה מיומן השינויים
_source.process.parent.executable event.idm.read_only_udm.principal.process.parent_process.file.full_path מופה מיומן השינויים
_source.process.Ext.token.integrity_level_name event.idm.read_only_udm.principal.resource.attribute.labels מופה מיומן השינויים
_source.process.Ext.code_signature event.idm.read_only_udm.principal.resource.attribute.labels מופה מיומן השינויים
_source.process.Ext.ancestry event.idm.read_only_udm.principal.resource.attribute.labels מופה מיומן השינויים
_source.process.Ext.protection event.idm.read_only_udm.principal.resource.attribute.labels מופה מיומן השינויים
_source.process.Ext.authentication_id event.idm.read_only_udm.principal.resource.attribute.labels מופה מיומן השינויים
_source.winlog.event_data.PrivilegeList event.idm.read_only_udm.additional.fields מופה מיומן השינויים
Privilege List event.idm.read_only_udm.additional.fields מופה מיומן השינויים
_source.event.ingested event.idm.read_only_udm.additional.fields מופה מיומן השינויים
Ingested event.idm.read_only_udm.additional.fields מופה מיומן השינויים
_source.event.provider event.idm.read_only_udm.additional.fields מופה מיומן השינויים
Provider event.idm.read_only_udm.additional.fields מופה מיומן השינויים
_source.user.name event.idm.read_only_udm.principal.user.userid מופה מיומן השינויים
_source.event.action event.idm.read_only_udm.security_result.action_details מופה מיומן השינויים
_source.host.domain event.idm.read_only_udm.principal.administrative_domain מופה מיומן השינויים
_source.event.sequence event.idm.read_only_udm.security_result.detection_fields מופה מיומן השינויים
_source.kibana.alert.rule.description event.idm.read_only_udm.security_result.description מופה מיומן השינויים
_source.kibana.alert.rule.rule_id event.idm.read_only_udm.security_result.rule_id מופה מיומן השינויים
_source.kibana.alert.rule.name event.idm.read_only_udm.security_result.rule_name מופה מיומן השינויים
_source.kibana.alert.rule.parameters.severity event.idm.read_only_udm.security_result.severity מופה מיומן השינויים
_source.kibana.alert.rule.parameters.threat.tactic.id event.idm.read_only_udm.security_result.attack_details.tactics מופה מיומן השינויים

יומן שינויים

צפייה ביומן השינויים של מנתח התוכן הזה

הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.