Recoger registros de ntopng

Disponible en:

Información general

Este analizador extrae los registros de monitorización de redes de ntopng en formato SYSLOG o JSON. Analiza el mensaje de registro, convierte los campos pertinentes al formato UDM y enriquece el evento con metadatos, como los nombres del producto y del proveedor. El analizador también gestiona estructuras JSON anidadas y asigna campos específicos de ntopng a eventos de red de UDM, incluidas las alertas de flujo y el acceso a recursos de usuario.

Antes de empezar

Asegúrate de que cumples los siguientes requisitos previos:

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

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, escriba un nombre para el feed (por ejemplo, Registros de Ntopng).
  5. Selecciona Webhook como Tipo de fuente.
  6. Seleccione Ntopng como Tipo de registro.
  7. Haz clic en Siguiente.
  8. Opcional: Especifica los valores de los siguientes parámetros de entrada:
    • Delimitador de división: el delimitador que se usa para separar las líneas de registro, como \n.
  9. Haz clic en Siguiente.
  10. Revise la configuración del feed en la pantalla Finalizar y, a continuación, haga clic en Enviar.
  11. Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
  12. Copia y guarda la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes volver a generar una clave secreta, pero esta acción hará que la clave secreta anterior quede obsoleta.
  13. En la pestaña Detalles, copia la URL del endpoint del feed del campo Información del endpoint. Debes especificar esta URL de endpoint en tu aplicación cliente.
  14. Haz clic en Listo.

Crear una clave de API para la feed de webhook

  1. Ve a la consolaGoogle Cloud > Credenciales.

    Ir a Credenciales

  2. Haz clic en Crear credenciales y, a continuación, selecciona Clave de API.

  3. Restringe el acceso de la clave de API a la API Google Security Operations.

Especificar la URL del endpoint

  1. En tu aplicación cliente, especifica la URL del endpoint HTTPS proporcionada en el feed de webhook.
  2. Para habilitar la autenticación, especifica la clave de API y la clave secreta como parte del encabezado personalizado con el siguiente formato:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Recomendación: Especifica la clave de API como encabezado en lugar de hacerlo en la URL.

  3. Si tu cliente de webhook no admite encabezados personalizados, puedes especificar la clave de API y la clave secreta mediante parámetros de consulta con el siguiente formato:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    Haz los cambios siguientes:

    • ENDPOINT_URL: URL del endpoint del feed.
    • API_KEY: la clave de API para autenticarte en Google Security Operations.
    • SECRET: la clave secreta que has generado para autenticar el feed.

Configurar un webhook en ntopng para Google SecOps

  1. Inicia sesión en la interfaz web de ntopng.
  2. Selecciona el menú Sistema en el menú desplegable.
  3. Ve a Notificaciones > Puntos finales.
  4. Haz clic en Añadir .
  5. Especifique valores para los siguientes parámetros de entrada:
    • Nombre del endpoint: proporciona un nombre único y descriptivo (por ejemplo, Google SecOps).
    • Tipo de endpoint: selecciona Webhook en la lista.
    • URL del webhook: introduce la ENDPOINT_URL de Google SecOps con API_KEY y SECRET.
  6. Haz clic en Añadir.
  7. Ve a Notificaciones > Destinatarios.
  8. Haz clic en Añadir .
  9. Especifique valores para los siguientes parámetros de entrada:
    • Nombre del destinatario: proporciona un nombre único y descriptivo (por ejemplo, Google SecOps).
    • Seleccionar endpoint: selecciona el endpoint que has creado.
    • Gravedad: selecciona la gravedad que quieres enviar a Google SecOps (por ejemplo, Información, Advertencia y Error).
    • Filtro de categorías: selecciona lo que quieras enviar a Google SecOps.
  10. Haz clic en Probar destinatario para verificar la conexión.
  11. Haz clic en Añadir para guardar el webhook.

