Recoger registros de alertas de Netskope v1

Disponible en:

Información general

Este analizador extrae los registros de alertas de Netskope de mensajes con formato JSON y los transforma en UDM de Google Security Operations. Normaliza campos, analiza marcas de tiempo, gestiona alertas y gravedades, extrae información de red (IPs, puertos, protocolos), enriquece datos de usuarios y archivos, y asigna campos a la estructura de UDM. El analizador también gestiona actividades específicas de Netskope, como inicios de sesión y eventos de DLP, y añade etiquetas personalizadas para mejorar el contexto.

Antes de empezar

Asegúrate de que cumples los siguientes requisitos previos:

  • Instancia de Google SecOps.
  • Acceso privilegiado a Netskope.

Habilitar el acceso a la API REST de Netskope

  1. Inicia sesión en el arrendatario de Netskope con tus credenciales de administrador.
  2. Ve a Ajustes > Herramientas > API REST v1.
  3. Crea una clave de API específica para Google SecOps.
  4. Proporcione un nombre descriptivo (por ejemplo, Clave de Google SecOps).
  5. Copia y guarda la clave y el secreto generados.

Configurar feeds

Para configurar un feed, sigue estos pasos:

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Añadir feed.
  3. En la página siguiente, haga clic en Configurar un solo feed.
  4. En el campo Nombre del feed, introduzca un nombre para el feed; por ejemplo, Registros de alertas de Netskope.
  5. Seleccione API de terceros como Tipo de fuente.
  6. Seleccione Netskope como Tipo de registro.
  7. Haz clic en Siguiente.
  8. Especifique valores para los siguientes parámetros de entrada:
    • Encabezado HTTP de autenticación: par de claves generado anteriormente en formato <key>:<secret>, que se usa para autenticar la API de Netskope.
    • Nombre de host de la API: el nombre de dominio completo (FQDN) de tu endpoint de la API REST de Netskope (por ejemplo, myinstance.goskope.com).
    • Endpoint de la API: introduce alerts.
    • Tipo de contenido: introduce todo.
  9. Haz clic en Siguiente.
  10. Revise la configuración del feed en la pantalla Finalizar y, a continuación, haga clic en Enviar.

Opcional: Añada una configuración de feed para ingerir registros de eventos de Netskope

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Añadir nuevo.
  3. En el campo Nombre del feed, escriba un nombre para el feed (por ejemplo, Registros de eventos de Netskope).
  4. Seleccione API de terceros como Tipo de fuente.
  5. Seleccione Netskope como Tipo de registro.
  6. Haz clic en Siguiente.
  7. Especifique valores para los siguientes parámetros de entrada:
    • Encabezado HTTP de autenticación: par de claves generado anteriormente en formato <key>:<secret>, que se usa para autenticar la API de Netskope.
    • Nombre de host de la API: el nombre de dominio completo (FQDN) de tu endpoint de la API REST de Netskope (por ejemplo, myinstance.goskope.com).
    • Endpoint de la API: introduce events.
    • Tipo de contenido: introduzca page, application, audit, infrastructure o network en función de los eventos que quiera analizar.
    • Espacio de nombres de recursos: el espacio de nombres de recursos.
    • Etiquetas de ingestión: la etiqueta aplicada a los eventos de este feed.
  8. Haz clic en Siguiente.
  9. Revise la configuración del feed en la pantalla Finalizar y, a continuación, haga clic en Enviar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
