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 di prodotti e fornitori. Il parser gestisce anche le strutture JSON nidificate e mappa campi ntopng specifici agli eventi di rete UDM, inclusi gli avvisi sui flussi e l'accesso alle risorse utente.

Prima di iniziare

  • Assicurati di avere un'istanza Google SecOps.
  • Assicurati di disporre dell'accesso privilegiato a ntopng.

Configura un feed in Google SecOps per importare i log ntopng

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo.
  3. Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log ntopng).
  4. Seleziona Webhook come Tipo di origine.
  5. Seleziona Ntopng come Tipo di log.
  6. Fai clic su Avanti.
  7. (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.
  8. Fai clic su Avanti.
  9. Controlla la configurazione del feed nella schermata Concludi e poi fai clic su Invia.
  10. Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.
  11. 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.
  12. Dalla scheda Dettagli, copia l'URL dell'endpoint del feed dal campo Informazioni endpoint. Devi specificare questo URL endpoint nell'applicazione client.
  13. Fai clic su Fine.

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. Nell'applicazione client, specifica l'URL dell'endpoint HTTPS fornito nel feed webhook.
  2. 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.

  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 in 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).
    • 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 del 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 delle categorie: seleziona cosa inviare a Google SecOps.
  10. Fai clic su Test destinatario per verificare la connessione.
  11. Fai clic su Aggiungi per salvare l'webhook.

