Elastic Defend-Logs erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie Elastic Defend-Logs mit Google Cloud Storage V2 und einer Cloud Run-Funktion in Google Security Operations aufnehmen.

Elastic Defend ist eine EDR-Lösung (Endpoint Detection and Response) innerhalb von Elastic Security, die Funktionen zur Prävention, Erkennung und Reaktion mit umfassender Transparenz für Windows-, macOS- und Linux-Betriebssysteme bietet. Es überwacht die Ausführung von Prozessen, Dateiaktivitäten, Netzwerkverbindungen, Änderungen an der Registrierung und das Laden von Bibliotheken, um Bedrohungen auf Endpunktebene zu erkennen und zu verhindern. Daten werden in Elasticsearch gespeichert und können über die Elasticsearch Search API abgerufen werden.

Hinweise

Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:

  • Eine Google SecOps-Instanz
  • Ein Google Cloud-Projekt mit den folgenden aktivierten APIs:
    • Cloud Storage
    • Cloud Run-Funktionen
    • Cloud Scheduler
    • Pub/Sub
    • IAM
  • Zugriff auf einen Elasticsearch-Cluster, in dem Elastic Defend bereitgestellt ist
  • Berechtigungen zum Erstellen von API-Schlüsseln in Elasticsearch (manage_security-, manage_api_key- oder manage_own_api_key-Clusterberechtigung)
  • Netzwerkverbindung von Cloud Run Functions zu Ihrem Elasticsearch-Cluster

Google Cloud Storage-Bucket erstellen

  1. Öffnen Sie die Google Cloud Console.
  2. Wählen Sie Ihr Projekt aus oder erstellen Sie ein neues.
  3. Rufen Sie im Navigationsmenü Cloud Storage > Buckets auf.
  4. Klicken Sie auf Bucket erstellen.
  5. Geben Sie die folgenden Konfigurationsdetails an:

    Einstellung Wert
    Bucket benennen Geben Sie einen global eindeutigen Namen ein, z. B. elastic-defend-logs.
    Standorttyp Wählen Sie je nach Bedarf aus (Region, Dual-Region, Multi-Region).
    Standort Wählen Sie den Ort aus, z. B. us-central1.
    Speicherklasse Standard (empfohlen für Logs, auf die häufig zugegriffen wird)
    Zugriffskontrolle Einheitlich (empfohlen)
    Schutzmaßnahmen Optional: Objektversionsverwaltung oder Aufbewahrungsrichtlinie aktivieren
  6. Klicken Sie auf Erstellen.

Elastic Defend-Anmeldedaten erfassen

Damit die Cloud Run-Funktion Elastic Defend-Ereignisse abrufen kann, müssen Sie einen API-Schlüssel mit Leseberechtigungen für die logs-endpoint-Datenstreams erstellen.

API-Schlüssel mit Kibana erstellen

  1. Melden Sie sich in Kibana an.
  2. Rufen Sie im Navigationsmenü oder im globalen Suchfeld Stack Management > API Keys auf.
  3. Klicken Sie auf API-Schlüssel erstellen.
  4. Geben Sie im Feld Name Google SecOps Cloud Storage Integration ein.
  5. Legen Sie optional im Feld Ablauf ein Ablaufdatum fest. API-Schlüssel laufen standardmäßig nicht ab.
  6. Klicken Sie auf Sicherheitsberechtigungen verwalten.
  7. Klicken Sie im Bereich Indizes auf Indexberechtigung hinzufügen.
  8. Indexberechtigung konfigurieren:
    • Indexe: Geben Sie logs-endpoint.* ein.
    • Berechtigungen: Wählen Sie Lesen aus.
  9. Lassen Sie den Abschnitt Cluster privileges leer (es sind keine Clusterberechtigungen erforderlich).
  10. Klicken Sie auf API-Schlüssel erstellen.

API-Anmeldedaten aufzeichnen

