Raccogli i log di Nutanix Prism

Supportato in:

Panoramica

Questo parser elabora i log di Nutanix Prism, gestendo i formati JSON e syslog. Estrae i campi da varie strutture di log, li normalizza in UDM e arricchisce i dati con un contesto aggiuntivo, come informazioni utente, dettagli della rete e gravità della sicurezza. Il parser esegue anche azioni specifiche in base al metodo HTTP e al livello di log, classificando gli eventi in tipi di eventi UDM come USER_LOGIN, STATUS_UPDATE e GENERIC_EVENT.

Prima di iniziare

  • Assicurati di avere un'istanza Google SecOps.
  • Assicurati di disporre dell'accesso privilegiato a Nutanix Prism Central.
  • Assicurati di avere Windows 2012 SP2 o versioni successive o un host Linux con systemd.
  • Se il servizio è in esecuzione dietro un proxy, assicurati che le porte del firewall siano aperte.

Recupera il file di autenticazione di importazione di Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione dell'importazione.

Ottenere l'ID cliente Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.

Installa BindPlane Agent

  1. Per l'installazione su Windows, esegui il seguente script: msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet.
  2. Per l'installazione su Linux, esegui il seguente script: sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh.
  3. Ulteriori opzioni di installazione sono disponibili in questa guida all'installazione.

Configurare l'agente BindPlane per importare i syslog e inviarli a Google SecOps

  1. Accedi al computer su cui è installato BindPlane.
  2. Modifica il file config.yaml come segue:

    receivers:
      tcplog:
        # Replace the below port <54525> and IP (0.0.0.0) with your specific values
        listen_address: "0.0.0.0:54525" 
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the creds location below according the placement of the credentials file you downloaded
            creds: '{ json file for creds }'
            # Replace <customer_id> below with your actual ID that you copied
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # You can apply ingestion labels below as preferred
            ingestion_labels:
            log_type: SYSLOG
            namespace: Namespace
            raw_log_field: body
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Riavviare BindPlane Agent per applicare le modifiche utilizzando il seguente comando: sudo systemctl bindplane restart

Esportazione di Syslog da Nutanix Prism

  1. Accedi a Prism Central utilizzando un account con privilegi.
  2. Seleziona Prism Central Settings (Impostazioni Prism Central) dal menu.
  3. Vai a Server Syslog.
  4. Fai clic su + Configura server Syslog.
  5. Specifica i valori per i parametri di input nella finestra di dialogo Server Syslog:
    • Nome del server: inserisci un nome per il server (ad esempio Google SecOps BindPlane Server)
    • Indirizzo IP: inserisci l'IP del tuo agente BindPlane.
    • Porta: inserisci la porta su cui è in ascolto l'agente BindPlane.
    • Protocollo di trasporto: seleziona TCP.
    • Fai clic su Configura.
  6. Fai clic su + Modifica nell'opzione Origini dati.
  7. Specifica i valori per i parametri di input nella finestra di dialogo Origini dati e rispettivo livello di gravità:
    • Seleziona Controllo API, Controllo e Flusso.
    • Imposta il livello di gravità per ciascuno su 6 - Informativo.
    • Fai clic su Salva.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
