Raccogliere i log di ntopng

Supportato in:

Panoramica

Questo parser estrae i log di monitoraggio della rete ntopng in formato SYSLOG o JSON. Analizza il messaggio di log, converte i campi pertinenti nel formato UDM e arricchisce l'evento con metadati come i nomi del prodotto e del fornitore. Il parser gestisce anche le strutture JSON nidificate e mappa campi ntopng specifici agli eventi di rete UDM, inclusi gli avvisi di flusso e l'accesso alle risorse utente.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Istanza Google SecOps.
  • Accesso privilegiato a ntopng.

Configurare i feed

Esistono due diversi punti di accesso per configurare i feed nella piattaforma Google SecOps:

  • Impostazioni SIEM > Feed
  • Hub dei contenuti > Pacchetti di contenuti

Configura i feed da Impostazioni SIEM > Feed

Per configurare un feed:

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Nella pagina successiva, fai clic su Configura un singolo feed.
  4. Nel campo Nome feed, inserisci un nome per il feed, ad esempio Ntopng Logs.
  5. Seleziona Webhook come Tipo di origine.
  6. Seleziona Ntopng come Tipo di log.
  7. Fai clic su Avanti.
  8. (Facoltativo) Specifica i valori per i seguenti parametri di input:
    • Delimitatore di suddivisione: il delimitatore utilizzato per separare le righe di log, ad esempio \n.
  9. Fai clic su Avanti.
  10. Controlla la configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
  11. Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.
  12. Copia e memorizza la chiave segreta. Non puoi visualizzare di nuovo questa chiave segreta. Se necessario, puoi rigenerare una nuova chiave segreta, ma questa azione rende obsoleta la chiave segreta precedente.
  13. Nella scheda Dettagli, copia l'URL dell'endpoint del feed dal campo Informazioni sull'endpoint. Devi specificare questo URL dell'endpoint nell'applicazione client.
  14. Fai clic su Fine.

Configurare i feed dall'hub dei contenuti

Specifica i valori per i seguenti campi:

  • Delimitatore di suddivisione: il delimitatore utilizzato per separare le righe di log, ad esempio \n.

Opzioni avanzate

  • Nome feed:un valore precompilato che identifica il feed.
  • Tipo di origine:metodo utilizzato per raccogliere i log in Google SecOps.
  • Spazio dei nomi dell'asset:lo spazio dei nomi associato al feed.
  • Etichette di importazione:etichette applicate a tutti gli eventi di questo feed.

  • Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.

  • Copia e memorizza la chiave segreta. Non puoi visualizzare di nuovo questa chiave segreta. Se necessario, puoi rigenerare una nuova chiave segreta, ma questa azione rende obsoleta la chiave segreta precedente.

  • Nella scheda Dettagli, copia l'URL dell'endpoint del feed dal campo Informazioni sull'endpoint. Devi specificare questo URL dell'endpoint nell'applicazione client.

Crea una chiave API per il feed webhook

  1. Vai alla console Google Cloud > Credenziali.

    Vai a credenziali

  2. Fai clic su Crea credenziali e poi seleziona Chiave API.

  3. Limita l'accesso della chiave API all'API Google Security Operations.

Specifica l'URL dell'endpoint

  1. Nella tua applicazione client, specifica l'URL dell'endpoint HTTPS fornito nel feed webhook.
  2. Attiva l'autenticazione specificando la chiave API e la chiave segreta come parte dell'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.

  3. 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 a Google Security Operations.
    • SECRET: la chiave segreta che hai generato per autenticare il feed.

Configurazione di un webhook su ntopng per Google SecOps

  1. Accedi all'interfaccia web di ntopng.
  2. Seleziona il menu Sistema dal menu a discesa.
  3. Vai a Notifiche > Endpoint.
  4. Fai clic su Aggiungi .
  5. Specifica i valori per i seguenti parametri di input:
    • Nome endpoint: fornisci un nome univoco e descrittivo (ad esempio Google SecOps).
    • Endpoint Type (Tipo di endpoint): seleziona Webhook dall'elenco.
    • URL webhook: inserisci l'ENDPOINT_URL di Google SecOps con API_KEY e SECRET.
  6. Fai clic su Aggiungi.
  7. Vai a Notifiche > Destinatari.
  8. Fai clic su Aggiungi .
  9. Specifica i valori per i seguenti parametri di input:
    • Nome destinatario: fornisci un nome univoco e descrittivo (ad esempio, Google SecOps).
    • Seleziona endpoint: seleziona l'endpoint creato in precedenza.
    • Gravità: seleziona la gravità da inviare a Google SecOps (ad esempio Informazioni, Avviso ed Errore).
    • Filtro per categoria: seleziona cosa inviare a Google SecOps.
  10. Fai clic su Prova destinatario per verificare la connessione.
  11. Fai clic su Aggiungi per salvare il webhook.