Configurar suscriptores de recursos de webhook de ntopng

  1. Ve a Pools.
  2. Selecciona el recurso del que quieras compartir los eventos.

  3. En la columna Acciones, haga clic en el icono del lápiz.

  4. Haga clic en el desplegable Destinatarios.

  5. Selecciona el destinatario del webhook Google SecOps.

  6. Haz clic en Editar para guardar la configuración.

  7. Repite el proceso con otros recursos.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
action security_result.detection_fields.key=action, security_result.detection_fields.value=%{action} El valor de action del registro sin procesar se asigna a un objeto security_result.detection_fields con la clave "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} El valor de alert_generation.host_info.broadcast_domain_host del JSON anidado se asigna a un objeto security_result.detection_fields con la clave "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} El valor de alert_generation.host_info.dhcpHost del JSON anidado se asigna a un objeto security_result.detection_fields con la clave "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} El valor de alert_generation.host_info.is_blacklisted del JSON anidado se asigna a un objeto security_result.detection_fields con la clave "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} El valor de alert_generation.host_info.is_broadcast del JSON anidado se asigna a un objeto security_result.detection_fields con la clave "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} El valor de alert_generation.host_info.is_multicast del JSON anidado se asigna a un objeto security_result.detection_fields con la clave "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} El valor de alert_generation.host_info.localhost del JSON anidado se asigna a un objeto security_result.detection_fields con la clave "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} El valor de alert_generation.host_info.privatehost del JSON anidado se asigna a un objeto security_result.detection_fields con la clave "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} El valor de alert_generation.host_info.systemhost del JSON anidado se asigna a un objeto security_result.detection_fields con la clave "host_info systemhost".
alert_generation.script_key security_result.category_details=%{alert_generation.script_key} El valor de alert_generation.script_key del JSON anidado se asigna a security_result.category_details.
alert_generation.subdir security_result.detection_fields.key=alert_generation_subdir, security_result.detection_fields.value=%{alert_generation.subdir} El valor de alert_generation.subdir del JSON anidado se asigna a un objeto security_result.detection_fields con la clave "alert_generation_subdir".
alert_id security_result.detection_fields.key=alert_id, security_result.detection_fields.value=%{alert_id} El valor de alert_id del registro sin procesar se asigna a un objeto security_result.detection_fields con la clave "alert_id".
alerts_map security_result.detection_fields.key=alerts_map, security_result.detection_fields.value=%{alerts_map} El valor de alerts_map del registro sin procesar se asigna a un objeto security_result.detection_fields con la clave "alerts_map".
cli2srv_bytes network.sent_bytes El valor de cli2srv_bytes del registro sin procesar se convierte en un número entero sin signo y se asigna a network.sent_bytes.
cli_asn principal.resource.attribute.labels.key=cli_asn, principal.resource.attribute.labels.value=%{cli_asn} El valor de cli_asn del registro sin procesar se convierte en una cadena y se asigna a un objeto principal.resource.attribute.labels con la clave "cli_asn".
cli_blacklisted principal.resource.attribute.labels.key=cli_blacklisted, principal.resource.attribute.labels.value=%{cli_blacklisted} El valor de cli_blacklisted del registro sin procesar se convierte en una cadena y se asigna a un objeto principal.resource.attribute.labels con la clave "cli_blacklisted".
cli_city_name principal.location.city El valor de cli_city_name del registro sin procesar se asigna a principal.location.city.
cli_continent_name principal.resource.attribute.labels.key=cli_continent_name, principal.resource.attribute.labels.value=%{cli_continent_name} El valor de cli_continent_name del registro sin procesar se asigna a un objeto principal.resource.attribute.labels con la clave "cli_continent_name".
cli_country_name principal.location.country_or_region El valor de cli_country_name del registro sin procesar se asigna 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} El valor de cli_host_pool_id del registro sin procesar se convierte en una cadena y se asigna a un objeto principal.resource.attribute.labels con la clave "cli_host_pool_id".
cli_ip principal.ip, principal.asset.ip El valor de cli_ip del registro sin procesar se asigna a principal.ip y principal.asset.ip.
cli_localhost principal.resource.attribute.labels.key=cli_localhost, principal.resource.attribute.labels.value=%{cli_localhost} El valor de cli_localhost del registro sin procesar se convierte en una cadena y se asigna a un objeto principal.resource.attribute.labels con la clave "cli_localhost".
cli_location principal.location.name El valor de cli_location del registro sin procesar se convierte en una cadena. Si no es "0", se asigna a principal.location.name.
cli_name principal.hostname, principal.asset.hostname El valor de cli_name del registro sin procesar se asigna a principal.hostname y principal.asset.hostname.
cli_network principal.resource.attribute.labels.key=cli_network, principal.resource.attribute.labels.value=%{cli_network} El valor de cli_network del registro sin procesar se convierte en una cadena y se asigna a un objeto principal.resource.attribute.labels con la clave "cli_network".
cli_port principal.port El valor de cli_port del registro sin procesar se convierte en un número entero y se asigna a principal.port.
entity_id principal.resource.attribute.labels.key=entity_id, principal.resource.attribute.labels.value=%{entity_id} El valor de entity_id del registro sin procesar se convierte en una cadena y se asigna a un objeto principal.resource.attribute.labels con la clave "entity_id".
entity_val principal.resource.attribute.labels.key=entity_val, principal.resource.attribute.labels.value=%{entity_val} El valor de entity_val del registro sin procesar se asigna a un objeto principal.resource.attribute.labels con la clave "entity_val", a menos que sea igual al valor de ip.
event.type metadata.event_type Determinado por la lógica del analizador en función de la presencia de los campos principal, target y network. Valores posibles: NETWORK_FLOW, NETWORK_UNCATEGORIZED, USER_RESOURCE_ACCESS y GENERIC_EVENT.
first_seen principal.asset.first_seen_time El valor de first_seen del registro sin procesar se convierte en una cadena, se analiza como milisegundos desde el inicio del registro de tiempo Unix y se asigna 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} El valor de flow_risk_bitmap del registro sin procesar se convierte en una cadena y se asigna a un objeto security_result.detection_fields con la clave "flow_risk_bitmap".
granularity security_result.detection_fields.key=granularity, security_result.detection_fields.value=%{granularity} El valor de granularity del registro sin procesar se convierte en una cadena y se asigna a un objeto security_result.detection_fields con la clave "granularity".
hash_entry_id security_result.detection_fields.key=hash_entry_id, security_result.detection_fields.value=%{hash_entry_id} El valor de hash_entry_id del JSON anidado se asigna a un objeto security_result.detection_fields con la clave "hash_entry_id".
host_ip principal.ip, principal.asset.ip La dirección IP extraída de la parte <INT>Oct 20 15:34:53 1.1.1.1 del mensaje se asigna a principal.ip y principal.asset.ip.
ifid principal.asset_id El valor de ifid del registro sin procesar se convierte en una cadena y se asigna a principal.asset_id con el prefijo "ifid: ".
ip principal.ip, principal.asset.ip o target.ip, target.asset.ip Si is_client es true, el valor de ip del registro sin procesar se asigna a principal.ip y principal.asset.ip. Si is_server es true, se asigna a target.ip y target.asset.ip.
is_cli_attacker security_result.detection_fields.key=is_cli_attacker, security_result.detection_fields.value=%{is_cli_attacker} El valor de is_cli_attacker del registro sin procesar se convierte en una cadena y se asigna a un objeto security_result.detection_fields con la clave "is_cli_attacker".
is_cli_victim security_result.detection_fields.key=is_cli_victim, security_result.detection_fields.value=%{is_cli_victim} El valor de is_cli_victim del registro sin procesar se convierte en una cadena y se asigna a un objeto security_result.detection_fields con la clave "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 El valor de is_flow_alert del registro sin procesar se convierte en una cadena y se asigna a un objeto security_result.detection_fields con la clave "is_flow_alert". Si is_flow_alert es true, también se crea un objeto security_result.detection_fields con la clave "alert type" y el valor "flow".
is_srv_attacker security_result.detection_fields.key=is_srv_attacker, security_result.detection_fields.value=%{is_srv_attacker} El valor de is_srv_attacker del registro sin procesar se convierte en una cadena y se asigna a un objeto security_result.detection_fields con la clave "is_srv_attacker".
is_srv_victim security_result.detection_fields.key=is_srv_victim, security_result.detection_fields.value=%{is_srv_victim} El valor de is_srv_victim del registro sin procesar se convierte en una cadena y se asigna a un objeto security_result.detection_fields con la clave "is_srv_victim".
metadata.product_name metadata.product_name=NTOPNG Codificado como "NTOPNG".
metadata.vendor_name metadata.vendor_name=%{vendor_name} El valor de vendor_name del mensaje se asigna a metadata.vendor_name.
name principal.hostname, principal.asset.hostname o target.hostname, target.asset.hostname Si is_client es true, el valor de name del registro sin procesar se asigna a principal.hostname y principal.asset.hostname. Si is_server es true, se asigna a target.hostname y target.asset.hostname.
ntopng_key security_result.detection_fields.key=ntopng_key, security_result.detection_fields.value=%{ntopng_key} El valor de ntopng.key (cuyo nombre se ha cambiado a ntopng_key) del JSON anidado se asigna a un objeto security_result.detection_fields con la clave "ntopng_key".
observation_point_id observer.asset_id El valor de observation_point_id del registro sin procesar se convierte en una cadena. Si no es "0", se asigna a observer.asset_id con el prefijo "id: ".
pool_id principal.resource.attribute.labels.key=pool_id, principal.resource.attribute.labels.value=%{pool_id} El valor de pool_id del registro sin procesar se convierte en una cadena y se asigna a un objeto principal.resource.attribute.labels con la clave "pool_id".
probe_ip intermediary.ip El valor de probe_ip del registro sin procesar se asigna a intermediary.ip.
proto.confidence security_result.confidence_details El valor de proto.confidence del registro sin procesar se convierte en una cadena y se asigna a security_result.confidence_details.
proto.http.last_method network.http.method El valor de proto.http.last_method del registro sin procesar se asigna a network.http.method.
proto.http.last_return_code network.http.response_code El valor de proto.http.last_return_code del registro sin procesar se convierte en un número entero y se asigna a network.http.response_code.
proto.http.last_server_name network.tls.client.server_name El valor de proto.http.server_name del registro sin procesar se asigna a network.tls.client.server_name.
proto.http.last_url network.http.referral_url El valor de proto.http.last_url del registro sin procesar se asigna a network.http.referral_url.
proto.http.last_user_agent network.http.user_agent El valor de proto.http.last_user_agent del registro sin procesar se asigna a network.http.user_agent.
proto.http.server_name network.tls.client.server_name El valor de proto.http.server_name del registro sin procesar se asigna a network.tls.client.server_name.
proto.l4 network.ip_protocol El valor de proto.l4 del registro sin procesar se asigna a network.ip_protocol.
proto_ndpi additional.fields.key=proto ndpi, additional.fields.value.string_value=%{proto_ndpi}, network.application_protocol El valor de proto.ndpi (cuyo nombre se ha cambiado a proto_ndpi) del registro sin procesar se asigna a un objeto additional.fields con la clave "proto ndpi". También se usa para determinar el valor de network.application_protocol en función de palabras clave como "NTP" y "HTTP".
proto_ndpi_app principal.application El valor de proto_ndpi_app del registro sin procesar se asigna a principal.application.
proto_ndpi_breed security_result.detection_fields.key=proto_ndpi_breed, security_result.detection_fields.value=%{proto_ndpi_breed} El valor de proto_ndpi_breed del registro sin procesar se convierte en una cadena y se asigna a un objeto security_result.detection_fields con la clave "proto_ndpi_breed".
proto_ndpi_cat security_result.category_details El valor de proto_ndpi_cat del registro sin procesar se asigna 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} El valor de proto_ndpi_cat_id del registro sin procesar se convierte en una cadena y se asigna a un objeto security_result.detection_fields con la clave "proto_ndpi_cat_id".
score security_result.detection_fields.key=score, security_result.detection_fields.value=%{score} El valor de score del registro sin procesar se convierte en una cadena y se asigna a un objeto security_result.detection_fields con la clave "score".
srv2cli_bytes network.received_bytes El valor de srv2cli_bytes del registro sin procesar se convierte en un número entero sin signo y se asigna a network.received_bytes.
srv_asn target.resource.attribute.labels.key=srv_asn, target.resource.attribute.labels.value=%{srv_asn} El valor de srv_asn del registro sin procesar se convierte en una cadena y se asigna a un objeto target.resource.attribute.labels con la clave "srv_asn".
srv_blacklisted target.resource.attribute.labels.key=srv_blacklisted, target.resource.attribute.labels.value=%{srv_blacklisted} El valor de srv_blacklisted del registro sin procesar se convierte en una cadena y se asigna a un objeto target.resource.attribute.labels con la clave "srv_blacklisted".
srv_city_name target.location.city El valor de srv_city_name del registro sin procesar se asigna a target.location.city.
srv_continent_name target.resource.attribute.labels.key=srv_continent_name, target.resource.attribute.labels.value=%{srv_continent_name} El valor de srv_continent_name del registro sin procesar se asigna a un objeto target.resource.attribute.labels con la clave "srv_continent_name".
srv_country_name target.location.country_or_region El valor de srv_country_name del registro sin procesar se asigna 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} El valor de srv_host_pool_id del registro sin procesar se convierte en una cadena y se asigna a un objeto target.resource.attribute.labels con la clave "srv_host_pool_id".
srv_ip target.ip, target.asset.ip El valor de srv_ip del registro sin procesar se asigna a target.ip y target.asset.ip.
srv_localhost target.resource.attribute.labels.key=srv_localhost, target.resource.attribute.labels.value=%{srv_localhost} El valor de srv_localhost del registro sin procesar se convierte en una cadena y se asigna a un objeto target.resource.attribute.labels con la clave "srv_localhost".
srv_location target.location.name El valor de srv_location del registro sin procesar se convierte en una cadena. Si no es "0", se asigna a target.location.name.
srv_location_lat target.location.region_coordinates.latitude El valor de srv_location_lat del registro sin procesar se asigna a target.location.region_coordinates.latitude.
srv_location_lon target.location.region_coordinates.longitude El valor de srv_location_lon del registro sin procesar se asigna a target.location.region_coordinates.longitude.
srv_name target.hostname, target.asset.hostname El valor de srv_name del registro sin procesar se asigna a target.hostname y target.asset.hostname.
srv_network target.resource.attribute.labels.key=srv_network, target.resource.attribute.labels.value=%{srv_network} El valor de srv_network del registro sin procesar se convierte en una cadena y se asigna a un objeto target.resource.attribute.labels con la clave "srv_network".
srv_port target.port El valor de srv_port del registro sin procesar se convierte en un número entero y se asigna a target.port.
tstamp additional.fields.key=tstamp, additional.fields.value.string_value=%{tstamp} El valor de tstamp del registro sin procesar se convierte en una cadena y se asigna a un objeto additional.fields con la clave "tstamp".
vlan_id principal.resource.attribute.labels.key=vlan_id, principal.resource.attribute.labels.value=%{vlan_id} El valor de vlan_id del registro sin procesar se convierte en una cadena y se asigna a un objeto principal.resource.attribute.labels con la clave "vlan_id".
when metadata.event_timestamp El valor de when del registro sin procesar se analiza como una marca de tiempo y se asigna a metadata.event_timestamp.

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