Raccogliere i log degli avvisi Netskope v1

Supportato in:

Panoramica

Questo parser estrae i log degli avvisi Netskope dai messaggi in formato JSON, trasformandoli nell'UDM di Google Security Operations. Normalizza i campi, analizza i timestamp, gestisce gli avvisi e le severità, estrae le informazioni di rete (IP, porte, protocolli), arricchisce i dati utente e dei file e mappa i campi alla struttura UDM. Il parser gestisce anche attività Netskope specifiche come accessi ed eventi DLP e aggiunge etichette personalizzate per un contesto avanzato.

Prima di iniziare

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

Attivare l'accesso all'API REST di Netskope

  1. Accedi al tenant Netskope utilizzando le tue credenziali di amministratore.
  2. Vai a Impostazioni > Strumenti > API REST v1.
  3. Crea una nuova chiave API specifica per Google SecOps.
  4. Fornisci un nome descrittivo (ad esempio Chiave Google SecOps).
  5. Copia e salva la chiave e il token segreto generati.

Configura un feed in Google SecOps per importare i log di avviso di Netskope

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuova.
  3. Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log degli avvisi Netskope).
  4. Seleziona API di terze parti come Tipo di origine.
  5. Seleziona Netskope come Tipo di log.
  6. Fai clic su Avanti.
  7. Specifica i valori per i seguenti parametri di input:
    • Intestazione HTTP di autenticazione:coppia di chiavi generata in precedenza in formato <key>:<secret>, utilizzata per l'autenticazione all'API Netskope.
    • Nome host dell'API:il FQDN (nome di dominio completo) dell'endpoint API REST di Netskope (ad esempio myinstance.goskope.com).
    • Endpoint API: inserisci alerts.
    • Tipo di contenuti:inserisci tutti.
    • 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.

(Facoltativo) Aggiungi una configurazione del feed per importare i log eventi di Netskope

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuova.
  3. Nel campo Nome feed, inserisci un nome per il feed, ad esempio Log eventi Netskope.
  4. Seleziona API di terze parti come Tipo di origine.
  5. Seleziona Netskope come Tipo di log.
  6. Fai clic su Avanti.
  7. Specifica i valori per i seguenti parametri di input:
    • Intestazione HTTP di autenticazione:coppia di chiavi generata in precedenza in formato <key>:<secret>, utilizzata per l'autenticazione all'API Netskope.
    • Nome host dell'API:il FQDN (nome di dominio completo) dell'endpoint API REST di Netskope (ad esempio myinstance.goskope.com).
    • Endpoint API: inserisci events.
    • Tipo di contenuto:inserisci pagina, applicazione, audit, infrastruttura o rete a seconda degli eventi che vuoi analizzare.
    • 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.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
