Collecter les journaux d'alertes Netskope v1
Présentation
Ce parseur extrait les journaux d'alertes Netskope des messages au format JSON et les transforme en UDM Google Security Operations. Il normalise les champs, analyse les codes temporels, gère les alertes et les niveaux de gravité, extrait les informations réseau (adresses IP, ports, protocoles), enrichit les données utilisateur et de fichier, et mappe les champs à la structure UDM. L'analyseur gère également des activités Netskope spécifiques, comme les connexions et les événements DLP, et ajoute des libellés personnalisés pour améliorer le contexte.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes :
- Instance Google SecOps.
- Accès privilégié à Netskope.
Activer l'accès à l'API REST Netskope
- Connectez-vous au locataire Netskope à l'aide de vos identifiants d'administrateur.
- Accédez à Paramètres > Outils > API REST v1.
- Créez une clé API spécifiquement pour Google SecOps.
- Attribuez un nom descriptif (par exemple, Clé Google SecOps).
- Copiez et enregistrez la clé et le code secret générés.
Configurer des flux
Il existe deux points d'entrée différents pour configurer les flux dans la plate-forme Google SecOps :
- Paramètres SIEM> Flux
- Plate-forme de contenu > Packs de contenu
Configurer des flux à partir de Paramètres SIEM > Flux
Pour configurer un flux, procédez comme suit :
- Accédez à Paramètres SIEM > Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Sur la page suivante, cliquez sur Configurer un seul flux.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux d'alertes Netskope).
- Sélectionnez API tierce comme type de source.
- Sélectionnez Netskope comme Type de journal.
- Cliquez sur Suivant.
- Spécifiez les valeurs des paramètres d'entrée suivants :
- En-tête HTTP d'authentification : paire de clés générée précédemment au format
<key>:<secret>
, utilisée pour l'authentification auprès de l'API Netskope. - Nom d'hôte de l'API : nom de domaine complet (FQDN) de votre point de terminaison de l'API REST Netskope (par exemple,
myinstance.goskope.com
). - Point de terminaison de l'API : saisissez alerts.
- Type de contenu : saisissez all.
- En-tête HTTP d'authentification : paire de clés générée précédemment au format
- Cliquez sur Suivant.
- Vérifiez la configuration du flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Configurer des flux depuis le Hub de contenu
Indiquez les valeurs des champs suivants :
- En-tête HTTP d'authentification : paire de clés générée précédemment au format
<key>:<secret>
, utilisée pour l'authentification auprès de l'API Netskope. - Nom d'hôte de l'API : nom de domaine complet (FQDN) de votre point de terminaison de l'API REST Netskope (par exemple,
myinstance.goskope.com
). - Point de terminaison de l'API : saisissez alerts.
- Type de contenu : saisissez all.
Options avancées
- Nom du flux : valeur préremplie qui identifie le flux.
- Type de source : méthode utilisée pour collecter les journaux dans Google SecOps.
- Espace de noms de l'élément : espace de noms associé au flux.
- Libellés d'ingestion : libellés appliqués à tous les événements de ce flux.
Facultatif : Ajoutez une configuration de flux pour ingérer les journaux d'événements Netskope.
- Accédez à Paramètres SIEM > Flux.
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux d'événements Netskope).
- Sélectionnez API tierce comme type de source.
- Sélectionnez Netskope comme Type de journal.
- Cliquez sur Suivant.
- Spécifiez les valeurs des paramètres d'entrée suivants :
- En-tête HTTP d'authentification : paire de clés générée précédemment au format
<key>:<secret>
, utilisée pour l'authentification auprès de l'API Netskope. - Nom d'hôte de l'API : nom de domaine complet (FQDN) de votre point de terminaison de l'API REST Netskope (par exemple,
myinstance.goskope.com
). - Point de terminaison de l'API : saisissez events.
- Type de contenu : saisissez page, application, audit, infrastructure ou network selon les événements que vous souhaitez analyser.
- Espace de noms de l'élément : espace de noms de l'élément.
- Libellés d'ingestion : libellé appliqué aux événements de ce flux.
- En-tête HTTP d'authentification : paire de clés générée précédemment au format
- Cliquez sur Suivant.
- Vérifiez la configuration du flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
access_method |
extensions.auth.auth_details |
Mappé directement à partir du champ access_method . |
action |
security_result.action |
Mappé directement à partir du champ action ou défini sur QUARANTINE si action est défini sur "alert" (alerte) ou "bypass" (contournement). ALLOW si action est autorisé. BLOCK si action est bloqué. |
action |
security_result.action_details |
Mappé à partir du champ action s'il est défini sur "alert" (alerte) ou "bypass" (contourner). |
activity |
security_result.description |
Mappé directement à partir du champ activity . |
alert |
is_alert |
Définie sur true si alert est "oui", false dans le cas contraire. |
alert_name |
- | Non mappé à l'objet IDM. |
alert_type |
security_result.category_details |
Mappé directement à partir du champ alert_type . |
app |
target.application |
Mappé directement à partir du champ app . |
app_activity |
additional.fields {key:"app_activity", value:{string_value: |
Mappé directement à partir du champ app_activity sous forme de paire clé/valeur dans additional.fields . |
app_session_id |
target.resource.attribute.labels {key:"App Session Id", value: |
Extrait du champ message à l'aide de grok et ajouté en tant que libellé. |
appcategory |
security_result.category_details |
Mappé directement à partir du champ appcategory si category est vide. |
browser |
network.http.user_agent |
Mappé directement à partir du champ browser s'il n'est pas défini sur "unknown" (inconnu). |
browser_version |
network.http.parsed_user_agent.browser_version |
Mappé directement à partir du champ browser_version . |
browser_version |
network.http.parsed_user_agent.family |
Définie sur "USER_DEFINED" si browser_version est présent. |
category |
security_result.category_details |
Mappé directement à partir du champ category . |
cci |
security_result.detection_fields {key:"cci", value: |
Mappé directement à partir du champ cci sous forme de paire clé/valeur dans detection_fields . |
ccl |
security_result.confidence |
Définissez la valeur en fonction de la valeur de ccl : "poor" ou "low" correspond à LOW_CONFIDENCE , "medium" à MEDIUM_CONFIDENCE , et "high" ou "excellent" à HIGH_CONFIDENCE . |
ccl |
security_result.confidence_details |
Mappé directement à partir du champ ccl . |
client_bytes |
network.sent_bytes |
Mappé directement à partir du champ client_bytes après conversion en entier non signé. |
count |
additional.fields {key:"count", value:{string_value: |
Mappé directement à partir du champ count sous forme de paire clé/valeur dans additional.fields . |
device |
principal.resource.resource_subtype |
Mappé directement à partir du champ device . |
device |
principal.resource.type |
Définissez sur "DEVICE" si le champ device est présent. |
dlp_file |
target.file.full_path |
Directement mappé à partir du champ dlp_file , s'il est présent, ou à partir de file_path . |
dlp_profile |
security_result.rule_type |
Mappé directement à partir du champ dlp_profile . |
dlp_rule |
security_result.rule_name |
Mappé directement à partir du champ dlp_rule . |
dlp_rule_severity |
security_result.severity |
Directement mappé à partir du champ dlp_rule_severity si alert_type est DLP. |
dlp_rule_severity |
_severity |
Mappé à partir du champ dlp_rule_severity si severity est vide. |
domain |
target.asset.hostname |
Mappé directement à partir du champ domain . |
domain |
target.hostname |
Mappé directement à partir du champ domain . |
dsthost |
target.asset.hostname |
Mappé directement à partir du champ dsthost s'il ne s'agit pas d'une adresse IP et que dstip est vide, sinon mappé à target.hostname . |
dsthost |
target.hostname |
Directement mappé à partir du champ dsthost s'il ne s'agit pas d'une adresse IP et que dstip n'est pas vide. |
dstip |
target.asset.ip |
Mappé directement à partir du champ dstip . |
dstip |
target.ip |
Mappé directement à partir du champ dstip . |
dstport |
target.port |
Mappé directement à partir du champ dstport après conversion en entier. |
dst_country |
target.location.country_or_region |
Mappé directement à partir du champ dst_country . |
dst_location |
target.location.city |
Mappé directement à partir du champ dst_location . |
dst_region |
target.location.name |
Mappé directement à partir du champ dst_region . |
file_path |
target.file.full_path |
Mappé directement à partir du champ file_path si dlp_file est vide. |
file_size |
target.file.size |
Mappé directement à partir du champ file_size après conversion en entier non signé. |
file_type |
target.file.mime_type |
Mappé directement à partir du champ file_type s'il n'est pas défini sur "Inconnu". |
from_user |
network.email.from |
Mappé directement à partir du champ from_user s'il s'agit d'une adresse e-mail. |
from_user_category |
principal.resource.attribute.labels {key:"From User Category", value: |
Mappé directement à partir du champ from_user_category sous forme de paire clé/valeur dans principal.resource.attribute.labels . |
hostname |
principal.asset.hostname |
Directement mappé à partir du champ hostname s'il n'est pas vide, sinon à partir de instance_id . |
hostname |
principal.hostname |
Directement mappé à partir du champ hostname s'il n'est pas vide, sinon à partir de instance_id . |
id.time |
metadata.event_timestamp |
Analysé et mappé à event_timestamp dans les métadonnées. |
instance_id |
principal.asset.hostname |
Mappé directement à partir du champ instance_id si hostname est vide. |
instance_id |
principal.hostname |
Mappé directement à partir du champ instance_id si hostname est vide. |
intermediary |
intermediary |
Mappé directement à partir du champ intermediary . |
ip_protocol |
network.ip_protocol |
Mappé à partir du champ ip_protocol après avoir été analysé par le fichier parse_ip_protocol.include . |
ja3 |
network.tls.client.ja3 |
Mappé directement à partir du champ ja3 s'il correspond à un modèle hexadécimal. |
ja3s |
network.tls.server.ja3s |
Mappé directement à partir du champ ja3s s'il correspond à un modèle hexadécimal. |
malware_id |
security_result.threat_id |
Mappé directement à partir du champ malware_id . |
malware_name |
security_result.threat_name |
Mappé directement à partir du champ malware_name . |
malware_severity |
security_result.severity |
Directement mappé à partir du champ malware_severity après conversion en majuscules. |
malware_type |
security_result.detection_fields {key:"Malware Type", value: |
Mappé directement à partir du champ malware_type sous forme de paire clé/valeur dans detection_fields . |
matched_username |
principal.user.email_addresses |
Mappé directement à partir du champ matched_username s'il s'agit d'une adresse e-mail. |
md5 |
target.file.md5 |
Directement mappé à partir du champ md5 s'il n'est pas vide ou s'il n'est pas défini sur "Non disponible". |
metadata.event_type |
metadata.event_type |
Défini sur "GENERIC_EVENT" au départ, puis potentiellement remplacé en fonction d'autres champs. Définissez sur NETWORK_HTTP si srcip ou hostname et dstip ou dsthost ou domain sont présents. Définie sur STATUS_UPDATE , si srcip ou hostname sont présents, mais pas dstip , dsthost ni domain . Définie sur USER_UNCATEGORIZED si user est présent. Définie sur EMAIL_UNCATEGORIZED si activity est "Introspection Scan" et que shared_with ou from_user sont présents. Définissez sur USER_LOGIN si activity est "Échec de la connexion", "Connexion réussie" ou "Tentative de connexion". |
metadata.log_type |
metadata.log_type |
Définissez-le sur "NETSKOPE_ALERT". |
metadata.product_log_id |
metadata.product_log_id |
Mappé directement à partir du champ _id . |
metadata.product_name |
metadata.product_name |
Définissez la valeur sur "Alerte Netskope". |
metadata.vendor_name |
metadata.vendor_name |
Définissez-le sur "Netskope". |
netskope_pop |
observer.hostname |
Mappé directement à partir du champ netskope_pop . |
object |
additional.fields {key:"Object", value:{string_value: |
Mappé directement à partir du champ object sous forme de paire clé/valeur dans additional.fields . |
object_id |
additional.fields {key:"Object id", value:{string_value: |
Mappé directement à partir du champ object_id sous forme de paire clé/valeur dans additional.fields . |
object_type |
additional.fields {key:"Object type", value:{string_value: |
Mappé directement à partir du champ object_type sous forme de paire clé/valeur dans additional.fields . |
organization_unit |
principal.administrative_domain |
Mappé directement à partir du champ organization_unit . |
os |
principal.platform |
Mappé à partir du champ os : "Windows" correspond à WINDOWS , "MAC" à MAC et "LINUX" à LINUX . |
os_version |
principal.platform_version |
Mappé directement à partir du champ os_version . |
other_categories |
- | Non mappé à l'objet IDM. |
page |
network.http.referral_url |
Mappé directement à partir du champ page si referer est vide. |
policy |
security_result.summary |
Mappé directement à partir du champ policy . |
principal.user.email_addresses |
principal.user.email_addresses |
Fusionné à partir du champ user s'il s'agit d'une adresse e-mail. |
protocol |
network.application_protocol |
Directement mappé à partir du champ protocol après suppression de tout ce qui se trouve après le premier "/". Converti en majuscules. |
publisher_cn |
additional.fields {key:"publisher_cn", value:{string_value: |
Mappé directement à partir du champ publisher_cn sous forme de paire clé/valeur dans additional.fields . |
publisher_name |
additional.fields {key:"publisher_name", value:{string_value: |
Mappé directement à partir du champ publisher_name sous forme de paire clé/valeur dans additional.fields . |
referer |
network.http.referral_url |
Mappé directement à partir du champ referer . |
security_result.alert_state |
security_result.alert_state |
Définissez la valeur sur "ALERTING" si alert est défini sur "yes", sur "NOT_ALERTING" si alert est défini sur "no", ou sur "UNSPECIFIED" dans le cas contraire. |
security_result.category_details |
security_result.category_details |
Fusionné à partir des champs category , appcategory ou alert_type . |
security_result.confidence |
security_result.confidence |
Dérivé du champ ccl . |
security_result.confidence_details |
security_result.confidence_details |
Mappé directement à partir du champ ccl . |
security_result.description |
security_result.description |
Mappé directement à partir du champ activity . |
security_result.rule_name |
security_result.rule_name |
Mappé directement à partir du champ dlp_rule . |
security_result.rule_type |
security_result.rule_type |
Mappé directement à partir du champ dlp_profile . |
security_result.severity |
security_result.severity |
Dérivé des champs _severity , malware_severity ou dlp_rule_severity . |
security_result.summary |
security_result.summary |
Mappé directement à partir du champ policy . |
security_result.threat_id |
security_result.threat_id |
Mappé directement à partir du champ malware_id . |
security_result.threat_name |
security_result.threat_name |
Mappé directement à partir du champ malware_name . |
server_bytes |
network.received_bytes |
Mappé directement à partir du champ server_bytes après conversion en entier non signé. |
severity |
_severity |
Mappé directement à partir du champ severity . |
sha256 |
target.file.sha256 |
Mappé directement à partir du champ sha256 . |
shared_with |
network.email.to |
Analysé à partir du champ shared_with et ajouté au tableau network.email.to s'il s'agit d'une adresse e-mail. |
site |
additional.fields {key:"site", value:{string_value: |
Mappé directement à partir du champ site sous forme de paire clé/valeur dans additional.fields . |
src_country |
principal.location.country_or_region |
Mappé directement à partir du champ src_country . |
src_latitude |
principal.location.region_latitude |
Mappé directement à partir du champ src_latitude . |
src_location |
principal.location.city |
Mappé directement à partir du champ src_location . |
src_longitude |
principal.location.region_longitude |
Mappé directement à partir du champ src_longitude . |
src_region |
principal.location.name |
Mappé directement à partir du champ src_region . |
srcip |
principal.asset.ip |
Extraites du champ srcip à l'aide de grok et fusionnées dans les tableaux principal.asset.ip et principal.ip . |
srcip |
principal.ip |
Extraites du champ srcip à l'aide de grok et fusionnées dans les tableaux principal.asset.ip et principal.ip . |
srcport |
principal.port |
Mappé directement à partir du champ srcport après conversion en entier. |
target.user.email_addresses |
target.user.email_addresses |
Fusionné à partir du champ to_user s'il s'agit d'une adresse e-mail. |
threat_match_field |
security_result.detection_fields {key:"Threat Match Field", value: |
Mappé directement à partir du champ threat_match_field sous forme de paire clé/valeur dans detection_fields . |
timestamp |
metadata.event_timestamp |
Analysé à partir des champs timestamp ou id.time . |
to_user |
target.user.email_addresses |
Analysé à partir du champ to_user et ajouté au tableau target.user.email_addresses s'il s'agit d'une adresse e-mail. |
to_user_category |
target.resource.attribute.labels {key:"To User Category", value: |
Mappé directement à partir du champ to_user_category sous forme de paire clé/valeur dans target.resource.attribute.labels . |
traffic_type |
security_result.detection_fields {key:"traffic_type", value: |
Mappé directement à partir du champ traffic_type sous forme de paire clé/valeur dans detection_fields . |
tunnel_id |
additional.fields {key:"tunnel_id", value:{string_value: |
Mappé directement à partir du champ tunnel_id sous forme de paire clé/valeur dans additional.fields . |
tunnel_type |
additional.fields {key:"tunnel_type", value:{string_value: |
Mappé directement à partir du champ tunnel_type sous forme de paire clé/valeur dans additional.fields . |
type |
security_result.detection_fields {key:"type", value: |
Mappé directement à partir du champ type sous forme de paire clé/valeur dans detection_fields . |
ur_normalized |
- | Non mappé à l'objet IDM. |
url |
target.url |
Mappé directement à partir du champ url . |
user |
event.idm.read_only_udm.principal.user.userid |
Mappé directement à partir du champ user . |
user |
principal.user.email_addresses |
Mappé directement à partir du champ user s'il s'agit d'une adresse e-mail. |
useragent |
network.http.user_agent |
Mappé directement à partir du champ useragent . |
useragent |
network.http.parsed_user_agent |
Converti en parseduseragent et mappé sur network.http.parsed_user_agent . |
user_agent |
network.http.user_agent |
Mappé directement à partir du champ user_agent . |
user_agent |
network.http.parsed_user_agent |
Converti en parseduseragent et mappé sur network.http.parsed_user_agent . |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.