Configurazione degli abbonati alle 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 Logica
action security_result.detection_fields.key=action, security_result.detection_fields.value=%{action} Il valore di action dal log non elaborato viene mappato a un oggetto security_result.detection_fields con 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 dal JSON nidificato è mappato a un oggetto security_result.detection_fields con 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 dal JSON nidificato viene mappato a un oggetto security_result.detection_fields con 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 dal JSON nidificato è mappato a un oggetto security_result.detection_fields con 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 dal JSON nidificato è mappato a un oggetto security_result.detection_fields con 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 dal JSON nidificato viene mappato a un oggetto security_result.detection_fields con 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 dal JSON nidificato è mappato a un oggetto security_result.detection_fields con 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 dal JSON nidificato è mappato a un oggetto security_result.detection_fields con 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 dal JSON nidificato è mappato a un oggetto security_result.detection_fields con chiave "host_info systemhost".
alert_generation.script_key security_result.category_details=%{alert_generation.script_key} Il valore di alert_generation.script_key dal JSON nidificato è 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 dal JSON nidificato è mappato a un oggetto security_result.detection_fields con 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 dal log non elaborato viene mappato a un oggetto security_result.detection_fields con chiave "alert_id".
alerts_map security_result.detection_fields.key=alerts_map, security_result.detection_fields.value=%{alerts_map} Il valore di alerts_map dal log non elaborato viene mappato a un oggetto security_result.detection_fields con chiave "alerts_map".
cli2srv_bytes network.sent_bytes Il valore di cli2srv_bytes dal log non elaborato viene convertito in un numero intero non firmato 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con chiave "cli_asn".
cli_blacklisted principal.resource.attribute.labels.key=cli_blacklisted, principal.resource.attribute.labels.value=%{cli_blacklisted} Il valore di cli_blacklisted dal log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con chiave "cli_blacklisted".
cli_city_name principal.location.city Il valore cli_city_name del log non elaborato è 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 dal log non elaborato viene mappato a un oggetto principal.resource.attribute.labels con chiave "cli_continent_name".
cli_country_name principal.location.country_or_region Il valore cli_country_name del log non elaborato è 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con chiave "cli_host_pool_id".
cli_ip principal.ip, principal.asset.ip Il valore cli_ip del log non elaborato è mappato a 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con chiave "cli_localhost".
cli_location principal.location.name Il valore di cli_location dal 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 cli_name del log non elaborato è mappato a 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con chiave "cli_network".
cli_port principal.port Il valore 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con chiave "entity_id".
entity_val principal.resource.attribute.labels.key=entity_val, principal.resource.attribute.labels.value=%{entity_val} Il valore di entity_val dal log non elaborato viene mappato a un oggetto principal.resource.attribute.labels con 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 dal 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con chiave "flow_risk_bitmap".
granularity security_result.detection_fields.key=granularity, security_result.detection_fields.value=%{granularity} Il valore di granularity dal log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con 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 dal JSON nidificato viene mappato a un oggetto security_result.detection_fields con 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 dal 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 dal log non elaborato 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con chiave "is_flow_alert". Se is_flow_alert è true, viene creato anche un oggetto security_result.detection_fields con chiave "tipo di avviso" e valore "flusso".
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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con chiave "is_srv_victim".
metadata.product_name metadata.product_name=NTOPNG Hardcoded su "NTOPNG".
metadata.vendor_name metadata.vendor_name=%{vendor_name} Il valore 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 dal log non elaborato 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) dal JSON nidificato viene mappato a un oggetto security_result.detection_fields con chiave "ntopng_key".
observation_point_id observer.asset_id Il valore di observation_point_id dal 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con chiave "pool_id".
probe_ip intermediary.ip Il valore probe_ip del log non elaborato è mappato a intermediary.ip.
proto.confidence security_result.confidence_details Il valore di proto.confidence dal log non elaborato viene convertito in una stringa e mappato a security_result.confidence_details.
proto.http.last_method network.http.method Il valore proto.http.last_method del log non elaborato è mappato a network.http.method.
proto.http.last_return_code network.http.response_code Il valore 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 proto.http.server_name del log non elaborato è mappato a network.tls.client.server_name.
proto.http.last_url network.http.referral_url Il valore proto.http.last_url del log non elaborato è mappato a network.http.referral_url.
proto.http.last_user_agent network.http.user_agent Il valore proto.http.last_user_agent del log non elaborato è mappato a network.http.user_agent.
proto.http.server_name network.tls.client.server_name Il valore proto.http.server_name del log non elaborato è mappato a network.tls.client.server_name.
proto.l4 network.ip_protocol Il valore proto.l4 del log non elaborato è 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) dal log non elaborato viene mappato a un oggetto additional.fields con chiave "proto ndpi". Viene utilizzato anche per determinare il valore di network.application_protocol in base a parole chiave come "NTP" e "HTTP".
proto_ndpi_app principal.application Il valore proto_ndpi_app del log non elaborato è 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con chiave "proto_ndpi_breed".
proto_ndpi_cat security_result.category_details Il valore proto_ndpi_cat del log non elaborato è 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con chiave "proto_ndpi_cat_id".
score security_result.detection_fields.key=score, security_result.detection_fields.value=%{score} Il valore di score dal log non elaborato viene convertito in una stringa e mappato a un oggetto security_result.detection_fields con chiave "punteggio".
srv2cli_bytes network.received_bytes Il valore di srv2cli_bytes dal log non elaborato viene convertito in un numero intero non firmato 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto target.resource.attribute.labels con chiave "srv_asn".
srv_blacklisted target.resource.attribute.labels.key=srv_blacklisted, target.resource.attribute.labels.value=%{srv_blacklisted} Il valore di srv_blacklisted dal log non elaborato viene convertito in una stringa e mappato a un oggetto target.resource.attribute.labels con chiave "srv_blacklisted".
srv_city_name target.location.city Il valore srv_city_name del log non elaborato è 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 dal log non elaborato viene mappato a un oggetto target.resource.attribute.labels con chiave "srv_continent_name".
srv_country_name target.location.country_or_region Il valore srv_country_name del log non elaborato è 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto target.resource.attribute.labels con chiave "srv_host_pool_id".
srv_ip target.ip, target.asset.ip Il valore srv_ip del log non elaborato è mappato a 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto target.resource.attribute.labels con chiave "srv_localhost".
srv_location target.location.name Il valore di srv_location dal 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 srv_location_lat del log non elaborato è mappato a target.location.region_coordinates.latitude.
srv_location_lon target.location.region_coordinates.longitude Il valore srv_location_lon del log non elaborato è mappato a target.location.region_coordinates.longitude.
srv_name target.hostname, target.asset.hostname Il valore srv_name del log non elaborato è mappato a 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto target.resource.attribute.labels con chiave "srv_network".
srv_port target.port Il valore 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 dal log non elaborato viene convertito in una stringa e mappato a un oggetto additional.fields con chiave "tstamp".
vlan_id principal.resource.attribute.labels.key=vlan_id, principal.resource.attribute.labels.value=%{vlan_id} Il valore di vlan_id dal log non elaborato viene convertito in una stringa e mappato a un oggetto principal.resource.attribute.labels con chiave "vlan_id".
when metadata.event_timestamp Il valore di when dal log non elaborato viene analizzato come timestamp e mappato a metadata.event_timestamp.

Modifiche

2024-02-01

  • Correzione di bug:
  • "=>" è stato modificato in ":" nel commento dell'intestazione del file conf.

2023-11-16

  • Parser appena creato.