access_method extensions.auth.auth_details Mappato direttamente dal campo access_method.
action security_result.action Mappato direttamente dal campo action o impostato su QUARANTINE se action è "alert" o "bypass". ALLOW se action è consentito. BLOCK se action è bloccato.
action security_result.action_details Mappato dal campo action se è "alert" o "bypass".
activity security_result.description Mappato direttamente dal campo activity.
alert is_alert Imposta true se alert è "yes", false in caso contrario.
alert_name - Non mappato all'oggetto IDM.
alert_type security_result.category_details Mappato direttamente dal campo alert_type.
app target.application Mappato direttamente dal campo app.
app_activity additional.fields{key:"app_activity", value:{string_value: }} Mappato direttamente dal campo app_activity come coppia chiave-valore in additional.fields.
app_session_id target.resource.attribute.labels{key:"App Session Id", value: } Estratto dal campo message utilizzando grok e aggiunto come etichetta.
appcategory security_result.category_details Mappato direttamente dal campo appcategory se category è vuoto.
browser network.http.user_agent Mappato direttamente dal campo browser, se non "unknown".
browser_version network.http.parsed_user_agent.browser_version Mappato direttamente dal campo browser_version.
browser_version network.http.parsed_user_agent.family Imposta su "USER_DEFINED" se è presente browser_version.
category security_result.category_details Mappato direttamente dal campo category.
cci security_result.detection_fields{key:"cci", value: } Mappato direttamente dal campo cci come coppia chiave-valore in detection_fields.
ccl security_result.confidence Impostato in base al valore di ccl: "scarso" o "basso" corrisponde a LOW_CONFIDENCE, "medio" a MEDIUM_CONFIDENCE, "alto" o "eccellente" a HIGH_CONFIDENCE.
ccl security_result.confidence_details Mappato direttamente dal campo ccl.
client_bytes network.sent_bytes Mappato direttamente dal campo client_bytes dopo la conversione in numero intero non firmato.
count additional.fields{key:"count", value:{string_value: }} Mappato direttamente dal campo count come coppia chiave-valore in additional.fields.
device principal.resource.resource_subtype Mappato direttamente dal campo device.
device principal.resource.type Impostato su "DEVICE" se è presente il campo device.
dlp_file target.file.full_path Mappato direttamente dal campo dlp_file, se presente, altrimenti da file_path.
dlp_profile security_result.rule_type Mappato direttamente dal campo dlp_profile.
dlp_rule security_result.rule_name Mappato direttamente dal campo dlp_rule.
dlp_rule_severity security_result.severity Mappato direttamente dal campo dlp_rule_severity se alert_type è DLP.
dlp_rule_severity _severity Mappato dal campo dlp_rule_severity se severity è vuoto.
domain target.asset.hostname Mappato direttamente dal campo domain.
domain target.hostname Mappato direttamente dal campo domain.
dsthost target.asset.hostname Viene mappato direttamente dal campo dsthost se non è un indirizzo IP e dstip è vuoto, altrimenti viene mappato a target.hostname.
dsthost target.hostname Mappato direttamente dal campo dsthost se non è un indirizzo IP e dstip non è vuoto.
dstip target.asset.ip Mappato direttamente dal campo dstip.
dstip target.ip Mappato direttamente dal campo dstip.
dstport target.port Mappato direttamente dal campo dstport dopo la conversione in numero intero.
dst_country target.location.country_or_region Mappato direttamente dal campo dst_country.
dst_location target.location.city Mappato direttamente dal campo dst_location.
dst_region target.location.name Mappato direttamente dal campo dst_region.
file_path target.file.full_path Mappato direttamente dal campo file_path se dlp_file è vuoto.
file_size target.file.size Mappato direttamente dal campo file_size dopo la conversione in numero intero non firmato.
file_type target.file.mime_type Mappato direttamente dal campo file_type, se non "Sconosciuto".
from_user network.email.from Mappato direttamente dal campo from_user se si tratta di un indirizzo email.
from_user_category principal.resource.attribute.labels{key:"From User Category", value: } Mappato direttamente dal campo from_user_category come coppia chiave-valore in principal.resource.attribute.labels.
hostname principal.asset.hostname Mappato direttamente dal campo hostname, se non vuoto, altrimenti da instance_id.
hostname principal.hostname Mappato direttamente dal campo hostname, se non vuoto, altrimenti da instance_id.
id.time metadata.event_timestamp Analizzati e mappati a event_timestamp nei metadati.
instance_id principal.asset.hostname Mappato direttamente dal campo instance_id se hostname è vuoto.
instance_id principal.hostname Mappato direttamente dal campo instance_id se hostname è vuoto.
intermediary intermediary Mappato direttamente dal campo intermediary.
ip_protocol network.ip_protocol Mappato dal campo ip_protocol dopo essere stato analizzato dal file parse_ip_protocol.include.
is_alert is_alert Campo generato dall'analizzatore. Imposta su true se il campo alert è "yes".
is_significant is_significant Campo generato dall'analizzatore. Impostato su true se _severity è "CRITICAL" o "HIGH".
ja3 network.tls.client.ja3 Mappato direttamente dal campo ja3 se corrisponde a un pattern esadecimale.
ja3s network.tls.server.ja3s Mappato direttamente dal campo ja3s se corrisponde a un pattern esadecimale.
malware_id security_result.threat_id Mappato direttamente dal campo malware_id.
malware_name security_result.threat_name Mappato direttamente dal campo malware_name.
malware_severity security_result.severity Mappato direttamente dal campo malware_severity dopo la conversione in lettere maiuscole.
malware_type security_result.detection_fields{key:"Malware Type", value: } Mappato direttamente dal campo malware_type come coppia chiave-valore in detection_fields.
matched_username principal.user.email_addresses Mappato direttamente dal campo matched_username se si tratta di un indirizzo email.
md5 target.file.md5 Mappato direttamente dal campo md5 se non è vuoto o se è "Non disponibile".
metadata.event_type metadata.event_type Impostato inizialmente su "GENERIC_EVENT", quindi potenzialmente sostituito in base ad altri campi. Imposta NETWORK_HTTP se sono presenti srcip o hostname e dstip o dsthost o domain. Imposta STATUS_UPDATE se sono presenti srcip o hostname, ma non dstip, dsthost o domain. Imposta USER_UNCATEGORIZED se è presente user. Imposta su EMAIL_UNCATEGORIZED se activity è "Scansione introspettiva" e sono presenti shared_with o from_user. Impostato su USER_LOGIN se activity è "Accesso non riuscito", "Accesso riuscito" o "Tentativo di accesso".
metadata.log_type metadata.log_type Imposta su "NETSKOPE_ALERT".
metadata.product_log_id metadata.product_log_id Mappato direttamente dal campo _id.
metadata.product_name metadata.product_name Imposta su "Avviso Netskope".
metadata.vendor_name metadata.vendor_name Imposta su "Netskope".
netskope_pop observer.hostname Mappato direttamente dal campo netskope_pop.
object additional.fields{key:"Object", value:{string_value: }} Mappato direttamente dal campo object come coppia chiave-valore in additional.fields.
object_id additional.fields{key:"Object id", value:{string_value: }} Mappato direttamente dal campo object_id come coppia chiave-valore in additional.fields.
object_type additional.fields{key:"Object type", value:{string_value: }} Mappato direttamente dal campo object_type come coppia chiave-valore in additional.fields.
organization_unit principal.administrative_domain Mappato direttamente dal campo organization_unit.
os principal.platform Mappato dal campo os: "Windows" corrisponde a WINDOWS, "MAC" a MAC, "LINUX" a LINUX.
os_version principal.platform_version Mappato direttamente dal campo os_version.
other_categories - Non mappato all'oggetto IDM.
page network.http.referral_url Mappato direttamente dal campo page se referer è vuoto.
policy security_result.summary Mappato direttamente dal campo policy.
principal.user.email_addresses principal.user.email_addresses Unito dal campo user se si tratta di un indirizzo email.
protocol network.application_protocol Mappato direttamente dal campo protocol dopo aver rimosso tutto dopo il primo "/". Convertito in maiuscolo.
publisher_cn additional.fields{key:"publisher_cn", value:{string_value: }} Mappato direttamente dal campo publisher_cn come coppia chiave-valore in additional.fields.
publisher_name additional.fields{key:"publisher_name", value:{string_value: }} Mappato direttamente dal campo publisher_name come coppia chiave-valore in additional.fields.
referer network.http.referral_url Mappato direttamente dal campo referer.
security_result.alert_state security_result.alert_state Imposta su "ALERTING" se alert è "yes", su "NOT_ALERTING" se alert è "no", su "UNSPECIFIED" in caso contrario.
security_result.category_details security_result.category_details Unito dai campi category, appcategory o alert_type.
security_result.confidence security_result.confidence Derivato dal campo ccl.
security_result.confidence_details security_result.confidence_details Mappato direttamente dal campo ccl.
security_result.description security_result.description Mappato direttamente dal campo activity.
security_result.rule_name security_result.rule_name Mappato direttamente dal campo dlp_rule.
security_result.rule_type security_result.rule_type Mappato direttamente dal campo dlp_profile.
security_result.severity security_result.severity Derivato dai campi _severity, malware_severity o dlp_rule_severity.
security_result.summary security_result.summary Mappato direttamente dal campo policy.
security_result.threat_id security_result.threat_id Mappato direttamente dal campo malware_id.
security_result.threat_name security_result.threat_name Mappato direttamente dal campo malware_name.
server_bytes network.received_bytes Mappato direttamente dal campo server_bytes dopo la conversione in numero intero non firmato.
severity _severity Mappato direttamente dal campo severity.
sha256 target.file.sha256 Mappato direttamente dal campo sha256.
shared_with network.email.to Analizzata dal campo shared_with e aggiunta all'array network.email.to se si tratta di un indirizzo email.
site additional.fields{key:"site", value:{string_value: }} Mappato direttamente dal campo site come coppia chiave-valore in additional.fields.
src_country principal.location.country_or_region Mappato direttamente dal campo src_country.
src_latitude principal.location.region_latitude Mappato direttamente dal campo src_latitude.
src_location principal.location.city Mappato direttamente dal campo src_location.
src_longitude principal.location.region_longitude Mappato direttamente dal campo src_longitude.
src_region principal.location.name Mappato direttamente dal campo src_region.
srcip principal.asset.ip Estratto dal campo srcip utilizzando grok e unito agli array principal.asset.ip e principal.ip.
srcip principal.ip Estratto dal campo srcip utilizzando grok e unito agli array principal.asset.ip e principal.ip.
srcport principal.port Mappato direttamente dal campo srcport dopo la conversione in numero intero.
target.user.email_addresses target.user.email_addresses Unito dal campo to_user se si tratta di un indirizzo email.
threat_match_field security_result.detection_fields{key:"Threat Match Field", value: } Mappato direttamente dal campo threat_match_field come coppia chiave-valore in detection_fields.
timestamp metadata.event_timestamp Analizzati dai campi timestamp o id.time.
to_user target.user.email_addresses Analizzata dal campo to_user e aggiunta all'array target.user.email_addresses se si tratta di un indirizzo email.
to_user_category target.resource.attribute.labels{key:"To User Category", value: } Mappato direttamente dal campo to_user_category come coppia chiave-valore in target.resource.attribute.labels.
traffic_type security_result.detection_fields{key:"traffic_type", value: } Mappato direttamente dal campo traffic_type come coppia chiave-valore in detection_fields.
tunnel_id additional.fields{key:"tunnel_id", value:{string_value: }} Mappato direttamente dal campo tunnel_id come coppia chiave-valore in additional.fields.
tunnel_type additional.fields{key:"tunnel_type", value:{string_value: }} Mappato direttamente dal campo tunnel_type come coppia chiave-valore in additional.fields.
type security_result.detection_fields{key:"type", value: } Mappato direttamente dal campo type come coppia chiave-valore in detection_fields.
ur_normalized - Non mappato all'oggetto IDM.
url target.url Mappato direttamente dal campo url.
user event.idm.read_only_udm.principal.user.userid Mappato direttamente dal campo user.
user principal.user.email_addresses Mappato direttamente dal campo user se si tratta di un indirizzo email.
useragent network.http.user_agent Mappato direttamente dal campo useragent.
useragent network.http.parsed_user_agent Convertito in parseduseragent e mappato a network.http.parsed_user_agent.
user_agent network.http.user_agent Mappato direttamente dal campo user_agent.
user_agent network.http.parsed_user_agent Convertito in parseduseragent e mappato a network.http.parsed_user_agent.

