Raccogliere i log di Sysdig
Questo parser estrae i dati sugli eventi di sicurezza dai log JSON di Sysdig, trasformando e mappando i campi dei log non elaborati nel formato UDM di Google Security Operations. Gestisce vari campi, tra cui metadati, informazioni su principali/target, dettagli dei risultati di sicurezza e contesto relativo a Kubernetes, arricchendo i dati per l'analisi in Google SecOps. Il parser esegue anche conversioni di tipo di dati, gestione degli errori e logica condizionale in base ai valori dei campi per garantire una rappresentazione accurata e completa dell'UDM.
Prima di iniziare
- Assicurati di avere un'istanza Google SecOps.
- Assicurati di disporre dell'accesso con privilegi a Sysdig Secure.
Crea una chiave API per il feed webhook
Vai alla console Google Cloud > Credenziali.
Fai clic su Crea credenziali e poi seleziona Chiave API.
Limita l'accesso della chiave API all'API Google Security Operations.
Opzione 1
Configura un feed webhook in Google SecOps per importare i log Sysdig
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuova.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log Sysdig).
- Seleziona Webhook come Tipo di origine.
- Seleziona Sysdig come Tipo di log.
- Fai clic su Avanti.
- (Facoltativo) Specifica i valori per i seguenti parametri di input:
- Delimitatore di split: il delimitatore utilizzato per separare le righe di log, ad esempio
\n
. - Spazio dei nomi degli asset: lo spazio dei nomi degli asset.
- Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
- Delimitatore di split: il delimitatore utilizzato per separare le righe di log, ad esempio
- Fai clic su Avanti.
- Controlla la configurazione del feed nella schermata Concludi e poi fai clic su Invia.
- Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.
- Copia e memorizza la chiave segreta. Non potrai più visualizzare questa chiave segreta. Se necessario, puoi rigenerare una nuova chiave segreta, ma questa azione rende obsoleta la chiave segreta precedente.
- Dalla scheda Dettagli, copia l'URL dell'endpoint del feed dal campo Informazioni endpoint. Devi specificare questo URL endpoint nell'applicazione client.
- Fai clic su Fine.
Specifica l'URL dell'endpoint
- Nell'applicazione client, specifica l'URL dell'endpoint HTTPS fornito nel feed webhook.
Attiva l'autenticazione specificando la chiave API e la chiave segreta nell'intestazione personalizzata nel seguente formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Consiglio: specifica la chiave API come intestazione anziché nell'URL.
Se il client webhook non supporta le intestazioni personalizzate, puoi specificare la chiave API e la chiave segreta utilizzando parametri di ricerca nel seguente formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Sostituisci quanto segue:
ENDPOINT_URL
: l'URL dell'endpoint del feed.API_KEY
: la chiave API per l'autenticazione in Google SecOps.SECRET
: la chiave segreta che hai generato per autenticare il feed.
Configurare il webhook in Sysdig
- Accedi a Sysdig Secure con privilegi di amministratore.
- Vai a Profilo > Impostazioni > Inoltro eventi.
- Fai clic su + Aggiungi integrazione e seleziona Webhook dal menu a discesa.
Specifica i valori per i seguenti parametri di input:
- Nome integrazione: fornisci un nome descrittivo per il webhook (ad esempio Webhook Google SecOps).
- Endpoint: inserisci il webhook
<ENDPOINT_URL>
, seguito da<API_KEY
e<SECRET>
. Dati da inviare: seleziona dal menu a discesa i tipi di dati Sysdig da inoltrare.
Testa l'integrazione, quindi attiva l'opzione Attivato.
Fai clic su Salva.
Opzione 2
Inoltra i dati direttamente a Google SecOps
- Accedi a Sysdig Secure utilizzando le tue credenziali di amministratore.
- Vai a Impostazioni > Inoltro eventi.
- Fai clic su + Aggiungi integrazione e seleziona Google Chronicle dal menu a discesa.
- Specifica i valori per i seguenti parametri di input:
- Nome integrazione: fornisci un nome descrittivo per l'integrazione (ad esempio Integrazione Google SecOps).
- ID cliente: l'ID cliente Google associato al tuo account Google Cloud. In Google SecOps, puoi trovarlo in Impostazioni > Profilo.
- Spazio dei nomi: facoltativo. Utilizzalo come tag per identificare il dominio di dati appropriato per l'indicizzazione e l'arricchimento.
- Credenziali JSON: carica le credenziali JSON di Google SecOps.
- Regione: seleziona la tua regione, ad esempio Stati Uniti, Europa o Asia.
- Dati da inviare: seleziona i tipi di dati Sysdig da inoltrare dal menu a discesa.
- Testa l'integrazione, quindi attiva l'opzione Attivato.
- Fai clic su Salva.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
agentId |
read_only_udm.metadata.product_deployment_id |
Il valore di agentId dal log non elaborato è mappato direttamente a questo campo UDM. |
category |
read_only_udm.security_result.category_details |
Il valore di category dal log non elaborato è mappato direttamente a questo campo UDM. |
content.fields.container.id |
read_only_udm.target.asset.asset_id |
Al valore di content.fields.container.id del log non elaborato viene anteposto "container_id:" e viene mappato a questo campo UDM. Da utilizzare se containerId è vuoto. |
content.fields.container.image.repository |
read_only_udm.target.file.full_path |
Il valore di content.fields.container.image.repository dal log non elaborato è mappato direttamente a questo campo UDM. |
content.fields.container.image.tag |
read_only_udm.metadata.ingestion_labels.value dove la chiave è tag |
Il valore di content.fields.container.image.tag dal log non elaborato è mappato direttamente a questo campo UDM. |
content.fields.evt.res |
read_only_udm.metadata.ingestion_labels.value dove la chiave è evt_res |
Il valore di content.fields.evt.res dal log non elaborato è mappato direttamente a questo campo UDM. |
content.fields.evt.type |
read_only_udm.metadata.event_type |
Il valore di content.fields.evt.type dal log non elaborato è mappato direttamente a questo campo UDM. |
content.fields.falco.rule |
read_only_udm.security_result.rule_name |
Il valore di content.fields.falco.rule dal log non elaborato è mappato direttamente a questo campo UDM. Da utilizzare se content.ruleName è vuoto. |
content.fields.group.gid |
read_only_udm.target.group.product_object_id |
Il valore di content.fields.group.gid dal log non elaborato è mappato direttamente a questo campo UDM. |
content.fields.group.name |
read_only_udm.target.group.group_display_name |
Il valore di content.fields.group.name dal log non elaborato è mappato direttamente a questo campo UDM. |
content.fields.proc.cmdline |
read_only_udm.target.process.command_line |
Il valore di content.fields.proc.cmdline dal log non elaborato è mappato direttamente a questo campo UDM. |
content.fields.proc.pcmdline |
read_only_udm.target.process.parent_process.command_line |
Il valore di content.fields.proc.pcmdline dal log non elaborato è mappato direttamente a questo campo UDM. |
content.fields.proc.pid |
read_only_udm.target.process.pid |
Il valore di content.fields.proc.pid dal log non elaborato è mappato direttamente a questo campo UDM. |
content.fields.proc.ppid |
read_only_udm.target.process.parent_process.pid |
Il valore di content.fields.proc.ppid dal log non elaborato è mappato direttamente a questo campo UDM. |
content.fields.proc.sid |
read_only_udm.metadata.ingestion_labels.value dove la chiave è sid |
Il valore di content.fields.proc.sid dal log non elaborato è mappato direttamente a questo campo UDM. |
content.fields.user.loginname |
read_only_udm.principal.user.user_display_name |
Il valore di content.fields.user.loginname dal log non elaborato è mappato direttamente a questo campo UDM. |
content.fields.user.uid |
read_only_udm.principal.user.userid |
Il valore di content.fields.user.uid dal log non elaborato è mappato direttamente a questo campo UDM. |
content.output |
read_only_udm.additional.fields.value.string_value dove la chiave è content_output |
Il valore di content.output dal log non elaborato è mappato direttamente a questo campo UDM. |
content.policyId |
read_only_udm.security_result.rule_id |
Il valore di content.policyId dal log non elaborato è mappato direttamente a questo campo UDM. |
content.policyOrigin |
read_only_udm.additional.fields.value.string_value dove la chiave è content_policyOrigin |
Il valore di content.policyOrigin dal log non elaborato è mappato direttamente a questo campo UDM. |
content.policyVersion |
read_only_udm.additional.fields.value.string_value dove la chiave è content_policyVersion |
Il valore di content.policyVersion dal log non elaborato è mappato direttamente a questo campo UDM. |
content.ruleName |
read_only_udm.security_result.rule_name |
Il valore di content.ruleName dal log non elaborato è mappato direttamente a questo campo UDM. |
content.ruleTags |
read_only_udm.security_result.rule_labels |
I valori nell'array content.ruleTags del log non elaborato vengono mappati a questo campo UDM, con chiavi generate dinamicamente come "ruletag_index". |
content.ruleType |
read_only_udm.additional.fields.value.string_value dove la chiave è content_ruleType |
Il valore di content.ruleType dal log non elaborato è mappato direttamente a questo campo UDM. |
containerId |
read_only_udm.target.asset.asset_id |
Al valore di containerId del log non elaborato viene anteposto "container_id:" e viene mappato a questo campo UDM. |
description |
read_only_udm.metadata.description |
Il valore di description dal log non elaborato è mappato direttamente a questo campo UDM. |
id |
read_only_udm.metadata.product_log_id |
Il valore di id dal log non elaborato è mappato direttamente a questo campo UDM. |
labels.container.label.io.kubernetes.container.name |
read_only_udm.additional.fields.value.string_value dove la chiave è container_name |
Il valore di labels.container.label.io.kubernetes.container.name dal log non elaborato è mappato direttamente a questo campo UDM. |
labels.container.label.io.kubernetes.pod.name |
read_only_udm.additional.fields.value.string_value dove la chiave è pod_name |
Il valore di labels.container.label.io.kubernetes.pod.name dal log non elaborato è mappato direttamente a questo campo UDM. Da utilizzare se labels.kubernetes.pod.name è vuoto. |
labels.container.label.io.kubernetes.pod.namespace |
read_only_udm.principal.namespace |
Il valore di labels.container.label.io.kubernetes.pod.namespace dal log non elaborato è mappato direttamente a questo campo UDM. Da utilizzare se labels.kubernetes.namespace.name è vuoto. |
labels.aws.instanceId |
read_only_udm.target.resource.product_object_id |
Il valore di labels.aws.instanceId dal log non elaborato è mappato direttamente a questo campo UDM. |
labels.aws.region |
read_only_udm.target.resource.attribute.cloud.availability_zone |
Il valore di labels.aws.region dal log non elaborato è mappato direttamente a questo campo UDM. |
labels.host.hostName |
read_only_udm.principal.ip OPPURE read_only_udm.principal.hostname |
Se il valore contiene "ip", viene analizzato come indirizzo IP e mappato a principal.ip . In caso contrario, viene mappato a principal.hostname . |
labels.host.mac |
read_only_udm.principal.mac |
Il valore di labels.host.mac dal log non elaborato è mappato direttamente a questo campo UDM. Da utilizzare se machineId è vuoto. |
labels.kubernetes.cluster.name |
read_only_udm.additional.fields.value.string_value dove la chiave è kubernetes_cluster_name |
Il valore di labels.kubernetes.cluster.name dal log non elaborato è mappato direttamente a questo campo UDM. |
labels.kubernetes.deployment.name |
read_only_udm.additional.fields.value.string_value dove la chiave è kubernetes_deployment_name |
Il valore di labels.kubernetes.deployment.name dal log non elaborato è mappato direttamente a questo campo UDM. |
labels.kubernetes.namespace.name |
read_only_udm.principal.namespace |
Il valore di labels.kubernetes.namespace.name dal log non elaborato è mappato direttamente a questo campo UDM. |
labels.kubernetes.node.name |
read_only_udm.additional.fields.value.string_value dove la chiave è kubernetes_node_name |
Il valore di labels.kubernetes.node.name dal log non elaborato è mappato direttamente a questo campo UDM. |
labels.kubernetes.pod.name |
read_only_udm.additional.fields.value.string_value dove la chiave è pod_name |
Il valore di labels.kubernetes.pod.name dal log non elaborato è mappato direttamente a questo campo UDM. |
labels.kubernetes.service.name |
read_only_udm.additional.fields.value.string_value dove la chiave è kubernetes_service_name |
Il valore di labels.kubernetes.service.name dal log non elaborato è mappato direttamente a questo campo UDM. |
machineId |
read_only_udm.principal.mac |
Il valore di machineId dal log non elaborato è mappato direttamente a questo campo UDM. |
name |
read_only_udm.security_result.summary |
Il valore di name dal log non elaborato è mappato direttamente a questo campo UDM. |
severity |
read_only_udm.security_result.severity |
Il valore di severity dal log non elaborato viene mappato a un valore di stringa in base a questi intervalli: <4 = ALTO, >3 e <6 = MEDIO, 6 = BASSO, 7 = INFORMATIVO. |
source |
read_only_udm.security_result.description |
Il valore di source dal log non elaborato è mappato direttamente a questo campo UDM. |
timestampRFC3339Nano |
read_only_udm.metadata.event_timestamp |
Il valore di timestampRFC3339Nano dal log non elaborato viene analizzato come timestamp e mappato a questo campo UDM. |
type |
read_only_udm.metadata.product_event_type |
Il valore di type dal log non elaborato è mappato direttamente a questo campo UDM. |
(Parser Logic) | read_only_udm.metadata.product_name |
Hardcoded su "SYSDIG". |
(Parser Logic) | read_only_udm.metadata.vendor_name |
Hardcoded su "SYSDIG". |
(Parser Logic) | read_only_udm.metadata.event_type |
Impostato su "PROCESS_UNCATEGORIZED" per impostazione predefinita o su "GENERIC_EVENT" se labels.host.hostName è vuoto. |
(Parser Logic) | read_only_udm.metadata.log_type |
Hardcoded su "SYSDIG". |
(Parser Logic) | read_only_udm.target.resource.resource_type |
Impostato su "CLOUD_PROJECT" se labels.aws.instanceId esiste. |
Modifiche
2024-01-05
- Quando "severity" è 0, 1, 2, 3, la mappatura di "security_result.severity" è stata modificata da "LOW" a "HIGH".
- Quando "severity" è 6, la mappatura di "security_result.severity" è stata modificata da "HIGH" a "LOW".
- Quando "severity" è 7, la mappatura di "security_result.severity" è stata modificata da "HIGH" a "INFORMATIONAL".
- È stato aggiunto "drop" per i log non in formato JSON.
- È stato aggiunto "on_error" alla mappatura della data "timestampRFC3339Nano".
2022-10-07
- Parser appena creato.