Raccogliere i log di Cisco IOS

Supportato in:

Questo documento spiega come importare i log del sistema operativo Cisco Internetwork (IOS) in Google Security Operations utilizzando un agente Bindplane. Il parser trasforma i messaggi syslog non elaborati in un formato strutturato conforme all'Unified Data Model (UDM). Innanzitutto, inizializza ed estrae i campi utilizzando pattern grok basati sui formati syslog di Cisco IOS comuni. Poi mappa i campi estratti ai campi UDM corrispondenti, classifica gli eventi e arricchisce i dati con un contesto aggiuntivo prima di generare il log strutturato in formato UDM.

Prima di iniziare

  • Assicurati di avere un'istanza Google SecOps.
  • Assicurati di utilizzare Windows 2016 o versioni successive o un host Linux con systemd.
  • Se il servizio è in esecuzione dietro un proxy, assicurati che le porte del firewall siano aperte.
  • Assicurati di disporre dell'accesso privilegiato a Cisco IOS.

Recupera il file di autenticazione di importazione di Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione dell'importazione. Salva il file in modo sicuro sul sistema in cui verrà installato Bindplane.

Ottenere l'ID cliente Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.

Installa l'agente Bindplane

Installazione di Windows

  1. Apri il prompt dei comandi o PowerShell come amministratore.
  2. Esegui questo comando:

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

Installazione di Linux

  1. Apri un terminale con privilegi di root o sudo.
  2. Esegui questo comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Risorse di installazione aggiuntive

Configura l'agente Bindplane per importare i syslog e inviarli a Google SecOps

  1. Accedi al file di configurazione:

    1. Individua il file config.yaml. In genere si trova nella directory /etc/bindplane-agent/ su Linux o nella directory di installazione su Windows.
    2. Apri il file utilizzando un editor di testo (ad esempio nano, vi o Blocco note).
  2. Modifica il file config.yaml come segue:

    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: '/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
            ingestion_labels:
                log_type: CISCO_IOS
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Sostituisci la porta e l'indirizzo IP come richiesto nella tua infrastruttura.

  4. Sostituisci <customer_id> con l'ID cliente effettivo.

  5. Aggiorna /path/to/ingestion-authentication-file.json con il percorso in cui è stato salvato il file di autenticazione nella sezione Ottenere il file di autenticazione per l'importazione di Google SecOps.

