Recopila registros de ntopng

Se admite en los siguientes países:

Descripción general

Este analizador extrae registros de supervisión de red de ntopng en formato SYSLOG o JSON. Analiza el mensaje de registro, convierte los campos relevantes al formato de la UDM y enriquece el evento con metadatos, como los nombres de productos y proveedores. El analizador también controla las estructuras JSON anidadas y asigna campos ntopng específicos a eventos de red de la AUA, incluidas las alertas de flujo y el acceso a los recursos del usuario.

Antes de comenzar

  • Asegúrate de tener una instancia de Google SecOps.
  • Asegúrate de tener acceso con privilegios a ntopng.

Configura un feed en Google SecOps para transferir los registros de ntopng

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar nueva.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de ntopng).
  4. Selecciona Webhook como el Tipo de origen.
  5. Selecciona Ntopng como el Tipo de registro.
  6. Haz clic en Siguiente.
  7. Opcional: Especifica valores para los siguientes parámetros de entrada:
    • Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como \n.
    • Espacio de nombres de recursos: Es el espacio de nombres de recursos.
    • Etiquetas de transferencia: Es la etiqueta que se aplica a los eventos de este feed.
  8. Haz clic en Siguiente.
  9. Revisa la configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
  10. Haz clic en Generate Secret Key para generar una clave secreta que autentique este feed.
  11. Copia y almacena la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes volver a generar una clave secreta nueva, pero esta acción hace que la clave secreta anterior quede obsoleta.
  12. En la pestaña Detalles, copia la URL del extremo del feed del campo Información del extremo. Debes especificar esta URL de extremo en tu aplicación cliente.
  13. Haz clic en Listo.

Crea una clave de API para el feed de webhook

  1. Ve a consola de Google Cloud > Credenciales.

    Ir a Credenciales

  2. Haz clic en Crear credenciales y selecciona Clave de API.

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

Especifica la URL del extremo

  1. En tu aplicación cliente, especifica la URL del extremo HTTPS que se proporciona 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 en el siguiente formato:

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

    Recomendación: Especifica la clave de API como un 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 con parámetros de consulta en el siguiente formato:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    Reemplaza lo siguiente:

    • ENDPOINT_URL: Es la URL del extremo del feed.
    • API_KEY: Es la clave de API para autenticarse en Google Security Operations.
    • SECRET: Es la clave secreta que generaste para autenticar el feed.

Cómo configurar un webhook en ntopng para Google SecOps

  1. Accede a la interfaz web de ntopng.
  2. Selecciona el menú Sistema en el menú desplegable.
  3. Ve a Notificaciones > Endpoints.
  4. Haz clic en Agregar .
  5. Especifica valores para los siguientes parámetros de entrada:
    • Nombre del extremo: Proporciona un nombre único y descriptivo (por ejemplo, Google SecOps).
    • Tipo de extremo: Selecciona Webhook en la lista.
    • URL de webhook: Ingresa el ENDPOINT_URL de SecOps de Google con API_KEY y SECRET.
  6. Haz clic en Agregar.
  7. Ve a Notificaciones > Destinatarios.
  8. Haz clic en Agregar .
  9. Especifica valores para los siguientes parámetros de entrada:
    • Nombre del destinatario: Proporciona un nombre único y descriptivo (por ejemplo, Google SecOps).
    • Seleccionar extremo: Selecciona el extremo que creaste antes.
    • Gravedad: Selecciona la gravedad que se enviará a Google SecOps (por ejemplo, Información, Advertencia y Error).
    • Filtro de categorías: Selecciona qué enviar a Google SecOps.
  10. Haz clic en Probar destinatario para verificar la conexión.
  11. Haz clic en Agregar para guardar el webhook.

Configura suscriptores de recursos de webhook de ntopng

  1. Ve a Grupos.
  2. Selecciona el recurso desde el que deseas compartir los eventos.

  3. Haz clic en el ícono de lápiz en la columna Acciones.

  4. Haz clic en el menú desplegable Destinatarios.

  5. Selecciona el destinatario del webhook de Google SecOps.

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

  7. Repite el proceso para 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 firma 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 Se determina según 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, 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 la época 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 "granularidad".
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 verdadero, el valor de ip del registro sin procesar se asigna a principal.ip y principal.asset.ip. Si is_server es verdadero, 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 verdadero, 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 Está codificado de forma fija en "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 verdadero, el valor de name del registro sin procesar se asigna a principal.hostname y principal.asset.hostname. Si is_server es verdadero, 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 (renombrado 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 cambió 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 firma 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.

Cambios

2024-02-01

  • Corrección de errores:
  • Se cambió "=>" a ":" en el comentario del encabezado del archivo conf.

2023-11-16

  • Sin embargo, el analizador se creó recientemente.