Modifiche

2024-06-04

  • "matched_username" è stato mappato a "principal.user.email_addresses".
  • Quando "action" è "bypass" o "alert", mappa "action" a "security_result.action_details" e imposta "security_result.action" su "QUARANTINE".
  • Quando "alert_type" è "DLP", mappa "dlp_rule_severity" a "security_result.severity".

2024-02-19

  • È stata modificata la mappatura di "client_bytes" da "network.received_bytes" a "network.sent_bytes".
  • È stata modificata la mappatura di "server_bytes" da "network.sent_bytes" a "network.received_bytes".

2024-02-08

  • "useragent" e "user_agent" sono stati mappati a "network.http.user_agent" e "network.http.parsed_user_agent".

2023-11-10

  • È stato aggiunto il pattern Grok per verificare se "srcip" è un pattern IP valido.
  • "instance_id" è stato mappato a "principal.hostname".
  • "traffic_type" è stato mappato a "security_result.detection_fields".
  • "app_activity" è stato mappato a "additional.fields".
  • "count" è stato mappato a "additional.fields".
  • "site" è stato mappato a "additional.fields".
  • "device" è stato mappato a "principal.resource.resource_sub_type".
  • "type" è stato mappato a "security_result.detection_fields".
  • È stata modificata la mappatura di "hostname" utilizzando "replace" anziché "rename".
  • La mappatura "cci" è stata modificata da "additional.fields" a "security_result.detection_fields".
  • La mappatura "ccl" è stata modificata da "additional.fields" a "security_result.confidence_details".
  • "security_result.confidence" compilato in base al valore in "ccl".