@timestamp metadata.event_timestamp Il timestamp dell'evento viene analizzato dal campo @timestamp. Sono supportati i formati yyyy-MM-dd HH:mm:ss.SSS, yyyy-MM-ddTHH:mm:ssZ e ISO8601.
agent.id observer.asset_id Combinato con agent.type per formare l'ID risorsa osservatore nel formato "agent.type:agent.id".
agent.type observer.application L'applicazione utilizzata per l'osservazione.
agent.version observer.platform_version La versione dell'applicazione di monitoraggio.
alertUid security_result.detection_fields.value Il valore dell'UID dell'avviso è mappato al campo value all'interno di detection_fields. key è impostato su "Alert Uid".
api_version metadata.product_version La versione dell'API.
clientIp principal.ip, principal.asset.ip Indirizzo IP client.
client_type principal.labels.value Il valore del tipo di client. key è impostato su "client_type".
defaultMsg metadata.description Il messaggio predefinito.
entity_uuid metadata.product_log_id UUID dell'entità.
http_method network.http.method Il metodo HTTP. Convertito in maiuscolo.
host.architecture principal.asset.hardware.cpu_platform L'architettura dell'host.
host.id principal.asset_id Con prefisso "NUTANIX:" per creare l'ID risorsa principale.
host.ip principal.ip, principal.asset.ip Indirizzo IP dell'host.
host.mac principal.mac Indirizzo MAC dell'host.
host.os.kernel principal.platform_patch_level La versione del kernel del sistema operativo host.
host.os.platform principal.platform La piattaforma del sistema operativo host. Mappato a LINUX, WINDOWS, MAC o UNKNOWN_PLATFORM.
host.os.version principal.platform_version La versione del sistema operativo host.
input.type network.ip_protocol Il protocollo di rete. Mappato a "UDP" o "TCP".
log.source.address principal.ip, principal.asset.ip, principal.port Analizzati per estrarre l'IP e la porta di origine.
logstash.collect.host observer.ip L'indirizzo IP del raccoglitore Logstash.
logstash.collect.timestamp metadata.collected_timestamp Il timestamp di raccolta del log.
logstash.ingest.host intermediary.hostname Il nome host del server di importazione Logstash.
logstash.ingest.timestamp metadata.ingested_timestamp Il timestamp dell'importazione del log.
logstash.irm_environment principal.labels.value Il valore dell'ambiente irm. key è impostato su "irm_environment".
logstash.irm_region principal.labels.value Il valore della regione irm. key è impostato su "irm_region".
logstash.irm_site principal.labels.value Il valore del sito irm. key è impostato su "irm_site".
logstash.process.host intermediary.hostname Il nome host del server di elaborazione Logstash.
operationType metadata.product_event_type Il tipo di operazione.
originatingClusterUuid additional.fields.value.string_value L'UUID del cluster di origine. key è impostato su "Originating Cluster Uuid".
params.mac_address target.mac L'indirizzo MAC dai parametri.
params.requested_ip_address target.ip, target.asset.ip L'indirizzo IP richiesto dai parametri.
params.vm_name target.resource.name Il nome della VM dai parametri.
program metadata.product_event_type Il nome del programma.
rest_endpoint target.url L'endpoint REST.
sessionId additional.fields.value.string_value L'ID sessione. key è impostato su "ID sessione".
syslog_host principal.hostname, principal.asset.hostname Host syslog.
timestamp metadata.event_timestamp Il timestamp dell'evento.
username principal.user.user_display_name o principal.user.userid Nome utente. Utilizzato come ID utente se http_method è "POST".
uuid metadata.product_log_id UUID.
N/D metadata.vendor_name Hardcoded to "Nutanix_Prism".
N/D metadata.product_name Hardcoded to "Nutanix_Prism".
N/D metadata.event_type Determinato dalla logica del parser in base ai valori di has_principal, has_target, audit_log, network_set e http_method. Può essere GENERIC_EVENT, USER_LOGIN, STATUS_UPDATE, USER_RESOURCE_ACCESS, RESOURCE_CREATION, USER_RESOURCE_UPDATE_CONTENT o USER_RESOURCE_DELETION.
N/D metadata.log_type Hardcoded su "NUTANIX_PRISM".
N/D extensions.auth.type Imposta su "AUTHTYPE_UNSPECIFIED" se metadata.event_type è USER_LOGIN.
N/D security_result.severity Determinato dalla logica del parser in base a log_level e syslog_pri. Può essere CRITICAL, ERROR, HIGH, MEDIUM o INFORMATIONAL.

Modifiche

2024-02-21

  • Quando "inner_message" non è vuoto e "not_json" è "true", imposta "audit_log" su "true" per supportare i log JSON eliminati.
  • Mappature "principal.ip" e "principal.asset.ip" allineate.
  • Mappature "target.ip" e "target.asset.ip" allineate.
  • Mappature "principal.hostname" e "principal.asset.hostname" allineate.
  • Quando "network_set" è "false", "has_principal" è "true", "has_target" è "false" e "audit_log" è "false", imposta "metadata.event_type" su "STATUS_UPDATE".
  • Quando "network_set" è "true", "has_principal" è "true", "has_target" è "false" e "audit_log" è "false", imposta "metadata.event_type" su "GENERIC_EVENT".

2024-01-12

  • È stato aggiunto il supporto per il nuovo formato dei log syslog.
  • È stato aggiunto un controllo condizionale nullo prima di mappare "logstash.ingest.host" a "intermediary.hostname".
  • È stato aggiunto un controllo condizionale nullo prima di mappare "logstash.process.host" a "intermediary.hostname".
  • È stato aggiunto un controllo condizionale nullo prima della mappatura di "logstash.collect.host" a "observer.ip".

2023-12-23

  • È stato aggiunto il supporto per un nuovo tipo di log AUDIT.
  • Sono stati aggiunti nuovi pattern Grok per analizzare i log SYSLOG+JSON.
  • "affectedEntityList" e "alertUid" sono stati mappati a "security_result.detection_fields".
  • "clientIp" e "params.requested_ip_address" sono stati mappati a "principal.ip".
  • "defaultMsg" è stato mappato a "metadata.description".
  • "operationType" è stato mappato a "metadata.product_event_type".
  • "originatingClusterUuid" e "sessionId" sono stati mappati a "additional.fields".
  • "params.mac_address" è stato mappato a "principal.mac".
  • "uuid" è stato mappato a "metadata.product_log_id".
  • "userName" è stato mappato a "principal.user.user_display_name".
  • "params.vm_name" è stato mappato a "target.resource.name".

2023-01-23

  • "logstash.ingest.host" è stato mappato a "intermediary[0].hostname" anziché a "observer.hostname".
  • "logstash.collect.host" è stato mappato a "observer.ip".
  • È stato aggiunto il controllo null per "logstash.ingest.host".