Raccogliere i log di ExtraHop RevealX

Supportato in:

Questo documento spiega come importare i log di ExtraHop RevealX in Google Security Operations utilizzando Bindplane. Il parser estrae i campi dai log formattati in JSON e Syslog. Utilizza pattern grok e logica condizionale per gestire diversi formati di log, mappando i campi estratti sull'UDM e arricchendo i dati con informazioni relative alla sicurezza come gravità e categorie. Il parser gestisce anche tipi di eventi ExtraHop specifici come DNS Rebinding, errori di autenticazione Kerberos e connessioni RDP, applicando una logica di analisi specializzata per ciascuno.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Istanza Google SecOps
  • Windows 2016 o versioni successive oppure un host Linux con systemd
  • Se l'esecuzione avviene tramite un proxy, assicurati che le porte del firewall siano aperte.
  • Accesso privilegiato a ExtraHop Reveal X

Recuperare il file di autenticazione importazione di Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione importazione. Salva il file in modo sicuro sul sistema in cui verrà installato Bindplane.

Recuperare 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 l'agente Bindplane

Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.

Installazione di Windows

  1. Apri il prompt dei comandi o PowerShell come amministratore.
  2. Esegui questo comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Installazione di Linux

  1. Apri un terminale con privilegi root o sudo.
  2. Esegui questo comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Risorse aggiuntive per l'installazione

Per ulteriori opzioni di installazione, consulta la guida all'installazione.

Configura l'agente Bindplane per importare Syslog e inviarli a Google SecOps

  1. Accedi al file di configurazione:
    • Individua il file config.yaml. In genere, si trova nella directory /etc/bindplane-agent/ su Linux o nella directory di installazione su Windows.
    • Apri il file utilizzando un editor di testo (ad esempio nano, vi o Blocco note).
  2. Modifica il file config.yaml come segue:

    receivers:
        udplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds_file_path: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            log_type: 'EXTRAHOP'
            raw_log_field: body
            ingestion_labels:
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    

Riavvia l'agente Bindplane per applicare le modifiche

  • Per riavviare l'agente Bindplane in Linux, esegui questo comando:

    sudo systemctl restart bindplane-agent
    
  • Per riavviare l'agente Bindplane in Windows, puoi utilizzare la console Servizi o inserire il seguente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configura Syslog di ExtraHop

  1. Accedi all'amministrazione di ExtraHop utilizzando https://<extrahop-hostname-or-IP-address>/admin.
  2. Vai a Stato e diagnostica > Log di controllo.
  3. Fai clic su Configura impostazioni Syslog.
  4. Fornisci i seguenti dettagli di configurazione:
    • Destinazione: inserisci l'indirizzo IP dell'agente Bindplane.
    • Protocollo: seleziona UDP o TCP, a seconda della configurazione di Bindplane.
    • Porta: inserisci il numero di porta dell'agente Bindplane.
    • Fai clic su Impostazioni di test.
  5. Fai clic su Salva.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
