Recoger registros de Cisco IOS

Disponible en:

En este documento se explica cómo puede ingerir registros de Cisco IOS en Google Security Operations mediante Bindplane. El analizador transforma los mensajes syslog sin procesar en un formato estructurado conforme al modelo de datos unificado (UDM). Primero inicializa y extrae campos mediante patrones grok basados en formatos syslog comunes de Cisco IOS. A continuación, asigna los campos extraídos a los campos de UDM correspondientes, categoriza los eventos y enriquece los datos con contexto adicional antes de generar el registro estructurado en formato UDM.

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 al router, al conmutador o al servidor Cisco IOS

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_IOS'
            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 Syslog en un dispositivo Cisco IOS

  1. Inicia sesión en el dispositivo Cisco IOS mediante SSH o una conexión de consola.
  2. Introduce el siguiente comando para el modo con privilegios:

    enable
    
  3. Introduce el siguiente comando para acceder al modo de configuración:

    conf t
    
  4. Introduce los siguientes comandos para configurar syslog:

    logging <bindplane_IP_address>
    logging source-interface <interface>
    
    • Cambia <bindplane_IP_address> por la dirección IP real del agente de Bindplane.
    • Cambia <interface> por la interfaz de comunicación real.
  5. Introduce los siguientes comandos para configurar el nivel de prioridad:

    logging trap information
    logging console information
    
  6. Introduce el siguiente comando para configurar la instalación de syslog:

    logging facility syslog
    
  7. Introduce el siguiente comando para copiar running-config en startup-config:

    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, asigna el valor ALLOW. Si AcctRequest-Flags contiene Stop, asigna el valor BLOCK.
AuthenticationIdentityStore additional.fields.key = AuthenticationIdentityStore, value = AuthenticationIdentityStore Valor tomado del campo AuthenticationIdentityStore.
AuthenticationMethod additional.fields.key = AuthenticationMethod, value = AuthenticationMethod Valor tomado 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, asigna el valor TACACS.
AVPair_priv-lvl security_result.detection_fields.key = AVPair_priv-lvl, value = AVPair_priv-lvl Valor tomado 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 está asignado al objeto IDM.
cisco_message metadata.description Valor tomado del campo cisco_message.
cisco_mnemonic security_result.rule_name Valor tomado del campo cisco_mnemonic.
cisco_severity security_result.severity Se asigna a diferentes niveles de gravedad en función del valor: 0: ALERTA, 1: CRÍTICO, 2: ALTO, 3: ERROR, 4: MEDIO, 5: BAJO, 6: INFORMATIVO y 7: INFORMATIVO.
cisco_severity security_result.severity_details Se asigna a diferentes detalles de gravedad en función del 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 ha asignado a diferentes tipos de evento en función del 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 Valor tomado del campo ClientLatency.
CmdSet additional.fields.key = CmdSet, value = CmdSet Valor tomado 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.
description 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 Valor tomado del campo dst_user.
EnableFlag security_result.detection_fields.key = EnableFlag, value = EnableFlag Valor tomado del campo EnableFlag.
IdentityGroup additional.fields.key = IdentityGroup, value = IdentityGroup Valor tomado del campo IdentityGroup.
IdentitySelectionMatchedRule security_result.detection_fields.key = IdentitySelectionMatchedRule, value = IdentitySelectionMatchedRule Valor tomado 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, se asigna el valor 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 Valor tomado del campo MatchedCommandSet.
mensaje No está asignado al objeto IDM.
metadata_event_type metadata.event_type Valor tomado del campo metadata_event_type. Si está vacío o es GENERIC_EVENT, se asigna el valor NETWORK_UNCATEGORIZED si principal_mid_present y target_mid_present son true, USER_UNCATEGORIZED si principal_userid_present es true, STATUS_UPDATE si principal_mid_present es true o GENERIC_EVENT en caso contrario. Si Service contiene Login, asigna el valor USER_LOGIN si principal_userid_present, principal_mid_present y target_mid_present son true, o USER_UNCATEGORIZED si principal_userid_present es true.
Model_Name additional.fields.key = Model_Name, value = Model_Name Valor tomado 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 Valor tomado del campo NetworkDeviceName.
NetworkDeviceName principal.hostname Valor tomado 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 Nivel de privilegio.
product_event_type metadata.product_event_type Valor tomado del campo product_event_type.
Protocolo additional.fields.key = Protocol, value = Protocol Valor tomado del campo Protocol.
protocolo network.application_protocol Si el protocolo es HTTPS, asigna el valor HTTPS.
protocolo network.ip_protocol Si el protocolo es TCP o UDP, se asigna el valor en mayúsculas del protocolo.
reason security_result.summary Valor tomado del campo de motivo.
región principal.location.country_or_region Valor tomado del campo de región.
Remote-Address target.asset.ip Valor tomado del campo Remote-Address después de validarlo como dirección IP.
Remote-Address target.ip Valor tomado del campo Remote-Address después de validarlo como dirección IP.
RequestLatency security_result.detection_fields.key = RequestLatency, value = RequestLatency Valor tomado del campo RequestLatency.
Respuesta additional.fields.key = Response, value = Response Valor tomado del campo Response.
SelectedAccessService security_result.action_details Valor tomado del campo SelectedAccessService.
SelectedAuthenticationIdentityStores security_result.detection_fields.key = SelectedAuthenticationIdentityStores, value = SelectedAuthenticationIdentityStores Valor tomado del campo SelectedAuthenticationIdentityStores.
SelectedCommandSet additional.fields.key = SelectedCommandSet, value = SelectedCommandSet Valor tomado 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 Service-Argument.
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 Valor tomado del campo source_facility.
source_facility principal.hostname Valor tomado 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 Valor tomado del campo src_mac después de sustituir . 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, se toma el valor del campo Usuario. Si sigue vacío, toma el valor del campo StepData_9.
src_user_name principal.user.user_display_name Valor tomado del campo src_user_name.
Paso additional.fields.key = Step, value = Step Valor tomado del campo Paso.
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 tomado 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 Valor tomado del campo de marca de tiempo después de eliminar 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 Tipo.
Usuario principal.user.userid Valor tomado del campo Usuario si src_user_id está vacío.
UserType additional.fields.key = UserType, value = UserType Valor tomado del campo UserType.
metadata.vendor_name Su valor debe ser CISCO.
metadata.product_name Su valor debe ser CISCO_IOS.
metadata.log_type Su valor debe ser CISCO_IOS.

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.