Recopila registros de Cisco IOS

Versión del analizador: 23.0

Compatible con:

En este documento, se explica cómo transferir registros de Cisco IOS a Google Security Operations con el agente de Bindplane.

Los dispositivos Cisco IOS generan mensajes de syslog para eventos del sistema, cambios de estado de la interfaz, coincidencias de ACL, autenticación y eventos de enrutamiento. El analizador extrae campos con patrones de Grok y los asigna al modelo de datos unificado (UDM).

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Windows Server 2016 o versiones posteriores, o host de Linux con systemd
  • Conectividad de red entre el agente de Bindplane y el dispositivo Cisco IOS
  • Si se ejecuta detrás de un proxy, asegúrate de que los puertos de firewall estén abiertos según los requisitos del agente de Bindplane.
  • Acceso con privilegios al dispositivo Cisco IOS a través de SSH o la consola

Obtén el archivo de autenticación de transferencia de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recopilación.
  3. Descarga el archivo de autenticación de transferencia.
  4. Guarda el archivo de forma segura en el sistema en el que se instalará el agente de Bindplane.

Obtén el ID de cliente de Google SecOps

  1. Accede a 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.

Instala el agente de BindPlane

Instala el agente de Bindplane en tu sistema operativo Windows o Linux según las siguientes instrucciones.

Instalación en Windows

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

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Espera a que se complete la instalación.

  4. Ejecuta el siguiente comando para verificar la instalación:

    sc query observiq-otel-collector
    

    El servicio debería mostrarse como RUNNING.

Instalación en Linux

  1. Abre una terminal con privilegios de administrador o sudo.
  2. Ejecuta el comando siguiente:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Espera a que se complete la instalación.

  4. Ejecuta el siguiente comando para verificar la instalación:

    sudo systemctl status observiq-otel-collector
    

    El servicio debería mostrarse como activo (en ejecución).

Recursos de instalación adicionales

Para obtener más opciones de instalación y solucionar problemas, consulta la guía de instalación del agente de Bindplane.

Configura el agente de BindPlane para transferir registros de Syslog y enviarlos a Google SecOps

Ubica el archivo de configuración

  • Linux:

    sudo nano /etc/bindplane-agent/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Edita el archivo de configuración

  • Reemplaza todo el contenido de config.yaml con la siguiente configuración:

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/cisco_ios:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: '<customer_id>'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: CISCO_IOS
            raw_log_field: body
    
    service:
        pipelines:
            logs/cisco_ios_to_chronicle:
                receivers:
                    - udplog
                exporters:
                    - chronicle/cisco_ios
    

Parámetros de configuración

Reemplaza los marcadores de posición que se indican más abajo:

  • Configuración del receptor:

    • listen_address: Dirección IP y puerto que se escucharán:
      • 0.0.0.0 para escuchar en todas las interfaces (recomendado)
      • El puerto 514 es el puerto estándar de syslog (requiere acceso raíz en Linux; usa 1514 para acceso no raíz).
  • Configuración del exportador:

    • creds_file_path: Ruta de acceso completa al archivo de autenticación de la transferencia:
      • Linux: /etc/bindplane-agent/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • customer_id: ID de cliente copiado de la consola de Google SecOps
    • endpoint: URL del extremo regional:
      • EE.UU.: malachiteingestion-pa.googleapis.com
      • Europa: europe-malachiteingestion-pa.googleapis.com
      • Asia: asia-southeast1-malachiteingestion-pa.googleapis.com
      • Consulta Extremos regionales para obtener la lista completa.

Guarda el archivo de configuración

  • Después de editarlo, guarda el archivo:
    • Linux: Presiona Ctrl+O, luego Enter y, después, Ctrl+X.
    • Windows: Haz clic en Archivo > Guardar