Riavvia l'agente Bindplane per applicare le modifiche

  • Per riavviare l'agente Bindplane in Linux, esegui il seguente comando:

    sudo systemctl restart bindplane-agent
    
  • Per riavviare l'agente Bindplane in Windows, puoi utilizzare la console Servizi o inserire il seguente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configurare Syslog su Cisco IOS

  1. Accedi a Cisco IOS.
  2. Esegui l'aumento dei privilegi inserendo il seguente comando:

    enable
    
  3. Passa alla modalità di configurazione inserendo il seguente comando:

    conf t
    
  4. Inserisci i seguenti comandi:

    logging host <bindplane-server-ip> transport <tcp/udp> port <port-number>
    logging source-interface <interface>
    
    • Sostituisci <bindplane-server-ip> con l'indirizzo IP dell'agente Bindplane e <port-number> con la porta configurata.
    • Sostituisci <tcp/udp> con il protocollo di ascolto configurato sull'agente Bindplane, ad esempio udp.
    • Sostituisci <interface> con l'ID interfaccia Cisco.
  5. Imposta il livello di priorità inserendo il seguente comando:

    logging trap Informational 
    logging console Informational 
    logging severity Informational
    
  6. Imposta la funzionalità syslog:

    logging facility syslog
    
  7. Salva ed esci.

  8. Configura le impostazioni in modo che rimangano invariate dopo il riavvio inserendo il seguente comando:

    copy running-config startup-config
    

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
AcsSessionID network.session_id Valore preso dal campo AcsSessionID.
AcctRequest-Flags security_result.summary Valore preso dal campo AcctRequest-Flags.
AcctRequest-Flags security_result.action Se AcctRequest-Flags contiene Start, impostalo su ALLOW. Se AcctRequest-Flags contiene Stop, impostalo su BLOCK.
AuthenticationIdentityStore additional.fields.key = AuthenticationIdentityStore, value = AuthenticationIdentityStore Valore preso dal campo AuthenticationIdentityStore.
AuthenticationMethod additional.fields.key = AuthenticationMethod, value = AuthenticationMethod Valore preso dal campo AuthenticationMethod.
AuthenticationStatus security_result.summary Valore preso dal campo AuthenticationStatus.
Authen-Method security_result.detection_fields.key = Authen-Method, value = Authen-Method Valore preso dal campo Authen-Method.
Authen-Method extensions.auth.type Se Authen-Method contiene TacacsPlus, impostalo su TACACS.
AVPair_priv-lvl security_result.detection_fields.key = AVPair_priv-lvl, value = AVPair_priv-lvl Valore preso dal campo AVPair_priv-lvl.
AVPair_start_time additional.fields.key = AVPair_start_time, value = AVPair_start_time Valore preso dal campo AVPair_start_time.
AVPair_task_id additional.fields.key = AVPair_task_id, value = AVPair_task_id Valore preso dal campo AVPair_task_id.
AVPair_timezone additional.fields.key = AVPair_timezone, value = AVPair_timezone Valore preso dal campo AVPair_timezone.
auditid metadata.product_log_id Valore preso dal campo auditid.
cisco_facility Non mappato all'oggetto IDM.
cisco_message metadata.description Valore preso dal campo cisco_message.
cisco_mnemonic security_result.rule_name Valore preso dal campo cisco_mnemonic.
cisco_severity security_result.severity Mappato a diversi livelli di gravità in base al valore: 0: avviso, 1: critico, 2: alto, 3: errore, 4: medio, 5: basso, 6: informativo, 7: informativo.
cisco_severity security_result.severity_details Mappato a diversi dettagli di gravità in base al valore: 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 Valore preso dal campo cisco_tag.
cisco_tag metadata.event_type Mappato a diversi tipi di eventi in base al valore: 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 Valore preso dal campo ClientLatency.
CmdSet additional.fields.key = CmdSet, value = CmdSet Valore preso dal campo CmdSet.
comando principal.process.command_line Valore preso dal campo del comando.
CPMSessionID additional.fields.key = CPMSessionID, value = CPMSessionID Valore preso dal campo CPMSessionID.
description metadata.description Valore preso dal campo della descrizione.
DestinationIPAddress target.asset.ip Valore ottenuto dal campo DestinationIPAddress.
DestinationIPAddress target.ip Valore ottenuto dal campo DestinationIPAddress.
DestinationPort target.port Valore preso dal campo DestinationPort.
Device_IP_Address principal.asset.ip Valore preso dal campo Device_IP_Address.
Device_IP_Address principal.ip Valore preso dal campo Device_IP_Address.
Device_Type additional.fields.key = Device_Type, value = Device_Type Valore preso dal campo Device_Type.
dst_ip target.asset.ip Valore preso dal campo dst_ip.
dst_ip target.ip Valore preso dal campo dst_ip.
dst_port target.port Valore preso dal campo dst_port.
dst_user target.user.userid Valore preso dal campo dst_user.
EnableFlag security_result.detection_fields.key = EnableFlag, value = EnableFlag Valore preso dal campo EnableFlag.
IdentityGroup additional.fields.key = IdentityGroup, value = IdentityGroup Valore preso dal campo IdentityGroup.
IdentitySelectionMatchedRule security_result.detection_fields.key = IdentitySelectionMatchedRule, value = IdentitySelectionMatchedRule Valore preso dal campo IdentitySelectionMatchedRule.
intermediary_host intermediary.hostname Valore preso dal campo intermediary_host.
intermediary_ip intermediary.ip Valore preso dal campo intermediary_ip.
IPSEC additional.fields.key = IPSEC, value = IPSEC Valore preso dal campo IPSEC.
ISEPolicySetName extensions.auth.type Se ISEPolicySetName contiene Tacacs, imposta TACACS.
IsMachineAuthentication additional.fields.key = IsMachineAuthentication, value = IsMachineAuthentication Valore preso dal campo IsMachineAuthentication.
IsMachineIdentity security_result.detection_fields.key = IsMachineIdentity, value = IsMachineIdentity Valore preso dal campo IsMachineIdentity.
Località additional.fields.key = Location, value = Location Valore preso dal campo Posizione.
MatchedCommandSet additional.fields.key = MatchedCommandSet, value = MatchedCommandSet Valore preso dal campo MatchedCommandSet.
messaggio Non mappato all'oggetto IDM.
metadata_event_type metadata.event_type Valore preso dal campo metadata_event_type. Se vuoto o GENERIC_EVENT, imposta NETWORK_UNCATEGORIZED se principal_mid_present e target_mid_present sono true, USER_UNCATEGORIZED se principal_userid_present è true, STATUS_UPDATE se principal_mid_present è true o GENERIC_EVENT in caso contrario. Se Service contiene Login, imposta il valore USER_LOGIN se principal_userid_present, principal_mid_present e target_mid_present sono true oppure USER_UNCATEGORIZED se principal_userid_present è true.
Model_Name additional.fields.key = Model_Name, value = Model_Name Valore preso dal campo Model_Name.
Nome additional.fields.key = Name, value = Name Valore preso dal campo Nome.
Network_Device_Profile additional.fields.key = Network_Device_Profile, value = Network_Device_Profile Valore preso dal campo Network_Device_Profile.
NetworkDeviceGroups additional.fields.key = NetworkDeviceGroups, value = NetworkDeviceGroups Valore preso dal campo NetworkDeviceGroups.
NetworkDeviceName principal.asset.hostname Valore preso dal campo NetworkDeviceName.
NetworkDeviceName principal.hostname Valore preso dal campo NetworkDeviceName.
NetworkDeviceProfileId principal.resource.product_object_id Valore preso dal campo NetworkDeviceProfileId.
pid principal.process.pid Valore preso dal campo pid.
Porta principal.resource.attribute.labels.key = Port, value = Port Valore preso dal campo Porta.
A livello di privilegio security_result.detection_fields.key = Privilege-Level, value = Privilege-Level Valore preso dal campo Privilege-Level.
product_event_type metadata.product_event_type Valore preso dal campo product_event_type.
Protocollo additional.fields.key = Protocol, value = Protocol Valore preso dal campo Protocol.
protocollo network.application_protocol Se il protocollo è HTTPS, impostalo su HTTPS.
protocollo network.ip_protocol Se il protocollo è TCP o UDP, imposta il valore in maiuscolo del protocollo.
motivo security_result.summary Valore preso dal campo Motivo.
regione principal.location.country_or_region Valore preso dal campo regione.
Remote-Address target.asset.ip Valore preso dal campo Indirizzo-remoto dopo averlo convalidato come indirizzo IP.
Remote-Address target.ip Valore preso dal campo Indirizzo-remoto dopo averlo convalidato come indirizzo IP.
RequestLatency security_result.detection_fields.key = RequestLatency, value = RequestLatency Valore preso dal campo RequestLatency.
Risposta additional.fields.key = Response, value = Response Valore preso dal campo Risposta.
SelectedAccessService security_result.action_details Valore preso dal campo SelectedAccessService.
SelectedAuthenticationIdentityStores security_result.detection_fields.key = SelectedAuthenticationIdentityStores, value = SelectedAuthenticationIdentityStores Valore preso dal campo SelectedAuthenticationIdentityStores.
SelectedCommandSet additional.fields.key = SelectedCommandSet, value = SelectedCommandSet Valore preso dal campo SelectedCommandSet.
Servizio additional.fields.key = Service, value = Service Valore preso dal campo Servizio.
Service-Argument additional.fields.key = Service-Argument, value = Service-Argument Valore preso dal campo Service-Argument.
gravità security_result.severity Se la gravità contiene Notice, imposta il valore su INFORMATIVO.
Software_Version additional.fields.key = Software_Version, value = Software_Version Valore preso dal campo Software_Version.
source_facility principal.asset.hostname Valore preso dal campo source_facility.
source_facility principal.hostname Valore preso dal campo source_facility.
src_ip principal.asset.ip Valore preso dal campo src_ip.
src_ip principal.ip Valore preso dal campo src_ip.
src_mac principal.mac Valore preso dal campo src_mac dopo aver sostituito . con :.
src_port principal.port Valore preso dal campo src_port.
src_user_id principal.user.userid Valore preso dal campo src_user_id. Se vuoto, prende il valore dal campo Utente. Se è ancora vuoto, prendi il valore dal campo StepData_9.
src_user_name principal.user.user_display_name Valore preso dal campo src_user_name.
Passaggio additional.fields.key = Step, value = Passaggio Valore preso dal campo Passaggio.
StepData_10 principal.asset.hostname Valore preso dal campo StepData_10.
StepData_10 principal.hostname Valore preso dal campo StepData_10.
StepData_13 security_result.summary Valore preso dal campo StepData_13.
StepData_14 security_result.detection_fields.key = StepData_14, value = StepData_14 Valore preso dal campo StepData_14.
StepData_15 security_result.detection_fields.key = StepData_15, value = StepData_15 Valore preso dal campo StepData_15.
StepData_20 security_result.detection_fields.key = StepData_20, value = StepData_20 Valore preso dal campo StepData_20.
StepData_21 security_result.detection_fields.key = StepData_21, value = StepData_21 Valore preso dal campo StepData_21.
StepData_3 additional.fields.key = StepData_3, value = StepData_3 Valore preso dal campo StepData_3.
StepData_4 security_result.detection_fields.key = StepData_4, value = StepData_4 Valore preso dal campo StepData_4.
StepData_6 security_result.detection_fields.key = StepData_6, value = StepData_6 Valore preso dal campo StepData_6.
StepData_7 security_result.detection_fields.key = StepData_7, value = StepData_7 Valore preso dal campo StepData_7.
StepData_8 security_result.detection_fields.key = StepData_8, value = StepData_8 Valore preso dal campo StepData_8.
StepData_9 principal.user.userid Valore preso dal campo StepData_9 se i campi src_user_id e User sono vuoti.
target_host target.asset.hostname Valore preso dal campo target_host.
target_host target.hostname Valore preso dal campo target_host.
timestamp metadata.event_timestamp Valore preso dal campo timestamp dopo aver rimosso gli spazi aggiuntivi e analizzato la data.
TotalAuthenLatency additional.fields.key = TotalAuthenLatency, value = TotalAuthenLatency Valore ottenuto dal campo TotalAuthenLatency.
ts metadata.event_timestamp Valore preso dal campo ts dopo l'analisi della data.
Tipo security_result.category_details Valore preso dal campo Tipo.
Utente principal.user.userid Valore preso dal campo Utente se src_user_id è vuoto.
UserType additional.fields.key = UserType, value = UserType Valore preso dal campo UserType.
metadata.vendor_name Imposta su CISCO.
metadata.product_name Imposta su CISCO_IOS.
metadata.log_type Imposta su CISCO_IOS.

