Recopila registros de Elastic Defend

Compatible con:

En este documento, se explica cómo transferir registros de Elastic Defend a Google Security Operations con Google Cloud Storage V2 y una función de Cloud Run.

Elastic Defend es una solución de detección y respuesta de endpoints (EDR) dentro de Elastic Security que proporciona capacidades de prevención, detección y respuesta con visibilidad profunda en los sistemas operativos Windows, macOS y Linux. Supervisa la ejecución de procesos, la actividad de archivos, las conexiones de red, las modificaciones del registro y las cargas de bibliotecas para detectar y prevenir amenazas a nivel del endpoint. Los datos se almacenan en Elasticsearch y se pueden recuperar con la API de Elasticsearch Search.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Un proyecto de Google Cloud con las siguientes APIs habilitadas:
    • Cloud Storage
    • Cloud Run Functions
    • Cloud Scheduler
    • Pub/Sub
    • IAM
  • Acceso a un clúster de Elasticsearch con Elastic Defend implementado
  • Permisos para crear claves de API en Elasticsearch (privilegio de clúster manage_security, manage_api_key o manage_own_api_key)
  • Conectividad de red desde las funciones de Cloud Run a tu clúster de Elasticsearch

Crear un bucket de Google Cloud Storage

  1. Ve a la consola de Google Cloud.
  2. Selecciona tu proyecto o crea uno nuevo.
  3. En el menú de navegación, ve a Cloud Storage > Buckets.
  4. Haz clic en Crear bucket.
  5. Proporciona los siguientes detalles de configuración:

    Configuración Valor
    Asigna un nombre a tu bucket Ingresa un nombre global único (por ejemplo, elastic-defend-logs).
    Tipo de ubicación Elige según tus necesidades (región, birregional, multirregional)
    Ubicación Selecciona la ubicación (por ejemplo, us-central1).
    Clase de almacenamiento Estándar (recomendado para los registros a los que se accede con frecuencia)
    Control de acceso Uniforme (recomendado)
    Herramientas de protección Opcional: Habilita el control de versiones de objetos o la política de retención
  6. Haz clic en Crear.

Recopila credenciales de Elastic Defend

Para permitir que la función de Cloud Run recupere eventos de Elastic Defend, debes crear una clave de API con permisos de lectura en los flujos de datos de logs-endpoint.

Crea una clave de API con Kibana

  1. Accede a Kibana.
  2. En el menú de navegación o en el campo de búsqueda global, ve a Administración de pilas > Claves de API.
  3. Haz clic en Crear clave de API.
  4. En el campo Nombre, ingresa Google SecOps Cloud Storage Integration.
  5. En el campo Vencimiento, puedes establecer una fecha de vencimiento de forma opcional. De forma predeterminada, las claves de API no vencen.
  6. Haz clic en Controlar privilegios de seguridad.
  7. En la sección Índices, haz clic en Agregar privilegio de índice.
  8. Configura el privilegio de indexación:
    • Índices: Ingresa logs-endpoint.*.
    • Privilegios: Selecciona lectura.
  9. Deja vacía la sección Privilegios del clúster (no se requieren privilegios del clúster).
  10. Haz clic en Crear clave de API.

Registra las credenciales de la API