access_method extensions.auth.auth_details Se asigna directamente desde el campo access_method.
action security_result.action Se asigna directamente desde el campo action o se define como QUARANTINE si action es "alert" o "bypass". ALLOW si se permite action. BLOCK si action está bloqueado.
action security_result.action_details Se asigna desde el campo action si es "alert" o "bypass".
activity security_result.description Se asigna directamente desde el campo activity.
alert is_alert Se asigna el valor true si alert es "yes" y false en caso contrario.
alert_name - No está asignado al objeto IDM.
alert_type security_result.category_details Se asigna directamente desde el campo alert_type.
app target.application Se asigna directamente desde el campo app.
app_activity additional.fields{key:"app_activity", value:{string_value: }} Se asigna directamente desde el campo app_activity como un par clave-valor en additional.fields.
app_session_id target.resource.attribute.labels{key:"App Session Id", value: } Se extrae del campo message mediante grok y se añade como etiqueta.
appcategory security_result.category_details Se asigna directamente desde el campo appcategory si category está vacío.
browser network.http.user_agent Se asigna directamente desde el campo browser si no es "unknown" (desconocido).
browser_version network.http.parsed_user_agent.browser_version Se asigna directamente desde el campo browser_version.
browser_version network.http.parsed_user_agent.family Se asigna el valor "USER_DEFINED" si browser_version está presente.
category security_result.category_details Se asigna directamente desde el campo category.
cci security_result.detection_fields{key:"cci", value: } Se asigna directamente desde el campo cci como un par clave-valor en detection_fields.
ccl security_result.confidence Se define en función del valor de ccl: "malo" o "bajo" se asigna a LOW_CONFIDENCE, "medio" a MEDIUM_CONFIDENCE y "alto" o "excelente" a HIGH_CONFIDENCE.
ccl security_result.confidence_details Se asigna directamente desde el campo ccl.
client_bytes network.sent_bytes Se asigna directamente desde el campo client_bytes después de convertirlo en un entero sin signo.
count additional.fields{key:"count", value:{string_value: }} Se asigna directamente desde el campo count como un par clave-valor en additional.fields.
device principal.resource.resource_subtype Se asigna directamente desde el campo device.
device principal.resource.type Se define como "DEVICE" si el campo device está presente.
dlp_file target.file.full_path Se asigna directamente desde el campo dlp_file si está presente. De lo contrario, se asigna desde file_path.
dlp_profile security_result.rule_type Se asigna directamente desde el campo dlp_profile.
dlp_rule security_result.rule_name Se asigna directamente desde el campo dlp_rule.
dlp_rule_severity security_result.severity Se asigna directamente desde el campo dlp_rule_severity si alert_type es una DLP.
dlp_rule_severity _severity Se asigna desde el campo dlp_rule_severity si severity está vacío.
domain target.asset.hostname Se asigna directamente desde el campo domain.
domain target.hostname Se asigna directamente desde el campo domain.
dsthost target.asset.hostname Se asigna directamente desde el campo dsthost si no es una IP y dstip está vacío. De lo contrario, se asigna a target.hostname.
dsthost target.hostname Se asigna directamente desde el campo dsthost si no es una IP y dstip no está vacío.
dstip target.asset.ip Se asigna directamente desde el campo dstip.
dstip target.ip Se asigna directamente desde el campo dstip.
dstport target.port Se asigna directamente desde el campo dstport después de convertirlo en un número entero.
dst_country target.location.country_or_region Se asigna directamente desde el campo dst_country.
dst_location target.location.city Se asigna directamente desde el campo dst_location.
dst_region target.location.name Se asigna directamente desde el campo dst_region.
file_path target.file.full_path Se asigna directamente desde el campo file_path si dlp_file está vacío.
file_size target.file.size Se asigna directamente desde el campo file_size después de convertirlo en un entero sin signo.
file_type target.file.mime_type Se asigna directamente desde el campo file_type si no es "Unknown" ("Desconocido").
from_user network.email.from Se asigna directamente desde el campo from_user si es una dirección de correo.
from_user_category principal.resource.attribute.labels{key:"From User Category", value: } Se asigna directamente desde el campo from_user_category como un par clave-valor en principal.resource.attribute.labels.
hostname principal.asset.hostname Se asigna directamente desde el campo hostname si no está vacío. De lo contrario, se asigna desde instance_id.
hostname principal.hostname Se asigna directamente desde el campo hostname si no está vacío. De lo contrario, se asigna desde instance_id.
id.time metadata.event_timestamp Analizado y asignado a event_timestamp en los metadatos.
instance_id principal.asset.hostname Se asigna directamente desde el campo instance_id si hostname está vacío.
instance_id principal.hostname Se asigna directamente desde el campo instance_id si hostname está vacío.
intermediary intermediary Se asigna directamente desde el campo intermediary.
ip_protocol network.ip_protocol Se asigna desde el campo ip_protocol después de analizarse en el archivo parse_ip_protocol.include.
ja3 network.tls.client.ja3 Se asigna directamente desde el campo ja3 si coincide con un patrón hexadecimal.
ja3s network.tls.server.ja3s Se asigna directamente desde el campo ja3s si coincide con un patrón hexadecimal.
malware_id security_result.threat_id Se asigna directamente desde el campo malware_id.
malware_name security_result.threat_name Se asigna directamente desde el campo malware_name.
malware_severity security_result.severity Se asigna directamente desde el campo malware_severity después de convertirlo a mayúsculas.
malware_type security_result.detection_fields{key:"Malware Type", value: } Se asigna directamente desde el campo malware_type como un par clave-valor en detection_fields.
matched_username principal.user.email_addresses Se asigna directamente desde el campo matched_username si es una dirección de correo.
md5 target.file.md5 Se asigna directamente desde el campo md5 si no está vacío o no tiene el valor "Not available" (No disponible).
metadata.event_type metadata.event_type Se define como "GENERIC_EVENT" al principio y, después, se puede anular en función de otros campos. Asigna el valor NETWORK_HTTP si se incluyen srcip o hostname y dstip, dsthost o domain. Asigna el valor STATUS_UPDATE si srcip o hostname están presentes, pero no dstip, dsthost ni domain. Su valor debe ser USER_UNCATEGORIZED si se incluye user. Asigna el valor EMAIL_UNCATEGORIZED si activity es "Introspection Scan" y shared_with o from_user están presentes. Se define como USER_LOGIN si activity es "Login Failed", "Login Successful" o "Login Attempt".
metadata.log_type metadata.log_type Se ha definido como "NETSKOPE_ALERT".
metadata.product_log_id metadata.product_log_id Se asigna directamente desde el campo _id.
metadata.product_name metadata.product_name Se ha definido como "Alerta de Netskope".
metadata.vendor_name metadata.vendor_name Selecciona "Netskope".
netskope_pop observer.hostname Se asigna directamente desde el campo netskope_pop.
object additional.fields{key:"Object", value:{string_value: }} Se asigna directamente desde el campo object como un par clave-valor en additional.fields.
object_id additional.fields{key:"Object id", value:{string_value: }} Se asigna directamente desde el campo object_id como un par clave-valor en additional.fields.
object_type additional.fields{key:"Object type", value:{string_value: }} Se asigna directamente desde el campo object_type como un par clave-valor en additional.fields.
organization_unit principal.administrative_domain Se asigna directamente desde el campo organization_unit.
os principal.platform Asignación del campo os: "Windows" se asigna a WINDOWS, "MAC" a MAC y "LINUX" a LINUX.
os_version principal.platform_version Se asigna directamente desde el campo os_version.
other_categories - No está asignado al objeto IDM.
page network.http.referral_url Se asigna directamente desde el campo page si referer está vacío.
policy security_result.summary Se asigna directamente desde el campo policy.
principal.user.email_addresses principal.user.email_addresses Se ha combinado del campo user si es una dirección de correo electrónico.
protocol network.application_protocol Se asigna directamente desde el campo protocol después de eliminar todo lo que haya después del primer "/". Se convierte a mayúsculas.
publisher_cn additional.fields{key:"publisher_cn", value:{string_value: }} Se asigna directamente desde el campo publisher_cn como un par clave-valor en additional.fields.
publisher_name additional.fields{key:"publisher_name", value:{string_value: }} Se asigna directamente desde el campo publisher_name como un par clave-valor en additional.fields.
referer network.http.referral_url Se asigna directamente desde el campo referer.
security_result.alert_state security_result.alert_state Se asigna el valor "ALERTING" si alert es "yes", "NOT_ALERTING" si alert es "no" y "UNSPECIFIED" en el resto de los casos.
security_result.category_details security_result.category_details Se ha combinado de los campos category, appcategory o alert_type.
security_result.confidence security_result.confidence Derivado del campo ccl.
security_result.confidence_details security_result.confidence_details Se asigna directamente desde el campo ccl.
security_result.description security_result.description Se asigna directamente desde el campo activity.
security_result.rule_name security_result.rule_name Se asigna directamente desde el campo dlp_rule.
security_result.rule_type security_result.rule_type Se asigna directamente desde el campo dlp_profile.
security_result.severity security_result.severity Se deriva de los campos _severity, malware_severity o dlp_rule_severity.
security_result.summary security_result.summary Se asigna directamente desde el campo policy.
security_result.threat_id security_result.threat_id Se asigna directamente desde el campo malware_id.
security_result.threat_name security_result.threat_name Se asigna directamente desde el campo malware_name.
server_bytes network.received_bytes Se asigna directamente desde el campo server_bytes después de convertirlo en un entero sin signo.
severity _severity Se asigna directamente desde el campo severity.
sha256 target.file.sha256 Se asigna directamente desde el campo sha256.
shared_with network.email.to Se analiza a partir del campo shared_with y se añade a la matriz network.email.to si es una dirección de correo electrónico.
site additional.fields{key:"site", value:{string_value: }} Se asigna directamente desde el campo site como un par clave-valor en additional.fields.
src_country principal.location.country_or_region Se asigna directamente desde el campo src_country.
src_latitude principal.location.region_latitude Se asigna directamente desde el campo src_latitude.
src_location principal.location.city Se asigna directamente desde el campo src_location.
src_longitude principal.location.region_longitude Se asigna directamente desde el campo src_longitude.
src_region principal.location.name Se asigna directamente desde el campo src_region.
srcip principal.asset.ip Se extrae del campo srcip mediante grok y se combina en las matrices principal.asset.ip y principal.ip.
srcip principal.ip Se extrae del campo srcip mediante grok y se combina en las matrices principal.asset.ip y principal.ip.
srcport principal.port Se asigna directamente desde el campo srcport después de convertirlo en un número entero.
target.user.email_addresses target.user.email_addresses Se ha combinado del campo to_user si es una dirección de correo electrónico.
threat_match_field security_result.detection_fields{key:"Threat Match Field", value: } Se asigna directamente desde el campo threat_match_field como un par clave-valor en detection_fields.
timestamp metadata.event_timestamp Se analiza a partir de los campos timestamp o id.time.
to_user target.user.email_addresses Se analiza a partir del campo to_user y se añade a la matriz target.user.email_addresses si es una dirección de correo electrónico.
to_user_category target.resource.attribute.labels{key:"To User Category", value: } Se asigna directamente desde el campo to_user_category como un par clave-valor en target.resource.attribute.labels.
traffic_type security_result.detection_fields{key:"traffic_type", value: } Se asigna directamente desde el campo traffic_type como un par clave-valor en detection_fields.
tunnel_id additional.fields{key:"tunnel_id", value:{string_value: }} Se asigna directamente desde el campo tunnel_id como un par clave-valor en additional.fields.
tunnel_type additional.fields{key:"tunnel_type", value:{string_value: }} Se asigna directamente desde el campo tunnel_type como un par clave-valor en additional.fields.
type security_result.detection_fields{key:"type", value: } Se asigna directamente desde el campo type como un par clave-valor en detection_fields.
ur_normalized - No está asignado al objeto IDM.
url target.url Se asigna directamente desde el campo url.
user event.idm.read_only_udm.principal.user.userid Se asigna directamente desde el campo user.
user principal.user.email_addresses Se asigna directamente desde el campo user si es una dirección de correo.
useragent network.http.user_agent Se asigna directamente desde el campo useragent.
useragent network.http.parsed_user_agent Se ha convertido a parseduseragent y se ha asignado a network.http.parsed_user_agent.
user_agent network.http.user_agent Se asigna directamente desde el campo user_agent.
user_agent network.http.parsed_user_agent Se ha convertido a parseduseragent y se ha asignado a network.http.parsed_user_agent.

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.