Reinicia el agente de Bindplane para aplicar los cambios

  • Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:

    sudo systemctl restart observiq-otel-collector
    
    1. Verifica que el servicio esté en ejecución:

      ```bash
      sudo systemctl status observiq-otel-collector
      ```
      
    2. Revisa los registros en busca de errores:

      ```bash
      sudo journalctl -u observiq-otel-collector -f
      ```
      
  • Para reiniciar el agente de Bindplane en Windows, elige una de las siguientes opciones:

    • Símbolo del sistema o PowerShell como administrador:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Consola de Servicios:

      1. Presiona Win+R, escribe services.msc y presiona Intro.
      2. Busca observIQ OpenTelemetry Collector.
      3. Haz clic con el botón derecho y selecciona Reiniciar.
      4. Verifica que el servicio esté en ejecución:

        sc query observiq-otel-collector
        
      5. Revisa los registros en busca de errores:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Configura syslog en un dispositivo Cisco IOS

  1. Accede al dispositivo Cisco IOS con SSH o una conexión de consola.
  2. Ingresa al modo con privilegios:

    enable
    
  3. Ingresa al modo de configuración:

    conf t
    
  4. Configura syslog:

    logging <BINDPLANE_IP>
    logging source-interface <INTERFACE>
    
    • Reemplaza <BINDPLANE_IP> por la dirección IP real del agente de Bindplane.
    • Reemplaza <INTERFACE> por la interfaz de comunicación real.
  5. Configura el nivel de prioridad:

    logging trap information
    logging console information
    
  6. Configura la instalación de syslog:

    logging facility syslog
    
  7. Guarda la configuración:

    copy running-config startup-config
    

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
AcsSessionID network.session_id Valor tomado del campo AcsSessionID.
AcctRequest-Flags security_result.summary Valor tomado del campo AcctRequest-Flags.
AcctRequest-Flags security_result.action Si AcctRequest-Flags contiene Start, se establece en ALLOW. Si AcctRequest-Flags contiene Stop, se establece en BLOCK.
AuthenticationIdentityStore additional.fields.key = AuthenticationIdentityStore, value = AuthenticationIdentityStore Es el valor que se toma del campo AuthenticationIdentityStore.
AuthenticationMethod additional.fields.key = AuthenticationMethod, value = AuthenticationMethod Es el valor que se toma del campo AuthenticationMethod.
AuthenticationStatus security_result.summary Valor tomado del campo AuthenticationStatus.
Authen-Method security_result.detection_fields.key = Authen-Method, value = Authen-Method Valor tomado del campo Authen-Method.
Authen-Method extensions.auth.type Si Authen-Method contiene TacacsPlus, se establece en TACACS.
AVPair_priv-lvl security_result.detection_fields.key = AVPair_priv-lvl, value = AVPair_priv-lvl Es el valor que se toma del campo AVPair_priv-lvl.
AVPair_start_time additional.fields.key = AVPair_start_time, value = AVPair_start_time Valor tomado del campo AVPair_start_time.
AVPair_task_id additional.fields.key = AVPair_task_id, value = AVPair_task_id Valor tomado del campo AVPair_task_id.
AVPair_timezone additional.fields.key = AVPair_timezone, value = AVPair_timezone Valor tomado del campo AVPair_timezone.
auditid metadata.product_log_id Valor tomado del campo auditid.
cisco_facility No se asignó al objeto IDM.
cisco_message metadata.description Valor tomado del campo cisco_message.
cisco_mnemonic security_result.rule_name Es el valor que se toma del campo cisco_mnemonic.
cisco_severity security_result.severity Se asigna a diferentes niveles de gravedad según el valor: 0: ALERT, 1: CRITICAL, 2: HIGH, 3: ERROR, 4: MEDIUM, 5: LOW, 6: INFORMATIONAL, 7: INFORMATIONAL.
cisco_severity security_result.severity_details Se asigna a diferentes detalles de gravedad según el valor: 0: System unusable, 1: Immediate action needed, 2: Critical condition, 3: Error condition, 4: Warning condition, 5: Normal but significant condition, 6: Informational message only, 7: Appears during debugging only.
cisco_tag metadata.product_event_type Valor tomado del campo cisco_tag.
cisco_tag metadata.event_type Se asigna a diferentes tipos de eventos según el valor: SYS-6-LOGGINGHOST_STARTSTOP, TRACK-6-STATE, SYS-3-LOGGINGHOST_FAIL, CRYPTO-4-IKMP_NO_SA, HA_EM-3-FMPD_ACTION_NOTRACK, HA_EM-3-FMPD_ERROR: GENERIC_EVENT; IPSEC-3-REPLAY_ERROR, CRYPTO-4-RECVD_PKT_INV_SPI, IPSEC-3-HMAC_ERROR, FW-6-DROP_PKT, SEC-6-IPACCESSLOGP: NETWORK_UNCATEGORIZED; CRYPTO-4-IKMP_BAD_MESSAGE, CRYPTO-6-IKMP_NOT_ENCRYPTED, CRYPTO-6-IKMP_MODE_FAILURE: STATUS_UNCATEGORIZED; SYS-5-CONFIG_I: USER_UNCATEGORIZED.
ClientLatency additional.fields.key = ClientLatency, value = ClientLatency Es el valor que se toma del campo ClientLatency.
CmdSet additional.fields.key = CmdSet, value = CmdSet Es el valor que se toma del campo CmdSet.
comando principal.process.command_line Valor tomado del campo de comando.
CPMSessionID additional.fields.key = CPMSessionID, value = CPMSessionID Valor tomado del campo CPMSessionID.
descripción metadata.description Valor tomado del campo de descripción.
DestinationIPAddress target.asset.ip Valor tomado del campo DestinationIPAddress.
DestinationIPAddress target.ip Valor tomado del campo DestinationIPAddress.
DestinationPort target.port Valor tomado del campo DestinationPort.
Device_IP_Address principal.asset.ip Valor tomado del campo Device_IP_Address.
Device_IP_Address principal.ip Valor tomado del campo Device_IP_Address.
Device_Type additional.fields.key = Device_Type, value = Device_Type Valor tomado del campo Device_Type.
dst_ip target.asset.ip Valor tomado del campo dst_ip.
dst_ip target.ip Valor tomado del campo dst_ip.
dst_port target.port Valor tomado del campo dst_port.
dst_user target.user.userid Es el valor que se toma del campo dst_user.
EnableFlag security_result.detection_fields.key = EnableFlag, value = EnableFlag Es el valor que se toma del campo EnableFlag.
IdentityGroup additional.fields.key = IdentityGroup, value = IdentityGroup Es el valor que se toma del campo IdentityGroup.
IdentitySelectionMatchedRule security_result.detection_fields.key = IdentitySelectionMatchedRule, value = IdentitySelectionMatchedRule Es el valor que se toma del campo IdentitySelectionMatchedRule.
intermediary_host intermediary.hostname Valor tomado del campo intermediary_host.
intermediary_ip intermediary.ip Valor tomado del campo intermediary_ip.
IPSEC additional.fields.key = IPSEC, value = IPSEC Valor tomado del campo IPSEC.
ISEPolicySetName extensions.auth.type Si ISEPolicySetName contiene Tacacs, configúralo como TACACS.
IsMachineAuthentication additional.fields.key = IsMachineAuthentication, value = IsMachineAuthentication Valor tomado del campo IsMachineAuthentication.
IsMachineIdentity security_result.detection_fields.key = IsMachineIdentity, value = IsMachineIdentity Valor tomado del campo IsMachineIdentity.
Ubicación additional.fields.key = Location, value = Location Valor tomado del campo Ubicación.
MatchedCommandSet additional.fields.key = MatchedCommandSet, value = MatchedCommandSet Es el valor que se toma del campo MatchedCommandSet.
mensaje No se asignó al objeto IDM.
metadata_event_type metadata.event_type Es el valor que se toma del campo metadata_event_type. Si está vacío o es GENERIC_EVENT, se establece en NETWORK_UNCATEGORIZED si principal_mid_present y target_mid_present son verdaderos, USER_UNCATEGORIZED si principal_userid_present es verdadero, STATUS_UPDATE si principal_mid_present es verdadero o GENERIC_EVENT en cualquier otro caso. Si Service contiene Login, se debe establecer en USER_LOGIN si principal_userid_present, principal_mid_present y target_mid_present son verdaderos, o en USER_UNCATEGORIZED si principal_userid_present es verdadero.
Model_Name additional.fields.key = Model_Name, value = Model_Name Es el valor que se toma del campo Model_Name.
Nombre additional.fields.key = Name, value = Name Valor tomado del campo Nombre.
Network_Device_Profile additional.fields.key = Network_Device_Profile, value = Network_Device_Profile Valor tomado del campo Network_Device_Profile.
NetworkDeviceGroups additional.fields.key = NetworkDeviceGroups, value = NetworkDeviceGroups Valor tomado del campo NetworkDeviceGroups.
NetworkDeviceName principal.asset.hostname Es el valor que se toma del campo NetworkDeviceName.
NetworkDeviceName principal.hostname Es el valor que se toma del campo NetworkDeviceName.
NetworkDeviceProfileId principal.resource.product_object_id Valor tomado del campo NetworkDeviceProfileId.
pid principal.process.pid Valor tomado del campo PID.
Puerto principal.resource.attribute.labels.key = Port, value = Port Valor tomado del campo Puerto.
Nivel de privilegio security_result.detection_fields.key = Privilege-Level, value = Privilege-Level Valor tomado del campo Privilege-Level.
product_event_type metadata.product_event_type Es el valor que se toma del campo product_event_type.
Protocolo additional.fields.key = Protocol, value = Protocol Valor tomado del campo Protocolo.
protocolo network.application_protocol Si el protocolo es HTTPS, configúralo como HTTPS.
protocolo network.ip_protocol Si el protocolo es TCP o UDP, se establece en el valor en mayúsculas del protocolo.
Reason security_result.summary Es el valor que se toma del campo de motivo.
región principal.location.country_or_region Es el valor que se toma del campo de región.
Remote-Address target.asset.ip Valor tomado del campo Remote-Address después de validarlo como una dirección IP.
Remote-Address target.ip Valor tomado del campo Remote-Address después de validarlo como una dirección IP.
RequestLatency security_result.detection_fields.key = RequestLatency, value = RequestLatency Es el valor que se toma del campo RequestLatency.
Respuesta additional.fields.key = Response, value = Response Valor tomado del campo Response.
SelectedAccessService security_result.action_details Es el valor que se toma del campo SelectedAccessService.
SelectedAuthenticationIdentityStores security_result.detection_fields.key = SelectedAuthenticationIdentityStores, value = SelectedAuthenticationIdentityStores Es el valor que se toma del campo SelectedAuthenticationIdentityStores.
SelectedCommandSet additional.fields.key = SelectedCommandSet, value = SelectedCommandSet Es el valor que se toma del campo SelectedCommandSet.
Servicio additional.fields.key = Service, value = Service Valor tomado del campo Servicio.
Service-Argument additional.fields.key = Service-Argument, value = Service-Argument Valor tomado del campo Argumento de servicio.
gravedad, security_result.severity Si la gravedad contiene Notice, se establece en INFORMATIONAL.
Software_Version additional.fields.key = Software_Version, value = Software_Version Valor tomado del campo Software_Version.
source_facility principal.asset.hostname Es el valor que se toma del campo source_facility.
source_facility principal.hostname Es el valor que se toma del campo source_facility.
src_ip principal.asset.ip Valor tomado del campo src_ip.
src_ip principal.ip Valor tomado del campo src_ip.
src_mac principal.mac Es el valor que se toma del campo src_mac después de reemplazar . por :.
src_port principal.port Valor tomado del campo src_port.
src_user_id principal.user.userid Valor tomado del campo src_user_id. Si está vacío, toma el valor del campo Usuario. Si aún está vacío, toma el valor del campo StepData_9.
src_user_name principal.user.user_display_name Es el valor que se toma del campo src_user_name.
Paso additional.fields.key = Step, value = Step Valor tomado del campo Step.
StepData_10 principal.asset.hostname Valor tomado del campo StepData_10.
StepData_10 principal.hostname Valor tomado del campo StepData_10.
StepData_13 security_result.summary Valor tomado del campo StepData_13.
StepData_14 security_result.detection_fields.key = StepData_14, value = StepData_14 Valor tomado del campo StepData_14.
StepData_15 security_result.detection_fields.key = StepData_15, value = StepData_15 Valor tomado del campo StepData_15.
StepData_20 security_result.detection_fields.key = StepData_20, value = StepData_20 Valor tomado del campo StepData_20.
StepData_21 security_result.detection_fields.key = StepData_21, value = StepData_21 Valor tomado del campo StepData_21.
StepData_3 additional.fields.key = StepData_3, value = StepData_3 Valor tomado del campo StepData_3.
StepData_4 security_result.detection_fields.key = StepData_4, value = StepData_4 Valor tomado del campo StepData_4.
StepData_6 security_result.detection_fields.key = StepData_6, value = StepData_6 Valor tomado del campo StepData_6.
StepData_7 security_result.detection_fields.key = StepData_7, value = StepData_7 Valor tomado del campo StepData_7.
StepData_8 security_result.detection_fields.key = StepData_8, value = StepData_8 Valor tomado del campo StepData_8.
StepData_9 principal.user.userid Valor que se toma del campo StepData_9 si los campos src_user_id y User están vacíos.
target_host target.asset.hostname Valor tomado del campo target_host.
target_host target.hostname Valor tomado del campo target_host.
timestamp metadata.event_timestamp Es el valor que se toma del campo de marca de tiempo después de quitar los espacios adicionales y analizar la fecha.
TotalAuthenLatency additional.fields.key = TotalAuthenLatency, value = TotalAuthenLatency Valor tomado del campo TotalAuthenLatency.
ts metadata.event_timestamp Valor tomado del campo ts después de analizar la fecha.
Tipo security_result.category_details Valor tomado del campo Type.
Usuario principal.user.userid Es el valor que se toma del campo Usuario si src_user_id está vacío.
UserType additional.fields.key = UserType, value = UserType Es el valor que se toma del campo UserType.
metadata.vendor_name Se define en CISCO.
metadata.product_name Se define en CISCO_IOS.
metadata.log_type Se define en CISCO_IOS.
hostname event.idm.read_only_udm.principal.hostname y event.idm.read_only_udm.principal.asset.hostname Se asignó desde el registro de cambios
description event.idm.read_only_udm.metadata.description Se asignó desde el registro de cambios
application event.idm.read_only_udm.principal.application Se asignó desde el registro de cambios
userName event.idm.read_only_udm.target.user.userid Se asignó desde el registro de cambios
intermediary_host event.idm.read_only_udm.intermediary.ip Se asignó desde el registro de cambios
target_mac event.idm.read_only_udm.target.mac Se asignó desde el registro de cambios
target_mac event.idm.read_only_udm.target.asset.mac Se asignó desde el registro de cambios
fqdn event.idm.read_only_udm.principal.hostname y event.idm.read_only_udm.principal.asset.hostname Se asignó desde el registro de cambios
sec_action event.idm.read_only_udm.security_result.action Se asignó desde el registro de cambios
session_packet event.idm.read_only_udm.network.sent_bytes Se asignó desde el registro de cambios
missed_packets event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
inter_host event.idm.read_only_udm.intermediary.ip Se asignó desde el registro de cambios
target_host event.idm.read_only_udm.intermediary.ip Se asignó desde el registro de cambios
inter_host event.idm.read_only_udm.intermediary.hostname Se asignó desde el registro de cambios
tls_cipher network.tls.cipher Se asignó desde el registro de cambios
tls_client network.tls.client.supported_ciphers Se asignó desde el registro de cambios
Chassis_data additional.fields Se asignó desde el registro de cambios
extensions.auth.type AUTHTYPE_UNSPECIFIED Se asignó desde el registro de cambios
client_mac principal.mac Se asignó desde el registro de cambios
sequence_id","vap", "band", "channel", "rssi", "aid" and "radio additional.fields Se asignó desde el registro de cambios

Registro de cambios

Consulta el registro de cambios de este analizador

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.