Después de crear la clave de API, aparecerá un diálogo con tus credenciales:

  • Encoded: Es la clave de API codificada en base64 (por ejemplo, VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw==).

    También debes registrar la URL del extremo de Elasticsearch:

  • Para Elastic Cloud: El extremo se muestra en Cloud Console en la sección Elasticsearch de tu implementación (por ejemplo, https://my-deployment.es.us-central1.gcp.cloud.es.io:443).

  • Para Elasticsearch autoadministrado: Usa el nombre de host o la dirección IP de tu clúster de Elasticsearch con el puerto (por ejemplo, https://elasticsearch.example.com:9200).

Crea una clave de API con Herramientas para desarrolladores (método alternativo)

Como alternativa, puedes crear una clave de API con las Herramientas para desarrolladores de Kibana:

  1. Accede a Kibana.
  2. Ve a Administración > Herramientas para desarrolladores.
  3. En la consola, ejecuta el siguiente comando:

    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. La respuesta contiene las credenciales de tu clave de API:

    {
      "id": "VuaCfGcBCdbkQm-e5aOx",
      "name": "Google SecOps Cloud Storage Integration",
      "api_key": "ui2lp2axTNmsyakw9tvNnw",
      "encoded": "VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw=="
    }
    
  5. Copia y guarda el valor codificado. Esta es la clave de API codificada en Base64 que usarás para la autenticación.

Crear cuenta de servicio

Crea una cuenta de servicio dedicada para la función de Cloud Run.

  1. En la consola de Google Cloud, ve a IAM y administración > Cuentas de servicio.
  2. Haz clic en Crear cuenta de servicio.
  3. Proporciona los siguientes detalles de configuración:
    • Nombre de la cuenta de servicio: Ingresa elastic-defend-collector.
    • Descripción de la cuenta de servicio: Ingresa Service account for Elastic Defend log collection to GCS.
  4. Haz clic en Crear y continuar.
  5. En la sección Otorga a esta cuenta de servicio acceso al proyecto, agrega los siguientes roles:
    1. Haz clic en Seleccionar un rol y selecciona Administrador de objetos de Storage (roles/storage.objectAdmin).
    2. Haz clic en Agregar otro rol y selecciona Invocador de Cloud Run (roles/run.invoker).
  6. Haz clic en Continuar.
  7. Haz clic en Listo.

Crear tema de Pub/Sub

Crea un tema de Pub/Sub para activar la función de Cloud Run desde Cloud Scheduler.

  1. En la consola de Google Cloud, ve a Pub/Sub > Temas.
  2. Haz clic en Crear tema.
  3. Proporciona los siguientes detalles de configuración:
    • ID del tema: Ingresa elastic-defend-trigger.
    • Agregar una suscripción predeterminada: Déjala marcada
  4. Haz clic en Crear.

Crear una función de Cloud Run

Crea una función de Cloud Run que recupere eventos de Elasticsearch y los escriba en GCS.

Crea la función

  1. En la consola de Google Cloud, ve a Cloud Run functions.
  2. Haz clic en Crear función.
  3. Proporciona los siguientes detalles de configuración:

    Configuración Valor
    Entorno 2ª gen.
    Nombre de la función elastic-defend-to-gcs
    Región Selecciona la misma región que tu bucket de GCS.
    Tipo de activador Cloud Pub/Sub
    Tema de Cloud Pub/Sub Seleccionar elastic-defend-trigger
    Memoria asignada 512 MiB (aumenta para grandes volúmenes de datos)
    Tiempo de espera 540 segundos
    Cuenta de servicio del entorno de ejecución Seleccionar elastic-defend-collector
  4. Haz clic en Siguiente.

Agrega variables del entorno

  • Agrega las siguientes variables de entorno en la sección Configuración del entorno de ejecución, la compilación, las conexiones y la seguridad:

    Variable Valor
    GCS_BUCKET Nombre de tu bucket de GCS (por ejemplo, elastic-defend-logs)
    GCS_PREFIX Prefijo para los archivos de registro (por ejemplo, elastic-defend)
    STATE_KEY Nombre del archivo de estado (por ejemplo, state.json)
    ES_HOST URL de Elasticsearch (por ejemplo, https://my-deployment.es.us-central1.gcp.cloud.es.io:443)
    ES_API_KEY Clave de API codificada del paso de creación de credenciales
    MAX_RECORDS Cantidad máxima de registros por ejecución (por ejemplo, 100000)
    PAGE_SIZE Cantidad de registros por solicitud de búsqueda (por ejemplo, 1000)
    LOOKBACK_HOURS Horas para revisar en la primera ejecución (por ejemplo, 24)

Agrega el código de la función

  1. Selecciona Python 3.11 como el Entorno de ejecución.
  2. Establece el Punto de entrada en main.
  3. En la sección Código fuente, selecciona Editor directo.
  4. Reemplaza el contenido de main.py con el siguiente código:

    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. Reemplaza el contenido de requirements.txt por lo siguiente:

    functions-framework==3.*
    google-cloud-storage==2.*
    requests==2.*
    
  6. Haz clic en Implementar.

  7. Espera a que se complete la implementación correctamente.

Crea un trabajo de Cloud Scheduler

Crea un trabajo de Cloud Scheduler para activar la función de Cloud Run según un programa regular.

  1. En la consola de Google Cloud, ve a Cloud Scheduler.
  2. Haz clic en Crear trabajo.
  3. Proporciona los siguientes detalles de configuración:

    Configuración Valor
    Nombre elastic-defend-scheduler
    Región Selecciona la misma región que tu Cloud Run Function
    Frecuencia */5 * * * * (cada 5 minutos)
    Zona horaria Selecciona tu zona horaria (por ejemplo, UTC).
  4. Haz clic en Continuar.

  5. En la sección Configura la ejecución, haz lo siguiente:

    • Tipo de destino: Selecciona Pub/Sub.
    • Tema de Cloud Pub/Sub: Selecciona elastic-defend-trigger.
    • Cuerpo del mensaje: Ingresa {"run": true}.
  6. Haz clic en Crear.

Recupera la cuenta de servicio de Google SecOps y configura el feed

Las Operaciones de seguridad de Google usan una cuenta de servicio única para leer datos de tu bucket de GCS. Debes otorgar acceso a tu bucket a esta cuenta de servicio.

Obtén el correo electrónico de la cuenta de servicio

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar feed nuevo.
  3. Haz clic en Configura un feed único.
  4. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Elastic Defend Events).
  5. Selecciona Google Cloud Storage V2 como el Tipo de fuente.
  6. Selecciona Elastic Defend como el Tipo de registro.
  7. Haz clic en Obtener cuenta de servicio. Se mostrará un correo electrónico único de la cuenta de servicio, por ejemplo:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. Copia esta dirección de correo electrónico para usarla en el siguiente paso.

Configura el feed

  1. Haz clic en Siguiente.
  2. Especifica valores para los siguientes parámetros de entrada:

    • URL del bucket de almacenamiento: Ingresa el URI del bucket de GCS con la ruta de acceso del prefijo:

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

      Reemplaza elastic-defend-logs por el nombre de tu bucket de GCS.

    • Opción de borrado de la fuente: Selecciona la opción de borrado según tu preferencia:

      • Nunca: Nunca borra ningún archivo después de las transferencias (se recomienda para las pruebas).
      • Borrar archivos transferidos: Borra los archivos después de la transferencia exitosa.
      • Borrar los archivos transferidos y los directorios vacíos: Borra los archivos y los directorios vacíos después de la transferencia exitosa.

    • Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días más reciente (el valor predeterminado es 180 días).

    • Espacio de nombres del recurso: Es el espacio de nombres del recurso.

    • Etiquetas de transmisión: Es la etiqueta que se aplicará a los eventos de este feed.

  3. Haz clic en Siguiente.

  4. Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.

Otorga permisos de IAM a la cuenta de servicio de Google SecOps

La cuenta de servicio de Google SecOps necesita el rol de visualizador de objetos de almacenamiento en tu bucket de GCS.

  1. Ve a Cloud Storage > Buckets.
  2. Haz clic en el nombre de tu bucket (por ejemplo, elastic-defend-logs).
  3. Ve a la pestaña Permisos.
  4. Haz clic en Otorgar acceso.
  5. Proporciona los siguientes detalles de configuración:
    • Agregar principales: Pega el correo electrónico de la cuenta de servicio de Google SecOps.
    • Asignar roles: Selecciona Visualizador de objetos de Storage.
  6. Haz clic en Guardar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
_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 Se combina con objetos de etiqueta que contienen valores de los campos enumerados.
_source.process.Ext.session_info.logon_type extensions.auth.auth_details Valor copiado directamente
_source.host.os.full hardware.cpu_platform Valor copiado directamente
_source.host.id hardware.serial_number Valor copiado directamente
_source.rule.description metadata.description Valor copiado directamente
_source.@timestamp metadata.event_timestamp Se convirtió con el filtro de fecha con los formatos ISO8601, aaaa-MM-ddTHH:mm:ss.SSSSSSSSSZ, aaaa-MM-ddTHH:mm:ss.SSSSSSZ, aaaa-MM-ddTHH:mm:ss.SSSZ y aaaa-MM-ddTHH:mm:ssZ.
metadata.event_type Se establece en función de las condiciones index, event.action y has*
metadata.log_type Se estableció en "ELASTIC_DEFEND".
metadata.product_event_type Se establece en "File Events" si _index ~ events.file; "Library Events" si events.library; "Network Events" si events.network; "Process Events" si events.process; "Registry Events" si events.registry; "Security Events" si events.security; "API Events" si events.api; "Alerts" si .alert
_id metadata.product_log_id Valor de _id si no está en ["", " ", "null", "N/A"]
_source.ecs.version metadata.product_version Valor copiado directamente
_source.network.type network.application_protocol_version Valor copiado directamente
_source.network.transport network.ip_protocol Se establece en "TCP" si coincide con (?i)tcp; "UDP" si coincide con (?i)udp; "ICMP" si coincide con (?i)icmp; de lo contrario, se establece en "UNKNOWN_IP_PROTOCOL".
_source.destination.as.organization.name network.organization_name Valor copiado directamente
_source.Endpoint.policy.applied.artifacts.global.identifiers observer.file.names Se combinó de _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 Se combina con objetos de etiqueta que contienen valores de los campos enumerados.
_source.Endpoint.policy.applied.artifacts.user.version observer.user.attribute.labels Se combinó con el objeto de etiqueta que contiene el valor de _source.Endpoint.policy.applied.artifacts.user.version
_source.host.os.full principal.asset.hardware.cpu_platform Valor copiado directamente
_source.host.id principal.asset.hardware.serial_number Valor copiado directamente
_source.host.name principal.asset.hostname Valor copiado directamente
_source.host.ip principal.asset.ip Se combinó de _source.host.ip
_source.host.os.type principal.asset.platform_software.platform Se establece en "WINDOWS" si coincide con (?i)windows; "LINUX" si coincide con (?i)linux; "MAC" si coincide con (?i)mac; "IOS" si coincide con (?i)ios; de lo contrario, se establece en "UNKNOWN_PLATFORM".
_source.host.os.kernel principal.asset.platform_software.platform_patch_level Valor copiado directamente
_source.event.created principal.domain.creation_time Se convirtió con el filtro de fecha con los formatos ISO8601, aaaa-MM-ddTHH:mm:ss.SSSSSSSSSZ, aaaa-MM-ddTHH:mm:ss.SSSSSSZ, aaaa-MM-ddTHH:mm:ss.SSSZ y aaaa-MM-ddTHH:mm:ssZ.
_source.user.domain principal.domain.name Valor copiado directamente
_source.process.thread.capabilities.effective principal.file.capabilities_tags Se combinó desde _source.process.thread.capabilities.effective
_source.process.executable principal.file.full_path Valor copiado directamente
_source.process.hash.md5 principal.file.md5 Valor copiado directamente
_source.file.name principal.file.names Se combinó desde _source.file.name
_source.process.hash.sha1 principal.file.sha1 Valor copiado directamente
_source.process.hash.sha256 principal.file.sha256 Valor copiado directamente
_source.host.hostname principal.hostname Valor copiado directamente
_source.host.ip principal.ip Se combinó de _source.host.ip
_source.host.mac principal.mac Se combinó de _source.host.mac después de reemplazar - por :
_source.host.os.Ext.variant principal.platform_version Valor copiado directamente
_source.source.port principal.port Se convierte en una cadena y, luego, en un número entero.
_source.process.command_line, _source.process.name principal.process.command_line Valor de _source.process.command_line si no está vacío; de lo contrario, de _source.process.name
_source.process.thread.capabilities.permitted principal.process.file.capabilities_tags Se combinó de _source.process.thread.capabilities.permitted
_source.process.executable principal.process.file.full_path Valor copiado directamente
_source.process.hash.md5 principal.process.file.md5 Valor copiado directamente
_source.process.hash.sha1 principal.process.file.sha1 Valor copiado directamente
_source.process.hash.sha256 principal.process.file.sha256 Valor copiado directamente
_source.process.parent.executable principal.process.parent_process.file.full_path Valor copiado directamente
_source.process.pid principal.process.pid Se convirtió en una cadena y, luego, se copió
_source.process.Ext.api.name principal.resource.attribute.labels Se fusionó con el objeto de etiqueta que contiene el valor de _source.process.Ext.api.name
_source.event.code principal.resource.product_object_id Valor copiado directamente
_source.group.name principal.user.group_identifiers Se combinó desde _source.group.name
_source.user.name principal.user.userid Valor copiado directamente
_source.user.id principal.user.windows_sid Valor de _source.user.id si coincide con la regex ^S-\\d-(\\\\d+-){1,14}\\\\d+$
_source.file.Ext.malware_signature.primary.signature.hash.sha256 security_result.about.file.sha256 Valor copiado directamente
_source.event.outcome security_result.action Valor de _source.event.outcome, en mayúsculas, luego se establece en ALLOW si está en [SUCCESS, ALLOW], BLOCK si está en [FAILURE, DENY, SKIPPED, RATE_LIMIT], UNKNOWN_ACTION si es UNKNOWN
_source.event.action security_result.action_details Valor copiado directamente
_source.destination.geo.region_iso_code security_result.associations Se combinó con el objeto que contiene el nombre de _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 Se combina con el objeto que contiene el ID y el nombre de los campos enumerados.
_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 Se combinó con objetos que contienen id, name, subtechnique_id y subtechnique_name de los campos enumerados.
_source.event.category security_result.category_details Se combinó de _source.event.category
_source.kibana.alert.rule.description security_result.description Valor copiado directamente
_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 Se combina con objetos de etiqueta que contienen valores de los campos enumerados.
_source.rule.id, _source.kibana.alert.rule.rule_id security_result.rule_id Valor de _source.rule.id si no está vacío; de lo contrario, de _source.kibana.alert.rule.rule_id
_source.rule.name, _source.kibana.alert.rule.name security_result.rule_name Valor de _source.rule.name si no está vacío; de lo contrario, se toma de _source.kibana.alert.rule.name
_source.rule.ruleset security_result.rule_set Valor copiado directamente
security_result.severity Se establece en "LOW"; si _index coincide con .alert, se establece en "HIGH"; si _source.kibana.alert.rule.parameters.severity coincide con (?i)LOW, se establece en "LOW".
_source.message security_result.summary Valor copiado directamente
_source.file.Ext.malware_signature.primary.signature.id security_result.threat_id Valor copiado directamente
_source.file.Ext.malware_signature.primary.signature.name security_result.threat_name Valor copiado directamente
_source.source.address, _source.source.ip src.asset.ip Se fusionó de _source.source.address y _source.source.ip
_source.source.address, _source.source.ip src.ip Se fusionó de _source.source.address y _source.source.ip
_source.host.name target.asset.hostname Valor copiado directamente
_source.destination.address, _source.destination.ip target.asset.ip Se combinó de _source.destination.address y _source.destination.ip
_source.file.path, _source.dll.path, _source.process.executable, _source.Target.process.executable target.file.full_path Valor de _source.file.path si es events.file, _source.dll.path si es events.library, _source.process.executable si es events.process o events.api, _source.Target.process.executable si es events.api
_source.dll.hash.md5, _source.process.hash.md5 target.file.md5 Valor de _source.dll.hash.md5 si es events.library, _source.process.hash.md5 si es .alert
_source.dll.name, _source.process.name target.file.names Se fusionó de _source.dll.name si es events.library, _source.process.name si es .alert
_source.dll.hash.sha1, _source.process.hash.sha1 target.file.sha1 Valor de _source.dll.hash.sha1 si es events.library, _source.process.hash.sha1 si es .alert
_source.dll.hash.sha256, _source.process.hash.sha256 target.file.sha256 Valor de _source.dll.hash.sha256 si es events.library, _source.process.hash.sha256 si es .alert
_source.host.name target.hostname Valor copiado directamente
_source.destination.address, _source.destination.ip target.ip Se combinó de _source.destination.address y _source.destination.ip
_source.destination.geo.city_name target.location.city Valor copiado directamente
_source.destination.geo.country_name target.location.country_or_region Valor copiado directamente
_source.destination.geo.continent_name target.location.name Valor copiado directamente
_source.destination.geo.location.lat target.location.region_coordinates.latitude Se convirtió en una cadena y, luego, en un número de punto flotante.
_source.destination.geo.location.lon target.location.region_coordinates.longitude Se convirtió en una cadena y, luego, en un número de punto flotante.
_source.destination.geo.region_name target.location.state Valor copiado directamente
_source.data_stream.namespace target.namespace Valor copiado directamente
_source.destination.port target.port Se convierte en una cadena y, luego, en un número entero.
_source.process.command_line target.process.command_line Valor copiado directamente
_source.process.executable target.process.file.full_path Valor copiado directamente
_source.process.hash.md5 target.process.file.md5 Valor copiado directamente
_source.process.hash.sha1 target.process.file.sha1 Valor copiado directamente
_source.process.hash.sha256 target.process.file.sha256 Valor copiado directamente
_source.process.name target.process.file.names Se combinó desde _source.process.name
_source.registry.key target.registry.registry_key Valor copiado directamente
_source.registry.path target.registry.registry_value_data Valor copiado directamente
_source.registry.value target.registry.registry_value_name Valor copiado directamente
_source.data_stream.dataset target.resource.name Valor copiado directamente
_source.process.entity_id target.user.userid Valor copiado directamente
metadata.product_name Se estableció en "Elastic Defend"
metadata.vendor_name Se estableció en "Elástico"

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.