Raccogliere i log di ntopng
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:
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Nella pagina successiva, fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed, ad esempio Ntopng Logs.
- Seleziona Webhook come Tipo di origine.
- Seleziona Ntopng come Tipo di log.
- Fai clic su Avanti.
- (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
.
- Delimitatore di suddivisione: il delimitatore utilizzato per separare le righe di log, ad esempio
- Fai clic su Avanti.
- Controlla la configurazione del feed nella schermata Finalizza 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 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.
- 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
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.
Specifica l'URL dell'endpoint
- Nella tua applicazione client, specifica l'URL dell'endpoint HTTPS fornito nel feed webhook.
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.
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
- Accedi all'interfaccia web di ntopng.
- Seleziona il menu Sistema dal menu a discesa.
- Vai a Notifiche > Endpoint.
- Fai clic su Aggiungi .
- 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.
- Fai clic su Aggiungi.
- Vai a Notifiche > Destinatari.
- Fai clic su Aggiungi .
- 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.
- Fai clic su Prova destinatario per verificare la connessione.
- Fai clic su Aggiungi per salvare il webhook.
Configurazione dei sottoscrittori delle risorse webhook ntopng
- Vai a Pool.
Seleziona la risorsa da cui condividere gli eventi.
Fai clic sull'icona a forma di matita nella colonna Azioni.
Fai clic sul menu a discesa Destinatari.
Seleziona il destinatario webhook Google SecOps.
Fai clic su Modifica per salvare la configurazione.
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.