Recopilar registros de Cisco Prime
En este documento se explica cómo ingerir registros de Cisco Prime en Google Security Operations mediante Bindplane. El analizador utiliza patrones Grok para extraer campos de varios formatos de mensajes syslog y asignarlos a un modelo de datos unificado (UDM). Gestiona diferentes estructuras de registro, incluidos los pares clave-valor, y enriquece los datos con información de usuario, principal, objetivo y seguridad en función de palabras clave y patrones específicos encontrados en los mensajes de registro.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps
- Windows 2016 o versiones posteriores, o un host Linux con
systemd
- Si se ejecuta a través de un proxy, asegúrate de que los puertos del cortafuegos estén abiertos.
- Acceso privilegiado a Cisco Prime
Obtener el archivo de autenticación de ingestión de Google SecOps
- Inicia sesión en la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recogida.
- Descarga el archivo de autenticación de ingestión. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane.
Obtener el ID de cliente de Google SecOps
- Inicia sesión en la consola de Google SecOps.
- Ve a Configuración de SIEM > Perfil.
- Copia y guarda el ID de cliente de la sección Detalles de la organización.
Instalar el agente de Bindplane
Instala el agente de Bindplane en tu sistema operativo Windows o Linux siguiendo las instrucciones que se indican a continuación.
Instalación de ventanas
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el siguiente comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalación de Linux
- Abre un terminal con privilegios de superusuario o sudo.
Ejecuta el siguiente comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Recursos de instalación adicionales
Para ver más opciones de instalación, consulta la guía de instalación.
Configurar el agente de BindPlane para ingerir Syslog y enviarlo a Google SecOps
- Accede al archivo de configuración:
- Busca el archivo
config.yaml
. Normalmente, se encuentra en el directorio/etc/bindplane-agent/
en Linux o en el directorio de instalación en Windows. - Abre el archivo con un editor de texto (por ejemplo,
nano
,vi
o Bloc de notas).
- Busca el archivo
Edita el archivo
config.yaml
de la siguiente manera:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'CISCO_PRIME' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- Sustituye el puerto y la dirección IP según sea necesario en tu infraestructura.
- Sustituye
<customer_id>
por el ID de cliente real. - Actualiza
/path/to/ingestion-authentication-file.json
a la ruta en la que se guardó el archivo de autenticación en la sección Obtener el archivo de autenticación de ingestión de Google SecOps.
Reinicia el agente de Bindplane para aplicar los cambios
Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:
sudo systemctl restart bindplane-agent
Para reiniciar el agente de Bindplane en Windows, puedes usar la consola Servicios o introducir el siguiente comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar notificaciones de auditoría de cambios y receptores syslog
Puede configurar el sistema para que envíe notificaciones de syslog sobre las auditorías de cambios relacionadas con los siguientes eventos:
- Actualizaciones del inventario de dispositivos
- Modificaciones de la configuración
- Cambios en las plantillas de configuración
- Operaciones relacionadas con plantillas
- Actividades de los usuarios, como inicios y cierres de sesión, y modificaciones de la cuenta
Inicia sesión en la interfaz de usuario web de Cisco Prime.
Ve a Administración > Configuración > Configuración del sistema.
Selecciona Correo y notificaciones > Cambiar notificación de auditoría.
Marca la casilla Enable Change Audit Notification (Habilitar notificación de auditoría de cambios).
Haga clic en el botón + para especificar un servidor syslog.
Proporciona los siguientes detalles de configuración:
- Introduce la dirección IP del agente de Bindplane.
- Selecciona el protocolo UDP.
- Introduce el número de puerto del agente de Bindplane.
Haz clic en Guardar.
Configurar el reenvío de registros de auditoría del sistema como syslog
- Inicia sesión en la interfaz de usuario web de Cisco Prime.
- Ve a Administración > Configuración > Registro > Opciones de registro de syslog.
- Marca la casilla Habilitar Syslog.
- Proporcione los siguientes detalles de configuración:
- Introduce la dirección IP del agente de Bindplane.
- Selecciona el protocolo UDP.
- Introduce el número de puerto del agente de Bindplane.
- Seleccione uno de los ocho centros o
local0
.
- Haz clic en Guardar.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
client_ip_address | principal.ip, principal.asset.ip | El valor se toma del campo client_ip_address , que se extrae del registro sin procesar mediante el filtro kv. |
fecha | metadata.event_timestamp | El valor se toma del campo date , que se extrae del registro sin procesar mediante patrones grok y, a continuación, se convierte en una marca de tiempo mediante el filtro de fecha. |
description | security_result.description | El valor se toma del campo description , que se extrae del registro sin procesar mediante patrones grok. |
dest_mac | target.mac | El valor se toma del campo dest_mac , que se extrae del registro sin procesar mediante patrones grok y se convierte a minúsculas. |
device_id | principal.asset_id | El valor se toma del campo device_id , que se extrae del registro sin procesar mediante patrones grok. El valor final tiene el formato "ID de dispositivo: |
device_ip | principal.ip, principal.asset.ip | El valor se toma del campo device_ip , que se extrae del registro sin procesar mediante el filtro kv. A continuación, el valor se analiza como una matriz JSON y cada dirección IP de la matriz se añade a los campos UDM. |
device_type | target.resource.attribute.labels.value | El valor se toma del campo device_type , que se extrae del registro sin procesar mediante patrones grok. |
dst_user | target.user.userid | El valor se toma del campo dst_user , que se extrae del registro sin procesar mediante patrones grok. |
correo electrónico | src.hostname | El valor se toma del campo email , que se extrae del registro sin procesar mediante patrones grok. |
file_path | principal.process.file.full_path | El valor se toma del campo file_path , que se extrae del registro sin procesar mediante patrones grok. |
nombre de host | target.resource.attribute.labels.value | El valor se toma del campo hostname , que se extrae del registro sin procesar mediante patrones grok. |
id | principal.asset_id | El valor se toma del campo id , que se extrae del registro sin procesar mediante patrones grok. El valor final tiene el formato "ID de entidad: |
ip_address | principal.ip, principal.asset.ip | El valor se toma del campo ip_address , que se extrae del registro sin procesar mediante patrones grok. |
log_level | security_result.severity | El valor se toma del campo log_level , que se extrae del registro sin procesar mediante patrones grok. Se usa para determinar el nivel de gravedad si no se incluye severity . |
mac_address | principal.mac, source_mac | El valor se toma del campo mac_address , que se extrae del registro sin procesar mediante patrones grok y se convierte a minúsculas. También se usa como valor de source_mac si este está vacío.source_mac |
oid | principal.asset.product_object_id | El valor se toma del campo oid , que se extrae del registro sin procesar mediante patrones grok. |
principal_ip | principal.ip, principal.asset.ip | El valor se toma del campo principal_ip , que se extrae del registro sin procesar mediante patrones grok. |
principal_port | principal.port | El valor se toma del campo principal_port , que se extrae del registro sin procesar mediante patrones grok y se convierte en un número entero. |
process_name | principal.resource.name | El valor se toma del campo process_name , que se extrae del registro sin procesar mediante patrones grok. |
sec_description | security_result.description | El valor se toma del campo sec_description , que se extrae del registro sin procesar mediante patrones grok. |
session_id | network.session_id | El valor se toma del campo session_id , que se extrae del registro sin procesar mediante patrones grok. |
gravedad | security_result.severity | El valor se toma del campo severity , que se extrae del registro sin procesar mediante patrones grok. Se usa para determinar el nivel de gravedad, si está presente. |
source_mac | principal.mac | El valor se toma del campo source_mac , que se extrae del registro sin procesar mediante patrones grok y se convierte a minúsculas. Si está vacío, toma el valor de mac_address . |
resumen | security_result.summary | El valor se toma del campo summary , que se extrae del registro sin procesar mediante patrones grok. |
target_ip | target.ip, target.asset.ip | El valor se toma del campo target_ip , que se extrae del registro sin procesar mediante patrones grok. |
thread_pool | metadata.product_event_type | El valor se toma del campo thread_pool , que se extrae del registro sin procesar mediante patrones grok. |
timestamp | metadata.event_timestamp | El valor se toma del campo timestamp , que se extrae del registro sin procesar mediante patrones grok y, a continuación, se convierte en una marca de tiempo mediante el filtro de fecha. |
Tipo | metadata.product_event_type | El valor se toma del campo Type , que se extrae del registro sin procesar mediante el filtro kv. |
user_name | principal.user.userid | El valor se toma del campo user_name , que se extrae del registro sin procesar mediante patrones grok o el filtro kv. |
metadata.event_type | metadata.event_type | El valor se determina en función de la presencia de campos y patrones específicos en el registro sin procesar. La lógica incluye lo siguiente: - Valor predeterminado: GENERIC_EVENT - Si thread_pool es "EmailAlertHelper": EMAIL_TRANSACTION - Si application_name es "aesSystem" y desc contiene "HealthMonitorHelper": STATUS_HEARTBEAT - Si user_present y target_resource_present son verdaderos: USER_RESOURCE_ACCESS - Si user_present es verdadero: USER_UNCATEGORIZED - Si principal_present y target_present son verdaderos: NETWORK_CONNECTION - Si principal_present es verdadero: STATUS_UPDATE - Si dst_user está presente y description contiene "logout": USER_LOGOUT - Si dst_user está presente y description no contiene "logout": USER_LOGIN |
metadata.vendor_name | metadata.vendor_name | El valor es "CISCO". |
metadata.product_name | metadata.product_name | El valor es "CISCO_PRIME". |
metadata.log_type | metadata.log_type | El valor es "CISCO_PRIME". |
network.session_id | network.session_id | El valor se toma del campo session_id , que se extrae del registro sin procesar mediante patrones grok. |
principal.application | principal.application | El valor se toma del campo application_name , que se extrae del registro sin procesar mediante patrones grok. |
principal.asset.ip | principal.asset.ip | El valor puede proceder de los siguientes campos: client_ip_address , device_ip , ip_address , principal_ip y target_ip . |
principal.asset.product_object_id | principal.asset.product_object_id | El valor se toma del campo oid , que se extrae del registro sin procesar mediante patrones grok. |
principal.asset_id | principal.asset_id | El valor puede proceder de los siguientes campos: device_id y id . |
principal.ip | principal.ip | El valor puede proceder de los siguientes campos: client_ip_address , device_ip , ip_address y principal_ip . |
principal.mac | principal.mac | El valor puede proceder de los siguientes campos: mac_address y source_mac . |
principal.port | principal.port | El valor se toma del campo principal_port , que se extrae del registro sin procesar mediante patrones grok y se convierte en un número entero. |
principal.process.file.full_path | principal.process.file.full_path | El valor se toma del campo file_path , que se extrae del registro sin procesar mediante patrones grok. |
principal.resource.name | principal.resource.name | El valor se toma del campo process_name , que se extrae del registro sin procesar mediante patrones grok. |
principal.user.userid | principal.user.userid | El valor se toma del campo user_name , que se extrae del registro sin procesar mediante patrones grok o el filtro kv. |
security_result.action | security_result.action | El valor se define como "BLOCK" si description contiene "fail". |
security_result.description | security_result.description | El valor puede proceder de los siguientes campos: desc , description y sec_description . |
security_result.severity | security_result.severity | El valor puede proceder de los siguientes campos: log_level y severity . |
security_result.summary | security_result.summary | El valor se toma del campo summary , que se extrae del registro sin procesar mediante patrones grok. |
src.hostname | src.hostname | El valor se toma del campo email , que se extrae del registro sin procesar mediante patrones grok. |
target.asset.ip | target.asset.ip | El valor se toma del campo target_ip , que se extrae del registro sin procesar mediante patrones grok. |
target.ip | target.ip | El valor se toma del campo target_ip , que se extrae del registro sin procesar mediante patrones grok. |
target.mac | target.mac | El valor se toma del campo dest_mac , que se extrae del registro sin procesar mediante patrones grok y se convierte a minúsculas. |
target.resource.attribute.labels.key | target.resource.attribute.labels.key | El valor se asigna a "Device Type" o "Device Hostname" en función del contexto. |
target.resource.attribute.labels.value | target.resource.attribute.labels.value | El valor puede proceder de los siguientes campos: device_type y hostname . |
target.user.userid | target.user.userid | El valor se toma del campo dst_user , que se extrae del registro sin procesar mediante patrones grok. |
extensions.auth.mechanism | extensions.auth.mechanism | El valor es "USERNAME_PASSWORD" si dst_user está presente y description contiene "password". |
extensions.auth.type | extensions.auth.type | El valor es "MACHINE" si dst_user está presente. |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.