alert_name security_result.summary Il valore di alert_name del log non elaborato viene mappato a security_result.summary.
answers[].data network.dns.answers[].data Il valore di data per ogni elemento dell'array answers del log non elaborato viene mappato al campo data dell'elemento corrispondente nell'array network.dns.answers.
answers[].name network.dns.answers[].name Il valore di name per ogni elemento dell'array answers del log non elaborato viene mappato al campo name dell'elemento corrispondente nell'array network.dns.answers.
answers[].ttl network.dns.answers[].ttl Il valore di ttl per ogni elemento dell'array answers del log non elaborato viene mappato al campo ttl dell'elemento corrispondente nell'array network.dns.answers.
answers[].typeNum network.dns.answers[].type Il valore di typeNum per ogni elemento dell'array answers del log non elaborato viene mappato al campo type dell'elemento corrispondente nell'array network.dns.answers.
client_ip principal.ip Il valore di client_ip del log non elaborato viene mappato a principal.ip.
cn1 security_result.rule_labels[].value Il valore di cn1 del log non elaborato viene utilizzato come valore per un elemento security_result.rule_labels con la chiave "ID rilevamento".
cn2 security_result.detection_fields[].value Il valore di cn2 del log non elaborato viene utilizzato come valore per un elemento security_result.detection_fields con la chiave "riskscore".
cs1 security_result.rule_name Il valore di cs1 del log non elaborato viene mappato a security_result.rule_name.
cs2 security_result.category_details[] Il valore di cs2 del log non elaborato viene aggiunto come elemento all'array security_result.category_details.
description metadata.description Il valore di description del log non elaborato, dopo alcune operazioni di elaborazione (rimozione dei caratteri di nuova riga e delle barre rovesciate), viene mappato a metadata.description. In alcuni casi, altri campi del log non elaborato possono contribuire a questo campo o sovrascriverlo.
details principal.resource.resource_subtype, security_result.summary, principal.ip Il campo details viene analizzato. Il valore associato alla chiave "facility" viene mappato a principal.resource.resource_subtype. Il valore associato alla chiave "details" è mappato a security_result.summary. Il valore associato alla chiave "src_ip" viene mappato a principal.ip.
dst target.ip o target.mac Il valore di dst del log non elaborato viene mappato a target.ip se è un indirizzo IP o a target.mac se è un indirizzo MAC.
dst_ip target.ip Il valore di dst_ip del log non elaborato viene mappato a target.ip.
eh_event metadata.event_type, network.application_protocol Se eh_event è "dns", metadata.event_type è impostato su NETWORK_DNS e network.application_protocol è impostato su DNS. Se eh_event è "RDP", metadata.event_type è impostato su NETWORK_CONNECTION e network.application_protocol è impostato su RDP.
event_id metadata.product_event_type Il valore di event_id del log non elaborato viene mappato a metadata.product_event_type.
facility principal.resource.resource_subtype Il valore di facility del log non elaborato viene mappato a principal.resource.resource_subtype.
ipaddr principal.ip Il valore di ipaddr del log non elaborato viene mappato a principal.ip.
jsonPayload.description metadata.product_event_type, principal.hostname, principal.asset.hostname, security_result.summary Il campo jsonPayload.description viene analizzato come JSON. Il campo "operazione" è mappato a metadata.product_event_type. Il campo "event" (dopo aver rimosso "Audit Log") viene mappato a principal.hostname e principal.asset.hostname. Il campo "Dettagli" è mappato su security_result.summary.
jsonPayload.event metadata.product_event_type, principal.hostname, principal.asset.hostname Il valore di jsonPayload.event dal log non elaborato (dopo aver rimosso "Audit Log") viene mappato a metadata.product_event_type, principal.hostname e principal.asset.hostname.
jsonPayload.id metadata.product_log_id Il valore di jsonPayload.id del log non elaborato viene mappato a metadata.product_log_id.
macaddr principal.mac Il valore di macaddr del log non elaborato viene mappato a principal.mac.
name metadata.description Il valore di name del log non elaborato viene mappato a metadata.description.
object_id target.resource.product_object_id Il valore di object_id del log non elaborato viene mappato a target.resource.product_object_id.
object_name target.resource.name Il valore di object_name del log non elaborato viene mappato a target.resource.name.
object_type target.resource.resource_type Il valore di object_type del log non elaborato (convertito in maiuscolo) viene mappato a target.resource.resource_type.
operation metadata.product_event_type Il valore di operation del log non elaborato viene mappato a metadata.product_event_type.
priority security_result.severity, security_result.severity_details Se priority è "notice", security_result.severity è impostato su MEDIUM e security_result.severity_details è impostato sul valore di priority.
product_event_type metadata.product_event_type Il valore di product_event_type del log non elaborato viene mappato a metadata.product_event_type. Viene utilizzato anche per determinare metadata.event_type e altri campi in base al suo valore.
qname network.dns.questions[].name Il valore di qname del log non elaborato viene mappato al campo name di un elemento network.dns.questions.
qname_or_host intermediary.hostname Il valore di qname_or_host del log non elaborato viene mappato a intermediary.hostname.
qtype network.dns.questions[].type Il valore di qtype del log non elaborato viene mappato al campo type di un elemento network.dns.questions, convertendo la rappresentazione della stringa nel suo equivalente numerico in base ai tipi di record DNS.
resource.labels.project_id target.resource.attribute.labels[].value Il valore di resource.labels.project_id del log non elaborato viene utilizzato come valore per un elemento target.resource.attribute.labels con la chiave "ID progetto".
resource.type target.resource.resource_subtype Il valore di resource.type del log non elaborato viene mappato a target.resource.resource_subtype.
rdp_record.clientBuild metadata.product_version Il valore di rdp_record.clientBuild del log non elaborato viene mappato a metadata.product_version.
rdp_record.clientBytes network.sent_bytes Il valore di rdp_record.clientBytes del log non elaborato viene mappato a network.sent_bytes.
rdp_record.clientName principal.hostname Il valore di rdp_record.clientName del log non elaborato viene mappato a principal.hostname.
rdp_record.clientPort principal.port Il valore di rdp_record.clientPort del log non elaborato viene mappato a principal.port.
rdp_record.cookie principal.user.userid Il valore di rdp_record.cookie (dopo aver rimosso "mstshash=") dal log non elaborato viene mappato a principal.user.userid.
rdp_record.proto network.ip_protocol Il valore di rdp_record.proto del log non elaborato viene mappato a network.ip_protocol, convertendo "TCP" in "TCP" e "UDP" in "UDP".
rdp_record.selectedProtocol security_result.description Il valore di rdp_record.selectedProtocol del log non elaborato viene mappato a security_result.description.
rdp_record.serverBytes network.received_bytes Il valore di rdp_record.serverBytes del log non elaborato viene mappato a network.received_bytes.
rdp_record.serverPort target.port Il valore di rdp_record.serverPort del log non elaborato viene mappato a target.port.
rt metadata.event_timestamp Il valore di rt del log non elaborato viene analizzato come timestamp e mappato a metadata.event_timestamp.
severity security_result.severity, security_result.severity_details, event.idm.is_alert, event.idm.is_significant Il valore di severity è mappato a security_result.severity_details. Viene utilizzato anche per determinare il valore di security_result.severity, event.idm.is_alert e event.idm.is_significant.
src principal.ip o principal.mac Il valore di src del log non elaborato viene mappato a principal.ip se è un indirizzo IP o a principal.mac se è un indirizzo MAC.
src_ip principal.ip o principal.mac Il valore di src_ip del log non elaborato viene mappato a principal.ip se è un indirizzo IP o a principal.mac se è un indirizzo MAC.
summary security_result.summary Il valore di summary del log non elaborato viene mappato a security_result.summary.
ts metadata.event_timestamp Il valore di ts del log non elaborato viene analizzato come timestamp e mappato a metadata.event_timestamp.
user principal.user.userid Il valore di user del log non elaborato viene mappato a principal.user.userid.
(N/A) metadata.log_type Impostato sempre su "EXTRAHOP".
(N/A) metadata.vendor_name Impostato sempre su "EXTRAHOP".
(N/A) metadata.product_name Impostato sempre su "EXTRAHOP".
(N/A) security_result.severity Impostato su CRITICAL per impostazione predefinita o in base al valore di severity o priority.
(N/A) event.idm.is_alert Imposta su true se security_result.severity è "HIGH" o "CRITICAL".
(N/A) event.idm.is_significant Imposta su true se security_result.severity è "HIGH" o "CRITICAL".
(N/A) metadata.event_type Determinato in base ai valori di altri campi, come eh_event, product_event_type, has_principal e dst. Il valore predefinito è GENERIC_EVENT.
(N/A) network.application_protocol Imposta su DNS se eh_event è "dns" o message contiene "DNS Rebinding". Imposta su RDP se eh_event è "RDP".
(N/A) security_result.rule_labels[].key Imposta "ID rilevamento" per l'etichetta della regola derivata da cn1.
(N/A) security_result.detection_fields[].key Imposta "riskscore" per il campo di rilevamento derivato da cn2.
(N/A) principal.user.attribute.roles[].type Imposta su SERVICE_ACCOUNT se è presente user_name.
(N/A) extensions.auth.type Impostato su SSO se product_event_type è "Kerberos Client Auth Errors".
(N/A) extensions.auth.mechanism Imposta su USERNAME_PASSWORD se product_event_type è "Autenticazione LDAP non sicura" o "Errori di autenticazione client Kerberos".
(N/A) security_result.category Imposta su NETWORK_SUSPICIOUS se product_event_type è "Scansione di ricerca inversa interna DNS" o contiene "Connessioni sospette in entrata". Imposta su NETWORK_MALICIOUS se product_event_type è "Request to External Database Server".
(N/A) network.http.response_code Impostato in base a status_code estratto da product_event_type se corrisponde al pattern "HTTP Server %{INT:status_code} %{GREEDYDATA}".
jsonPayload.cs1 security_result.detection_fields[].value Il valore di jsonPayload.cs1 del log non elaborato viene utilizzato come valore per un elemento security_result.detection_fields.
jsonPayload.cn1 security_result.detection_fields[].value Il valore di jsonPayload.cn1 del log non elaborato viene utilizzato come valore per un elemento security_result.detection_fields.
jsonPayload.cn2 security_result.detection_fields[].value Il valore di jsonPayload.cn2 del log non elaborato viene utilizzato come valore per un elemento security_result.detection_fields.
jsonPayload.cs1Label, jsonPayload.cn1Label, jsonPayload.cn2Label security_result.detection_fields[].key Questi campi del log non elaborato vengono utilizzati come chiavi per gli elementi corrispondenti in security_result.detection_fields.
jsonPayload.src principal.ip Il valore di jsonPayload.src del log non elaborato viene mappato a principal.ip.
jsonPayload.dst target.ip Il valore di jsonPayload.dst del log non elaborato viene mappato a target.ip.

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.