Raccogliere i log di Elastic Defend
Questo documento spiega come importare i log di Elastic Defend in Google Security Operations utilizzando Google Cloud Storage V2 con una funzione Cloud Run.
Elastic Defend è una soluzione di rilevamento e risposta degli endpoint (EDR) all'interno di Elastic Security che offre funzionalità di prevenzione, rilevamento e risposta con visibilità approfondita nei sistemi operativi Windows, macOS e Linux. Monitora l'esecuzione dei processi, l'attività dei file, le connessioni di rete, le modifiche al registro e i caricamenti delle librerie per rilevare e prevenire le minacce a livello di endpoint. I dati vengono archiviati in Elasticsearch e possono essere recuperati utilizzando l'API Elasticsearch Search.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Un progetto Google Cloud con le seguenti API abilitate:
- Cloud Storage
- Cloud Run Functions
- Cloud Scheduler
- Pub/Sub
- IAM
- Accesso a un cluster Elasticsearch con Elastic Defend implementato
- Autorizzazioni per creare chiavi API in Elasticsearch (privilegio del cluster
manage_security,manage_api_keyomanage_own_api_key) - Connettività di rete da Cloud Run Functions al cluster Elasticsearch
Creare un bucket Google Cloud Storage
- Vai alla console Google Cloud.
- Seleziona il tuo progetto o creane uno nuovo.
- Nel menu di navigazione, vai a Cloud Storage > Bucket.
- Fai clic su Crea bucket.
Fornisci i seguenti dettagli di configurazione:
Impostazione Valore Assegna un nome al bucket Inserisci un nome univoco globale (ad esempio elastic-defend-logs).Tipo di località Scegli in base alle tue esigenze (regione singola, doppia regione, più regioni) Località Seleziona la posizione (ad esempio, us-central1).Classe di archiviazione Standard (consigliato per i log a cui si accede di frequente) Controllo dell'accesso Uniforme (consigliato) Strumenti di protezione (Facoltativo) Attiva il controllo delle versioni degli oggetti o la policy di conservazione Fai clic su Crea.
Raccogliere le credenziali di Elastic Defend
Per consentire alla funzione Cloud Run di recuperare gli eventi di Elastic Defend, devi creare una chiave API con autorizzazioni di lettura sui flussi di dati logs-endpoint.
Creare una chiave API utilizzando Kibana
- Accedi a Kibana.
- Nel menu di navigazione o nel campo di ricerca globale, vai a Stack Management > Chiavi API.
- Fai clic su Crea chiave API.
- Nel campo Nome, inserisci
Google SecOps Cloud Storage Integration. - Nel campo Scadenza, imposta facoltativamente una data di scadenza. Per impostazione predefinita, le chiavi API non scadono.
- Fai clic su Controlla privilegi di sicurezza.
- Nella sezione Indici, fai clic su Aggiungi privilegio di indice.
- Configura il privilegio di indice:
- Indici: inserisci
logs-endpoint.* - Privilegi: seleziona lettura.
- Indici: inserisci
- Lascia vuota la sezione Privilegi cluster (non sono necessari privilegi cluster).
- Fai clic su Crea chiave API.
Registra le credenziali API
Dopo aver creato la chiave API, viene visualizzata una finestra di dialogo con le tue credenziali:
Codificata: la chiave API codificata in base64 (ad esempio,
VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw==)Devi anche registrare l'URL dell'endpoint Elasticsearch:
Per Elastic Cloud: l'endpoint viene visualizzato in Cloud Console nella sezione Elasticsearch del deployment (ad esempio,
https://my-deployment.es.us-central1.gcp.cloud.es.io:443)Per Elasticsearch autogestito: utilizza il nome host o l'indirizzo IP del cluster Elasticsearch con la porta (ad esempio,
https://elasticsearch.example.com:9200).
Creare la chiave API utilizzando gli strumenti per sviluppatori (metodo alternativo)
In alternativa, puoi creare una chiave API utilizzando Kibana Dev Tools:
- Accedi a Kibana.
- Vai a Gestione > Strumenti per sviluppatori.
Nella console, esegui questo 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" } }La risposta contiene le credenziali della chiave API:
{ "id": "VuaCfGcBCdbkQm-e5aOx", "name": "Google SecOps Cloud Storage Integration", "api_key": "ui2lp2axTNmsyakw9tvNnw", "encoded": "VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw==" }Copia e salva il valore codificato. Questa è la chiave API con codifica base64 che utilizzerai per l'autenticazione.
Crea service account
Crea un account di servizio dedicato per la funzione Cloud Run.
- Nella console Google Cloud, vai a IAM e amministrazione > Service account.
- Fai clic su Crea account di servizio.
- Fornisci i seguenti dettagli di configurazione:
- Nome del service account: inserisci
elastic-defend-collector - Descrizione service account: inserisci
Service account for Elastic Defend log collection to GCS
- Nome del service account: inserisci
- Fai clic su Crea e continua.
- Nella sezione Concedi a questo account di servizio l'accesso al progetto, aggiungi i seguenti ruoli:
- Fai clic su Seleziona un ruolo e seleziona Amministratore oggetti di archiviazione (
roles/storage.objectAdmin). - Fai clic su Aggiungi un altro ruolo e seleziona Cloud Run Invoker (
roles/run.invoker).
- Fai clic su Seleziona un ruolo e seleziona Amministratore oggetti di archiviazione (
- Fai clic su Continua.
- Fai clic su Fine.
Crea argomento Pub/Sub
Crea un argomento Pub/Sub per attivare la funzione Cloud Run da Cloud Scheduler.
- Nella console Google Cloud, vai a Pub/Sub > Argomenti.
- Fai clic su Crea argomento.
- Fornisci i seguenti dettagli di configurazione:
- ID argomento: inserisci
elastic-defend-trigger - Aggiungi una sottoscrizione predefinita: lascia selezionata l'opzione
- ID argomento: inserisci
- Fai clic su Crea.
Crea funzione Cloud Run
Crea una funzione Cloud Run che recupera gli eventi da Elasticsearch e li scrive in GCS.
Crea la funzione
- Nella console Google Cloud, vai a Cloud Run Functions.
- Fai clic su Crea funzione.
Fornisci i seguenti dettagli di configurazione:
Impostazione Valore Ambiente 2ª gen. Nome della funzione elastic-defend-to-gcsRegione Seleziona la stessa regione del bucket GCS Tipo di trigger Cloud Pub/Sub Argomento Cloud Pub/Sub Seleziona elastic-defend-triggerMemoria allocata 512 MiB (aumenta per volumi di dati di grandi dimensioni) Timeout 540 secondi Service account di runtime Seleziona elastic-defend-collectorFai clic su Avanti.
Aggiungere variabili di ambiente
Aggiungi le seguenti variabili di ambiente nella sezione Impostazioni di runtime, build, connessioni e sicurezza:
Variabile Valore GCS_BUCKETNome del bucket GCS (ad esempio, elastic-defend-logs)GCS_PREFIXPrefisso per i file di log (ad esempio, elastic-defend)STATE_KEYNome del file di stato (ad esempio, state.json)ES_HOSTURL di Elasticsearch (ad esempio, https://my-deployment.es.us-central1.gcp.cloud.es.io:443)ES_API_KEYChiave API codificata dal passaggio di creazione delle credenziali MAX_RECORDSNumero massimo di record per esecuzione (ad esempio, 100000)PAGE_SIZENumero di record per richiesta di ricerca (ad esempio, 1000)LOOKBACK_HOURSOre da esaminare alla prima esecuzione (ad esempio, 24)
Aggiungi il codice per la funzione
- Seleziona Python 3.11 come Runtime.
- Imposta il punto di ingresso su
main. - Nella sezione Codice sorgente, seleziona Editor incorporato.
Sostituisci i contenuti di
main.pycon il seguente codice: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"Sostituisci i contenuti di
requirements.txtcome segue:functions-framework==3.* google-cloud-storage==2.* requests==2.*Fai clic su Esegui il deployment.
Attendi il completamento del deployment.
Crea job Cloud Scheduler
Crea un job Cloud Scheduler per attivare la funzione Cloud Run in base a una pianificazione regolare.
- Nella console Google Cloud, vai a Cloud Scheduler.
- Fai clic su Crea job.
Fornisci i seguenti dettagli di configurazione:
Impostazione Valore Nome elastic-defend-schedulerRegione Seleziona la stessa regione della funzione Cloud Run Frequenza */5 * * * *(ogni 5 minuti)Fuso orario Seleziona il tuo fuso orario (ad esempio, UTC)Fai clic su Continua.
Nella sezione Configura l'esecuzione:
- Tipo target: seleziona Pub/Sub.
- Argomento Cloud Pub/Sub: seleziona
elastic-defend-trigger - Corpo del messaggio: inserisci
{"run": true}
Fai clic su Crea.
Recupera il account di servizio Google SecOps e configura il feed
Google SecOps utilizza un account di servizio univoco per leggere i dati dal tuo bucket GCS. Devi concedere a questo account di servizio l'accesso al tuo bucket.
Recupera l'email del account di servizio
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Elastic Defend Events). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona Elastic Defend come Tipo di log.
Fai clic su Ottieni service account. Verrà visualizzata un'email univoca del account di servizio, ad esempio:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopia questo indirizzo email per utilizzarlo nel passaggio successivo.
Configurare il feed
- Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
URL del bucket di archiviazione: inserisci l'URI del bucket GCS con il percorso del prefisso:
gs://elastic-defend-logs/elastic-defend/Sostituisci
elastic-defend-logscon il nome del tuo bucket GCS.Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze:
- Mai: non elimina mai i file dopo i trasferimenti (opzione consigliata per i test).
- Elimina file trasferiti: elimina i file dopo il trasferimento riuscito.
Elimina file trasferiti e directory vuote: elimina i file e le directory vuote dopo il trasferimento riuscito.
Età massima del file: includi i file modificati nell'ultimo numero di giorni (il valore predefinito è 180 giorni)
Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset
Etichette di importazione: l'etichetta da applicare agli eventi di questo feed
Fai clic su Avanti.
Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
Concedi le autorizzazioni IAM al account di servizio Google SecOps
Il account di servizio Google SecOps deve avere il ruolo Visualizzatore oggetti Storage nel bucket GCS.
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket (ad esempio
elastic-defend-logs). - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: incolla l'email del account di servizio Google SecOps
- Assegna i ruoli: seleziona Visualizzatore oggetti Storage
Fai clic su Salva.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
| _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 | Unito agli oggetti etichetta contenenti valori dei campi elencati |
| _source.process.Ext.session_info.logon_type | extensions.auth.auth_details | Valore copiato direttamente |
| _source.host.os.full | hardware.cpu_platform | Valore copiato direttamente |
| _source.host.id | hardware.serial_number | Valore copiato direttamente |
| _source.rule.description | metadata.description | Valore copiato direttamente |
| _source.@timestamp | metadata.event_timestamp | Convertito utilizzando il filtro per data con i formati ISO8601, aaaa-MM-ggTHH:mm:ss.SSSSSSSSSZ, aaaa-MM-ggTHH:mm:ss.SSSSSSZ, aaaa-MM-ggTHH:mm:ss.SSSZ, aaaa-MM-ggTHH:mm:ssZ |
| metadata.event_type | Impostato in base alle condizioni index, event.action e has* | |
| metadata.log_type | Imposta su "ELASTIC_DEFEND" | |
| metadata.product_event_type | Imposta "Eventi file" se _index ~ events.file; "Eventi libreria" se events.library; "Eventi di rete" se events.network; "Eventi processo" se events.process; "Eventi registro" se events.registry; "Eventi di sicurezza" se events.security; "Eventi API" se events.api; "Avvisi" se .alert | |
| _id | metadata.product_log_id | Valore di _id se non presente in ["", " ", "null", "N/A"] |
| _source.ecs.version | metadata.product_version | Valore copiato direttamente |
| _source.network.type | network.application_protocol_version | Valore copiato direttamente |
| _source.network.transport | network.ip_protocol | Imposta su "TCP" se corrisponde a (?i)tcp; "UDP" se (?i)udp; "ICMP" se (?i)icmp; altrimenti "UNKNOWN_IP_PROTOCOL" |
| _source.destination.as.organization.name | network.organization_name | Valore copiato direttamente |
| _source.Endpoint.policy.applied.artifacts.global.identifiers | observer.file.names | Unito da _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 | Unito agli oggetti etichetta contenenti valori dei campi elencati |
| _source.Endpoint.policy.applied.artifacts.user.version | observer.user.attribute.labels | Unito all'oggetto etichetta contenente il valore di _source.Endpoint.policy.applied.artifacts.user.version |
| _source.host.os.full | principal.asset.hardware.cpu_platform | Valore copiato direttamente |
| _source.host.id | principal.asset.hardware.serial_number | Valore copiato direttamente |
| _source.host.name | principal.asset.hostname | Valore copiato direttamente |
| _source.host.ip | principal.asset.ip | Unito da _source.host.ip |
| _source.host.os.type | principal.asset.platform_software.platform | Impostato su "WINDOWS" se corrisponde a (?i)windows; "LINUX" se (?i)linux; "MAC" se (?i)mac; "IOS" se (?i)ios; altrimenti "UNKNOWN_PLATFORM" |
| _source.host.os.kernel | principal.asset.platform_software.platform_patch_level | Valore copiato direttamente |
| _source.event.created | principal.domain.creation_time | Convertito utilizzando il filtro per data con i formati ISO8601, aaaa-MM-ggTHH:mm:ss.SSSSSSSSSZ, aaaa-MM-ggTHH:mm:ss.SSSSSSZ, aaaa-MM-ggTHH:mm:ss.SSSZ, aaaa-MM-ggTHH:mm:ssZ |
| _source.user.domain | principal.domain.name | Valore copiato direttamente |
| _source.process.thread.capabilities.effective | principal.file.capabilities_tags | Unito da _source.process.thread.capabilities.effective |
| _source.process.executable | principal.file.full_path | Valore copiato direttamente |
| _source.process.hash.md5 | principal.file.md5 | Valore copiato direttamente |
| _source.file.name | principal.file.names | Unito da _source.file.name |
| _source.process.hash.sha1 | principal.file.sha1 | Valore copiato direttamente |
| _source.process.hash.sha256 | principal.file.sha256 | Valore copiato direttamente |
| _source.host.hostname | principal.hostname | Valore copiato direttamente |
| _source.host.ip | principal.ip | Unito da _source.host.ip |
| _source.host.mac | principal.mac | Unito da _source.host.mac dopo aver sostituito - con : |
| _source.host.os.Ext.variant | principal.platform_version | Valore copiato direttamente |
| _source.source.port | principal.port | Convertito in stringa e poi in numero intero |
| _source.process.command_line, _source.process.name | principal.process.command_line | Valore di _source.process.command_line se non è vuoto, altrimenti di _source.process.name |
| _source.process.thread.capabilities.permitted | principal.process.file.capabilities_tags | Unito da _source.process.thread.capabilities.permitted |
| _source.process.executable | principal.process.file.full_path | Valore copiato direttamente |
| _source.process.hash.md5 | principal.process.file.md5 | Valore copiato direttamente |
| _source.process.hash.sha1 | principal.process.file.sha1 | Valore copiato direttamente |
| _source.process.hash.sha256 | principal.process.file.sha256 | Valore copiato direttamente |
| _source.process.parent.executable | principal.process.parent_process.file.full_path | Valore copiato direttamente |
| _source.process.pid | principal.process.pid | Convertito in stringa e poi copiato |
| _source.process.Ext.api.name | principal.resource.attribute.labels | Unito all'oggetto etichetta contenente il valore di _source.process.Ext.api.name |
| _source.event.code | principal.resource.product_object_id | Valore copiato direttamente |
| _source.group.name | principal.user.group_identifiers | Unito da _source.group.name |
| _source.user.name | principal.user.userid | Valore copiato direttamente |
| _source.user.id | principal.user.windows_sid | Valore di _source.user.id se corrisponde alla regex ^S-\\d-(\\\\d+-){1,14}\\\\d+$ |
| _source.file.Ext.malware_signature.primary.signature.hash.sha256 | security_result.about.file.sha256 | Valore copiato direttamente |
| _source.event.outcome | security_result.action | Valore di _source.event.outcome, convertito in maiuscolo, quindi impostato su ALLOW se in [SUCCESS, ALLOW], BLOCK se in [FAILURE, DENY, SKIPPED, RATE_LIMIT], UNKNOWN_ACTION se UNKNOWN |
| _source.event.action | security_result.action_details | Valore copiato direttamente |
| _source.destination.geo.region_iso_code | security_result.associations | Unito all'oggetto contenente il nome da _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 | Unito all'oggetto contenente ID e nome dai campi elencati |
| _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 | Unito agli oggetti contenenti id, nome, subtechnique_id, subtechnique_name dei campi elencati |
| _source.event.category | security_result.category_details | Unito da _source.event.category |
| _source.kibana.alert.rule.description | security_result.description | Valore copiato direttamente |
| _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 | Unito agli oggetti etichetta contenenti valori dei campi elencati |
| _source.rule.id, _source.kibana.alert.rule.rule_id | security_result.rule_id | Valore di _source.rule.id se non è vuoto, altrimenti di _source.kibana.alert.rule.rule_id |
| _source.rule.name, _source.kibana.alert.rule.name | security_result.rule_name | Valore di _source.rule.name se non è vuoto, altrimenti di _source.kibana.alert.rule.name |
| _source.rule.ruleset | security_result.rule_set | Valore copiato direttamente |
| security_result.severity | Imposta su "LOW"; se _index corrisponde a .alert, imposta su "HIGH"; se _source.kibana.alert.rule.parameters.severity corrisponde a (?i)LOW, imposta su "LOW" | |
| _source.message | security_result.summary | Valore copiato direttamente |
| _source.file.Ext.malware_signature.primary.signature.id | security_result.threat_id | Valore copiato direttamente |
| _source.file.Ext.malware_signature.primary.signature.name | security_result.threat_name | Valore copiato direttamente |
| _source.source.address, _source.source.ip | src.asset.ip | Unito da _source.source.address e _source.source.ip |
| _source.source.address, _source.source.ip | src.ip | Unito da _source.source.address e _source.source.ip |
| _source.host.name | target.asset.hostname | Valore copiato direttamente |
| _source.destination.address, _source.destination.ip | target.asset.ip | Unito da _source.destination.address e _source.destination.ip |
| _source.file.path, _source.dll.path, _source.process.executable, _source.Target.process.executable | target.file.full_path | Valore di _source.file.path se events.file, _source.dll.path se events.library, _source.process.executable se events.process o events.api, _source.Target.process.executable se events.api |
| _source.dll.hash.md5, _source.process.hash.md5 | target.file.md5 | Valore di _source.dll.hash.md5 se events.library, _source.process.hash.md5 se .alert |
| _source.dll.name, _source.process.name | target.file.names | Unito da _source.dll.name se events.library, _source.process.name se .alert |
| _source.dll.hash.sha1, _source.process.hash.sha1 | target.file.sha1 | Valore di _source.dll.hash.sha1 se events.library, _source.process.hash.sha1 se .alert |
| _source.dll.hash.sha256, _source.process.hash.sha256 | target.file.sha256 | Valore di _source.dll.hash.sha256 se events.library, _source.process.hash.sha256 se .alert |
| _source.host.name | target.hostname | Valore copiato direttamente |
| _source.destination.address, _source.destination.ip | target.ip | Unito da _source.destination.address e _source.destination.ip |
| _source.destination.geo.city_name | target.location.city | Valore copiato direttamente |
| _source.destination.geo.country_name | target.location.country_or_region | Valore copiato direttamente |
| _source.destination.geo.continent_name | target.location.name | Valore copiato direttamente |
| _source.destination.geo.location.lat | target.location.region_coordinates.latitude | Convertito in stringa e poi in float |
| _source.destination.geo.location.lon | target.location.region_coordinates.longitude | Convertito in stringa e poi in float |
| _source.destination.geo.region_name | target.location.state | Valore copiato direttamente |
| _source.data_stream.namespace | target.namespace | Valore copiato direttamente |
| _source.destination.port | target.port | Convertito in stringa e poi in numero intero |
| _source.process.command_line | target.process.command_line | Valore copiato direttamente |
| _source.process.executable | target.process.file.full_path | Valore copiato direttamente |
| _source.process.hash.md5 | target.process.file.md5 | Valore copiato direttamente |
| _source.process.hash.sha1 | target.process.file.sha1 | Valore copiato direttamente |
| _source.process.hash.sha256 | target.process.file.sha256 | Valore copiato direttamente |
| _source.process.name | target.process.file.names | Unito da _source.process.name |
| _source.registry.key | target.registry.registry_key | Valore copiato direttamente |
| _source.registry.path | target.registry.registry_value_data | Valore copiato direttamente |
| _source.registry.value | target.registry.registry_value_name | Valore copiato direttamente |
| _source.data_stream.dataset | target.resource.name | Valore copiato direttamente |
| _source.process.entity_id | target.user.userid | Valore copiato direttamente |
| metadata.product_name | Impostato su "Elastic Defend" | |
| metadata.vendor_name | Impostato su "Elastico" |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.