Recoger registros de ntopng
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:
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Añadir feed.
- En la página siguiente, haga clic en Configurar un solo feed.
- En el campo Nombre del feed, escriba un nombre para el feed (por ejemplo, Registros de Ntopng).
- Selecciona Webhook como Tipo de fuente.
- Seleccione Ntopng como Tipo de registro.
- Haz clic en Siguiente.
- 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
.
- Delimitador de división: el delimitador que se usa para separar las líneas de registro, como
- Haz clic en Siguiente.
- Revise la configuración del feed en la pantalla Finalizar y, a continuación, haga clic en Enviar.
- Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
- 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.
- 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.
- Haz clic en Listo.
Crear una clave de API para la feed de webhook
Ve a la consolaGoogle Cloud > Credenciales.
Haz clic en Crear credenciales y, a continuación, selecciona Clave de API.
Restringe el acceso de la clave de API a la API Google Security Operations.
Especificar la URL del endpoint
- En tu aplicación cliente, especifica la URL del endpoint HTTPS proporcionada en el feed de webhook.
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.
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
- Inicia sesión en la interfaz web de ntopng.
- Selecciona el menú Sistema en el menú desplegable.
- Ve a Notificaciones > Puntos finales.
- Haz clic en Añadir .
- 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.
- Haz clic en Añadir.
- Ve a Notificaciones > Destinatarios.
- Haz clic en Añadir .
- 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.
- Haz clic en Probar destinatario para verificar la conexión.
- Haz clic en Añadir para guardar el webhook.
Configurar suscriptores de recursos de webhook de ntopng
- Ve a Pools.
Selecciona el recurso del que quieras compartir los eventos.
En la columna Acciones, haga clic en el icono del lápiz.
Haga clic en el desplegable Destinatarios.
Selecciona el destinatario del webhook Google SecOps.
Haz clic en Editar para guardar la configuración.
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.