Nachdem Sie den API-Schlüssel erstellt haben, wird ein Dialogfeld mit Ihren Anmeldedaten angezeigt:

  • Codiert: Der base64-codierte API-Schlüssel (z. B. VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw==)

    Außerdem müssen Sie die Elasticsearch-Endpunkt-URL aufzeichnen:

  • Für Elastic Cloud: Der Endpunkt wird in der Cloud Console im Elasticsearch-Bereich Ihrer Bereitstellung angezeigt (z. B. https://my-deployment.es.us-central1.gcp.cloud.es.io:443).

  • Für selbstverwaltete Elasticsearch-Instanzen: Verwenden Sie den Hostnamen oder die IP-Adresse Ihres Elasticsearch-Clusters mit Port (z. B. https://elasticsearch.example.com:9200).

API-Schlüssel mit Entwicklertools erstellen (alternative Methode)

Alternativ können Sie einen API-Schlüssel mit Kibana Dev Tools erstellen:

  1. Melden Sie sich in Kibana an.
  2. Gehen Sie zu Verwaltung > Entwicklertools.
  3. Führen Sie in der Console den folgenden Befehl aus:

    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. Die Antwort enthält Ihre API-Schlüssel-Anmeldedaten:

    {
      "id": "VuaCfGcBCdbkQm-e5aOx",
      "name": "Google SecOps Cloud Storage Integration",
      "api_key": "ui2lp2axTNmsyakw9tvNnw",
      "encoded": "VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw=="
    }
    
  5. Kopieren und speichern Sie den codierten Wert. Dies ist der base64-codierte API-Schlüssel, den Sie für die Authentifizierung verwenden.

Dienstkonto erstellen

Erstellen Sie ein dediziertes Dienstkonto für die Cloud Run-Funktion.

  1. Wechseln Sie in der Google Cloud Console zu IAM & Verwaltung > Dienstkonten.
  2. Klicken Sie auf Dienstkonto erstellen.
  3. Geben Sie die folgenden Konfigurationsdetails an:
    • Name des Dienstkontos: Geben Sie elastic-defend-collector ein.
    • Beschreibung des Dienstkontos: Geben Sie Service account for Elastic Defend log collection to GCS ein.
  4. Klicken Sie auf Erstellen und fortfahren.
  5. Fügen Sie im Abschnitt Diesem Dienstkonto Zugriff auf das Projekt erteilen die folgenden Rollen hinzu:
    1. Klicken Sie auf Rolle auswählen und wählen Sie Storage-Objekt-Administrator (roles/storage.objectAdmin) aus.
    2. Klicken Sie auf Weitere Rolle hinzufügen und wählen Sie Cloud Run Invoker (roles/run.invoker) aus.
  6. Klicken Sie auf Weiter.
  7. Klicken Sie auf Fertig.

Pub/Sub-Thema erstellen

Erstellen Sie ein Pub/Sub-Thema, um die Cloud Run-Funktion über Cloud Scheduler auszulösen.

  1. Rufen Sie in der Google Cloud Console Pub/Sub > Themen auf.
  2. Klicken Sie auf Thema erstellen.
  3. Geben Sie die folgenden Konfigurationsdetails an:
    • Themen-ID: Geben Sie elastic-defend-trigger ein.
    • Standardabo hinzufügen: Häkchen beibehalten
  4. Klicken Sie auf Erstellen.

Cloud Run-Funktion erstellen

Cloud Run-Funktion erstellen, die Ereignisse aus Elasticsearch abruft und in GCS schreibt

Funktion erstellen

  1. Wechseln Sie in der Google Cloud Console zu Cloud Run-Funktionen.
  2. Klicken Sie auf Funktion erstellen.
  3. Geben Sie die folgenden Konfigurationsdetails an:

    Einstellung Wert
    Umgebung 2. Generation
    Funktionsname elastic-defend-to-gcs
    Region Wählen Sie dieselbe Region wie für Ihren GCS-Bucket aus.
    Triggertyp Cloud Pub/Sub
    Cloud Pub/Sub-Thema elastic-defend-trigger auswählen
    Zugewiesener Arbeitsspeicher 512 MiB (bei großen Datenmengen erhöhen)
    Zeitlimit 540 Sekunden
    Laufzeitdienstkonto elastic-defend-collector auswählen
  4. Klicken Sie auf Weiter.

Umgebungsvariablen hinzufügen

  • Fügen Sie im Abschnitt Laufzeit, Build, Verbindungen und Sicherheitseinstellungen die folgenden Umgebungsvariablen hinzu:

    Variable Wert
    GCS_BUCKET Name Ihres GCS-Buckets (z. B. elastic-defend-logs)
    GCS_PREFIX Präfix für Logdateien (z. B. elastic-defend)
    STATE_KEY Name der Statusdatei (z. B. state.json)
    ES_HOST Elasticsearch-URL (z. B. https://my-deployment.es.us-central1.gcp.cloud.es.io:443)
    ES_API_KEY Codierter API-Schlüssel aus dem Schritt zum Erstellen von Anmeldedaten
    MAX_RECORDS Maximale Anzahl von Datensätzen pro Ausführung (z. B. 100000)
    PAGE_SIZE Anzahl der Datensätze pro Suchanfrage (z. B. 1000)
    LOOKBACK_HOURS Stunden, die seit dem ersten Lauf zurückliegen (z. B. 24)

Funktionscode hinzufügen

  1. Wählen Sie Python 3.11 als Laufzeit aus.
  2. Legen Sie den Einstiegspunkt auf main fest.
  3. Wählen Sie im Abschnitt Quellcode die Option Inline-Editor aus.
  4. Ersetzen Sie den Inhalt von main.py durch den folgenden Code:

    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. Ersetzen Sie den Inhalt von requirements.txt durch Folgendes:

    functions-framework==3.*
    google-cloud-storage==2.*
    requests==2.*
    
  6. Klicken Sie auf Bereitstellen.

  7. Warten Sie, bis die Bereitstellung abgeschlossen ist.

Cloud Scheduler-Job erstellen

Erstellen Sie einen Cloud Scheduler-Job, um die Cloud Run-Funktion regelmäßig auszulösen.

  1. Rufen Sie in der Google Cloud Console Cloud Scheduler auf.
  2. Klicken Sie auf Job erstellen.
  3. Geben Sie die folgenden Konfigurationsdetails an:

    Einstellung Wert
    Name elastic-defend-scheduler
    Region Wählen Sie dieselbe Region wie Ihre Cloud Run-Funktion aus.
    Frequenz */5 * * * * (alle 5 Minuten)
    Zeitzone Wählen Sie Ihre Zeitzone aus, z. B. UTC.
  4. Klicken Sie auf Weiter.

  5. Im Abschnitt Ausführung konfigurieren:

    • Zieltyp: Wählen Sie Pub/Sub aus.
    • Cloud Pub/Sub-Thema: Wählen Sie elastic-defend-trigger aus.
    • Nachrichtentext: Geben Sie {"run": true} ein.
  6. Klicken Sie auf Erstellen.

Google SecOps-Dienstkonto abrufen und Feed konfigurieren

Google SecOps verwendet ein eindeutiges Dienstkonto, um Daten aus Ihrem GCS-Bucket zu lesen. Sie müssen diesem Dienstkonto Zugriff auf Ihren Bucket gewähren.

E-Mail-Adresse des Dienstkontos abrufen

  1. Rufen Sie die SIEM-Einstellungen > Feeds auf.
  2. Klicken Sie auf Neuen Feed hinzufügen.
  3. Klicken Sie auf Einzelnen Feed konfigurieren.
  4. Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. Elastic Defend Events.
  5. Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
  6. Wählen Sie Elastic Defend als Logtyp aus.
  7. Klicken Sie auf Dienstkonto abrufen. Es wird eine eindeutige E-Mail-Adresse für das Dienstkonto angezeigt, z. B.:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. Kopieren Sie diese E‑Mail-Adresse für den nächsten Schritt.

Feed konfigurieren

  1. Klicken Sie auf Weiter.
  2. Geben Sie Werte für die folgenden Eingabeparameter an:

    • Storage-Bucket-URL: Geben Sie den GCS-Bucket-URI mit dem Präfixpfad ein:

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

      Ersetzen Sie elastic-defend-logs durch den Namen Ihres GCS-Buckets.

    • Option zum Löschen der Quelle: Wählen Sie die gewünschte Löschoption aus:

      • Nie: Es werden niemals Dateien nach Übertragungen gelöscht (empfohlen für Tests).
      • Übertragene Dateien löschen: Dateien werden nach der erfolgreichen Übertragung gelöscht.
      • Übertragene Dateien und leere Verzeichnisse löschen: Löscht Dateien und leere Verzeichnisse nach der erfolgreichen Übertragung.

    • Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden (Standard ist 180 Tage)

    • Asset-Namespace: Der Asset-Namespace

    • Labels für Datenaufnahme: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll

  3. Klicken Sie auf Weiter.

  4. Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.

Dem Google SecOps-Dienstkonto IAM-Berechtigungen gewähren

Das Google SecOps-Dienstkonto benötigt die Rolle Storage-Objekt-Betrachter für Ihren GCS-Bucket.

  1. Rufen Sie Cloud Storage > Buckets auf.
  2. Klicken Sie auf den Namen Ihres Buckets, z. B. elastic-defend-logs.
  3. Wechseln Sie zum Tab Berechtigungen.
  4. Klicken Sie auf Zugriff erlauben.
  5. Geben Sie die folgenden Konfigurationsdetails an:
    • Hauptkonten hinzufügen: Fügen Sie die E‑Mail-Adresse des Google SecOps-Dienstkontos ein.
    • Rollen zuweisen: Wählen Sie Storage-Objekt-Betrachter aus.
  6. Klicken Sie auf Speichern.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
_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 Zusammengeführt mit Labelobjekten, die Werte aus den aufgeführten Feldern enthalten
_source.process.Ext.session_info.logon_type extensions.auth.auth_details Wert direkt kopiert
_source.host.os.full hardware.cpu_platform Wert direkt kopiert
_source.host.id hardware.serial_number Wert direkt kopiert
_source.rule.description metadata.description Wert direkt kopiert
_source.@timestamp metadata.event_timestamp Konvertiert mit Datumsfilter mit 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 Festgelegt auf Grundlage von index, event.action und has*-Bedingungen
metadata.log_type Auf „ELASTIC_DEFEND“ festlegen
metadata.product_event_type Auf „File Events“ (Dateiereignisse) festlegen, wenn _index ~ events.file; „Library Events“ (Bibliotheksereignisse), wenn events.library; „Network Events“ (Netzwerkereignisse), wenn events.network; „Process Events“ (Prozessereignisse), wenn events.process; „Registry Events“ (Registrierungsereignisse), wenn events.registry; „Security Events“ (Sicherheitsereignisse), wenn events.security; „API Events“ (API-Ereignisse), wenn events.api; „Alerts“ (Benachrichtigungen), wenn .alert
_id metadata.product_log_id Wert aus _id, wenn nicht in ["", " ", "null", "N/A"]
_source.ecs.version metadata.product_version Wert direkt kopiert
_source.network.type network.application_protocol_version Wert direkt kopiert
_source.network.transport network.ip_protocol Auf „TCP“ gesetzt, wenn (?i)tcp übereinstimmt; „UDP“, wenn (?i)udp übereinstimmt; „ICMP“, wenn (?i)icmp übereinstimmt; andernfalls „UNKNOWN_IP_PROTOCOL“
_source.destination.as.organization.name network.organization_name Wert direkt kopiert
_source.Endpoint.policy.applied.artifacts.global.identifiers observer.file.names Zusammengeführt aus _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 Zusammengeführt mit Labelobjekten, die Werte aus den aufgeführten Feldern enthalten
_source.Endpoint.policy.applied.artifacts.user.version observer.user.attribute.labels Zusammengeführt mit dem Label-Objekt, das den Wert aus _source.Endpoint.policy.applied.artifacts.user.version enthält
_source.host.os.full principal.asset.hardware.cpu_platform Wert direkt kopiert
_source.host.id principal.asset.hardware.serial_number Wert direkt kopiert
_source.host.name principal.asset.hostname Wert direkt kopiert
_source.host.ip principal.asset.ip Zusammengeführt aus _source.host.ip
_source.host.os.type principal.asset.platform_software.platform Auf „WINDOWS“ gesetzt, wenn (?i)windows übereinstimmt; „LINUX“, wenn (?i)linux übereinstimmt; „MAC“, wenn (?i)mac übereinstimmt; „IOS“, wenn (?i)ios übereinstimmt; andernfalls „UNKNOWN_PLATFORM“
_source.host.os.kernel principal.asset.platform_software.platform_patch_level Wert direkt kopiert
_source.event.created principal.domain.creation_time Konvertiert mit Datumsfilter mit 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 Wert direkt kopiert
_source.process.thread.capabilities.effective principal.file.capabilities_tags Zusammengeführt aus _source.process.thread.capabilities.effective
_source.process.executable principal.file.full_path Wert direkt kopiert
_source.process.hash.md5 principal.file.md5 Wert direkt kopiert
_source.file.name principal.file.names Zusammengeführt aus _source.file.name
_source.process.hash.sha1 principal.file.sha1 Wert direkt kopiert
_source.process.hash.sha256 principal.file.sha256 Wert direkt kopiert
_source.host.hostname principal.hostname Wert direkt kopiert
_source.host.ip principal.ip Zusammengeführt aus _source.host.ip
_source.host.mac principal.mac Zusammengeführt aus _source.host.mac nach dem Ersetzen von „-“ durch „:“
_source.host.os.Ext.variant principal.platform_version Wert direkt kopiert
_source.source.port principal.port In String und dann in Ganzzahl konvertiert
_source.process.command_line, _source.process.name principal.process.command_line Wert aus _source.process.command_line, falls nicht leer, andernfalls aus _source.process.name
_source.process.thread.capabilities.permitted principal.process.file.capabilities_tags Zusammengeführt aus _source.process.thread.capabilities.permitted
_source.process.executable principal.process.file.full_path Wert direkt kopiert
_source.process.hash.md5 principal.process.file.md5 Wert direkt kopiert
_source.process.hash.sha1 principal.process.file.sha1 Wert direkt kopiert
_source.process.hash.sha256 principal.process.file.sha256 Wert direkt kopiert
_source.process.parent.executable principal.process.parent_process.file.full_path Wert direkt kopiert
_source.process.pid principal.process.pid In String konvertiert und dann kopiert
_source.process.Ext.api.name principal.resource.attribute.labels Wird mit dem Label-Objekt zusammengeführt, das den Wert aus _source.process.Ext.api.name enthält.
_source.event.code principal.resource.product_object_id Wert direkt kopiert
_source.group.name principal.user.group_identifiers Zusammengeführt aus _source.group.name
_source.user.name principal.user.userid Wert direkt kopiert
_source.user.id principal.user.windows_sid Wert aus _source.user.id, wenn er mit dem regulären Ausdruck ^S-\\d-(\\\\d+-){1,14}\\\\d+$ übereinstimmt
_source.file.Ext.malware_signature.primary.signature.hash.sha256 security_result.about.file.sha256 Wert direkt kopiert
_source.event.outcome security_result.action Wert aus _source.event.outcome, in Großbuchstaben, dann auf ALLOW gesetzt, wenn in [SUCCESS, ALLOW], BLOCK, wenn in [FAILURE, DENY, SKIPPED, RATE_LIMIT], UNKNOWN_ACTION, wenn UNKNOWN
_source.event.action security_result.action_details Wert direkt kopiert
_source.destination.geo.region_iso_code security_result.associations Mit Objekt zusammengeführt, das den Namen aus _source.destination.geo.region_iso_code enthält
_source.kibana.alert.rule.parameters.threat.tactic.id, _source.kibana.alert.rule.parameters.threat.tactic.name security_result.attack_details.tactics Mit Objekt zusammengeführt, das ID und Name aus den aufgeführten Feldern enthält
_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 Zusammengeführt mit Objekten, die „id“, „name“, „subtechnique_id“ und „subtechnique_name“ aus den aufgeführten Feldern enthalten
_source.event.category security_result.category_details Zusammengeführt aus _source.event.category
_source.kibana.alert.rule.description security_result.description Wert direkt kopiert
_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 Zusammengeführt mit Labelobjekten, die Werte aus den aufgeführten Feldern enthalten
_source.rule.id, _source.kibana.alert.rule.rule_id security_result.rule_id Wert aus _source.rule.id, falls nicht leer, andernfalls aus _source.kibana.alert.rule.rule_id
_source.rule.name, _source.kibana.alert.rule.name security_result.rule_name Wert aus _source.rule.name, falls nicht leer, andernfalls aus _source.kibana.alert.rule.name
_source.rule.ruleset security_result.rule_set Wert direkt kopiert
security_result.severity Auf „LOW“ festlegen; wenn _index mit „.alert“ übereinstimmt, auf „HIGH“ festlegen; wenn _source.kibana.alert.rule.parameters.severity mit (?i)LOW übereinstimmt, auf „LOW“ festlegen
_source.message security_result.summary Wert direkt kopiert
_source.file.Ext.malware_signature.primary.signature.id security_result.threat_id Wert direkt kopiert
_source.file.Ext.malware_signature.primary.signature.name security_result.threat_name Wert direkt kopiert
_source.source.address, _source.source.ip src.asset.ip Zusammengeführt aus _source.source.address und _source.source.ip
_source.source.address, _source.source.ip src.ip Zusammengeführt aus _source.source.address und _source.source.ip
_source.host.name target.asset.hostname Wert direkt kopiert
_source.destination.address, _source.destination.ip target.asset.ip Zusammengeführt aus _source.destination.address und _source.destination.ip
_source.file.path, _source.dll.path, _source.process.executable, _source.Target.process.executable target.file.full_path Wert aus „_source.file.path“ für „events.file“, „_source.dll.path“ für „events.library“, „_source.process.executable“ für „events.process“ oder „events.api“, „_source.Target.process.executable“ für „events.api“
_source.dll.hash.md5, _source.process.hash.md5 target.file.md5 Wert aus _source.dll.hash.md5, wenn events.library, _source.process.hash.md5, wenn .alert
_source.dll.name, _source.process.name target.file.names Zusammengeführt aus _source.dll.name, wenn events.library, _source.process.name, wenn .alert
_source.dll.hash.sha1, _source.process.hash.sha1 target.file.sha1 Wert aus _source.dll.hash.sha1, wenn events.library, _source.process.hash.sha1, wenn .alert
_source.dll.hash.sha256, _source.process.hash.sha256 target.file.sha256 Wert aus _source.dll.hash.sha256, wenn events.library, _source.process.hash.sha256, wenn .alert
_source.host.name target.hostname Wert direkt kopiert
_source.destination.address, _source.destination.ip target.ip Zusammengeführt aus _source.destination.address und _source.destination.ip
_source.destination.geo.city_name target.location.city Wert direkt kopiert
_source.destination.geo.country_name target.location.country_or_region Wert direkt kopiert
_source.destination.geo.continent_name target.location.name Wert direkt kopiert
_source.destination.geo.location.lat target.location.region_coordinates.latitude In String und dann in Gleitkommazahl konvertiert
_source.destination.geo.location.lon target.location.region_coordinates.longitude In String und dann in Gleitkommazahl konvertiert
_source.destination.geo.region_name target.location.state Wert direkt kopiert
_source.data_stream.namespace target.namespace Wert direkt kopiert
_source.destination.port target.port In String und dann in Ganzzahl konvertiert
_source.process.command_line target.process.command_line Wert direkt kopiert
_source.process.executable target.process.file.full_path Wert direkt kopiert
_source.process.hash.md5 target.process.file.md5 Wert direkt kopiert
_source.process.hash.sha1 target.process.file.sha1 Wert direkt kopiert
_source.process.hash.sha256 target.process.file.sha256 Wert direkt kopiert
_source.process.name target.process.file.names Zusammengeführt aus _source.process.name
_source.registry.key target.registry.registry_key Wert direkt kopiert
_source.registry.path target.registry.registry_value_data Wert direkt kopiert
_source.registry.value target.registry.registry_value_name Wert direkt kopiert
_source.data_stream.dataset target.resource.name Wert direkt kopiert
_source.process.entity_id target.user.userid Wert direkt kopiert
metadata.product_name Auf „Elastic Defend“ festgelegt
metadata.vendor_name Auf „Elastisch“ festgelegt

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten