Recopila registros de ntopng
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
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar nueva.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de ntopng).
- Selecciona Webhook como el Tipo de origen.
- Selecciona Ntopng como el Tipo de registro.
- Haz clic en Siguiente.
- 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.
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
- Haz clic en Siguiente.
- Revisa la configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
- Haz clic en Generate Secret Key para generar una clave secreta que autentique este feed.
- 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.
- 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.
- Haz clic en Listo.
Crea una clave de API para el feed de webhook
Ve a consola de Google Cloud > Credenciales.
Haz clic en Crear credenciales y selecciona Clave de API.
Restringe el acceso de la clave de API a la API de Google Security Operations.
Especifica la URL del extremo
- En tu aplicación cliente, especifica la URL del extremo HTTPS que se proporciona en el feed de webhook.
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.
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
- Accede a la interfaz web de ntopng.
- Selecciona el menú Sistema en el menú desplegable.
- Ve a Notificaciones > Endpoints.
- Haz clic en Agregar .
- 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.
- Haz clic en Agregar.
- Ve a Notificaciones > Destinatarios.
- Haz clic en Agregar .
- 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.
- Haz clic en Probar destinatario para verificar la conexión.
- Haz clic en Agregar para guardar el webhook.
Configura suscriptores de recursos de webhook de ntopng
- Ve a Grupos.
Selecciona el recurso desde el que deseas compartir los eventos.
Haz clic en el ícono de lápiz en la columna Acciones.
Haz clic en el menú desplegable Destinatarios.
Selecciona el destinatario del webhook de Google SecOps.
Haz clic en Editar para guardar la configuración.
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.