2023-07-14

  • Correzione di bug -
  • Valore estratto per "browser_session_id","app_session_id" utilizzando il pattern Grok prima della mappatura.
  • È stata aggiunta la verifica della condizione per convalidare l'email prima di mappare il campo "to_user".

2023-07-06

  • Miglioramento:
  • Pattern Grok modificato per identificare se "dsthost" è o meno un indirizzo IP.
  • Se "dsthost" è un indirizzo IP, viene mappato a "target.ip", altrimenti a "target.hostname".

2023-06-06

  • Miglioramento:
  • "domain" è stato mappato a "target.hostname".
  • "app_session_id" è stato mappato a "target.resource.attribute.labels".
  • "malware_severity" è stato mappato a "security_result.severity".
  • "malware_type" è stato mappato a "security_result.detection_fields".
  • "threat_match_field" è stato mappato a "security_result.detection_fields".
  • "ja3" è stato mappato a "network.tls.client.ja3".
  • "ja3s" è stato mappato a "network.tls.server.ja3s".
  • "cci" e "ccl" sono stati mappati a "additional.fields".
  • "access_method" è stato mappato a "extensions.auth.auth_details".
  • "browser_version" è stato mappato a "network.http.parsed_user_agent.browser_version".
  • "dlp_profile" è stato mappato a "security_result.rule_type".
  • "dlp_rule" è stato mappato a "security_result.rule_name".
  • "netskope_pop" è stato mappato a "observer.hostname".
  • "pagina" è stato mappato a "network.http.referral_url".
  • "to_user" è stato mappato a "target.user.email_addresses".
  • "to_user_category" è stato mappato a "target.resource.attribute.labels".

2023-03-23

  • Miglioramento:
  • "security_result.alert_state" è stato mappato a "ALERTING" se "alert" è uguale a "yes".
  • "security_result.alert_state" è stato mappato a "NOT_ALERTING" se "alert" è uguale a "no".
  • "security_result.alert_state" è stato mappato a "UNSPECIFIED" se "alert" è nullo.

2022-07-23

  • È stata rimossa la mappatura non necessaria per "metadata.description".

2022-07-01

  • Il campo "os" mappato a "principal.platform".
  • Il campo "dsthost" mappato a "target.ip" se "dsthost" è un indirizzo IP, altrimenti mappato a "target.hostname".
  • Il campo "dstport" mappato a "target.port".
  • Il campo "srcport" è stato mappato a "principal.port".
  • Il campo "user" mappato a "principal.user.email_addresses", se "user" è un indirizzo email valido.
  • Il campo "src_latitude" mappato a "principal.location.region_latitude".
  • Il campo "src_longitude" mappato a "principal.location.region_longitude".
  • Il campo "ip_protocol" mappato a "network.ip_protocol".
  • Il campo "client_bytes" mappato a "network.received_bytes".
  • Il campo "server_bytes" mappato a "network.sent_bytes".
  • Il campo "browser_session_id" mappato a "network.session_id".
  • Il campo "network_session_id" mappato a "network.session_id".
  • Il campo "appcategory" mappato a "security_result.category_details".
  • Il campo "publisher_cn" è stato mappato a "additional.fields[n]".
  • Il campo "publisher_name" mappato a "additional.fields[n]".
  • Il campo "tunnel_id" mappato a "additional.fields[n]".
  • Il campo "tunnel_type" è stato mappato a "additional.fields[n]".
  • È stata modificata la mappatura per il campo "shared_with" da "intermediary.user.email_addresses" a "network.email.to".
  • È stata modificata la mappatura per il campo "network.email.to" da "principal.user.email_addresses" a "network.email.from".
  • Sono stati aggiunti controlli condizionali per i campi "_severity", "shared_with", "from_user", "protocol".
  • Modifica di "metadata.event_type" per i seguenti casi:
  • "GENERIC_EVENT" a "NETWORK_HTTP" se "principal.ip o principal.hostname" e "target.ip o target.hostname" non sono null.
  • "GENERIC_EVENT" in "STATUS_UPDATE" dove "principal.ip o principal.hostname" non è nullo.
  • "GENERIC_EVENT" in "USER_UNCATEGORIZED" dove "principal.user.userid" non è nullo.

2022-06-17

  • Correzione di bug:
  • È stato aggiunto il controllo condizionale per "md5" == "not available".