Recopilar registros de Cisco Prime

Disponible en:

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

  1. Inicia sesión en la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recogida.
  3. 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

  1. Inicia sesión en la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. 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

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. Ejecuta el siguiente comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalación de Linux

  1. Abre un terminal con privilegios de superusuario o sudo.
  2. 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

  1. 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).
  2. 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
    

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

  1. 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
  2. Inicia sesión en la interfaz de usuario web de Cisco Prime.

  3. Ve a Administración > Configuración > Configuración del sistema.

  4. Selecciona Correo y notificaciones > Cambiar notificación de auditoría.

  5. Marca la casilla Enable Change Audit Notification (Habilitar notificación de auditoría de cambios).

  6. Haga clic en el botón + para especificar un servidor syslog.

  7. 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.
  8. Haz clic en Guardar.

Configurar el reenvío de registros de auditoría del sistema como syslog

  1. Inicia sesión en la interfaz de usuario web de Cisco Prime.
  2. Ve a Administración > Configuración > Registro > Opciones de registro de syslog.
  3. Marca la casilla Habilitar Syslog.
  4. 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.
  5. 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.