Modifiche

2025-02-11

Miglioramento:

  • È stato aggiunto il supporto per un nuovo formato di log syslog.

2025-01-23

Miglioramento:

  • È stato aggiunto il supporto per un nuovo formato di log syslog.

2025-01-02

Miglioramento:

  • È stato aggiunto il supporto per un nuovo formato di log syslog.

2024-12-27

Miglioramento:

  • È stato aggiunto il supporto per un nuovo formato di log syslog.

2024-11-25

Miglioramento:

  • È stato aggiunto un pattern Grok per analizzare i nuovi log.
  • Il nome host mappato nell'intestazione syslog su intermediary.hostname da target.hostname.

2024-11-19

Miglioramento:

  • È stato aggiunto il supporto per un nuovo formato dei log syslog.

2024-10-28

Miglioramento:

  • È stato aggiunto un pattern Grok per analizzare i nuovi log.

2024-10-24

Miglioramento:

  • È stato aggiunto un pattern Grok per analizzare i nuovi log.

2024-10-01

Miglioramento:

  • È stato aggiunto un pattern Grok per analizzare i nuovi log.

2024-07-04

Miglioramento:

  • È stato aggiunto il supporto per un nuovo pattern di log syslog.

2024-04-02

Miglioramento:

  • È stato aggiunto un nuovo pattern Grok per analizzare il nuovo tipo di log.
  • I nuovi campi sono stati mappati ai campi UDM corrispondenti.

2023-10-04

Miglioramento:

  • È stato aggiunto un nuovo pattern Grok per analizzare il nuovo tipo di log.
  • source_facility è stato mappato a principal.hostname.

2023-08-11

Miglioramento:

  • intermediary.ip mappato quando il messaggio contiene HOST=.
  • principal.user.userid mappato quando il messaggio contiene User:.
  • principal.process.command_line mappato quando il messaggio contiene command:.
  • target.user.userid mappato quando il messaggio contiene username.
  • metadata.event_type è stato mappato a un metadata.event_type più specifico.

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.