Configurazione dei sottoscrittori delle risorse webhook ntopng

  1. Vai a Pool.
  2. Seleziona la risorsa da cui condividere gli eventi.

  3. Fai clic sull'icona a forma di matita nella colonna Azioni.

  4. Fai clic sul menu a discesa Destinatari.

  5. Seleziona il destinatario webhook Google SecOps.

  6. Fai clic su Modifica per salvare la configurazione.

  7. Ripeti la procedura per le altre risorse.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
action security_result.detection_fields.key=action, security_result.detection_fields.value=%{action} Il valore di action del log non elaborato viene mappato a un oggetto security_result.detection_fields con la chiave "action".
alert_generation.host_info.broadcast_domain_host security_result.detection_fields.key=host_info broadcast_domain_host, security_result.detection_fields.value=%{alert_generation.host_info.broadcast_domain_host} Il valore di alert_generation.host_info.broadcast_domain_host del JSON nidificato viene mappato a un oggetto security_result.detection_fields con la chiave "host_info broadcast_domain_host".
alert_generation.host_info.dhcpHost security_result.detection_fields.key=host_info dhcpHost, security_result.detection_fields.value=%{alert_generation.host_info.dhcpHost} Il valore di alert_generation.host_info.dhcpHost del JSON nidificato viene mappato a un oggetto security_result.detection_fields con la chiave "host_info dhcpHost".
alert_generation.host_info.is_blacklisted security_result.detection_fields.key=host_info is_blacklisted, security_result.detection_fields.value=%{alert_generation.host_info.is_blacklisted} Il valore di alert_generation.host_info.is_blacklisted del JSON nidificato viene mappato a un oggetto security_result.detection_fields con la chiave "host_info is_blacklisted".
alert_generation.host_info.is_broadcast security_result.detection_fields.key=host_info is_broadcast, security_result.detection_fields.value=%{alert_generation.host_info.is_broadcast} Il valore di alert_generation.host_info.is_broadcast del JSON nidificato viene mappato a un oggetto security_result.detection_fields con la chiave "host_info is_broadcast".
alert_generation.host_info.is_multicast security_result.detection_fields.key=host_info is_multicast, security_result.detection_fields.value=%{alert_generation.host_info.is_multicast} Il valore di alert_generation.host_info.is_multicast del JSON nidificato viene mappato a un oggetto security_result.detection_fields con la chiave "host_info is_multicast".
alert_generation.host_info.localhost security_result.detection_fields.key=host_info localhost, security_result.detection_fields.value=%{alert_generation.host_info.localhost} Il valore di alert_generation.host_info.localhost del JSON nidificato viene mappato a un oggetto security_result.detection_fields con la chiave "host_info localhost".
alert_generation.host_info.privatehost security_result.detection_fields.key=host_info privatehost, security_result.detection_fields.value=%{alert_generation.host_info.privatehost} Il valore di alert_generation.host_info.privatehost del JSON nidificato viene mappato a un oggetto security_result.detection_fields con la chiave "host_info privatehost".
alert_generation.host_info.systemhost security_result.detection_fields.key=host_info systemhost, security_result.detection_fields.value=%{alert_generation.host_info.systemhost} Il valore di alert_generation.host_info.systemhost del JSON nidificato viene mappato a un oggetto security_result.detection_fields con la chiave "host_info systemhost".
alert_generation.script_key security_result.category_details=%{alert_generation.script_key} Il valore di alert_generation.script_key del JSON nidificato viene mappato a security_result.category_details.
alert_generation.subdir security_result.detection_fields.key=alert_generation_subdir, security_result.detection_fields.value=%{alert_generation.subdir} Il valore di alert_generation.subdir del JSON nidificato viene mappato a un oggetto security_result.detection_fields con la chiave "alert_generation_subdir".
alert_id security_result.detection_fields.key=alert_id, security_result.detection_fields.value=%{alert_id} Il valore di alert_id del log non elaborato viene mappato a un oggetto security_result.detection_fields con la chiave "alert_id".
alerts_map security_result.detection_fields.key=alerts_map, security_result.detection_fields.value=%{alerts_map} Il valore di alerts_map del log non elaborato viene mappato a un oggetto security_result.detection_fields con la chiave "alerts_map".
cli2srv_bytes network.sent_bytes Il valore di cli2srv_bytes del log non elaborato viene convertito in un numero intero senza segno e mappato a network.sent_bytes.
cli_asn principal.resource.attribute.labels.key=cli_asn, principal.resource.attribute.labels.value=%{cli_asn} Il valore di cli_asn del log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con la chiave "cli_asn".
cli_blacklisted principal.resource.attribute.labels.key=cli_blacklisted, principal.resource.attribute.labels.value=%{cli_blacklisted} Il valore di cli_blacklisted del log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con la chiave "cli_blacklisted".
cli_city_name principal.location.city Il valore di cli_city_name del log non elaborato viene mappato a principal.location.city.
cli_continent_name principal.resource.attribute.labels.key=cli_continent_name, principal.resource.attribute.labels.value=%{cli_continent_name} Il valore di cli_continent_name del log non elaborato viene mappato a un oggetto principal.resource.attribute.labels con la chiave "cli_continent_name".
cli_country_name principal.location.country_or_region Il valore di cli_country_name del log non elaborato viene mappato a principal.location.country_or_region.
cli_host_pool_id principal.resource.attribute.labels.key=cli_host_pool_id, principal.resource.attribute.labels.value=%{cli_host_pool_id} Il valore di cli_host_pool_id del log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con la chiave "cli_host_pool_id".
cli_ip principal.ip, principal.asset.ip Il valore di cli_ip del log grezzo è mappato su principal.ip e principal.asset.ip.
cli_localhost principal.resource.attribute.labels.key=cli_localhost, principal.resource.attribute.labels.value=%{cli_localhost} Il valore di cli_localhost del log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con la chiave "cli_localhost".
cli_location principal.location.name Il valore di cli_location del log non elaborato viene convertito in una stringa. Se non è "0", viene mappato a principal.location.name.
cli_name principal.hostname, principal.asset.hostname Il valore di cli_name del log grezzo è mappato su principal.hostname e principal.asset.hostname.
cli_network principal.resource.attribute.labels.key=cli_network, principal.resource.attribute.labels.value=%{cli_network} Il valore di cli_network del log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con la chiave "cli_network".
cli_port principal.port Il valore di cli_port del log non elaborato viene convertito in un numero intero e mappato a principal.port.
entity_id principal.resource.attribute.labels.key=entity_id, principal.resource.attribute.labels.value=%{entity_id} Il valore di entity_id del log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con la chiave "entity_id".
entity_val principal.resource.attribute.labels.key=entity_val, principal.resource.attribute.labels.value=%{entity_val} Il valore di entity_val del log non elaborato viene mappato a un oggetto principal.resource.attribute.labels con la chiave "entity_val", a meno che non sia uguale al valore di ip.
event.type metadata.event_type Determinato dalla logica del parser in base alla presenza dei campi principal, target e network. Valori possibili: NETWORK_FLOW, NETWORK_UNCATEGORIZED, USER_RESOURCE_ACCESS, GENERIC_EVENT.
first_seen principal.asset.first_seen_time Il valore di first_seen del log non elaborato viene convertito in una stringa, analizzato come millisecondi dall'epoca e mappato a principal.asset.first_seen_time.
flow_risk_bitmap security_result.detection_fields.key=flow_risk_bitmap, security_result.detection_fields.value=%{flow_risk_bitmap} Il valore di flow_risk_bitmap del log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con la chiave "flow_risk_bitmap".
granularity security_result.detection_fields.key=granularity, security_result.detection_fields.value=%{granularity} Il valore di granularity del log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con la chiave "granularity".
hash_entry_id security_result.detection_fields.key=hash_entry_id, security_result.detection_fields.value=%{hash_entry_id} Il valore di hash_entry_id del JSON nidificato viene mappato a un oggetto security_result.detection_fields con la chiave "hash_entry_id".
host_ip principal.ip, principal.asset.ip L'indirizzo IP estratto dalla parte <INT>Oct 20 15:34:53 1.1.1.1 del messaggio è mappato a principal.ip e principal.asset.ip.
ifid principal.asset_id Il valore di ifid del log non elaborato viene convertito in una stringa e mappato a principal.asset_id con il prefisso "ifid: ".
ip principal.ip, principal.asset.ip o target.ip, target.asset.ip Se is_client è true, il valore di ip del log grezzo viene mappato a principal.ip e principal.asset.ip. Se is_server è true, viene mappato a target.ip e target.asset.ip.
is_cli_attacker security_result.detection_fields.key=is_cli_attacker, security_result.detection_fields.value=%{is_cli_attacker} Il valore di is_cli_attacker del log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con la chiave "is_cli_attacker".
is_cli_victim security_result.detection_fields.key=is_cli_victim, security_result.detection_fields.value=%{is_cli_victim} Il valore di is_cli_victim del log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con la chiave "is_cli_victim".
is_flow_alert security_result.detection_fields.key=is_flow_alert, security_result.detection_fields.value=%{is_flow_alert}, security_result.detection_fields.key=alert type, security_result.detection_fields.value=flow Il valore di is_flow_alert del log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con la chiave "is_flow_alert". Se is_flow_alert è true, viene creato anche un oggetto security_result.detection_fields con la chiave "alert type" e il valore "flow".
is_srv_attacker security_result.detection_fields.key=is_srv_attacker, security_result.detection_fields.value=%{is_srv_attacker} Il valore di is_srv_attacker del log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con la chiave "is_srv_attacker".
is_srv_victim security_result.detection_fields.key=is_srv_victim, security_result.detection_fields.value=%{is_srv_victim} Il valore di is_srv_victim del log grezzo viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con la chiave "is_srv_victim".
metadata.product_name metadata.product_name=NTOPNG Codificato in modo permanente su "NTOPNG".
metadata.vendor_name metadata.vendor_name=%{vendor_name} Il valore di vendor_name del messaggio è mappato a metadata.vendor_name.
name principal.hostname, principal.asset.hostname o target.hostname, target.asset.hostname Se is_client è true, il valore di name del log grezzo viene mappato a principal.hostname e principal.asset.hostname. Se is_server è true, viene mappato a target.hostname e target.asset.hostname.
ntopng_key security_result.detection_fields.key=ntopng_key, security_result.detection_fields.value=%{ntopng_key} Il valore di ntopng.key (rinominato in ntopng_key) del JSON nidificato viene mappato a un oggetto security_result.detection_fields con la chiave "ntopng_key".
observation_point_id observer.asset_id Il valore di observation_point_id del log non elaborato viene convertito in una stringa. Se non è "0", viene mappato a observer.asset_id con il prefisso "id: ".
pool_id principal.resource.attribute.labels.key=pool_id, principal.resource.attribute.labels.value=%{pool_id} Il valore di pool_id del log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con la chiave "pool_id".
probe_ip intermediary.ip Il valore di probe_ip del log non elaborato viene mappato a intermediary.ip.
proto.confidence security_result.confidence_details Il valore di proto.confidence del log non elaborato viene convertito in una stringa e mappato a security_result.confidence_details.
proto.http.last_method network.http.method Il valore di proto.http.last_method del log non elaborato viene mappato a network.http.method.
proto.http.last_return_code network.http.response_code Il valore di proto.http.last_return_code del log non elaborato viene convertito in un numero intero e mappato a network.http.response_code.
proto.http.last_server_name network.tls.client.server_name Il valore di proto.http.server_name del log non elaborato viene mappato a network.tls.client.server_name.
proto.http.last_url network.http.referral_url Il valore di proto.http.last_url del log non elaborato viene mappato a network.http.referral_url.
proto.http.last_user_agent network.http.user_agent Il valore di proto.http.last_user_agent del log non elaborato viene mappato a network.http.user_agent.
proto.http.server_name network.tls.client.server_name Il valore di proto.http.server_name del log non elaborato viene mappato a network.tls.client.server_name.
proto.l4 network.ip_protocol Il valore di proto.l4 del log non elaborato viene mappato a network.ip_protocol.
proto_ndpi additional.fields.key=proto ndpi, additional.fields.value.string_value=%{proto_ndpi}, network.application_protocol Il valore di proto.ndpi (rinominato in proto_ndpi) del log non elaborato viene mappato a un oggetto additional.fields con la chiave "proto ndpi". Viene inoltre utilizzato per determinare il valore di network.application_protocol in base a parole chiave come "NTP" e "HTTP".
proto_ndpi_app principal.application Il valore di proto_ndpi_app del log non elaborato viene mappato a principal.application.
proto_ndpi_breed security_result.detection_fields.key=proto_ndpi_breed, security_result.detection_fields.value=%{proto_ndpi_breed} Il valore di proto_ndpi_breed del log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con la chiave "proto_ndpi_breed".
proto_ndpi_cat security_result.category_details Il valore di proto_ndpi_cat del log non elaborato viene mappato a security_result.category_details.
proto_ndpi_cat_id security_result.detection_fields.key=proto_ndpi_cat_id, security_result.detection_fields.value=%{proto_ndpi_cat_id} Il valore di proto_ndpi_cat_id del log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con la chiave "proto_ndpi_cat_id".
score security_result.detection_fields.key=score, security_result.detection_fields.value=%{score} Il valore di score del log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con la chiave "score".
srv2cli_bytes network.received_bytes Il valore di srv2cli_bytes del log non elaborato viene convertito in un numero intero senza segno e mappato a network.received_bytes.
srv_asn target.resource.attribute.labels.key=srv_asn, target.resource.attribute.labels.value=%{srv_asn} Il valore di srv_asn del log non elaborato viene convertito in una stringa e mappato a un oggetto target.resource.attribute.labels con la chiave "srv_asn".
srv_blacklisted target.resource.attribute.labels.key=srv_blacklisted, target.resource.attribute.labels.value=%{srv_blacklisted} Il valore di srv_blacklisted del log non elaborato viene convertito in una stringa e mappato a un oggetto target.resource.attribute.labels con la chiave "srv_blacklisted".
srv_city_name target.location.city Il valore di srv_city_name del log non elaborato viene mappato a target.location.city.
srv_continent_name target.resource.attribute.labels.key=srv_continent_name, target.resource.attribute.labels.value=%{srv_continent_name} Il valore di srv_continent_name del log non elaborato viene mappato a un oggetto target.resource.attribute.labels con la chiave "srv_continent_name".
srv_country_name target.location.country_or_region Il valore di srv_country_name del log non elaborato viene mappato a target.location.country_or_region.
srv_host_pool_id target.resource.attribute.labels.key=srv_host_pool_id, target.resource.attribute.labels.value=%{srv_host_pool_id} Il valore di srv_host_pool_id del log non elaborato viene convertito in una stringa e mappato a un oggetto target.resource.attribute.labels con la chiave "srv_host_pool_id".
srv_ip target.ip, target.asset.ip Il valore di srv_ip del log grezzo è mappato su target.ip e target.asset.ip.
srv_localhost target.resource.attribute.labels.key=srv_localhost, target.resource.attribute.labels.value=%{srv_localhost} Il valore di srv_localhost del log non elaborato viene convertito in una stringa e mappato a un oggetto target.resource.attribute.labels con la chiave "srv_localhost".
srv_location target.location.name Il valore di srv_location del log non elaborato viene convertito in una stringa. Se non è "0", viene mappato a target.location.name.
srv_location_lat target.location.region_coordinates.latitude Il valore di srv_location_lat del log non elaborato viene mappato a target.location.region_coordinates.latitude.
srv_location_lon target.location.region_coordinates.longitude Il valore di srv_location_lon del log non elaborato viene mappato a target.location.region_coordinates.longitude.
srv_name target.hostname, target.asset.hostname Il valore di srv_name del log grezzo è mappato su target.hostname e target.asset.hostname.
srv_network target.resource.attribute.labels.key=srv_network, target.resource.attribute.labels.value=%{srv_network} Il valore di srv_network del log non elaborato viene convertito in una stringa e mappato a un oggetto target.resource.attribute.labels con la chiave "srv_network".
srv_port target.port Il valore di srv_port del log non elaborato viene convertito in un numero intero e mappato a target.port.
tstamp additional.fields.key=tstamp, additional.fields.value.string_value=%{tstamp} Il valore di tstamp del log non elaborato viene convertito in una stringa e mappato a un oggetto additional.fields con la chiave "tstamp".
vlan_id principal.resource.attribute.labels.key=vlan_id, principal.resource.attribute.labels.value=%{vlan_id} Il valore di vlan_id del log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con la chiave "vlan_id".
when metadata.event_timestamp Il valore di when del log non elaborato viene analizzato come timestamp e mappato a metadata.event_timestamp.

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